diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml index 63252a76abb69f..b5b2765e43844f 100644 --- a/.azure-pipelines/ci.yml +++ b/.azure-pipelines/ci.yml @@ -1,7 +1,4 @@ -variables: - coverage: false - -trigger: ['main', '3.11', '3.10', '3.9', '3.8', '3.7'] +trigger: ['main', '3.12', '3.11', '3.10', '3.9', '3.8', '3.7'] jobs: - job: Prebuild @@ -14,70 +11,6 @@ jobs: - template: ./prebuild-checks.yml -- job: macOS_CI_Tests - displayName: macOS CI Tests - dependsOn: Prebuild - #condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - # bpo-39837: macOS tests on Azure Pipelines are disabled - condition: false - - variables: - testRunTitle: '$(build.sourceBranchName)-macos' - testRunPlatform: macos - - pool: - vmImage: macos-10.15 - - steps: - - template: ./macos-steps.yml - - -- job: Ubuntu_CI_Tests - displayName: Ubuntu CI Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - pool: - vmImage: ubuntu-22.04 - - variables: - testRunTitle: '$(build.sourceBranchName)-linux' - testRunPlatform: linux - openssl_version: 1.1.1u - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - - -- job: Ubuntu_Coverage_CI_Tests - displayName: Ubuntu CI Tests (coverage) - dependsOn: Prebuild - condition: | - and( - and( - succeeded(), - eq(variables['coverage'], 'true') - ), - eq(dependencies.Prebuild.outputs['tests.run'], 'true') - ) - - pool: - vmImage: ubuntu-22.04 - - variables: - testRunTitle: '$(Build.SourceBranchName)-linux-coverage' - testRunPlatform: linux-coverage - openssl_version: 1.1.1u - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - coverage: true - - - job: Windows_CI_Tests displayName: Windows CI Tests dependsOn: Prebuild diff --git a/.azure-pipelines/macos-steps.yml b/.azure-pipelines/macos-steps.yml deleted file mode 100644 index fa38a0df8c87b8..00000000000000 --- a/.azure-pipelines/macos-steps.yml +++ /dev/null @@ -1,27 +0,0 @@ -steps: -- checkout: self - clean: true - fetchDepth: 5 - -- script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-azdev - displayName: 'Configure CPython (debug)' - -- script: make -j4 - displayName: 'Build CPython' - -- script: make pythoninfo - displayName: 'Display build info' - -- script: make buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml" - displayName: 'Tests' - continueOnError: true - timeoutInMinutes: 30 - -- task: PublishTestResults@2 - displayName: 'Publish Test Results' - inputs: - testResultsFiles: '$(build.binariesDirectory)/test-results.xml' - mergeTestResults: true - testRunTitle: $(testRunTitle) - platform: $(testRunPlatform) - condition: succeededOrFailed() diff --git a/.azure-pipelines/posix-steps.yml b/.azure-pipelines/posix-steps.yml index 9d7c5e1279f46d..e23c7b1dcb55c1 100644 --- a/.azure-pipelines/posix-steps.yml +++ b/.azure-pipelines/posix-steps.yml @@ -1,10 +1,3 @@ -parameters: - coverage: false - sudo_dependencies: sudo - dependencies: apt - patchcheck: true - xvfb: true - steps: - checkout: self clean: true @@ -14,7 +7,7 @@ steps: - script: sudo setfacl -Rb /home/vsts displayName: 'Workaround ACL issue' -- script: ${{ parameters.sudo_dependencies }} ./.azure-pipelines/posix-deps-${{ parameters.dependencies }}.sh $(openssl_version) +- script: sudo ./.azure-pipelines/posix-deps-apt.sh $(openssl_version) displayName: 'Install dependencies' - script: ./configure --with-pydebug @@ -23,61 +16,11 @@ steps: - script: make -j4 displayName: 'Build CPython' -- ${{ if eq(parameters.coverage, 'true') }}: - - script: ./python -m venv venv && ./venv/bin/python -m pip install -U coverage - displayName: 'Set up virtual environment' - - - script: ./venv/bin/python -m test.pythoninfo - displayName: 'Display build info' - - - script: | - $COMMAND -m coverage run --pylib -m test \ - --fail-env-changed \ - -uall,-cpu \ - --junit-xml=$(build.binariesDirectory)/test-results.xml \ - -x test_multiprocessing_fork \ - -x test_multiprocessing_forkserver \ - -x test_multiprocessing_spawn \ - -x test_concurrent_futures - displayName: 'Tests with coverage' - env: - ${{ if eq(parameters.xvfb, 'true') }}: - COMMAND: xvfb-run ./venv/bin/python - ${{ if ne(parameters.xvfb, 'true') }}: - COMMAND: ./venv/bin/python - - - script: ./venv/bin/python -m coverage xml - displayName: 'Generate coverage.xml' - - - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash) -y .github/codecov.yml - displayName: 'Publish code coverage results' - - -- ${{ if ne(parameters.coverage, 'true') }}: - - script: make pythoninfo - displayName: 'Display build info' - - - script: $COMMAND buildbottest TESTOPTS="-j4 -uall,-cpu --junit-xml=$(build.binariesDirectory)/test-results.xml" - displayName: 'Tests' - env: - ${{ if eq(parameters.xvfb, 'true') }}: - COMMAND: xvfb-run make - ${{ if ne(parameters.xvfb, 'true') }}: - COMMAND: make - -- ${{ if eq(parameters.patchcheck, 'true') }}: - - script: | - git fetch origin - ./python Tools/patchcheck/patchcheck.py --ci true - displayName: 'Run patchcheck.py' - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) - +- script: make pythoninfo + displayName: 'Display build info' -- task: PublishTestResults@2 - displayName: 'Publish Test Results' - inputs: - testResultsFiles: '$(build.binariesDirectory)/test-results.xml' - mergeTestResults: true - testRunTitle: $(testRunTitle) - platform: $(testRunPlatform) - condition: succeededOrFailed() +- script: | + git fetch origin + ./python Tools/patchcheck/patchcheck.py --ci true + displayName: 'Run patchcheck.py' + condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) diff --git a/.azure-pipelines/pr.yml b/.azure-pipelines/pr.yml index 939c9b4249a3c2..335a4b407cb83c 100644 --- a/.azure-pipelines/pr.yml +++ b/.azure-pipelines/pr.yml @@ -1,7 +1,4 @@ -variables: - coverage: false - -pr: ['main', '3.11', '3.10', '3.9', '3.8', '3.7'] +pr: ['main', '3.12', '3.11', '3.10', '3.9', '3.8', '3.7'] jobs: - job: Prebuild @@ -14,28 +11,8 @@ jobs: - template: ./prebuild-checks.yml -- job: macOS_PR_Tests - displayName: macOS PR Tests - dependsOn: Prebuild - #condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - # bpo-39837: macOS tests on Azure Pipelines are disabled - condition: false - - variables: - testRunTitle: '$(system.pullRequest.TargetBranch)-macos' - testRunPlatform: macos - - pool: - vmImage: macos-10.15 - - steps: - - template: ./macos-steps.yml - parameters: - targetBranch: $(System.PullRequest.TargetBranch) - - -- job: Ubuntu_PR_Tests - displayName: Ubuntu PR Tests +- job: Ubuntu_Patchcheck + displayName: Ubuntu patchcheck dependsOn: Prebuild condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) @@ -49,63 +26,3 @@ jobs: steps: - template: ./posix-steps.yml - parameters: - dependencies: apt - - -- job: Ubuntu_Coverage_PR_Tests - displayName: Ubuntu PR Tests (coverage) - dependsOn: Prebuild - condition: | - and( - and( - succeeded(), - eq(variables['coverage'], 'true') - ), - eq(dependencies.Prebuild.outputs['tests.run'], 'true') - ) - - pool: - vmImage: ubuntu-22.04 - - variables: - testRunTitle: '$(Build.SourceBranchName)-linux-coverage' - testRunPlatform: linux-coverage - openssl_version: 1.1.1u - - steps: - - template: ./posix-steps.yml - parameters: - dependencies: apt - coverage: true - - -- job: Windows_PR_Tests - displayName: Windows PR Tests - dependsOn: Prebuild - condition: and(succeeded(), eq(dependencies.Prebuild.outputs['tests.run'], 'true')) - - pool: - vmImage: windows-2022 - - strategy: - matrix: - win32: - arch: win32 - buildOpt: '-p Win32' - testRunTitle: '$(System.PullRequest.TargetBranch)-win32' - testRunPlatform: win32 - win64: - arch: amd64 - buildOpt: '-p x64' - testRunTitle: '$(System.PullRequest.TargetBranch)-win64' - testRunPlatform: win64 - winarm64: - arch: arm64 - buildOpt: '-p arm64' - maxParallel: 4 - - steps: - - template: ./windows-steps.yml - parameters: - targetBranch: $(System.PullRequest.TargetBranch) diff --git a/.cirrus-DISABLED.yml b/.cirrus-DISABLED.yml new file mode 100644 index 00000000000000..f20835cb6cac2a --- /dev/null +++ b/.cirrus-DISABLED.yml @@ -0,0 +1,29 @@ +# gh-91960: Job disabled since Python is out of free credit (September 2023): +# https://discuss.python.org/t/freebsd-gets-a-new-cirrus-ci-github-action-job-and-a-new-buildbot/33122/26 + +freebsd_task: + freebsd_instance: + matrix: + - image: freebsd-13-2-release-amd64 + # Turn off TCP and UDP blackhole. It is not enabled by default in FreeBSD, + # but it is in the FreeBSD GCE images as used by Cirrus-CI. It causes even + # local local connections to fail with ETIMEDOUT instead of ECONNREFUSED. + # For more information see https://reviews.freebsd.org/D41751 and + # https://github.com/cirruslabs/cirrus-ci-docs/issues/483. + sysctl_script: + - sysctl net.inet.tcp.blackhole=0 + - sysctl net.inet.udp.blackhole=0 + configure_script: + - mkdir build + - cd build + - ../configure --with-pydebug + build_script: + - cd build + - make -j$(sysctl -n hw.ncpu) + pythoninfo_script: + - cd build + - make pythoninfo + test_script: + - cd build + # dtrace fails to build on FreeBSD - see gh-73263 + - make buildbottest TESTOPTS="-j0 -x test_dtrace --timeout=600" diff --git a/.gitattributes b/.gitattributes index e05ff900bf1c09..8c37dbbb631022 100644 --- a/.gitattributes +++ b/.gitattributes @@ -24,7 +24,7 @@ PC/classicAppCompat.* binary [attr]noeol -text Lib/test/cjkencodings/* noeol -Lib/test/coding20731.py noeol +Lib/test/tokenizedata/coding20731.py noeol Lib/test/decimaltestdata/*.decTest noeol Lib/test/test_email/data/*.txt noeol Lib/test/test_importlib/resources/data01/* noeol diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 578cd71a7bd211..cd35cba5b5c56d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -9,6 +9,7 @@ # pre-commit .pre-commit-config.yaml @hugovk @AlexWaygood +.ruff.toml @hugovk @AlexWaygood # Build system configure* @erlend-aasland @corona10 @@ -179,3 +180,6 @@ Doc/c-api/stable.rst @encukou /Tools/clinic/** @erlend-aasland @AlexWaygood /Lib/test/test_clinic.py @erlend-aasland @AlexWaygood Doc/howto/clinic.rst @erlend-aasland + +# WebAssembly +/Tools/wasm/ @brettcannon diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 05f4f317ccc97e..21a375361bf58e 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -9,20 +9,26 @@ body: For help or advice on using Python, try one of the following options instead of opening a GitHub issue: - - Posting on [Discourse](https://discuss.python.org/c/users/7) + - Asking on [Discourse](https://discuss.python.org/c/users/7) or [Stack Overflow](https://stackoverflow.com) - Reading the [Python tutorial](https://docs.python.org/3/tutorial/) - Emailing [python-list](https://mail.python.org/mailman/listinfo/python-list) - - type: checkboxes + + Make sure to also search the [CPython issue tracker](https://github.com/python/cpython/issues?q=is%3Aissue+sort%3Acreated-desc) to check that the bug has not already been reported. + - type: textarea attributes: - label: Checklist - description: A bug in a third-party project (for example, `pip` or `requests`) should be reported to that project's issue tracker, not CPython - options: - - label: I am confident this is a bug in CPython, not a bug in a third-party project - required: false - - label: | - I have searched the [CPython issue tracker](https://github.com/python/cpython/issues?q=is%3Aissue+sort%3Acreated-desc), - and am confident this bug has not been reported before - required: false + label: "Bug description:" + description: > + Give a clear and concise description of what happened. + Include a [minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) if possible. + [Copy and paste code where possible rather than using screenshots](https://meta.stackoverflow.com/a/285557/13990016), + and put any code blocks inside triple backticks. + + value: | + ```python + # Add a code block here, if required + ``` + validations: + required: true - type: dropdown attributes: label: "CPython versions tested on:" @@ -47,23 +53,3 @@ body: - Other validations: required: false - - type: input - attributes: - label: "Output from running 'python -VV' on the command line:" - description: If you tested with multiple operating systems or architectures, feel free to provide details in the main bug description. - validations: - required: false - - type: textarea - attributes: - label: "A clear and concise description of the bug:" - description: > - Tell us what happened. - Include a [minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) if possible. - Put any code blocks inside triple backticks. - - value: | - ```python - # Add a code block here, if required - ``` - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/crash.yml b/.github/ISSUE_TEMPLATE/crash.yml index 1ea84b893697a6..c14d7cf2599d4c 100644 --- a/.github/ISSUE_TEMPLATE/crash.yml +++ b/.github/ISSUE_TEMPLATE/crash.yml @@ -8,6 +8,20 @@ body: This form is for hard crashes of the Python interpreter, segmentation faults, failed C-level assertions, and similar. Unexpected exceptions raised from Python functions in the standard library count as bugs rather than crashes. The CPython interpreter is written in a different programming language, C. A "CPython crash" is when Python itself fails, leading to a traceback in the C stack. + - type: textarea + attributes: + label: What happened? + description: > + Include a [minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) if possible. + [Copy and paste code where possible rather than using screenshots](https://meta.stackoverflow.com/a/285557/13990016), + and put any code blocks inside triple backticks. + + value: | + ```python + # Add a code block here, if required + ``` + validations: + required: true - type: dropdown attributes: label: "CPython versions tested on:" @@ -38,34 +52,3 @@ body: description: If you tested with multiple operating systems or architectures, feel free to provide details in the main bug description. validations: required: false - - type: textarea - attributes: - label: What happened? - description: > - Include a [minimal, reproducible example](https://stackoverflow.com/help/minimal-reproducible-example) if possible. - Put any code blocks inside triple backticks. - - value: | - ```python - # Add a code block here, if required - ``` - validations: - required: true - - type: textarea - attributes: - label: Error messages - description: > - Enter any error messages caused by the crash, including a core dump if there is one. - Feel free to leave this bit blank if it isn't relevant. - placeholder: | - Error messages should be formatted like this: - -
- Error messages/core dump - - ``` - # paste errors here, if you have any - ``` -
- validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml index 0200e623d2a3b0..4361ab2bf827fb 100644 --- a/.github/ISSUE_TEMPLATE/feature.yml +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -10,6 +10,19 @@ body: You'll need to demonstrate widespread support for your idea among the community. Major feature proposals should generally be discussed on [Discourse](https://discuss.python.org/c/ideas/6) before opening a GitHub issue. Wait until it's clear that most people support your idea before filling in this form. + - type: textarea + attributes: + label: "Proposal:" + description: > + Explain your proposal, why it should be implemented, and how it would be used. + Add examples, if applicable. + Put any code blocks inside triple backticks. + value: | + ```python + # Add a code block here, if required + ``` + validations: + required: true - type: dropdown attributes: label: Has this already been discussed elsewhere? @@ -25,16 +38,3 @@ body: label: "Links to previous discussion of this feature:" validations: required: false - - type: textarea - attributes: - label: "Proposal:" - description: > - Explain your proposal, why it should be implemented, and how it would be used. - Add examples, if applicable. - Put any code blocks inside triple backticks. - value: | - ```python - # Add a code block here, if required - ``` - validations: - required: true diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d37eb4447ad11a..7f9d0f4da09be7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,7 +42,7 @@ jobs: run_hypothesis: ${{ steps.check.outputs.run_hypothesis }} config_hash: ${{ steps.config_hash.outputs.hash }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Check for source changes id: check run: | @@ -63,7 +63,7 @@ jobs: # into the PR branch anyway. # # https://github.com/python/core-workflow/issues/373 - git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo "run_tests=true" >> $GITHUB_OUTPUT || true + git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc|^\.pre-commit-config\.yaml$|\.ruff\.toml$)' && echo "run_tests=true" >> $GITHUB_OUTPUT || true fi # Check if we should run hypothesis tests @@ -111,13 +111,15 @@ jobs: needs: check_source if: needs.check_source.outputs.run_tests == 'true' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Restore config.cache uses: actions/cache@v3 with: path: config.cache key: ${{ github.job }}-${{ runner.os }}-${{ needs.check_source.outputs.config_hash }} - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.x' - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh - name: Add ccache to PATH @@ -174,7 +176,7 @@ jobs: env: IncludeUwp: 'true' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Build CPython run: .\PCbuild\build.bat -e -d -p Win32 - name: Display build info @@ -191,7 +193,7 @@ jobs: env: IncludeUwp: 'true' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Register MSVC problem matcher run: echo "::add-matcher::.github/problem-matchers/msvc.json" - name: Build CPython @@ -201,6 +203,21 @@ jobs: - name: Tests run: .\PCbuild\rt.bat -p x64 -d -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 + build_win_arm64: + name: 'Windows (arm64)' + runs-on: windows-latest + timeout-minutes: 60 + needs: check_source + if: needs.check_source.outputs.run_tests == 'true' + env: + IncludeUwp: 'true' + steps: + - uses: actions/checkout@v4 + - name: Register MSVC problem matcher + run: echo "::add-matcher::.github/problem-matchers/msvc.json" + - name: Build CPython + run: .\PCbuild\build.bat -e -d -p arm64 + build_macos: name: 'macOS' runs-on: macos-latest @@ -213,7 +230,7 @@ jobs: HOMEBREW_NO_INSTALL_CLEANUP: 1 PYTHONSTRICTEXTENSIONBUILD: 1 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Restore config.cache uses: actions/cache@v3 with: @@ -247,7 +264,7 @@ jobs: OPENSSL_VER: 1.1.1v PYTHONSTRICTEXTENSIONBUILD: 1 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Register gcc problem matcher run: echo "::add-matcher::.github/problem-matchers/gcc.json" - name: Install Dependencies @@ -320,7 +337,7 @@ jobs: OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }} LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Restore config.cache uses: actions/cache@v3 with: @@ -368,7 +385,7 @@ jobs: OPENSSL_VER: 1.1.1v PYTHONSTRICTEXTENSIONBUILD: 1 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Register gcc problem matcher run: echo "::add-matcher::.github/problem-matchers/gcc.json" - name: Install Dependencies @@ -431,7 +448,7 @@ jobs: VENV_PYTHON=$VENV_LOC/bin/python echo "HYPOVENV=${VENV_LOC}" >> $GITHUB_ENV echo "VENV_PYTHON=${VENV_PYTHON}" >> $GITHUB_ENV - ./python -m venv $VENV_LOC && $VENV_PYTHON -m pip install -U hypothesis + ./python -m venv $VENV_LOC && $VENV_PYTHON -m pip install -r ${GITHUB_WORKSPACE}/Tools/requirements-hypothesis.txt - name: 'Restore Hypothesis database' id: cache-hypothesis-database uses: actions/cache@v3 @@ -478,7 +495,7 @@ jobs: PYTHONSTRICTEXTENSIONBUILD: 1 ASAN_OPTIONS: detect_leaks=0:allocator_may_return_null=1:handle_segv=0 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Restore config.cache uses: actions/cache@v3 with: @@ -530,6 +547,7 @@ jobs: - check_generated_files - build_win32 - build_win_amd64 + - build_win_arm64 - build_macos - build_ubuntu - build_ubuntu_ssltests @@ -546,6 +564,7 @@ jobs: build_macos, build_ubuntu_ssltests, build_win32, + build_win_arm64, test_hypothesis, allowed-skips: >- ${{ @@ -561,6 +580,7 @@ jobs: check_generated_files, build_win32, build_win_amd64, + build_win_arm64, build_macos, build_ubuntu, build_ubuntu_ssltests, diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml index 22f613a88aa11e..29282dffa37ec0 100644 --- a/.github/workflows/build_msi.yml +++ b/.github/workflows/build_msi.yml @@ -33,6 +33,6 @@ jobs: matrix: type: [x86, x64, arm64] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Build CPython installer run: .\Tools\msi\build.bat --doc -${{ matrix.type }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4481ea80bfd936..89f65816b6969d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -5,6 +5,10 @@ on: [push, pull_request, workflow_dispatch] permissions: contents: read +env: + FORCE_COLOR: 1 + RUFF_FORMAT: github + concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true @@ -15,7 +19,7 @@ jobs: timeout-minutes: 10 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: "3.x" diff --git a/.github/workflows/mypy.yml b/.github/workflows/mypy.yml index 82714c20e968a9..405511ca6820b3 100644 --- a/.github/workflows/mypy.yml +++ b/.github/workflows/mypy.yml @@ -7,11 +7,12 @@ on: - main pull_request: paths: - - "Tools/clinic/**" + - ".github/workflows/mypy.yml" - "Tools/cases_generator/**" + - "Tools/clinic/**" - "Tools/peg_generator/**" - "Tools/requirements-dev.txt" - - ".github/workflows/mypy.yml" + - "Tools/wasm/**" workflow_dispatch: permissions: @@ -34,12 +35,13 @@ jobs: "Tools/cases_generator", "Tools/clinic", "Tools/peg_generator", + "Tools/wasm", ] name: Run mypy on ${{ matrix.target }} runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: "3.11" diff --git a/.github/workflows/require-pr-label.yml b/.github/workflows/require-pr-label.yml index 9327b43ae02710..080204bcfd3b94 100644 --- a/.github/workflows/require-pr-label.yml +++ b/.github/workflows/require-pr-label.yml @@ -5,8 +5,8 @@ on: types: [opened, reopened, labeled, unlabeled, synchronize] permissions: - issues: read - pull-requests: read + issues: write + pull-requests: write jobs: label: diff --git a/.github/workflows/reusable-docs.yml b/.github/workflows/reusable-docs.yml index 6150b1a7d416a3..1c4fa4239c1e34 100644 --- a/.github/workflows/reusable-docs.yml +++ b/.github/workflows/reusable-docs.yml @@ -23,7 +23,7 @@ jobs: refspec_pr: '+${{ github.event.pull_request.head.sha }}:remotes/origin/${{ github.event.pull_request.head.ref }}' steps: - name: 'Check out latest PR branch commit' - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} # Adapted from https://github.com/actions/checkout/issues/520#issuecomment-1167205721 @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: 'Set up Python' uses: actions/setup-python@v4 with: - python-version: '3.11' # known to work with Sphinx 3.2 + python-version: '3.11' # known to work with Sphinx 4.2 cache: 'pip' cache-dependency-path: 'Doc/requirements-oldest-sphinx.txt' - name: 'Install build dependencies' @@ -88,7 +88,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 60 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/cache@v3 with: path: ~/.cache/pip diff --git a/.github/workflows/verify-ensurepip-wheels.yml b/.github/workflows/verify-ensurepip-wheels.yml index 17d841f1f1c54a..4a545037bf6e2b 100644 --- a/.github/workflows/verify-ensurepip-wheels.yml +++ b/.github/workflows/verify-ensurepip-wheels.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: '3' diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 451cbe8bc84820..4c1fd20ea921b8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,11 +1,21 @@ repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.0.288 + hooks: + - id: ruff + name: Run Ruff on Lib/test/ + args: [--exit-non-zero-on-fix] + files: ^Lib/test/ + - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: + - id: check-toml + exclude: ^Lib/test/test_tomllib/ - id: check-yaml - id: end-of-file-fixer types: [python] - exclude: Lib/test/coding20731.py + exclude: Lib/test/tokenizedata/coding20731.py - id: trailing-whitespace types_or: [c, python, rst] diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 6e2ac0a40a5f1b..2139da051e0193 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -786,7 +786,7 @@ Exception Objects Implement part of the interpreter's implementation of :keyword:`!except*`. *orig* is the original exception that was caught, and *excs* is the list of - the exceptions that need to be raised. This list contains the the unhandled + the exceptions that need to be raised. This list contains the unhandled part of *orig*, if any, as well as the exceptions that were raised from the :keyword:`!except*` clauses (so they have a different traceback from *orig*) and those that were reraised (and have the same traceback as *orig*). diff --git a/Doc/c-api/intro.rst b/Doc/c-api/intro.rst index 5cf9914be8c8bf..4dbca92b18b5cd 100644 --- a/Doc/c-api/intro.rst +++ b/Doc/c-api/intro.rst @@ -105,6 +105,30 @@ defined closer to where they are useful (e.g. :c:macro:`Py_RETURN_NONE`). Others of a more general utility are defined here. This is not necessarily a complete listing. +.. c:macro:: PyMODINIT_FUNC + + Declare an extension module ``PyInit`` initialization function. The function + return type is :c:expr:`PyObject*`. The macro declares any special linkage + declarations required by the platform, and for C++ declares the function as + ``extern "C"``. + + The initialization function must be named :samp:`PyInit_{name}`, where + *name* is the name of the module, and should be the only non-\ ``static`` + item defined in the module file. Example:: + + static struct PyModuleDef spam_module = { + PyModuleDef_HEAD_INIT, + .m_name = "spam", + ... + }; + + PyMODINIT_FUNC + PyInit_spam(void) + { + return PyModule_Create(&spam_module); + } + + .. c:macro:: Py_ABS(x) Return the absolute value of ``x``. diff --git a/Doc/c-api/mapping.rst b/Doc/c-api/mapping.rst index 5b909ef8f5e2ce..1f55c0aa955c75 100644 --- a/Doc/c-api/mapping.rst +++ b/Doc/c-api/mapping.rst @@ -76,6 +76,24 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and rather than a :c:expr:`PyObject*`. +.. c:function:: int PyMapping_HasKeyWithError(PyObject *o, PyObject *key) + + Return ``1`` if the mapping object has the key *key* and ``0`` otherwise. + This is equivalent to the Python expression ``key in o``. + On failure, return ``-1``. + + .. versionadded:: 3.13 + + +.. c:function:: int PyMapping_HasKeyStringWithError(PyObject *o, const char *key) + + This is the same as :c:func:`PyMapping_HasKeyWithError`, but *key* is + specified as a :c:expr:`const char*` UTF-8 encoded bytes string, + rather than a :c:expr:`PyObject*`. + + .. versionadded:: 3.13 + + .. c:function:: int PyMapping_HasKey(PyObject *o, PyObject *key) Return ``1`` if the mapping object has the key *key* and ``0`` otherwise. @@ -86,8 +104,8 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and Exceptions which occur when this calls :meth:`~object.__getitem__` method are silently ignored. - For proper error handling, use :c:func:`PyMapping_GetOptionalItem` or - :c:func:`PyObject_GetItem()` instead. + For proper error handling, use :c:func:`PyMapping_HasKeyWithError`, + :c:func:`PyMapping_GetOptionalItem` or :c:func:`PyObject_GetItem()` instead. .. c:function:: int PyMapping_HasKeyString(PyObject *o, const char *key) @@ -101,7 +119,8 @@ See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and Exceptions that occur when this calls :meth:`~object.__getitem__` method or while creating the temporary :class:`str` object are silently ignored. - For proper error handling, use :c:func:`PyMapping_GetOptionalItemString` or + For proper error handling, use :c:func:`PyMapping_HasKeyStringWithError`, + :c:func:`PyMapping_GetOptionalItemString` or :c:func:`PyMapping_GetItemString` instead. diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst index 2572c087738fe3..bf55b5788efa47 100644 --- a/Doc/c-api/object.rst +++ b/Doc/c-api/object.rst @@ -27,6 +27,24 @@ Object Protocol instead of the :func:`repr`. +.. c:function:: int PyObject_HasAttrWithError(PyObject *o, const char *attr_name) + + Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise. + This is equivalent to the Python expression ``hasattr(o, attr_name)``. + On failure, return ``-1``. + + .. versionadded:: 3.13 + + +.. c:function:: int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name) + + This is the same as :c:func:`PyObject_HasAttrWithError`, but *attr_name* is + specified as a :c:expr:`const char*` UTF-8 encoded bytes string, + rather than a :c:expr:`PyObject*`. + + .. versionadded:: 3.13 + + .. c:function:: int PyObject_HasAttr(PyObject *o, PyObject *attr_name) Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise. This @@ -37,8 +55,8 @@ Object Protocol Exceptions that occur when this calls :meth:`~object.__getattr__` and :meth:`~object.__getattribute__` methods are silently ignored. - For proper error handling, use :c:func:`PyObject_GetOptionalAttr` or - :c:func:`PyObject_GetAttr` instead. + For proper error handling, use :c:func:`PyObject_HasAttrWithError`, + :c:func:`PyObject_GetOptionalAttr` or :c:func:`PyObject_GetAttr` instead. .. c:function:: int PyObject_HasAttrString(PyObject *o, const char *attr_name) @@ -52,7 +70,8 @@ Object Protocol Exceptions that occur when this calls :meth:`~object.__getattr__` and :meth:`~object.__getattribute__` methods or while creating the temporary :class:`str` object are silently ignored. - For proper error handling, use :c:func:`PyObject_GetOptionalAttrString` + For proper error handling, use :c:func:`PyObject_HasAttrStringWithError`, + :c:func:`PyObject_GetOptionalAttrString` or :c:func:`PyObject_GetAttrString` instead. diff --git a/Doc/conf.py b/Doc/conf.py index 16fd8bf257179e..c92ea60ee07094 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -66,7 +66,7 @@ highlight_language = 'python3' # Minimum version of sphinx required -needs_sphinx = '3.2' +needs_sphinx = '4.2' # Ignore any .rst files in the includes/ directory; # they're embedded in pages but not rendered individually. diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index cc6349a0330e8c..c189c78238f40f 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -377,6 +377,8 @@ function,PyMapping_GetOptionalItem,3.13,, function,PyMapping_GetOptionalItemString,3.13,, function,PyMapping_HasKey,3.2,, function,PyMapping_HasKeyString,3.2,, +function,PyMapping_HasKeyStringWithError,3.13,, +function,PyMapping_HasKeyWithError,3.13,, function,PyMapping_Items,3.2,, function,PyMapping_Keys,3.2,, function,PyMapping_Length,3.2,, @@ -523,6 +525,8 @@ function,PyObject_GetOptionalAttrString,3.13,, function,PyObject_GetTypeData,3.12,, function,PyObject_HasAttr,3.2,, function,PyObject_HasAttrString,3.2,, +function,PyObject_HasAttrStringWithError,3.13,, +function,PyObject_HasAttrWithError,3.13,, function,PyObject_Hash,3.2,, function,PyObject_HashNotImplemented,3.2,, function,PyObject_Init,3.2,, diff --git a/Doc/extending/windows.rst b/Doc/extending/windows.rst index 1129b0968bc4e6..e366d6cb9f79e3 100644 --- a/Doc/extending/windows.rst +++ b/Doc/extending/windows.rst @@ -132,4 +132,4 @@ modules (including Python) to be able to see your identifiers, you have to say Developer Studio will throw in a lot of import libraries that you do not really need, adding about 100K to your executable. To get rid of them, use the Project Settings dialog, Link tab, to specify *ignore default libraries*. Add the -correct :file:`msvcrtxx.lib` to the list of libraries. +correct :file:`msvcrt{xx}.lib` to the list of libraries. diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst index 772973edadd9d8..588f5a0a53ded0 100644 --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -1728,7 +1728,7 @@ when (and if) the logged message is actually about to be output to a log by a handler. So the only slightly unusual thing which might trip you up is that the parentheses go around the format string and the arguments, not just the format string. That's because the __ notation is just syntax sugar for a constructor -call to one of the XXXMessage classes. +call to one of the :samp:`{XXX}Message` classes. If you prefer, you can use a :class:`LoggerAdapter` to achieve a similar effect to the above, as in the following example:: @@ -2644,7 +2644,7 @@ when (and if) the logged message is actually about to be output to a log by a handler. So the only slightly unusual thing which might trip you up is that the parentheses go around the format string and the arguments, not just the format string. That’s because the __ notation is just syntax sugar for a constructor -call to one of the ``XXXMessage`` classes shown above. +call to one of the :samp:`{XXX}Message` classes shown above. .. _filters-dictconfig: diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst index a72e9a820ef347..7330cf675baa36 100644 --- a/Doc/howto/logging.rst +++ b/Doc/howto/logging.rst @@ -979,7 +979,7 @@ provided: #. :class:`NullHandler` instances do nothing with error messages. They are used by library developers who want to use logging, but want to avoid the 'No - handlers could be found for logger XXX' message which can be displayed if + handlers could be found for logger *XXX*' message which can be displayed if the library user has not configured logging. See :ref:`library-config` for more information. diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index 8f5148feb809a3..10b3e2dae472e1 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -650,10 +650,10 @@ Expressions .. class:: NamedExpr(target, value) - A named expression. This AST node is produced by the assignment expressions - operator (also known as the walrus operator). As opposed to the :class:`Assign` - node in which the first argument can be multiple nodes, in this case both - ``target`` and ``value`` must be single nodes. + A named expression. This AST node is produced by the assignment expressions + operator (also known as the walrus operator). As opposed to the :class:`Assign` + node in which the first argument can be multiple nodes, in this case both + ``target`` and ``value`` must be single nodes. .. doctest:: @@ -663,6 +663,7 @@ Expressions target=Name(id='x', ctx=Store()), value=Constant(value=4))) + .. versionadded:: 3.8 Subscripting ~~~~~~~~~~~~ @@ -1036,6 +1037,7 @@ Statements value=Name(id='int', ctx=Load()))], type_ignores=[]) + .. versionadded:: 3.12 Other statements which are only applicable inside functions or loops are described in other sections. @@ -1318,6 +1320,7 @@ Control flow finalbody=[])], type_ignores=[]) + .. versionadded:: 3.11 .. class:: ExceptHandler(type, name, body) @@ -1407,6 +1410,8 @@ Pattern matching that is being matched against the cases) and ``cases`` contains an iterable of :class:`match_case` nodes with the different cases. + .. versionadded:: 3.10 + .. class:: match_case(pattern, guard, body) A single case pattern in a ``match`` statement. ``pattern`` contains the @@ -1458,6 +1463,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchValue(value) A match literal or value pattern that compares by equality. ``value`` is @@ -1485,6 +1492,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchSingleton(value) A match literal pattern that compares by identity. ``value`` is the @@ -1510,6 +1519,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchSequence(patterns) A match sequence pattern. ``patterns`` contains the patterns to be matched @@ -1541,6 +1552,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchStar(name) Matches the rest of the sequence in a variable length match sequence pattern. @@ -1581,6 +1594,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchMapping(keys, patterns, rest) A match mapping pattern. ``keys`` is a sequence of expression nodes. @@ -1627,6 +1642,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchClass(cls, patterns, kwd_attrs, kwd_patterns) A match class pattern. ``cls`` is an expression giving the nominal class to @@ -1691,6 +1708,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchAs(pattern, name) A match "as-pattern", capture pattern or wildcard pattern. ``pattern`` @@ -1732,6 +1751,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. class:: MatchOr(patterns) A match "or-pattern". An or-pattern matches each of its subpatterns in turn @@ -1764,6 +1785,8 @@ Pattern matching value=Constant(value=Ellipsis))])])], type_ignores=[]) + .. versionadded:: 3.10 + .. _ast-type-params: Type parameters @@ -1795,6 +1818,8 @@ aliases. ctx=Load()))], type_ignores=[]) + .. versionadded:: 3.12 + .. class:: ParamSpec(name) A :class:`typing.ParamSpec`. ``name`` is the name of the parameter specification. @@ -1818,6 +1843,8 @@ aliases. ctx=Load()))], type_ignores=[]) + .. versionadded:: 3.12 + .. class:: TypeVarTuple(name) A :class:`typing.TypeVarTuple`. ``name`` is the name of the type variable tuple. @@ -1842,6 +1869,8 @@ aliases. ctx=Load()))], type_ignores=[]) + .. versionadded:: 3.12 + Function and class definitions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1861,6 +1890,9 @@ Function and class definitions ``type_comment`` is an optional string with the type annotation as a comment. + .. versionchanged:: 3.12 + Added ``type_params``. + .. class:: Lambda(args, body) @@ -2059,6 +2091,9 @@ Function and class definitions type_params=[])], type_ignores=[]) + .. versionchanged:: 3.12 + Added ``type_params``. + Async and await ^^^^^^^^^^^^^^^ @@ -2067,6 +2102,9 @@ Async and await An ``async def`` function definition. Has the same fields as :class:`FunctionDef`. + .. versionchanged:: 3.12 + Added ``type_params``. + .. class:: Await(value) diff --git a/Doc/library/asyncio-llapi-index.rst b/Doc/library/asyncio-llapi-index.rst index 9ce48a24444e66..67136ba69ec875 100644 --- a/Doc/library/asyncio-llapi-index.rst +++ b/Doc/library/asyncio-llapi-index.rst @@ -484,19 +484,19 @@ Protocol classes can implement the following **callback methods**: :widths: 50 50 :class: full-width-table - * - ``callback`` :meth:`pipe_data_received() - ` + * - ``callback`` :meth:`~SubprocessProtocol.pipe_data_received` - Called when the child process writes data into its *stdout* or *stderr* pipe. - * - ``callback`` :meth:`pipe_connection_lost() - ` + * - ``callback`` :meth:`~SubprocessProtocol.pipe_connection_lost` - Called when one of the pipes communicating with the child process is closed. * - ``callback`` :meth:`process_exited() ` - - Called when the child process has exited. + - Called when the child process has exited. It can be called before + :meth:`~SubprocessProtocol.pipe_data_received` and + :meth:`~SubprocessProtocol.pipe_connection_lost` methods. Event Loop Policies diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst index 7bc906eaafc1f2..3f734f544afe21 100644 --- a/Doc/library/asyncio-protocol.rst +++ b/Doc/library/asyncio-protocol.rst @@ -708,6 +708,9 @@ factories passed to the :meth:`loop.subprocess_exec` and Called when the child process has exited. + It can be called before :meth:`~SubprocessProtocol.pipe_data_received` and + :meth:`~SubprocessProtocol.pipe_connection_lost` methods. + Examples ======== @@ -746,7 +749,7 @@ received data, and close the connection:: loop = asyncio.get_running_loop() server = await loop.create_server( - lambda: EchoServerProtocol(), + EchoServerProtocol, '127.0.0.1', 8888) async with server: @@ -850,7 +853,7 @@ method, sends back received data:: # One protocol instance will be created to serve all # client requests. transport, protocol = await loop.create_datagram_endpoint( - lambda: EchoServerProtocol(), + EchoServerProtocol, local_addr=('127.0.0.1', 9999)) try: @@ -1003,12 +1006,26 @@ The subprocess is created by the :meth:`loop.subprocess_exec` method:: def __init__(self, exit_future): self.exit_future = exit_future self.output = bytearray() + self.pipe_closed = False + self.exited = False + + def pipe_connection_lost(self, fd, exc): + self.pipe_closed = True + self.check_for_exit() def pipe_data_received(self, fd, data): self.output.extend(data) def process_exited(self): - self.exit_future.set_result(True) + self.exited = True + # process_exited() method can be called before + # pipe_connection_lost() method: wait until both methods are + # called. + self.check_for_exit() + + def check_for_exit(self): + if self.pipe_closed and self.exited: + self.exit_future.set_result(True) async def get_date(): # Get a reference to the event loop as we plan to use diff --git a/Doc/library/asyncio.rst b/Doc/library/asyncio.rst index c6a046f534e9a1..c75ab47404c1e4 100644 --- a/Doc/library/asyncio.rst +++ b/Doc/library/asyncio.rst @@ -56,6 +56,8 @@ Additionally, there are **low-level** APIs for * :ref:`bridge ` callback-based libraries and code with async/await syntax. +.. _asyncio-cli: + You can experiment with an ``asyncio`` concurrent context in the REPL: .. code-block:: pycon diff --git a/Doc/library/calendar.rst b/Doc/library/calendar.rst index 1868eb1cd359c4..157a7537f97dc6 100644 --- a/Doc/library/calendar.rst +++ b/Doc/library/calendar.rst @@ -489,3 +489,146 @@ The :mod:`calendar` module defines the following exceptions: Module :mod:`time` Low-level time related functions. + + +.. _calendar-cli: + +Command-Line Usage +------------------ + +.. versionadded:: 2.5 + +The :mod:`calendar` module can be executed as a script from the command line +to interactively print a calendar. + +.. code-block:: shell + + python -m calendar [-h] [-L LOCALE] [-e ENCODING] [-t {text,html}] + [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS] + [year] [month] + + +For example, to print a calendar for the year 2000: + +.. code-block:: console + + $ python -m calendar 2000 + 2000 + + January February March + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 1 2 3 4 5 6 1 2 3 4 5 + 3 4 5 6 7 8 9 7 8 9 10 11 12 13 6 7 8 9 10 11 12 + 10 11 12 13 14 15 16 14 15 16 17 18 19 20 13 14 15 16 17 18 19 + 17 18 19 20 21 22 23 21 22 23 24 25 26 27 20 21 22 23 24 25 26 + 24 25 26 27 28 29 30 28 29 27 28 29 30 31 + 31 + + April May June + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 1 2 3 4 5 6 7 1 2 3 4 + 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11 + 10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18 + 17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25 + 24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 + + July August September + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 1 2 3 4 5 6 1 2 3 + 3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10 + 10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17 + 17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24 + 24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30 + 31 + + October November December + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 1 2 3 4 5 1 2 3 + 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10 + 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17 + 16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24 + 23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31 + 30 31 + + +The following options are accepted: + +.. program:: calendar + + +.. option:: --help, -h + + Show the help message and exit. + + +.. option:: --locale LOCALE, -L LOCALE + + The locale to use for month and weekday names. + Defaults to English. + + +.. option:: --encoding ENCODING, -e ENCODING + + The encoding to use for output. + :option:`--encoding` is required if :option:`--locale` is set. + + +.. option:: --type {text,html}, -t {text,html} + + Print the calendar to the terminal as text, + or as an HTML document. + + +.. option:: year + + The year to print the calendar for. + Must be a number between 1 and 9999. + Defaults to the current year. + + +.. option:: month + + The month of the specified :option:`year` to print the calendar for. + Must be a number between 1 and 12, + and may only be used in text mode. + Defaults to printing a calendar for the full year. + + +*Text-mode options:* + +.. option:: --width WIDTH, -w WIDTH + + The width of the date column in terminal columns. + The date is printed centred in the column. + Any value lower than 2 is ignored. + Defaults to 2. + + +.. option:: --lines LINES, -l LINES + + The number of lines for each week in terminal rows. + The date is printed top-aligned. + Any value lower than 1 is ignored. + Defaults to 1. + + +.. option:: --spacing SPACING, -s SPACING + + The space between months in columns. + Any value lower than 2 is ignored. + Defaults to 6. + + +.. option:: --months MONTHS, -m MONTHS + + The number of months printed per row. + Defaults to 3. + + +*HTML-mode options:* + +.. option:: --css CSS, -c CSS + + The path of a CSS stylesheet to use for the calendar. + This must either be relative to the generated HTML, + or an absolute HTTP or ``file:///`` URL. diff --git a/Doc/library/cmdline.rst b/Doc/library/cmdline.rst new file mode 100644 index 00000000000000..4a295e069287d8 --- /dev/null +++ b/Doc/library/cmdline.rst @@ -0,0 +1,57 @@ +++++++++++++++++++++++++++++++++++++ +Modules command-line interface (CLI) +++++++++++++++++++++++++++++++++++++ + +The following modules have a command-line interface. + +* :ref:`ast ` +* :ref:`asyncio ` +* :mod:`base64` +* :ref:`calendar ` +* :mod:`code` +* :ref:`compileall ` +* :mod:`cProfile`: see :ref:`profile ` +* :ref:`difflib ` +* :mod:`dis` +* :mod:`doctest` +* :mod:`!encodings.rot_13` +* :mod:`ensurepip` +* :mod:`filecmp` +* :mod:`fileinput` +* :mod:`ftplib` +* :ref:`gzip ` +* :ref:`http.server ` +* :mod:`!idlelib` +* :ref:`inspect ` +* :ref:`json.tool ` +* :mod:`mimetypes` +* :mod:`pdb` +* :mod:`pickle` +* :ref:`pickletools ` +* :mod:`platform` +* :mod:`poplib` +* :ref:`profile ` +* :mod:`pstats` +* :ref:`py_compile ` +* :mod:`pyclbr` +* :mod:`pydoc` +* :mod:`quopri` +* :mod:`runpy` +* :ref:`site ` +* :ref:`sqlite3 ` +* :ref:`sysconfig ` +* :mod:`tabnanny` +* :ref:`tarfile ` +* :mod:`!this` +* :ref:`timeit ` +* :ref:`tokenize ` +* :ref:`trace ` +* :mod:`turtledemo` +* :ref:`unittest ` +* :ref:`uuid ` +* :mod:`venv` +* :mod:`webbrowser` +* :ref:`zipapp ` +* :ref:`zipfile ` + +See also the :ref:`Python command-line interface `. diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 8225236350d22e..053bf64addb821 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -345,9 +345,10 @@ The following error handlers can be used with all Python +-------------------------+-----------------------------------------------+ | ``'backslashreplace'`` | Replace with backslashed escape sequences. | | | On encoding, use hexadecimal form of Unicode | -| | code point with formats ``\xhh`` ``\uxxxx`` | -| | ``\Uxxxxxxxx``. On decoding, use hexadecimal | -| | form of byte value with format ``\xhh``. | +| | code point with formats :samp:`\\x{hh}` | +| | :samp:`\\u{xxxx}` :samp:`\\U{xxxxxxxx}`. | +| | On decoding, use hexadecimal form of byte | +| | value with format :samp:`\\x{hh}`. | | | Implemented in | | | :func:`backslashreplace_errors`. | +-------------------------+-----------------------------------------------+ @@ -373,8 +374,9 @@ The following error handlers are only applicable to encoding (within +=========================+===============================================+ | ``'xmlcharrefreplace'`` | Replace with XML/HTML numeric character | | | reference, which is a decimal form of Unicode | -| | code point with format ``&#num;`` Implemented | -| | in :func:`xmlcharrefreplace_errors`. | +| | code point with format :samp:`&#{num};`. | +| | Implemented in | +| | :func:`xmlcharrefreplace_errors`. | +-------------------------+-----------------------------------------------+ | ``'namereplace'`` | Replace with ``\N{...}`` escape sequences, | | | what appears in the braces is the Name | @@ -478,8 +480,9 @@ functions: Malformed data is replaced by a backslashed escape sequence. On encoding, use the hexadecimal form of Unicode code point with formats - ``\xhh`` ``\uxxxx`` ``\Uxxxxxxxx``. On decoding, use the hexadecimal form of - byte value with format ``\xhh``. + :samp:`\\x{hh}` :samp:`\\u{xxxx}` :samp:`\\U{xxxxxxxx}`. + On decoding, use the hexadecimal form of + byte value with format :samp:`\\x{hh}`. .. versionchanged:: 3.5 Works with decoding and translating. @@ -492,7 +495,7 @@ functions: The unencodable character is replaced by an appropriate XML/HTML numeric character reference, which is a decimal form of Unicode code point with - format ``&#num;`` . + format :samp:`&#{num};` . .. function:: namereplace_errors(exception) @@ -1346,9 +1349,10 @@ encodings. | | | supported. | +--------------------+---------+---------------------------+ | raw_unicode_escape | | Latin-1 encoding with | -| | | ``\uXXXX`` and | -| | | ``\UXXXXXXXX`` for other | -| | | code points. Existing | +| | | :samp:`\\u{XXXX}` and | +| | | :samp:`\\U{XXXXXXXX}`` | +| | | for other code points. | +| | | Existing | | | | backslashes are not | | | | escaped in any way. | | | | It is used in the Python | diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index b8b231bb15b1b0..03cb1dca8f816c 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -979,6 +979,8 @@ field names, the method and attribute names start with an underscore. >>> for partnum, record in inventory.items(): ... inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now()) + Named tuples are also supported by generic function :func:`copy.replace`. + .. attribute:: somenamedtuple._fields Tuple of strings listing the field names. Useful for introspection diff --git a/Doc/library/compileall.rst b/Doc/library/compileall.rst index 4226348a17240a..a7455aeb0ec1cd 100644 --- a/Doc/library/compileall.rst +++ b/Doc/library/compileall.rst @@ -16,6 +16,8 @@ have write permission to the library directories. .. include:: ../includes/wasm-notavail.rst +.. _compileall-cli: + Command-line use ---------------- @@ -29,7 +31,7 @@ compile Python sources. Positional arguments are files to compile or directories that contain source files, traversed recursively. If no argument is given, behave as if - the command line was ``-l ``. + the command line was :samp:`-l {}`. .. cmdoption:: -l diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst index 09c9fc4e6e227a..6503d1fcf70a32 100644 --- a/Doc/library/concurrent.futures.rst +++ b/Doc/library/concurrent.futures.rst @@ -293,6 +293,14 @@ to a :class:`ProcessPoolExecutor` will result in deadlock. The *max_tasks_per_child* argument was added to allow users to control the lifetime of workers in the pool. + .. versionchanged:: 3.12 + On POSIX systems, if your application has multiple threads and the + :mod:`multiprocessing` context uses the ``"fork"`` start method: + The :func:`os.fork` function called internally to spawn workers may raise a + :exc:`DeprecationWarning`. Pass a *mp_context* configured to use a + different start method. See the :func:`os.fork` documentation for + further explanation. + .. _processpoolexecutor-example: ProcessPoolExecutor Example diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index a7f75fd6e84f4c..bb282428c5fffc 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -935,8 +935,10 @@ ConfigParser Objects When *default_section* is given, it specifies the name for the special section holding default values for other sections and interpolation purposes - (normally named ``"DEFAULT"``). This value can be retrieved and changed on - runtime using the ``default_section`` instance attribute. + (normally named ``"DEFAULT"``). This value can be retrieved and changed at + runtime using the ``default_section`` instance attribute. This won't + re-evaluate an already parsed config file, but will be used when writing + parsed settings to a new config file. Interpolation behaviour may be customized by providing a custom handler through the *interpolation* argument. ``None`` can be used to turn off diff --git a/Doc/library/copy.rst b/Doc/library/copy.rst index 8f32477ed508c3..cc4ca034d07a00 100644 --- a/Doc/library/copy.rst +++ b/Doc/library/copy.rst @@ -17,14 +17,22 @@ operations (explained below). Interface summary: -.. function:: copy(x) +.. function:: copy(obj) - Return a shallow copy of *x*. + Return a shallow copy of *obj*. -.. function:: deepcopy(x[, memo]) +.. function:: deepcopy(obj[, memo]) - Return a deep copy of *x*. + Return a deep copy of *obj*. + + +.. function:: replace(obj, /, **changes) + + Creates a new object of the same type as *obj*, replacing fields with values + from *changes*. + + .. versionadded:: 3.13 .. exception:: Error @@ -89,6 +97,20 @@ with the component as first argument and the memo dictionary as second argument. The memo dictionary should be treated as an opaque object. +.. index:: + single: __replace__() (replace protocol) + +Function :func:`replace` is more limited than :func:`copy` and :func:`deepcopy`, +and only supports named tuples created by :func:`~collections.namedtuple`, +:mod:`dataclasses`, and other classes which define method :meth:`!__replace__`. + + .. method:: __replace__(self, /, **changes) + :noindex: + +:meth:`!__replace__` should create a new object of the same type, +replacing fields with values from *changes*. + + .. seealso:: Module :mod:`pickle` diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index d68748767c5e37..d78a6071a50e4b 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -456,6 +456,8 @@ Module contents ``replace()`` (or similarly named) method which handles instance copying. + Dataclass instances are also supported by generic function :func:`copy.replace`. + .. function:: is_dataclass(obj) Return ``True`` if its parameter is a dataclass or an instance of one, diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst index 04cc75562937e0..0b9d42f32e3bd6 100644 --- a/Doc/library/datetime.rst +++ b/Doc/library/datetime.rst @@ -652,6 +652,9 @@ Instance methods: >>> d.replace(day=26) datetime.date(2002, 12, 26) + :class:`date` objects are also supported by generic function + :func:`copy.replace`. + .. method:: date.timetuple() @@ -1251,6 +1254,9 @@ Instance methods: ``tzinfo=None`` can be specified to create a naive datetime from an aware datetime with no conversion of date and time data. + :class:`datetime` objects are also supported by generic function + :func:`copy.replace`. + .. versionadded:: 3.6 Added the ``fold`` argument. @@ -1827,6 +1833,9 @@ Instance methods: ``tzinfo=None`` can be specified to create a naive :class:`.time` from an aware :class:`.time`, without conversion of the time data. + :class:`time` objects are also supported by generic function + :func:`copy.replace`. + .. versionadded:: 3.6 Added the ``fold`` argument. diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index 6cd5f181c8433a..b835f1ea2b0090 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -597,7 +597,7 @@ not have to be) the original ``STACK[-2]``. key = STACK.pop() container = STACK.pop() - STACK.append(container[index]) + STACK.append(container[key]) .. opcode:: STORE_SUBSCR @@ -1122,7 +1122,8 @@ iterations of the loop. This bytecode distinguishes two cases: if ``STACK[-1]`` has a method with the correct name, the bytecode pushes the unbound method and ``STACK[-1]``. ``STACK[-1]`` will be used as the first argument (``self``) by :opcode:`CALL` - when calling the unbound method. Otherwise, ``NULL`` and the object returned by + or :opcode:`CALL_KW` when calling the unbound method. + Otherwise, ``NULL`` and the object returned by the attribute lookup are pushed. .. versionchanged:: 3.12 @@ -1390,25 +1391,14 @@ iterations of the loop. .. opcode:: CALL (argc) - Calls a callable object with the number of arguments specified by ``argc``, - including the named arguments specified by the preceding - :opcode:`KW_NAMES`, if any. - On the stack are (in ascending order), either: + Calls a callable object with the number of arguments specified by ``argc``. + On the stack are (in ascending order): - * NULL * The callable - * The positional arguments - * The named arguments - - or: - - * The callable - * ``self`` + * ``self`` or ``NULL`` * The remaining positional arguments - * The named arguments - ``argc`` is the total of the positional and named arguments, excluding - ``self`` when a ``NULL`` is not present. + ``argc`` is the total of the positional arguments, excluding ``self``. ``CALL`` pops all arguments and the callable object off the stack, calls the callable object with those arguments, and pushes the return value @@ -1416,6 +1406,33 @@ iterations of the loop. .. versionadded:: 3.11 + .. versionchanged:: 3.13 + The callable now always appears at the same position on the stack. + + .. versionchanged:: 3.13 + Calls with keyword arguments are now handled by :opcode:`CALL_KW`. + + +.. opcode:: CALL_KW (argc) + + Calls a callable object with the number of arguments specified by ``argc``, + including one or more named arguments. On the stack are (in ascending order): + + * The callable + * ``self`` or ``NULL`` + * The remaining positional arguments + * The named arguments + * A :class:`tuple` of keyword argument names + + ``argc`` is the total of the positional and named arguments, excluding ``self``. + The length of the tuple of keyword argument names is the number of named arguments. + + ``CALL_KW`` pops all arguments, the keyword names, and the callable object + off the stack, calls the callable object with those arguments, and pushes the + return value returned by the callable object. + + .. versionadded:: 3.13 + .. opcode:: CALL_FUNCTION_EX (flags) @@ -1441,15 +1458,6 @@ iterations of the loop. .. versionadded:: 3.11 -.. opcode:: KW_NAMES (consti) - - Prefixes :opcode:`CALL`. - Stores a reference to ``co_consts[consti]`` into an internal variable - for use by :opcode:`CALL`. ``co_consts[consti]`` must be a tuple of strings. - - .. versionadded:: 3.11 - - .. opcode:: MAKE_FUNCTION Pushes a new function object on the stack built from the code object at ``STACK[1]``. @@ -1611,8 +1619,8 @@ iterations of the loop. opcodes in the range [0,255] which don't use their argument and those that do (``< HAVE_ARGUMENT`` and ``>= HAVE_ARGUMENT``, respectively). - If your application uses pseudo instructions, use the :data:`hasarg` - collection instead. + If your application uses pseudo instructions or specialized instructions, + use the :data:`hasarg` collection instead. .. versionchanged:: 3.6 Now every instruction has an argument, but opcodes ``< HAVE_ARGUMENT`` @@ -1623,6 +1631,8 @@ iterations of the loop. it is not true that comparison with ``HAVE_ARGUMENT`` indicates whether they use their arg. + .. deprecated:: 3.13 + Use :data:`hasarg` instead. .. opcode:: CALL_INTRINSIC_1 diff --git a/Doc/library/ensurepip.rst b/Doc/library/ensurepip.rst index d7f89cf96368b5..de3b93f5e61073 100644 --- a/Doc/library/ensurepip.rst +++ b/Doc/library/ensurepip.rst @@ -61,7 +61,7 @@ By default, ``pip`` is installed into the current virtual environment active virtual environment). The installation location can be controlled through two additional command line options: -* ``--root ``: Installs ``pip`` relative to the given root directory +* :samp:`--root {dir}`: Installs ``pip`` relative to the given root directory rather than the root of the currently active virtual environment (if any) or the default root for the current Python installation. * ``--user``: Installs ``pip`` into the user site packages directory rather diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 88a7fdfe6f0d50..35206097064284 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -1271,7 +1271,7 @@ are always available. They are listed here in alphabetical order. * ``'xmlcharrefreplace'`` is only supported when writing to a file. Characters not supported by the encoding are replaced with the - appropriate XML character reference ``&#nnn;``. + appropriate XML character reference :samp:`&#{nnn};`. * ``'backslashreplace'`` replaces malformed data by Python's backslashed escape sequences. @@ -1631,7 +1631,7 @@ are always available. They are listed here in alphabetical order. .. class:: slice(stop) - slice(start, stop, step=1) + slice(start, stop, step=None) Return a :term:`slice` object representing the set of indices specified by ``range(start, stop, step)``. The *start* and *step* arguments default to diff --git a/Doc/library/functools.rst b/Doc/library/functools.rst index f736eb0aca1ac5..69ec1eb3ecd89d 100644 --- a/Doc/library/functools.rst +++ b/Doc/library/functools.rst @@ -403,25 +403,27 @@ The :mod:`functools` module defines the following functions: .. versionadded:: 3.4 -.. function:: reduce(function, iterable[, initializer]) +.. function:: reduce(function, iterable[, initial], /) Apply *function* of two arguments cumulatively to the items of *iterable*, from left to right, so as to reduce the iterable to a single value. For example, ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``. The left argument, *x*, is the accumulated value and the right argument, *y*, is - the update value from the *iterable*. If the optional *initializer* is present, + the update value from the *iterable*. If the optional *initial* is present, it is placed before the items of the iterable in the calculation, and serves as - a default when the iterable is empty. If *initializer* is not given and + a default when the iterable is empty. If *initial* is not given and *iterable* contains only one item, the first item is returned. Roughly equivalent to:: - def reduce(function, iterable, initializer=None): + initial_missing = object() + + def reduce(function, iterable, initial=initial_missing, /): it = iter(iterable) - if initializer is None: + if initial is initial_missing: value = next(it) else: - value = initializer + value = initial for element in it: value = function(value, element) return value diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst index 60236a1190e423..6a4f2c76ae4e10 100644 --- a/Doc/library/gzip.rst +++ b/Doc/library/gzip.rst @@ -250,6 +250,8 @@ Example of how to GZIP compress a binary string:: .. program:: gzip +.. _gzip-cli: + Command Line Interface ---------------------- diff --git a/Doc/library/hashlib.rst b/Doc/library/hashlib.rst index 69fb79b49ca2a0..761dd84edee299 100644 --- a/Doc/library/hashlib.rst +++ b/Doc/library/hashlib.rst @@ -136,16 +136,16 @@ Using :func:`new` with an algorithm name: '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406' -.. function:: md5([, data], \*, usedforsecurity=True) -.. function:: sha1([, data], \*, usedforsecurity=True) -.. function:: sha224([, data], \*, usedforsecurity=True) -.. function:: sha256([, data], \*, usedforsecurity=True) -.. function:: sha384([, data], \*, usedforsecurity=True) -.. function:: sha512([, data], \*, usedforsecurity=True) -.. function:: sha3_224([, data], \*, usedforsecurity=True) -.. function:: sha3_256([, data], \*, usedforsecurity=True) -.. function:: sha3_384([, data], \*, usedforsecurity=True) -.. function:: sha3_512([, data], \*, usedforsecurity=True) +.. function:: md5([, data], *, usedforsecurity=True) +.. function:: sha1([, data], *, usedforsecurity=True) +.. function:: sha224([, data], *, usedforsecurity=True) +.. function:: sha256([, data], *, usedforsecurity=True) +.. function:: sha384([, data], *, usedforsecurity=True) +.. function:: sha512([, data], *, usedforsecurity=True) +.. function:: sha3_224([, data], *, usedforsecurity=True) +.. function:: sha3_256([, data], *, usedforsecurity=True) +.. function:: sha3_384([, data], *, usedforsecurity=True) +.. function:: sha3_512([, data], *, usedforsecurity=True) Named constructors such as these are faster than passing an algorithm name to :func:`new`. @@ -234,8 +234,8 @@ A hash object has the following methods: SHAKE variable length digests ----------------------------- -.. function:: shake_128([, data], \*, usedforsecurity=True) -.. function:: shake_256([, data], \*, usedforsecurity=True) +.. function:: shake_128([, data], *, usedforsecurity=True) +.. function:: shake_256([, data], *, usedforsecurity=True) The :func:`shake_128` and :func:`shake_256` algorithms provide variable length digests with length_in_bits//2 up to 128 or 256 bits of security. @@ -364,6 +364,8 @@ include a `salt `_. .. versionadded:: 3.6 +.. _hashlib-blake2: + BLAKE2 ------ diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst index 03aff25ce6117a..d35090111e0822 100644 --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -173,7 +173,7 @@ implementations do nothing (except for :meth:`~HTMLParser.handle_startendtag`): .. method:: HTMLParser.handle_charref(name) This method is called to process decimal and hexadecimal numeric character - references of the form ``&#NNN;`` and ``&#xNNN;``. For example, the decimal + references of the form :samp:`&#{NNN};` and :samp:`&#x{NNN};`. For example, the decimal equivalent for ``>`` is ``>``, whereas the hexadecimal is ``>``; in this case the method will receive ``'62'`` or ``'x3E'``. This method is never called if *convert_charrefs* is ``True``. diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index ae75e6dc5fdcf3..6f79b222790094 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -217,7 +217,7 @@ provides three different variants: attribute holds the default values for *message* and *explain* that will be used if no value is provided; for unknown codes the default value for both is the string ``???``. The body will be empty if the method is - HEAD or the response code is one of the following: ``1xx``, + HEAD or the response code is one of the following: :samp:`1{xx}`, ``204 No Content``, ``205 Reset Content``, ``304 Not Modified``. .. versionchanged:: 3.4 @@ -502,11 +502,24 @@ following command runs an HTTP/1.1 conformant server:: Note that CGI scripts will be run with UID of user nobody, for security reasons. Problems with the CGI script will be translated to error 403. + .. deprecated-removed:: 3.13 3.15 + + :class:`CGIHTTPRequestHandler` is being removed in 3.15. CGI has not + been considered a good way to do things for well over a decade. This code + has been unmaintained for a while now and sees very little practical use. + Retaining it could lead to further :ref:`security considerations + `. + :class:`CGIHTTPRequestHandler` can be enabled in the command line by passing the ``--cgi`` option:: python -m http.server --cgi +.. deprecated-removed:: 3.13 3.15 + + :mod:`http.server` command line ``--cgi`` support is being removed + because :class:`CGIHTTPRequestHandler` is being removed. + .. _http.server-security: Security Considerations diff --git a/Doc/library/importlib.resources.abc.rst b/Doc/library/importlib.resources.abc.rst index 65c42858bbbb7d..c508b6ba965cc0 100644 --- a/Doc/library/importlib.resources.abc.rst +++ b/Doc/library/importlib.resources.abc.rst @@ -43,8 +43,6 @@ :const:`None`. An object compatible with this ABC should only be returned when the specified module is a package. - .. versionadded:: 3.7 - .. deprecated-removed:: 3.12 3.14 Use :class:`importlib.resources.abc.TraversableResources` instead. @@ -95,11 +93,6 @@ For a representation of the object on the file-system, use :meth:`importlib.resources.as_file`. - .. versionadded:: 3.9 - - .. deprecated-removed:: 3.12 3.14 - Use :class:`importlib.resources.abc.Traversable` instead. - .. attribute:: name Abstract. The base name of this object without any parent references. @@ -153,11 +146,6 @@ Loaders that wish to support resource reading are expected to implement this interface. - .. versionadded:: 3.9 - - .. deprecated-removed:: 3.12 3.14 - Use :class:`importlib.resources.abc.TraversableResources` instead. - .. abstractmethod:: files() Returns a :class:`importlib.resources.abc.Traversable` object for the loaded diff --git a/Doc/library/importlib.resources.rst b/Doc/library/importlib.resources.rst index 76faf731144779..3de97e80311a17 100644 --- a/Doc/library/importlib.resources.rst +++ b/Doc/library/importlib.resources.rst @@ -82,15 +82,18 @@ for example, a package and its resources can be imported from a zip file using .. function:: as_file(traversable) Given a :class:`~importlib.resources.abc.Traversable` object representing - a file, typically from :func:`importlib.resources.files`, return - a context manager for use in a :keyword:`with` statement. + a file or directory, typically from :func:`importlib.resources.files`, + return a context manager for use in a :keyword:`with` statement. The context manager provides a :class:`pathlib.Path` object. - Exiting the context manager cleans up any temporary file created when the - resource was extracted from e.g. a zip file. + Exiting the context manager cleans up any temporary file or directory + created when the resource was extracted from e.g. a zip file. Use ``as_file`` when the Traversable methods - (``read_text``, etc) are insufficient and an actual file on + (``read_text``, etc) are insufficient and an actual file or directory on the file system is required. .. versionadded:: 3.9 + + .. versionchanged:: 3.12 + Added support for ``traversable`` representing a directory. diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst index d8cc7079a1d812..fc954724bb72fe 100644 --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -645,6 +645,160 @@ ABC hierarchy:: itself does not end in ``__init__``. +.. class:: ResourceReader + + *Superseded by TraversableResources* + + An :term:`abstract base class` to provide the ability to read + *resources*. + + From the perspective of this ABC, a *resource* is a binary + artifact that is shipped within a package. Typically this is + something like a data file that lives next to the ``__init__.py`` + file of the package. The purpose of this class is to help abstract + out the accessing of such data files so that it does not matter if + the package and its data file(s) are stored in a e.g. zip file + versus on the file system. + + For any of methods of this class, a *resource* argument is + expected to be a :term:`path-like object` which represents + conceptually just a file name. This means that no subdirectory + paths should be included in the *resource* argument. This is + because the location of the package the reader is for, acts as the + "directory". Hence the metaphor for directories and file + names is packages and resources, respectively. This is also why + instances of this class are expected to directly correlate to + a specific package (instead of potentially representing multiple + packages or a module). + + Loaders that wish to support resource reading are expected to + provide a method called ``get_resource_reader(fullname)`` which + returns an object implementing this ABC's interface. If the module + specified by fullname is not a package, this method should return + :const:`None`. An object compatible with this ABC should only be + returned when the specified module is a package. + + .. versionadded:: 3.7 + + .. deprecated-removed:: 3.12 3.14 + Use :class:`importlib.resources.abc.TraversableResources` instead. + + .. abstractmethod:: open_resource(resource) + + Returns an opened, :term:`file-like object` for binary reading + of the *resource*. + + If the resource cannot be found, :exc:`FileNotFoundError` is + raised. + + .. abstractmethod:: resource_path(resource) + + Returns the file system path to the *resource*. + + If the resource does not concretely exist on the file system, + raise :exc:`FileNotFoundError`. + + .. abstractmethod:: is_resource(name) + + Returns ``True`` if the named *name* is considered a resource. + :exc:`FileNotFoundError` is raised if *name* does not exist. + + .. abstractmethod:: contents() + + Returns an :term:`iterable` of strings over the contents of + the package. Do note that it is not required that all names + returned by the iterator be actual resources, e.g. it is + acceptable to return names for which :meth:`is_resource` would + be false. + + Allowing non-resource names to be returned is to allow for + situations where how a package and its resources are stored + are known a priori and the non-resource names would be useful. + For instance, returning subdirectory names is allowed so that + when it is known that the package and resources are stored on + the file system then those subdirectory names can be used + directly. + + The abstract method returns an iterable of no items. + + +.. class:: Traversable + + An object with a subset of :class:`pathlib.Path` methods suitable for + traversing directories and opening files. + + For a representation of the object on the file-system, use + :meth:`importlib.resources.as_file`. + + .. versionadded:: 3.9 + + .. deprecated-removed:: 3.12 3.14 + Use :class:`importlib.resources.abc.Traversable` instead. + + .. attribute:: name + + Abstract. The base name of this object without any parent references. + + .. abstractmethod:: iterdir() + + Yield ``Traversable`` objects in ``self``. + + .. abstractmethod:: is_dir() + + Return ``True`` if ``self`` is a directory. + + .. abstractmethod:: is_file() + + Return ``True`` if ``self`` is a file. + + .. abstractmethod:: joinpath(child) + + Return Traversable child in ``self``. + + .. abstractmethod:: __truediv__(child) + + Return ``Traversable`` child in ``self``. + + .. abstractmethod:: open(mode='r', *args, **kwargs) + + *mode* may be 'r' or 'rb' to open as text or binary. Return a handle + suitable for reading (same as :attr:`pathlib.Path.open`). + + When opening as text, accepts encoding parameters such as those + accepted by :attr:`io.TextIOWrapper`. + + .. method:: read_bytes() + + Read contents of ``self`` as bytes. + + .. method:: read_text(encoding=None) + + Read contents of ``self`` as text. + + +.. class:: TraversableResources + + An abstract base class for resource readers capable of serving + the :meth:`importlib.resources.files` interface. Subclasses + :class:`importlib.resources.abc.ResourceReader` and provides + concrete implementations of the :class:`importlib.resources.abc.ResourceReader`'s + abstract methods. Therefore, any loader supplying + :class:`importlib.abc.TraversableResources` also supplies ResourceReader. + + Loaders that wish to support resource reading are expected to + implement this interface. + + .. versionadded:: 3.9 + + .. deprecated-removed:: 3.12 3.14 + Use :class:`importlib.resources.abc.TraversableResources` instead. + + .. abstractmethod:: files() + + Returns a :class:`importlib.resources.abc.Traversable` object for the loaded + package. + + :mod:`importlib.machinery` -- Importers and path hooks ------------------------------------------------------ diff --git a/Doc/library/index.rst b/Doc/library/index.rst index d064b680f9aaa4..0b348ae6f5c8c0 100644 --- a/Doc/library/index.rst +++ b/Doc/library/index.rst @@ -73,5 +73,6 @@ the `Python Package Index `_. language.rst windows.rst unix.rst + cmdline.rst superseded.rst security_warnings.rst diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index 7884308a333020..fe0ed135029f0f 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -689,8 +689,8 @@ function. The optional *return_annotation* argument, can be an arbitrary Python object, is the "return" annotation of the callable. - Signature objects are *immutable*. Use :meth:`Signature.replace` to make a - modified copy. + Signature objects are *immutable*. Use :meth:`Signature.replace` or + :func:`copy.replace` to make a modified copy. .. versionchanged:: 3.5 Signature objects are picklable and :term:`hashable`. @@ -730,7 +730,7 @@ function. .. method:: Signature.replace(*[, parameters][, return_annotation]) - Create a new Signature instance based on the instance replace was invoked + Create a new Signature instance based on the instance :meth:`replace` was invoked on. It is possible to pass different ``parameters`` and/or ``return_annotation`` to override the corresponding properties of the base signature. To remove return_annotation from the copied Signature, pass in @@ -746,6 +746,9 @@ function. >>> str(new_sig) "(a, b) -> 'new return anno'" + Signature objects are also supported by generic function + :func:`copy.replace`. + .. classmethod:: Signature.from_callable(obj, *, follow_wrapped=True, globalns=None, localns=None) Return a :class:`Signature` (or its subclass) object for a given callable @@ -769,7 +772,7 @@ function. .. class:: Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty) Parameter objects are *immutable*. Instead of modifying a Parameter object, - you can use :meth:`Parameter.replace` to create a modified copy. + you can use :meth:`Parameter.replace` or :func:`copy.replace` to create a modified copy. .. versionchanged:: 3.5 Parameter objects are picklable and :term:`hashable`. @@ -892,6 +895,8 @@ function. >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'" + Parameter objects are also supported by generic function :func:`copy.replace`. + .. versionchanged:: 3.4 In Python 3.3 Parameter objects were allowed to have ``name`` set to ``None`` if their ``kind`` was set to ``POSITIONAL_ONLY``. diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index d0bb4696970198..5846d784c88ccc 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -844,7 +844,7 @@ which incur interpreter overhead. return next(islice(iterable, n, None), default) def quantify(iterable, pred=bool): - "Count how many times the predicate is True" + "Given a predicate that returns True or False, count the True results." return sum(map(pred, iterable)) def all_equal(iterable): @@ -865,26 +865,23 @@ which incur interpreter overhead. # first_true([a,b], x, f) --> a if f(a) else b if f(b) else x return next(filter(pred, iterable), default) - def iter_index(iterable, value, start=0): + def iter_index(iterable, value, start=0, stop=None): "Return indices where a value occurs in a sequence or iterable." # iter_index('AABCADEAF', 'A') --> 0 1 4 7 - try: - seq_index = iterable.index - except AttributeError: + seq_index = getattr(iterable, 'index', None) + if seq_index is None: # Slow path for general iterables - it = islice(iterable, start, None) - i = start - 1 - try: - while True: - yield (i := i + operator.indexOf(it, value) + 1) - except ValueError: - pass + it = islice(iterable, start, stop) + for i, element in enumerate(it, start): + if element is value or element == value: + yield i else: # Fast path for sequences + stop = len(iterable) if stop is None else stop i = start - 1 try: while True: - yield (i := seq_index(value, i+1)) + yield (i := seq_index(value, i+1, stop)) except ValueError: pass @@ -1031,31 +1028,6 @@ The following recipes have a more mathematical flavor: s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) - def sieve(n): - "Primes less than n." - # sieve(30) --> 2 3 5 7 11 13 17 19 23 29 - data = bytearray((0, 1)) * (n // 2) - data[:3] = 0, 0, 0 - limit = math.isqrt(n) + 1 - for p in compress(range(limit), data): - data[p*p : n : p+p] = bytes(len(range(p*p, n, p+p))) - data[2] = 1 - return iter_index(data, 1) if n > 2 else iter([]) - - def factor(n): - "Prime factors of n." - # factor(99) --> 3 3 11 - # factor(1_000_000_000_000_007) --> 47 59 360620266859 - # factor(1_000_000_000_000_403) --> 1000000000000403 - for prime in sieve(math.isqrt(n) + 1): - while not n % prime: - yield prime - n //= prime - if n == 1: - return - if n > 1: - yield n - def sum_of_squares(it): "Add up the squares of the input values." # sum_of_squares([10, 20, 30]) -> 1400 @@ -1073,14 +1045,21 @@ The following recipes have a more mathematical flavor: return batched(starmap(math.sumprod, product(m1, transpose(m2))), n) def convolve(signal, kernel): - """Linear convolution of two iterables. + """Discrete linear convolution of two iterables. + + The kernel is fully consumed before the calculations begin. + The signal is consumed lazily and can be infinite. + + Convolutions are mathematically commutative. + If the signal and kernel are swapped, + the output will be the same. Article: https://betterexplained.com/articles/intuitive-convolution/ Video: https://www.youtube.com/watch?v=KuXjwB4LzSA """ # convolve(data, [0.25, 0.25, 0.25, 0.25]) --> Moving average (blur) - # convolve(data, [1, -1]) --> 1st finite difference (1st derivative) - # convolve(data, [1, -2, 1]) --> 2nd finite difference (2nd derivative) + # convolve(data, [1/2, 0, -1/2]) --> 1st derivative estimate + # convolve(data, [1, -2, 1]) --> 2nd derivative estimate kernel = tuple(kernel)[::-1] n = len(kernel) padded_signal = chain(repeat(0, n-1), signal, repeat(0, n-1)) @@ -1104,8 +1083,8 @@ The following recipes have a more mathematical flavor: # Evaluate x³ -4x² -17x + 60 at x = 2.5 # polynomial_eval([1, -4, -17, 60], x=2.5) --> 8.125 n = len(coefficients) - if n == 0: - return x * 0 # coerce zero to the type of x + if not n: + return type(x)(0) powers = map(pow, repeat(x), reversed(range(n))) return math.sumprod(coefficients, powers) @@ -1120,6 +1099,34 @@ The following recipes have a more mathematical flavor: powers = reversed(range(1, n)) return list(map(operator.mul, coefficients, powers)) + def sieve(n): + "Primes less than n." + # sieve(30) --> 2 3 5 7 11 13 17 19 23 29 + if n > 2: + yield 2 + start = 3 + data = bytearray((0, 1)) * (n // 2) + limit = math.isqrt(n) + 1 + for p in iter_index(data, 1, start, limit): + yield from iter_index(data, 1, start, p*p) + data[p*p : n : p+p] = bytes(len(range(p*p, n, p+p))) + start = p*p + yield from iter_index(data, 1, start) + + def factor(n): + "Prime factors of n." + # factor(99) --> 3 3 11 + # factor(1_000_000_000_000_007) --> 47 59 360620266859 + # factor(1_000_000_000_000_403) --> 1000000000000403 + for prime in sieve(math.isqrt(n) + 1): + while not n % prime: + yield prime + n //= prime + if n == 1: + return + if n > 1: + yield n + def nth_combination(iterable, r, index): "Equivalent to list(combinations(iterable, r))[index]" pool = tuple(iterable) @@ -1295,7 +1302,7 @@ The following recipes have a more mathematical flavor: >>> polynomial_eval([], Fraction(2, 3)) Fraction(0, 1) >>> polynomial_eval([], Decimal('1.75')) - Decimal('0.00') + Decimal('0') >>> polynomial_eval([11], 7) == 11 True >>> polynomial_eval([11, 2], 7) == 11 * 7 + 2 @@ -1331,6 +1338,31 @@ The following recipes have a more mathematical flavor: [] >>> list(iter_index(iter('AABCADEAF'), 'A', 10)) [] + >>> list(iter_index('AABCADEAF', 'A', 1, 7)) + [1, 4] + >>> list(iter_index(iter('AABCADEAF'), 'A', 1, 7)) + [1, 4] + >>> # Verify that ValueErrors not swallowed (gh-107208) + >>> def assert_no_value(iterable, forbidden_value): + ... for item in iterable: + ... if item == forbidden_value: + ... raise ValueError + ... yield item + ... + >>> list(iter_index(assert_no_value('AABCADEAF', 'B'), 'A')) + Traceback (most recent call last): + ... + ValueError + >>> # Verify that both paths can find identical NaN values + >>> x = float('NaN') + >>> y = float('NaN') + >>> list(iter_index([0, x, x, y, 0], x)) + [1, 2] + >>> list(iter_index(iter([0, x, x, y, 0]), x)) + [1, 2] + >>> # Test list input. Lists do not support None for the stop argument + >>> list(iter_index(list('AABCADEAF'), 'A')) + [0, 1, 4, 7] >>> list(sieve(30)) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] diff --git a/Doc/library/json.rst b/Doc/library/json.rst index 6c3059381776c9..b337b5f9960e8e 100644 --- a/Doc/library/json.rst +++ b/Doc/library/json.rst @@ -54,12 +54,23 @@ Compact encoding:: Pretty printing:: >>> import json - >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) + >>> print(json.dumps({'6': 7, '4': 5}, sort_keys=True, indent=4)) { "4": 5, "6": 7 } +Specializing JSON object encoding:: + + >>> import json + >>> def custom_json(obj): + ... if isinstance(obj, complex): + ... return {'__complex__': True, 'real': obj.real, 'imag': obj.imag} + ... raise TypeError(f'Cannot serialize object of {type(obj)}') + ... + >>> json.dumps(1 + 2j, default=custom_json) + '{"__complex__": true, "real": 1.0, "imag": 2.0}' + Decoding JSON:: >>> import json diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst index cf3dcb96a4c412..acdeb88a546261 100644 --- a/Doc/library/logging.rst +++ b/Doc/library/logging.rst @@ -907,7 +907,7 @@ you want to use. In the case of {}-formatting, you can specify formatting flags by placing them after the attribute name, separated from it with a colon. For example: a -placeholder of ``{msecs:03d}`` would format a millisecond value of ``4`` as +placeholder of ``{msecs:03.0f}`` would format a millisecond value of ``4`` as ``004``. Refer to the :meth:`str.format` documentation for full details on the options available to you. diff --git a/Doc/library/msvcrt.rst b/Doc/library/msvcrt.rst index 32693e3d007c05..0b059e746c61af 100644 --- a/Doc/library/msvcrt.rst +++ b/Doc/library/msvcrt.rst @@ -10,8 +10,8 @@ -------------- These functions provide access to some useful capabilities on Windows platforms. -Some higher-level modules use these functions to build the Windows -implementations of their services. For example, the :mod:`getpass` module uses +Some higher-level modules use these functions to build the Windows +implementations of their services. For example, the :mod:`getpass` module uses this in the implementation of the :func:`getpass` function. Further documentation on these functions can be found in the Platform API @@ -35,11 +35,11 @@ File Operations .. function:: locking(fd, mode, nbytes) - Lock part of a file based on file descriptor *fd* from the C runtime. Raises - :exc:`OSError` on failure. The locked region of the file extends from the + Lock part of a file based on file descriptor *fd* from the C runtime. Raises + :exc:`OSError` on failure. The locked region of the file extends from the current file position for *nbytes* bytes, and may continue beyond the end of the - file. *mode* must be one of the :const:`!LK_\*` constants listed below. Multiple - regions in a file may be locked at the same time, but may not overlap. Adjacent + file. *mode* must be one of the :const:`!LK_\*` constants listed below. Multiple + regions in a file may be locked at the same time, but may not overlap. Adjacent regions are not merged; they must be unlocked individually. .. audit-event:: msvcrt.locking fd,mode,nbytes msvcrt.locking @@ -49,7 +49,7 @@ File Operations LK_RLCK Locks the specified bytes. If the bytes cannot be locked, the program - immediately tries again after 1 second. If, after 10 attempts, the bytes cannot + immediately tries again after 1 second. If, after 10 attempts, the bytes cannot be locked, :exc:`OSError` is raised. @@ -74,9 +74,9 @@ File Operations .. function:: open_osfhandle(handle, flags) - Create a C runtime file descriptor from the file handle *handle*. The *flags* + Create a C runtime file descriptor from the file handle *handle*. The *flags* parameter should be a bitwise OR of :const:`os.O_APPEND`, :const:`os.O_RDONLY`, - and :const:`os.O_TEXT`. The returned file descriptor may be used as a parameter + and :const:`os.O_TEXT`. The returned file descriptor may be used as a parameter to :func:`os.fdopen` to create a file object. .. audit-event:: msvcrt.open_osfhandle handle,flags msvcrt.open_osfhandle @@ -84,7 +84,7 @@ File Operations .. function:: get_osfhandle(fd) - Return the file handle for the file descriptor *fd*. Raises :exc:`OSError` if + Return the file handle for the file descriptor *fd*. Raises :exc:`OSError` if *fd* is not recognized. .. audit-event:: msvcrt.get_osfhandle fd msvcrt.get_osfhandle @@ -98,13 +98,14 @@ Console I/O .. function:: kbhit() - Return ``True`` if a keypress is waiting to be read. + Returns a nonzero value if a keypress is waiting to be read. Otherwise, + return 0. .. function:: getch() Read a keypress and return the resulting character as a byte string. - Nothing is echoed to the console. This call will block if a keypress + Nothing is echoed to the console. This call will block if a keypress is not already available, but will not wait for :kbd:`Enter` to be pressed. If the pressed key was a special function key, this will return ``'\000'`` or ``'\xe0'``; the next call will return the keycode. @@ -118,7 +119,7 @@ Console I/O .. function:: getche() - Similar to :func:`getch`, but the keypress will be echoed if it represents a + Similar to :func:`getch`, but the keypress will be echoed if it represents a printable character. @@ -157,4 +158,93 @@ Other Functions .. function:: heapmin() Force the :c:func:`malloc` heap to clean itself up and return unused blocks to - the operating system. On failure, this raises :exc:`OSError`. + the operating system. On failure, this raises :exc:`OSError`. + + +.. function:: set_error_mode(mode) + + Changes the location where the C runtime writes an error message for an error + that might end the program. *mode* must be one of the :const:`!OUT_\*` + constants listed below or :const:`REPORT_ERRMODE`. Returns the old setting + or -1 if an error occurs. Only available in + :ref:`debug build of Python `. + + +.. data:: OUT_TO_DEFAULT + + Error sink is determined by the app's type. Only available in + :ref:`debug build of Python `. + + +.. data:: OUT_TO_STDERR + + Error sink is a standard error. Only available in + :ref:`debug build of Python `. + + +.. data:: OUT_TO_MSGBOX + + Error sink is a message box. Only available in + :ref:`debug build of Python `. + + +.. data:: REPORT_ERRMODE + + Report the current error mode value. Only available in + :ref:`debug build of Python `. + + +.. function:: CrtSetReportMode(type, mode) + + Specifies the destination or destinations for a specific report type + generated by :c:func:`!_CrtDbgReport` in the MS VC++ runtime. *type* must be + one of the :const:`!CRT_\*` constants listed below. *mode* must be one of the + :const:`!CRTDBG_\*` constants listed below. Only available in + :ref:`debug build of Python `. + + +.. function:: CrtSetReportFile(type, file) + + After you use :func:`CrtSetReportMode` to specify :const:`CRTDBG_MODE_FILE`, + you can specify the file handle to receive the message text. *type* must be + one of the :const:`!CRT_\*` constants listed below. *file* shuld be the file + handle your want specified. Only available in + :ref:`debug build of Python `. + + +.. data:: CRT_WARN + + Warnings, messages, and information that doesn't need immediate attention. + + +.. data:: CRT_ERROR + + Errors, unrecoverable problems, and issues that require immediate attention. + + +.. data:: CRT_ASSERT + + Assertion failures. + + +.. data:: CRTDBG_MODE_DEBUG + + Writes the message to the debugger's output window. + + +.. data:: CRTDBG_MODE_FILE + + Writes the message to a user-supplied file handle. :func:`CrtSetReportFile` + should be called to define the specific file or stream to use as + the destination. + + +.. data:: CRTDBG_MODE_WNDW + + Creates a message box to display the message along with the ``Abort``, + ``Retry``, and ``Ignore`` buttons. + + +.. data:: CRTDBG_REPORT_MODE + + Returns current *mode* for the specified *type*. diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index 38d24a86072970..2f0f1f800fdc94 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -131,6 +131,12 @@ to start a process. These *start methods* are Code that requires *fork* should explicitly specify that via :func:`get_context` or :func:`set_start_method`. + .. versionchanged:: 3.12 + If Python is able to detect that your process has multiple threads, the + :func:`os.fork` function that this start method calls internally will + raise a :exc:`DeprecationWarning`. Use a different start method. + See the :func:`os.fork` documentation for further explanation. + *forkserver* When the program starts and selects the *forkserver* start method, a server process is spawned. From then on, whenever a new process diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 4f4d8c99023529..4ffd520f9ecd8b 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -88,8 +88,8 @@ startup by the :c:func:`PyConfig_Read` function: see On some systems, conversion using the file system encoding may fail. In this case, Python uses the :ref:`surrogateescape encoding error handler `, which means that undecodable bytes are replaced by a - Unicode character U+DCxx on decoding, and these are again translated to the - original byte on encoding. + Unicode character U+DC\ *xx* on decoding, and these are again + translated to the original byte on encoding. The :term:`file system encoding ` must @@ -1618,25 +1618,6 @@ or `the MSDN `_ on Windo Parameters *out* and *in* was renamed to *out_fd* and *in_fd*. -.. function:: set_blocking(fd, blocking, /) - - Set the blocking mode of the specified file descriptor. Set the - :data:`O_NONBLOCK` flag if blocking is ``False``, clear the flag otherwise. - - See also :func:`get_blocking` and :meth:`socket.socket.setblocking`. - - .. availability:: Unix, Windows. - - The function is limited on Emscripten and WASI, see - :ref:`wasm-availability` for more information. - - On Windows, this function is limited to pipes. - - .. versionadded:: 3.5 - - .. versionchanged:: 3.12 - Added support for pipes on Windows. - .. data:: SF_NODISKIO SF_MNOWAIT SF_SYNC @@ -1658,6 +1639,26 @@ or `the MSDN `_ on Windo .. versionadded:: 3.11 +.. function:: set_blocking(fd, blocking, /) + + Set the blocking mode of the specified file descriptor. Set the + :data:`O_NONBLOCK` flag if blocking is ``False``, clear the flag otherwise. + + See also :func:`get_blocking` and :meth:`socket.socket.setblocking`. + + .. availability:: Unix, Windows. + + The function is limited on Emscripten and WASI, see + :ref:`wasm-availability` for more information. + + On Windows, this function is limited to pipes. + + .. versionadded:: 3.5 + + .. versionchanged:: 3.12 + Added support for pipes on Windows. + + .. function:: splice(src, dst, count, offset_src=None, offset_dst=None) Transfer *count* bytes from file descriptor *src*, starting from offset @@ -4156,15 +4157,38 @@ written in Python, such as a mail server's external command delivery program. .. audit-event:: os.fork "" os.fork + .. warning:: + + If you use TLS sockets in an application calling ``fork()``, see + the warning in the :mod:`ssl` documentation. + .. versionchanged:: 3.8 Calling ``fork()`` in a subinterpreter is no longer supported (:exc:`RuntimeError` is raised). - .. warning:: - - See :mod:`ssl` for applications that use the SSL module with fork(). + .. versionchanged:: 3.12 + If Python is able to detect that your process has multiple + threads, :func:`os.fork` now raises a :exc:`DeprecationWarning`. + + We chose to surface this as a warning, when detectable, to better + inform developers of a design problem that the POSIX platform + specifically notes as not supported. Even in code that + *appears* to work, it has never been safe to mix threading with + :func:`os.fork` on POSIX platforms. The CPython runtime itself has + always made API calls that are not safe for use in the child + process when threads existed in the parent (such as ``malloc`` and + ``free``). + + Users of macOS or users of libc or malloc implementations other + than those typically found in glibc to date are among those + already more likely to experience deadlocks running such code. + + See `this discussion on fork being incompatible with threads + `_ + for technical details of why we're surfacing this longstanding + platform compatibility problem to developers. - .. availability:: Unix, not Emscripten, not WASI. + .. availability:: POSIX, not Emscripten, not WASI. .. function:: forkpty() @@ -4177,6 +4201,11 @@ written in Python, such as a mail server's external command delivery program. .. audit-event:: os.forkpty "" os.forkpty + .. versionchanged:: 3.12 + If Python is able to detect that your process has multiple + threads, this now raises a :exc:`DeprecationWarning`. See the + longer explanation on :func:`os.fork`. + .. versionchanged:: 3.8 Calling ``forkpty()`` in a subinterpreter is no longer supported (:exc:`RuntimeError` is raised). diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst index 3aaac15ee5780c..002eeef4c09b5d 100644 --- a/Doc/library/pdb.rst +++ b/Doc/library/pdb.rst @@ -252,6 +252,10 @@ change a variable or call a function. When an exception occurs in such a statement, the exception name is printed but the debugger's state is not changed. +.. versionchanged:: 3.13 + Expressions/Statements whose prefix is a pdb command are now correctly + identified and executed. + The debugger supports :ref:`aliases `. Aliases can have parameters which allows one a certain level of adaptability to the context under examination. diff --git a/Doc/library/pickletools.rst b/Doc/library/pickletools.rst index 480f4a6d320815..76f5b0cadf975a 100644 --- a/Doc/library/pickletools.rst +++ b/Doc/library/pickletools.rst @@ -17,6 +17,8 @@ are useful for Python core developers who are working on the :mod:`pickle`; ordinary users of the :mod:`pickle` module probably won't find the :mod:`pickletools` module relevant. +.. _pickletools-cli: + Command line usage ------------------ diff --git a/Doc/library/profile.rst b/Doc/library/profile.rst index 723f927135a0f4..69274b0c354a25 100644 --- a/Doc/library/profile.rst +++ b/Doc/library/profile.rst @@ -121,6 +121,8 @@ results to a file by specifying a filename to the :func:`run` function:: The :class:`pstats.Stats` class reads profile results from a file and formats them in various ways. +.. _profile-cli: + The files :mod:`cProfile` and :mod:`profile` can also be invoked as a script to profile another script. For example:: diff --git a/Doc/library/py_compile.rst b/Doc/library/py_compile.rst index 69b93a3bdfcb26..5501db8f87de81 100644 --- a/Doc/library/py_compile.rst +++ b/Doc/library/py_compile.rst @@ -125,6 +125,7 @@ byte-code cache files in the directory containing the source code. This option is useful when the ``.pycs`` are kept up to date by some system external to Python like a build system. +.. _py_compile-cli: Command-Line Interface ---------------------- diff --git a/Doc/library/python.rst b/Doc/library/python.rst index f39613f572884f..610435999d9f48 100644 --- a/Doc/library/python.rst +++ b/Doc/library/python.rst @@ -12,6 +12,7 @@ overview: .. toctree:: sys.rst + sys.monitoring.rst sysconfig.rst builtins.rst __main__.rst diff --git a/Doc/library/re.rst b/Doc/library/re.rst index e506b346ec379d..60696007f4abc8 100644 --- a/Doc/library/re.rst +++ b/Doc/library/re.rst @@ -660,7 +660,7 @@ three digits in length. Unknown escapes consisting of ``'\'`` and an ASCII letter now are errors. .. versionchanged:: 3.8 - The ``'\N{name}'`` escape sequence has been added. As in string literals, + The :samp:`'\\N\\{{name}\\}'` escape sequence has been added. As in string literals, it expands to the named Unicode character (e.g. ``'\N{EM DASH}'``). diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 4f220e8a098979..83957c87990440 100644 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -979,7 +979,7 @@ The :mod:`socket` module also offers various network-related services: .. function:: gethostbyname_ex(hostname) Translate a host name to IPv4 address format, extended interface. Return a - triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the host's + 3-tuple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the host's primary host name, *aliaslist* is a (possibly empty) list of alternative host names for the same address, and *ipaddrlist* is a list of IPv4 addresses for the same interface on the same host (often but not @@ -1007,7 +1007,7 @@ The :mod:`socket` module also offers various network-related services: .. function:: gethostbyaddr(ip_address) - Return a triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the + Return a 3-tuple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the primary host name responding to the given *ip_address*, *aliaslist* is a (possibly empty) list of alternative host names for the same address, and *ipaddrlist* is a list of IPv4/v6 addresses for the same interface on the same diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 5d6bc829d68878..92cf3de2a7b4cf 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -43,8 +43,10 @@ This module provides a class, :class:`ssl.SSLSocket`, which is derived from the :class:`socket.socket` type, and provides a socket-like wrapper that also encrypts and decrypts the data going over the socket with SSL. It supports additional methods such as :meth:`getpeercert`, which retrieves the -certificate of the other side of the connection, and :meth:`cipher`, which -retrieves the cipher being used for the secure connection. +certificate of the other side of the connection, :meth:`cipher`, which +retrieves the cipher being used for the secure connection or +:meth:`get_verified_chain`, :meth:`get_unverified_chain` which retrieves +certificate chain. For more sophisticated applications, the :class:`ssl.SSLContext` class helps manage settings and certificates, which can then be inherited @@ -1210,6 +1212,22 @@ SSL sockets also have the following additional methods and attributes: .. versionchanged:: 3.9 IPv6 address strings no longer have a trailing new line. +.. method:: SSLSocket.get_verified_chain() + + Returns verified certificate chain provided by the other + end of the SSL channel as a list of DER-encoded bytes. + If certificate verification was disabled method acts the same as + :meth:`~SSLSocket.get_unverified_chain`. + + .. versionadded:: 3.13 + +.. method:: SSLSocket.get_unverified_chain() + + Returns raw certificate chain provided by the other + end of the SSL channel as a list of DER-encoded bytes. + + .. versionadded:: 3.13 + .. method:: SSLSocket.cipher() Returns a three-value tuple containing the name of the cipher being used, the @@ -1656,8 +1674,9 @@ to speed up repeated connections from the same clients. Due to the early negotiation phase of the TLS connection, only limited methods and attributes are usable like :meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`. - The :meth:`SSLSocket.getpeercert`, - :meth:`SSLSocket.cipher` and :meth:`SSLSocket.compression` methods require that + The :meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.get_verified_chain`, + :meth:`SSLSocket.get_unverified_chain` :meth:`SSLSocket.cipher` + and :meth:`SSLSocket.compression` methods require that the TLS connection has progressed beyond the TLS Client Hello and therefore will not return meaningful values nor can they be called safely. @@ -2414,6 +2433,8 @@ provided. - :meth:`~SSLSocket.read` - :meth:`~SSLSocket.write` - :meth:`~SSLSocket.getpeercert` + - :meth:`~SSLSocket.get_verified_chain` + - :meth:`~SSLSocket.get_unverified_chain` - :meth:`~SSLSocket.selected_alpn_protocol` - :meth:`~SSLSocket.selected_npn_protocol` - :meth:`~SSLSocket.cipher` diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index 6c07ee585480e9..a351559a84f1ce 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -282,7 +282,7 @@ the operations, see :ref:`operator-summary`): +---------------------+---------------------------------+---------+--------------------+ | ``x / y`` | quotient of *x* and *y* | | | +---------------------+---------------------------------+---------+--------------------+ -| ``x // y`` | floored quotient of *x* and | \(1) | | +| ``x // y`` | floored quotient of *x* and | \(1)\(2)| | | | *y* | | | +---------------------+---------------------------------+---------+--------------------+ | ``x % y`` | remainder of ``x / y`` | \(2) | | @@ -319,8 +319,10 @@ the operations, see :ref:`operator-summary`): Notes: (1) - Also referred to as integer division. The resultant value is a whole - integer, though the result's type is not necessarily int. The result is + Also referred to as integer division. For operands of type :class:`int`, + the result has type :class:`int`. For operands of type :class:`float`, + the result has type :class:`float`. In general, the result is a whole + integer, though the result's type is not necessarily :class:`int`. The result is always rounded towards minus infinity: ``1//2`` is ``0``, ``(-1)//2`` is ``-1``, ``1//(-2)`` is ``-1``, and ``(-1)//(-2)`` is ``0``. @@ -1639,7 +1641,7 @@ expression support in the :mod:`re` module). The casefolding algorithm is `described in section 3.13 'Default Case Folding' of the Unicode Standard - `__. + `__. .. versionadded:: 3.3 @@ -1803,7 +1805,7 @@ expression support in the :mod:`re` module). property being one of "Lm", "Lt", "Lu", "Ll", or "Lo". Note that this is different from the `Alphabetic property defined in the section 4.10 'Letters, Alphabetic, and Ideographic' of the Unicode Standard - `_. + `_. .. method:: str.isascii() @@ -1939,7 +1941,7 @@ expression support in the :mod:`re` module). The lowercasing algorithm used is `described in section 3.13 'Default Case Folding' of the Unicode Standard - `__. + `__. .. method:: str.lstrip([chars]) @@ -2288,7 +2290,7 @@ expression support in the :mod:`re` module). The uppercasing algorithm used is `described in section 3.13 'Default Case Folding' of the Unicode Standard - `__. + `__. .. method:: str.zfill(width) diff --git a/Doc/library/superseded.rst b/Doc/library/superseded.rst index bd17039bc6f6b6..17bfa66f043302 100644 --- a/Doc/library/superseded.rst +++ b/Doc/library/superseded.rst @@ -4,10 +4,12 @@ Superseded Modules ****************** -The modules described in this chapter are deprecated and only kept for +The modules described in this chapter are deprecated or :term:`soft deprecated` and only kept for backwards compatibility. They have been superseded by other modules. .. toctree:: + :maxdepth: 1 + getopt.rst optparse.rst diff --git a/Doc/library/sys.monitoring.rst b/Doc/library/sys.monitoring.rst new file mode 100644 index 00000000000000..7b02b95fd766a7 --- /dev/null +++ b/Doc/library/sys.monitoring.rst @@ -0,0 +1,300 @@ +:mod:`sys.monitoring` --- Execution event monitoring +==================================================== + +.. module:: sys.monitoring + :synopsis: Access and control event monitoring + +----------------- + +.. note:: + + ``sys.monitoring`` is a namespace within the ``sys`` module, + not an independent module, so there is no need to + ``import sys.monitoring``, simply ``import sys`` and then use + ``sys.monitoring``. + + +This namespace provides access to the functions and constants necessary to +activate and control event monitoring. + +As programs execute, events occur that might be of interest to tools that +monitor execution. The :mod:`!sys.monitoring` namespace provides means to +receive callbacks when events of interest occur. + +The monitoring API consists of three components: + +* Tool identifiers +* Events +* Callbacks + +Tool identifiers +---------------- + +A tool identifier is an integer and associated name. +Tool identifiers are used to discourage tools from interfering with each +other and to allow multiple tools to operate at the same time. +Currently tools are completely independent and cannot be used to +monitor each other. This restriction may be lifted in the future. + +Before registering or activating events, a tool should choose an identifier. +Identifiers are integers in the range 0 to 5. + +Registering and using tools +''''''''''''''''''''''''''' + +.. function:: use_tool_id(id: int, name: str) -> None + + Must be called before ``id`` can be used. + ``id`` must be in the range 0 to 5 inclusive. + Raises a ``ValueError`` if ``id`` is in use. + +.. function:: free_tool_id(id: int) -> None + + Should be called once a tool no longer requires ``id``. + +.. function:: get_tool(id: int) -> str | None + + Returns the name of the tool if ``id`` is in use, + otherwise it returns ``None``. + ``id`` must be in the range 0 to 5 inclusive. + +All IDs are treated the same by the VM with regard to events, but the +following IDs are pre-defined to make co-operation of tools easier:: + + sys.monitoring.DEBUGGER_ID = 0 + sys.monitoring.COVERAGE_ID = 1 + sys.monitoring.PROFILER_ID = 2 + sys.monitoring.OPTIMIZER_ID = 5 + +There is no obligation to set an ID, nor is there anything preventing a tool +from using an ID even it is already in use. +However, tools are encouraged to use a unique ID and respect other tools. + +Events +------ + +The following events are supported: + +BRANCH + A conditional branch is taken (or not). +CALL + A call in Python code (event occurs before the call). +C_RAISE + Exception raised from any callable, except Python functions (event occurs after the exit). +C_RETURN + Return from any callable, except Python functions (event occurs after the return). +EXCEPTION_HANDLED + An exception is handled. +INSTRUCTION + A VM instruction is about to be executed. +JUMP + An unconditional jump in the control flow graph is made. +LINE + An instruction is about to be executed that has a different line number from the preceding instruction. +PY_RESUME + Resumption of a Python function (for generator and coroutine functions), except for throw() calls. +PY_RETURN + Return from a Python function (occurs immediately before the return, the callee's frame will be on the stack). +PY_START + Start of a Python function (occurs immediately after the call, the callee's frame will be on the stack) +PY_THROW + A Python function is resumed by a throw() call. +PY_UNWIND + Exit from a Python function during exception unwinding. +PY_YIELD + Yield from a Python function (occurs immediately before the yield, the callee's frame will be on the stack). +RAISE + An exception is raised, except those that cause a ``STOP_ITERATION`` event. +RERAISE + An exception is re-raised, for example at the end of a ``finally`` block. +STOP_ITERATION + An artificial ``StopIteration`` is raised; see `the STOP_ITERATION event`_. + +More events may be added in the future. + +These events are attributes of the :mod:`!sys.monitoring.events` namespace. +Each event is represented as a power-of-2 integer constant. +To define a set of events, simply bitwise or the individual events together. +For example, to specify both ``PY_RETURN`` and ``PY_START`` events, use the +expression ``PY_RETURN | PY_START``. + +Events are divided into three groups: + +Local events +'''''''''''' + +Local events are associated with normal execution of the program and happen +at clearly defined locations. All local events can be disabled. +The local events are: + +* PY_START +* PY_RESUME +* PY_RETURN +* PY_YIELD +* CALL +* LINE +* INSTRUCTION +* JUMP +* BRANCH +* STOP_ITERATION + +Ancillary events +'''''''''''''''' + +Ancillary events can be monitored like other events, but are controlled +by another event: + +* C_RAISE +* C_RETURN + +The ``C_RETURN`` and ``C_RAISE`` events are are controlled by the ``CALL`` +event. ``C_RETURN`` and ``C_RAISE`` events will only be seen if the +corresponding ``CALL`` event is being monitored. + +Other events +'''''''''''' + +Other events are not necessarily tied to a specific location in the +program and cannot be individually disabled. + +The other events that can be monitored are: + +* PY_THROW +* PY_UNWIND +* RAISE +* EXCEPTION_HANDLED + + +The STOP_ITERATION event +'''''''''''''''''''''''' + +:pep:`PEP 380 <380#use-of-stopiteration-to-return-values>` +specifies that a ``StopIteration`` exception is raised when returning a value +from a generator or coroutine. However, this is a very inefficient way to +return a value, so some Python implementations, notably CPython 3.12+, do not +raise an exception unless it would be visible to other code. + +To allow tools to monitor for real exceptions without slowing down generators +and coroutines, the ``STOP_ITERATION`` event is provided. +``STOP_ITERATION`` can be locally disabled, unlike ``RAISE``. + + +Turning events on and off +------------------------- + +In order to monitor an event, it must be turned on and a callback registered. +Events can be turned on or off by setting the events either globally or +for a particular code object. + + +Setting events globally +''''''''''''''''''''''' + +Events can be controlled globally by modifying the set of events being monitored. + +.. function:: get_events(tool_id: int) -> int + + Returns the ``int`` representing all the active events. + +.. function:: set_events(tool_id: int, event_set: int) + + Activates all events which are set in ``event_set``. + Raises a ``ValueError`` if ``tool_id`` is not in use. + +No events are active by default. + +Per code object events +'''''''''''''''''''''' + +Events can also be controlled on a per code object basis. + +.. function:: get_local_events(tool_id: int, code: CodeType) -> int + + Returns all the local events for ``code`` + +.. function:: set_local_events(tool_id: int, code: CodeType, event_set: int) + + Activates all the local events for ``code`` which are set in ``event_set``. + Raises a ``ValueError`` if ``tool_id`` is not in use. + +Local events add to global events, but do not mask them. +In other words, all global events will trigger for a code object, +regardless of the local events. + + +Disabling events +'''''''''''''''' + +Local events can be disabled for a specific code location by returning +``sys.monitoring.DISABLE`` from a callback function. This does not change +which events are set, or any other code locations for the same event. + +Disabling events for specific locations is very important for high +performance monitoring. For example, a program can be run under a +debugger with no overhead if the debugger disables all monitoring +except for a few breakpoints. + + +Registering callback functions +------------------------------ + +To register a callable for events call + +.. function:: register_callback(tool_id: int, event: int, func: Callable | None) -> Callable | None + + Registers the callable ``func`` for the ``event`` with the given ``tool_id`` + + If another callback was registered for the given ``tool_id`` and ``event``, + it is unregistered and returned. + Otherwise ``register_callback`` returns ``None``. + + +Functions can be unregistered by calling +``sys.monitoring.register_callback(tool_id, event, None)``. + +Callback functions can be registered and unregistered at any time. + +Registering or unregistering a callback function will generate a ``sys.audit`` event. + + +Callback function arguments +''''''''''''''''''''''''''' + +When an active event occurs, the registered callback function is called. +Different events will provide the callback function with different arguments, as follows: + +* ``PY_START`` and ``PY_RESUME``:: + + func(code: CodeType, instruction_offset: int) -> DISABLE | Any + +* ``PY_RETURN`` and ``PY_YIELD``: + + ``func(code: CodeType, instruction_offset: int, retval: object) -> DISABLE | Any`` + +* ``CALL``, ``C_RAISE`` and ``C_RETURN``: + + ``func(code: CodeType, instruction_offset: int, callable: object, arg0: object | MISSING) -> DISABLE | Any`` + + If there are no arguments, ``arg0`` is set to ``MISSING``. + +* ``RAISE``, ``RERAISE``, ``EXCEPTION_HANDLED``, ``PY_UNWIND``, ``PY_THROW`` and ``STOP_ITERATION``: + + ``func(code: CodeType, instruction_offset: int, exception: BaseException) -> DISABLE | Any`` + +* ``LINE``: + + ``func(code: CodeType, line_number: int) -> DISABLE | Any`` + +* ``BRANCH`` and ``JUMP``: + + ``func(code: CodeType, instruction_offset: int, destination_offset: int) -> DISABLE | Any`` + + Note that the ``destination_offset`` is where the code will next execute. + For an untaken branch this will be the offset of the instruction following + the branch. + +* ``INSTRUCTION``: + + ``func(code: CodeType, instruction_offset: int) -> DISABLE | Any`` + + diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index e99ab90bd18e4d..ef818a7da016de 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -378,7 +378,7 @@ always available. This function prints out a given traceback and exception to ``sys.stderr``. - When an exception is raised and uncaught, the interpreter calls + When an exception other than :exc:`SystemExit` is raised and uncaught, the interpreter calls ``sys.excepthook`` with three arguments, the exception class, exception instance, and a traceback object. In an interactive session this happens just before control is returned to the prompt; in a Python program this happens just @@ -753,7 +753,7 @@ always available. Return the current value of the flags that are used for :c:func:`dlopen` calls. Symbolic names for the flag values can be - found in the :mod:`os` module (``RTLD_xxx`` constants, e.g. + found in the :mod:`os` module (:samp:`RTLD_{xxx}` constants, e.g. :const:`os.RTLD_LAZY`). .. availability:: Unix. @@ -1441,7 +1441,7 @@ always available. lazy resolving of symbols when importing a module, if called as ``sys.setdlopenflags(0)``. To share symbols across extension modules, call as ``sys.setdlopenflags(os.RTLD_GLOBAL)``. Symbolic names for the flag values - can be found in the :mod:`os` module (``RTLD_xxx`` constants, e.g. + can be found in the :mod:`os` module (:samp:`RTLD_{xxx}` constants, e.g. :const:`os.RTLD_LAZY`). .. availability:: Unix. @@ -1953,6 +1953,13 @@ always available. .. availability:: Windows. +.. data:: monitoring + :noindex: + + Namespace containing functions and constants for register callbacks + and controlling monitoring events. + See :mod:`sys.monitoring` for details. + .. data:: _xoptions A dictionary of the various implementation-specific flags passed through diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst index 26344ea4e7e2ab..c625c1e1d72954 100644 --- a/Doc/library/sysconfig.rst +++ b/Doc/library/sysconfig.rst @@ -278,6 +278,7 @@ Other functions Return the path of :file:`Makefile`. +.. _sysconfig-cli: Using :mod:`sysconfig` as a script ---------------------------------- diff --git a/Doc/library/traceback.rst b/Doc/library/traceback.rst index 3eb77fc3df5709..67ee73d4b2e1e5 100644 --- a/Doc/library/traceback.rst +++ b/Doc/library/traceback.rst @@ -139,11 +139,11 @@ The module defines the following functions: Format the exception part of a traceback using an exception value such as given by ``sys.last_value``. The return value is a list of strings, each - ending in a newline. Normally, the list contains a single string; however, - for :exc:`SyntaxError` exceptions, it contains several lines that (when - printed) display detailed information about where the syntax error occurred. - The message indicating which exception occurred is the always last string in - the list. + ending in a newline. The list contains the exception's message, which is + normally a single string; however, for :exc:`SyntaxError` exceptions, it + contains several lines that (when printed) display detailed information + about where the syntax error occurred. Following the message, the list + contains the exception's :attr:`notes `. Since Python 3.10, instead of passing *value*, an exception object can be passed as the first argument. If *value* is provided, the first @@ -153,6 +153,9 @@ The module defines the following functions: The *etype* parameter has been renamed to *exc* and is now positional-only. + .. versionchanged:: 3.11 + The returned list now includes any notes attached to the exception. + .. function:: format_exception(exc, /[, value, tb], limit=None, chain=True) @@ -235,6 +238,12 @@ capture data for later printing in a lightweight fashion. group's exceptions array. The formatted output is truncated when either limit is exceeded. + .. versionchanged:: 3.10 + Added the *compact* parameter. + + .. versionchanged:: 3.11 + Added the *max_group_width* and *max_group_depth* parameters. + .. attribute:: __cause__ A :class:`TracebackException` of the original ``__cause__``. @@ -330,35 +339,28 @@ capture data for later printing in a lightweight fashion. some containing internal newlines. :func:`~traceback.print_exception` is a wrapper around this method which just prints the lines to a file. - The message indicating which exception occurred is always the last - string in the output. - .. method:: format_exception_only(*, show_group=False) Format the exception part of the traceback. The return value is a generator of strings, each ending in a newline. - When *show_group* is ``False``, the generator normally emits a single - string; however, for :exc:`SyntaxError` exceptions, it emits several - lines that (when printed) display detailed information about where - the syntax error occurred. The message indicating which exception - occurred is always the last string in the output. + When *show_group* is ``False``, the generator emits the exception's + message followed by its notes (if it has any). The exception message + is normally a single string; however, for :exc:`SyntaxError` exceptions, + it consists of several lines that (when printed) display detailed + information about where the syntax error occurred. When *show_group* is ``True``, and the exception is an instance of :exc:`BaseExceptionGroup`, the nested exceptions are included as well, recursively, with indentation relative to their nesting depth. + .. versionchanged:: 3.11 + The exception's notes are now included in the output. + .. versionchanged:: 3.13 Added the *show_group* parameter. - .. versionchanged:: 3.10 - Added the *compact* parameter. - - .. versionchanged:: 3.11 - Added the *max_group_width* and *max_group_depth* parameters. - - :class:`StackSummary` Objects ----------------------------- diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst index 4c84ae6a820f02..88b1f09eb3c8b7 100644 --- a/Doc/library/turtle.rst +++ b/Doc/library/turtle.rst @@ -2315,7 +2315,7 @@ Public classes .. class:: RawTurtle(canvas) RawPen(canvas) - :param canvas: a :class:`tkinter.Canvas`, a :class:`ScrolledCanvas` or a + :param canvas: a :class:`!tkinter.Canvas`, a :class:`ScrolledCanvas` or a :class:`TurtleScreen` Create a turtle. The turtle has all methods described above as "methods of @@ -2330,7 +2330,7 @@ Public classes .. class:: TurtleScreen(cv) - :param cv: a :class:`tkinter.Canvas` + :param cv: a :class:`!tkinter.Canvas` Provides screen oriented methods like :func:`bgcolor` etc. that are described above. @@ -2414,7 +2414,7 @@ instance if one is not already present. ``Turtle`` is a subclass of :class:`RawTurtle`, which *doesn't* automatically create a drawing surface - a *canvas* will need to be provided or created for -it. The *canvas* can be a :class:`tkinter.Canvas`, :class:`ScrolledCanvas` +it. The *canvas* can be a :class:`!tkinter.Canvas`, :class:`ScrolledCanvas` or :class:`TurtleScreen`. @@ -2422,7 +2422,7 @@ or :class:`TurtleScreen`. turtle. :class:`Screen` is a subclass of ``TurtleScreen``, and includes :ref:`some additional methods ` for managing its appearance (including size and title) and behaviour. ``TurtleScreen``'s -constructor needs a :class:`tkinter.Canvas` or a +constructor needs a :class:`!tkinter.Canvas` or a :class:`ScrolledCanvas` as an argument. The functional interface for turtle graphics uses the various methods of diff --git a/Doc/library/types.rst b/Doc/library/types.rst index 8cbe17df16f107..875916be1049a3 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -200,6 +200,8 @@ Standard names are defined for the following types: Return a copy of the code object with new values for the specified fields. + Code objects are also supported by generic function :func:`copy.replace`. + .. versionadded:: 3.8 .. data:: CellType @@ -502,6 +504,8 @@ Additional Utility Classes and Functions However, for a structured record type use :func:`~collections.namedtuple` instead. + :class:`!SimpleNamespace` objects are supported by :func:`copy.replace`. + .. versionadded:: 3.3 .. versionchanged:: 3.9 diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 18e15f304f9f80..e63b839931822c 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -1301,7 +1301,7 @@ These can be used as types in annotations. They all support subscription using completely disables typechecking for a function or class. The responsibility of how to interpret the metadata - lies with the the tool or library encountering an + lies with the tool or library encountering an ``Annotated`` annotation. A tool or library encountering an ``Annotated`` type can scan through the metadata elements to determine if they are of interest (e.g., using :func:`isinstance`). diff --git a/Doc/library/unicodedata.rst b/Doc/library/unicodedata.rst index 3a094f9c64d4a0..7db47d48022a0e 100644 --- a/Doc/library/unicodedata.rst +++ b/Doc/library/unicodedata.rst @@ -17,8 +17,8 @@ This module provides access to the Unicode Character Database (UCD) which defines character properties for all Unicode characters. The data contained in -this database is compiled from the `UCD version 15.0.0 -`_. +this database is compiled from the `UCD version 15.1.0 +`_. The module uses the same names and symbols as defined by Unicode Standard Annex #44, `"Unicode Character Database" @@ -175,6 +175,6 @@ Examples: .. rubric:: Footnotes -.. [#] https://www.unicode.org/Public/15.0.0/ucd/NameAliases.txt +.. [#] https://www.unicode.org/Public/15.1.0/ucd/NameAliases.txt -.. [#] https://www.unicode.org/Public/15.0.0/ucd/NamedSequences.txt +.. [#] https://www.unicode.org/Public/15.1.0/ucd/NamedSequences.txt diff --git a/Doc/library/unittest.mock-examples.rst b/Doc/library/unittest.mock-examples.rst index 744fc9de63cd16..f2bdde80bdbd64 100644 --- a/Doc/library/unittest.mock-examples.rst +++ b/Doc/library/unittest.mock-examples.rst @@ -339,7 +339,7 @@ instantiate the class in those tests. >>> mock.old_method() Traceback (most recent call last): ... - AttributeError: object has no attribute 'old_method' + AttributeError: Mock object has no attribute 'old_method'. Did you mean: 'class_method'? Using a specification also enables a smarter matching of calls made to the mock, regardless of whether some parameters were passed as positional or @@ -360,6 +360,30 @@ of arbitrary attributes as well as the getting of them then you can use *spec_set* instead of *spec*. +Using side_effect to return per file content +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:func:`mock_open` is used to patch :func:`open` method. :attr:`~Mock.side_effect` +can be used to return a new Mock object per call. This can be used to return different +contents per file stored in a dictionary:: + + DEFAULT = "default" + data_dict = {"file1": "data1", + "file2": "data2"} + + def open_side_effect(name): + return mock_open(read_data=data_dict.get(name, DEFAULT))() + + with patch("builtins.open", side_effect=open_side_effect): + with open("file1") as file1: + assert file1.read() == "data1" + + with open("file2") as file2: + assert file2.read() == "data2" + + with open("file3") as file2: + assert file2.read() == "default" + Patch Decorators ---------------- @@ -774,7 +798,8 @@ If your mock is only being called once you can use the >>> mock.foo_bar.assert_called_once_with('baz', spam='eggs') Traceback (most recent call last): ... - AssertionError: Expected to be called once. Called 2 times. + AssertionError: Expected 'foo_bar' to be called once. Called 2 times. + Calls: [call('baz', spam='eggs'), call()]. Both ``assert_called_with`` and ``assert_called_once_with`` make assertions about the *most recent* call. If your mock is going to be called several times, and @@ -903,8 +928,9 @@ Here's an example implementation: >>> c.assert_called_with(arg) Traceback (most recent call last): ... - AssertionError: Expected call: mock({1}) - Actual call: mock(set()) + AssertionError: expected call not found. + Expected: mock({1}) + Actual: mock(set()) >>> c.foo @@ -1268,8 +1294,9 @@ sufficient: >>> mock.assert_called_with(Foo(1, 2)) Traceback (most recent call last): ... - AssertionError: Expected: call(<__main__.Foo object at 0x...>) - Actual call: call(<__main__.Foo object at 0x...>) + AssertionError: expected call not found. + Expected: mock(<__main__.Foo object at 0x...>) + Actual: mock(<__main__.Foo object at 0x...>) A comparison function for our ``Foo`` class might look something like this: diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst index 836fd42ab71c81..49f7d453ee1c3a 100644 --- a/Doc/library/unittest.mock.rst +++ b/Doc/library/unittest.mock.rst @@ -189,7 +189,7 @@ code if they are used incorrectly: >>> mock_function('wrong arguments') Traceback (most recent call last): ... - TypeError: () takes exactly 3 arguments (1 given) + TypeError: missing a required argument: 'b' :func:`create_autospec` can also be used on classes, where it copies the signature of the ``__init__`` method, and on callable objects where it copies the signature of @@ -315,6 +315,7 @@ the *new_callable* argument to :func:`patch`. Traceback (most recent call last): ... AssertionError: Expected 'method' to have been called once. Called 2 times. + Calls: [call(), call()]. .. versionadded:: 3.6 @@ -342,7 +343,7 @@ the *new_callable* argument to :func:`patch`. Traceback (most recent call last): ... AssertionError: Expected 'mock' to be called once. Called 2 times. - + Calls: [call('foo', bar='baz'), call('other', bar='values')]. .. method:: assert_any_call(*args, **kwargs) @@ -392,6 +393,7 @@ the *new_callable* argument to :func:`patch`. Traceback (most recent call last): ... AssertionError: Expected 'hello' to not have been called. Called 1 times. + Calls: [call()]. .. versionadded:: 3.5 @@ -954,7 +956,7 @@ object:: >>> asyncio.run(main()) >>> mock.assert_awaited_once() >>> asyncio.run(main()) - >>> mock.method.assert_awaited_once() + >>> mock.assert_awaited_once() Traceback (most recent call last): ... AssertionError: Expected mock to have been awaited once. Awaited 2 times. @@ -972,7 +974,7 @@ object:: >>> mock.assert_awaited_with('other') Traceback (most recent call last): ... - AssertionError: expected call not found. + AssertionError: expected await not found. Expected: mock('other') Actual: mock('foo', bar='bar') @@ -1128,7 +1130,7 @@ object:: .. method:: wait_until_any_call_with(*args, **kwargs) - Waits until the the mock is called with the specified arguments. + Waits until the mock is called with the specified arguments. If a timeout was passed at the creation of the mock the function raises an :exc:`AssertionError` if the call is not performed in time. diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index e1aa4ebb0964dd..53e5f0395715d7 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -598,7 +598,7 @@ task isn't already covered by the URL parsing functions above. .. function:: quote(string, safe='/', encoding=None, errors=None) - Replace special characters in *string* using the ``%xx`` escape. Letters, + Replace special characters in *string* using the :samp:`%{xx}` escape. Letters, digits, and the characters ``'_.-~'`` are never quoted. By default, this function is intended for quoting the path section of a URL. The optional *safe* parameter specifies additional ASCII characters that should not be @@ -645,7 +645,7 @@ task isn't already covered by the URL parsing functions above. .. function:: unquote(string, encoding='utf-8', errors='replace') - Replace ``%xx`` escapes with their single-character equivalent. + Replace :samp:`%{xx}` escapes with their single-character equivalent. The optional *encoding* and *errors* parameters specify how to decode percent-encoded sequences into Unicode characters, as accepted by the :meth:`bytes.decode` method. @@ -676,7 +676,7 @@ task isn't already covered by the URL parsing functions above. .. function:: unquote_to_bytes(string) - Replace ``%xx`` escapes with their single-octet equivalent, and return a + Replace :samp:`%{xx}` escapes with their single-octet equivalent, and return a :class:`bytes` object. *string* may be either a :class:`str` or a :class:`bytes` object. diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst index 2482441d649790..da8942c554dea1 100644 --- a/Doc/library/venv.rst +++ b/Doc/library/venv.rst @@ -30,6 +30,25 @@ When used from within a virtual environment, common installation tools such as `pip`_ will install Python packages into a virtual environment without needing to be told to do so explicitly. +A virtual environment is (amongst other things): + +* Used to contain a specific Python interpreter and software libraries and + binaries which are needed to support a project (library or application). These + are by default isolated from software in other virtual environments and Python + interpreters and libraries installed in the operating system. + +* Contained in a directory, conventionally either named ``venv`` or ``.venv`` in + the project directory, or under a container directory for lots of virtual + environments, such as ``~/.virtualenvs``. + +* Not checked into source control systems such as Git. + +* Considered as disposable -- it should be simple to delete and recreate it from + scratch. You don't place any project code in the environment + +* Not considered as movable or copyable -- you just recreate the same + environment in the target location. + See :pep:`405` for more background on Python virtual environments. .. seealso:: @@ -143,7 +162,8 @@ creation according to their needs, the :class:`EnvBuilder` class. .. class:: EnvBuilder(system_site_packages=False, clear=False, \ symlinks=False, upgrade=False, with_pip=False, \ - prompt=None, upgrade_deps=False) + prompt=None, upgrade_deps=False, \ + *, scm_ignore_files=frozenset()) The :class:`EnvBuilder` class accepts the following keyword arguments on instantiation: @@ -172,6 +192,12 @@ creation according to their needs, the :class:`EnvBuilder` class. * ``upgrade_deps`` -- Update the base venv modules to the latest on PyPI + * ``scm_ignore_files`` -- Create ignore files based for the specified source + control managers (SCM) in the iterable. Support is defined by having a + method named ``create_{scm}_ignore_file``. The only value supported by + default is ``"git"`` via :meth:`create_git_ignore_file`. + + .. versionchanged:: 3.4 Added the ``with_pip`` parameter @@ -181,6 +207,9 @@ creation according to their needs, the :class:`EnvBuilder` class. .. versionadded:: 3.9 Added the ``upgrade_deps`` parameter + .. versionadded:: 3.13 + Added the ``scm_ignore_files`` parameter + Creators of third-party virtual environment tools will be free to use the provided :class:`EnvBuilder` class as a base class. @@ -339,11 +368,18 @@ creation according to their needs, the :class:`EnvBuilder` class. The directories are allowed to exist (for when an existing environment is being upgraded). + .. method:: create_git_ignore_file(context) + + Creates a ``.gitignore`` file within the virtual environment that causes + the entire directory to be ignored by the ``git`` source control manager. + + .. versionadded:: 3.13 + There is also a module-level convenience function: .. function:: create(env_dir, system_site_packages=False, clear=False, \ symlinks=False, with_pip=False, prompt=None, \ - upgrade_deps=False) + upgrade_deps=False, *, scm_ignore_files=frozenset()) Create an :class:`EnvBuilder` with the given keyword arguments, and call its :meth:`~EnvBuilder.create` method with the *env_dir* argument. @@ -359,6 +395,9 @@ There is also a module-level convenience function: .. versionchanged:: 3.9 Added the ``upgrade_deps`` parameter + .. versionchanged:: 3.13 + Added the ``scm_ignore_files`` parameter + An example of extending ``EnvBuilder`` -------------------------------------- diff --git a/Doc/library/xml.etree.elementtree.rst b/Doc/library/xml.etree.elementtree.rst index f9290f528e5555..54c93008503c02 100644 --- a/Doc/library/xml.etree.elementtree.rst +++ b/Doc/library/xml.etree.elementtree.rst @@ -17,7 +17,7 @@ for parsing and creating XML data. This module will use a fast implementation whenever available. .. deprecated:: 3.3 - The :mod:`xml.etree.cElementTree` module is deprecated. + The :mod:`!xml.etree.cElementTree` module is deprecated. .. warning:: @@ -825,6 +825,8 @@ Reference Functions ^^^^^^^^^ +.. module:: xml.etree.ElementInclude + .. function:: xml.etree.ElementInclude.default_loader( href, parse, encoding=None) :module: @@ -862,6 +864,9 @@ Functions Element Objects ^^^^^^^^^^^^^^^ +.. module:: xml.etree.ElementTree + :noindex: + .. class:: Element(tag, attrib={}, **extra) Element class. This class defines the Element interface, and provides a diff --git a/Doc/library/zipapp.rst b/Doc/library/zipapp.rst index 8cee85b32d2a83..7c01fc102fca07 100644 --- a/Doc/library/zipapp.rst +++ b/Doc/library/zipapp.rst @@ -281,12 +281,7 @@ The steps to create a standalone archive are as follows: file - if not, you can just list the dependencies manually on the pip command line). -3. Optionally, delete the ``.dist-info`` directories created by pip in the - ``myapp`` directory. These hold metadata for pip to manage the packages, and - as you won't be making any further use of pip they aren't required - - although it won't do any harm if you leave them. - -4. Package the application using: +3. Package the application using: .. code-block:: shell-session diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst index 83cd4402a36cf6..9fd80b1cb7f84c 100644 --- a/Doc/reference/lexical_analysis.rst +++ b/Doc/reference/lexical_analysis.rst @@ -315,7 +315,7 @@ The Unicode category codes mentioned above stand for: * *Nd* - decimal numbers * *Pc* - connector punctuations * *Other_ID_Start* - explicit list of characters in `PropList.txt - `_ to support backwards + `_ to support backwards compatibility * *Other_ID_Continue* - likewise @@ -323,8 +323,8 @@ All identifiers are converted into the normal form NFKC while parsing; compariso of identifiers is based on NFKC. A non-normative HTML file listing all valid identifier characters for Unicode -15.0.0 can be found at -https://www.unicode.org/Public/15.0.0/ucd/DerivedCoreProperties.txt +15.1.0 can be found at +https://www.unicode.org/Public/15.1.0/ucd/DerivedCoreProperties.txt .. _keywords: @@ -557,51 +557,51 @@ Unless an ``'r'`` or ``'R'`` prefix is present, escape sequences in string and bytes literals are interpreted according to rules similar to those used by Standard C. The recognized escape sequences are: -+-----------------+---------------------------------+-------+ -| Escape Sequence | Meaning | Notes | -+=================+=================================+=======+ -| ``\``\ | Backslash and newline ignored | \(1) | -+-----------------+---------------------------------+-------+ -| ``\\`` | Backslash (``\``) | | -+-----------------+---------------------------------+-------+ -| ``\'`` | Single quote (``'``) | | -+-----------------+---------------------------------+-------+ -| ``\"`` | Double quote (``"``) | | -+-----------------+---------------------------------+-------+ -| ``\a`` | ASCII Bell (BEL) | | -+-----------------+---------------------------------+-------+ -| ``\b`` | ASCII Backspace (BS) | | -+-----------------+---------------------------------+-------+ -| ``\f`` | ASCII Formfeed (FF) | | -+-----------------+---------------------------------+-------+ -| ``\n`` | ASCII Linefeed (LF) | | -+-----------------+---------------------------------+-------+ -| ``\r`` | ASCII Carriage Return (CR) | | -+-----------------+---------------------------------+-------+ -| ``\t`` | ASCII Horizontal Tab (TAB) | | -+-----------------+---------------------------------+-------+ -| ``\v`` | ASCII Vertical Tab (VT) | | -+-----------------+---------------------------------+-------+ -| ``\ooo`` | Character with octal value | (2,4) | -| | *ooo* | | -+-----------------+---------------------------------+-------+ -| ``\xhh`` | Character with hex value *hh* | (3,4) | -+-----------------+---------------------------------+-------+ ++-------------------------+---------------------------------+-------+ +| Escape Sequence | Meaning | Notes | ++=========================+=================================+=======+ +| ``\``\ | Backslash and newline ignored | \(1) | ++-------------------------+---------------------------------+-------+ +| ``\\`` | Backslash (``\``) | | ++-------------------------+---------------------------------+-------+ +| ``\'`` | Single quote (``'``) | | ++-------------------------+---------------------------------+-------+ +| ``\"`` | Double quote (``"``) | | ++-------------------------+---------------------------------+-------+ +| ``\a`` | ASCII Bell (BEL) | | ++-------------------------+---------------------------------+-------+ +| ``\b`` | ASCII Backspace (BS) | | ++-------------------------+---------------------------------+-------+ +| ``\f`` | ASCII Formfeed (FF) | | ++-------------------------+---------------------------------+-------+ +| ``\n`` | ASCII Linefeed (LF) | | ++-------------------------+---------------------------------+-------+ +| ``\r`` | ASCII Carriage Return (CR) | | ++-------------------------+---------------------------------+-------+ +| ``\t`` | ASCII Horizontal Tab (TAB) | | ++-------------------------+---------------------------------+-------+ +| ``\v`` | ASCII Vertical Tab (VT) | | ++-------------------------+---------------------------------+-------+ +| :samp:`\\{ooo}` | Character with octal value | (2,4) | +| | *ooo* | | ++-------------------------+---------------------------------+-------+ +| :samp:`\\x{hh}` | Character with hex value *hh* | (3,4) | ++-------------------------+---------------------------------+-------+ Escape sequences only recognized in string literals are: -+-----------------+---------------------------------+-------+ -| Escape Sequence | Meaning | Notes | -+=================+=================================+=======+ -| ``\N{name}`` | Character named *name* in the | \(5) | -| | Unicode database | | -+-----------------+---------------------------------+-------+ -| ``\uxxxx`` | Character with 16-bit hex value | \(6) | -| | *xxxx* | | -+-----------------+---------------------------------+-------+ -| ``\Uxxxxxxxx`` | Character with 32-bit hex value | \(7) | -| | *xxxxxxxx* | | -+-----------------+---------------------------------+-------+ ++-------------------------+---------------------------------+-------+ +| Escape Sequence | Meaning | Notes | ++=========================+=================================+=======+ +| :samp:`\\N\\{{name}\\}` | Character named *name* in the | \(5) | +| | Unicode database | | ++-------------------------+---------------------------------+-------+ +| :samp:`\\u{xxxx}` | Character with 16-bit hex value | \(6) | +| | *xxxx* | | ++-------------------------+---------------------------------+-------+ +| :samp:`\\U{xxxxxxxx}` | Character with 32-bit hex value | \(7) | +| | *xxxxxxxx* | | ++-------------------------+---------------------------------+-------+ Notes: @@ -1045,4 +1045,4 @@ occurrence outside string literals and comments is an unconditional error: .. rubric:: Footnotes -.. [#] https://www.unicode.org/Public/15.0.0/ucd/NameAliases.txt +.. [#] https://www.unicode.org/Public/15.1.0/ucd/NameAliases.txt diff --git a/Doc/requirements-oldest-sphinx.txt b/Doc/requirements-oldest-sphinx.txt index 94611ca22f09fe..d3ef5bc17650ae 100644 --- a/Doc/requirements-oldest-sphinx.txt +++ b/Doc/requirements-oldest-sphinx.txt @@ -7,12 +7,10 @@ blurb python-docs-theme>=2022.1 # Generated from: -# pip install "Sphinx~=3.2.0" "docutils<0.17" "Jinja2<3" "MarkupSafe<2" +# pip install "Sphinx~=4.2.0" # pip freeze # -# Sphinx 3.2 comes from ``needs_sphinx = '3.2'`` in ``Doc/conf.py``. -# Docutils<0.17, Jinja2<3, and MarkupSafe<2 are additionally specified as -# Sphinx 3.2 is incompatible with newer releases of these packages. +# Sphinx 4.2 comes from ``needs_sphinx = '4.2'`` in ``Doc/conf.py``. alabaster==0.7.13 Babel==2.12.1 @@ -25,10 +23,10 @@ imagesize==1.4.1 Jinja2==2.11.3 MarkupSafe==1.1.1 packaging==23.1 -Pygments==2.15.1 +Pygments==2.16.1 requests==2.31.0 snowballstemmer==2.2.0 -Sphinx==3.2.1 +Sphinx==4.2.0 sphinxcontrib-applehelp==1.0.4 sphinxcontrib-devhelp==1.0.2 sphinxcontrib-htmlhelp==2.0.1 diff --git a/Doc/tools/.nitignore b/Doc/tools/.nitignore index a6268048e143db..487652f4b51d4b 100644 --- a/Doc/tools/.nitignore +++ b/Doc/tools/.nitignore @@ -130,7 +130,6 @@ Doc/library/tkinter.scrolledtext.rst Doc/library/tkinter.ttk.rst Doc/library/traceback.rst Doc/library/tty.rst -Doc/library/turtle.rst Doc/library/unittest.mock.rst Doc/library/unittest.rst Doc/library/urllib.parse.rst @@ -140,7 +139,6 @@ Doc/library/wsgiref.rst Doc/library/xml.dom.minidom.rst Doc/library/xml.dom.pulldom.rst Doc/library/xml.dom.rst -Doc/library/xml.etree.elementtree.rst Doc/library/xml.rst Doc/library/xml.sax.handler.rst Doc/library/xml.sax.reader.rst diff --git a/Doc/tools/templates/indexcontent.html b/Doc/tools/templates/indexcontent.html index a96746b69fd41b..1e3ab7cfe02fee 100644 --- a/Doc/tools/templates/indexcontent.html +++ b/Doc/tools/templates/indexcontent.html @@ -62,6 +62,7 @@

{{ docstitle|e }}

+ {% endblock %} diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index fe35372603fdd8..763f9778776990 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -60,6 +60,29 @@ See also :pep:`7` "Style Guide for C Code" and :pep:`11` "CPython platform support". +Generated files +=============== + +To reduce build dependencies, Python source code contains multiple generated +files. Commands to regenerate all generated files:: + + make regen-all + make regen-stdlib-module-names + make regen-limited-abi + make regen-configure + +The ``Makefile.pre.in`` file documents generated files, their inputs, and tools used +to regenerate them. Search for ``regen-*`` make targets. + +The ``make regen-configure`` command runs `tiran/cpython_autoconf +`_ container for reproducible build; +see container ``entry.sh`` script. The container is optional, the following +command can be run locally, the generated files depend on autoconf and aclocal +versions:: + + autoreconf -ivf -Werror + + .. _configure-options: Configure Options @@ -192,14 +215,69 @@ General Options .. cmdoption:: --enable-pystats - Turn on internal statistics gathering. + Turn on internal Python performance statistics gathering. + + By default, statistics gathering is off. Use ``python3 -X pystats`` command + or set ``PYTHONSTATS=1`` environment variable to turn on statistics + gathering at Python startup. + + At Python exit, dump statistics if statistics gathering was on and not + cleared. + + Effects: + + * Add :option:`-X pystats <-X>` command line option. + * Add :envvar:`!PYTHONSTATS` environment variable. + * Define the ``Py_STATS`` macro. + * Add functions to the :mod:`sys` module: + + * :func:`!sys._stats_on`: Turns on statistics gathering. + * :func:`!sys._stats_off`: Turns off statistics gathering. + * :func:`!sys._stats_clear`: Clears the statistics. + * :func:`!sys._stats_dump`: Dump statistics to file, and clears the statistics. The statistics will be dumped to a arbitrary (probably unique) file in - ``/tmp/py_stats/``, or ``C:\temp\py_stats\`` on Windows. If that directory - does not exist, results will be printed on stdout. + ``/tmp/py_stats/`` (Unix) or ``C:\temp\py_stats\`` (Windows). If that + directory does not exist, results will be printed on stderr. Use ``Tools/scripts/summarize_stats.py`` to read the stats. + Statistics: + + * Opcode: + + * Specialization: success, failure, hit, deferred, miss, deopt, failures; + * Execution count; + * Pair count. + + * Call: + + * Inlined Python calls; + * PyEval calls; + * Frames pushed; + * Frame object created; + * Eval calls: vector, generator, legacy, function VECTORCALL, build class, + slot, function "ex", API, method. + + * Object: + + * incref and decref; + * interpreter incref and decref; + * allocations: all, 512 bytes, 4 kiB, big; + * free; + * to/from free lists; + * dictionary materialized/dematerialized; + * type cache; + * optimization attemps; + * optimization traces created/executed; + * uops executed. + + * Garbage collector: + + * Garbage collections; + * Objects visited; + * Objects collected. + .. versionadded:: 3.11 .. cmdoption:: --disable-gil @@ -211,6 +289,136 @@ General Options .. versionadded:: 3.13 +.. cmdoption:: PKG_CONFIG + + Path to ``pkg-config`` utility. + +.. cmdoption:: PKG_CONFIG_LIBDIR +.. cmdoption:: PKG_CONFIG_PATH + + ``pkg-config`` options. + + +C compiler options +------------------ + +.. cmdoption:: CC + + C compiler command. + +.. cmdoption:: CFLAGS + + C compiler flags. + +.. cmdoption:: CPP + + C preprocessor command. + +.. cmdoption:: CPPFLAGS + + C preprocessor flags, e.g. :samp:`-I{include_dir}`. + + +Linker options +-------------- + +.. cmdoption:: LDFLAGS + + Linker flags, e.g. :samp:`-L{library_directory}`. + +.. cmdoption:: LIBS + + Libraries to pass to the linker, e.g. :samp:`-l{library}`. + +.. cmdoption:: MACHDEP + + Name for machine-dependent library files. + + +Options for third-party dependencies +------------------------------------ + +.. versionadded:: 3.11 + +.. cmdoption:: BZIP2_CFLAGS +.. cmdoption:: BZIP2_LIBS + + C compiler and linker flags to link Python to ``libbz2``, used by :mod:`bz2` + module, overriding ``pkg-config``. + +.. cmdoption:: CURSES_CFLAGS +.. cmdoption:: CURSES_LIBS + + C compiler and linker flags for ``libncurses`` or ``libncursesw``, used by + :mod:`curses` module, overriding ``pkg-config``. + +.. cmdoption:: GDBM_CFLAGS +.. cmdoption:: GDBM_LIBS + + C compiler and linker flags for ``gdbm``. + +.. cmdoption:: LIBB2_CFLAGS +.. cmdoption:: LIBB2_LIBS + + C compiler and linker flags for ``libb2`` (:ref:`BLAKE2 `), + used by :mod:`hashlib` module, overriding ``pkg-config``. + +.. cmdoption:: LIBEDIT_CFLAGS +.. cmdoption:: LIBEDIT_LIBS + + C compiler and linker flags for ``libedit``, used by :mod:`readline` module, + overriding ``pkg-config``. + +.. cmdoption:: LIBFFI_CFLAGS +.. cmdoption:: LIBFFI_LIBS + + C compiler and linker flags for ``libffi``, used by :mod:`ctypes` module, + overriding ``pkg-config``. + +.. cmdoption:: LIBLZMA_CFLAGS +.. cmdoption:: LIBLZMA_LIBS + + C compiler and linker flags for ``liblzma``, used by :mod:`lzma` module, + overriding ``pkg-config``. + +.. cmdoption:: LIBREADLINE_CFLAGS +.. cmdoption:: LIBREADLINE_LIBS + + C compiler and linker flags for ``libreadline``, used by :mod:`readline` + module, overriding ``pkg-config``. + +.. cmdoption:: LIBSQLITE3_CFLAGS +.. cmdoption:: LIBSQLITE3_LIBS + + C compiler and linker flags for ``libsqlite3``, used by :mod:`sqlite3` + module, overriding ``pkg-config``. + +.. cmdoption:: LIBUUID_CFLAGS +.. cmdoption:: LIBUUID_LIBS + + C compiler and linker flags for ``libuuid``, used by :mod:`uuid` module, + overriding ``pkg-config``. + +.. cmdoption:: PANEL_CFLAGS +.. cmdoption:: PANEL_LIBS + + C compiler and Linker flags for PANEL, overriding ``pkg-config``. + + C compiler and linker flags for ``libpanel`` or ``libpanelw``, used by + :mod:`curses.panel` module, overriding ``pkg-config``. + +.. cmdoption:: TCLTK_CFLAGS +.. cmdoption:: TCLTK_LIBS + + C compiler and linker flags for TCLTK, overriding ``pkg-config``. + +.. cmdoption:: ZLIB_CFLAGS +.. cmdoption:: ZLIB_LIBS + + C compiler and linker flags for ``libzlib``, used by :mod:`gzip` module, + overriding ``pkg-config``. + + WebAssembly Options ------------------- @@ -350,6 +558,19 @@ also be used to improve performance. .. versionadded:: 3.12 +.. cmdoption:: BOLT_APPLY_FLAGS + + Arguments to ``llvm-bolt`` when creating a `BOLT optimized binary + `_. + + .. versionadded:: 3.12 + +.. cmdoption:: BOLT_INSTRUMENT_FLAGS + + Arguments to ``llvm-bolt`` when instrumenting binaries. + + .. versionadded:: 3.12 + .. cmdoption:: --with-computed-gotos Enable computed gotos in evaluation loop (enabled by default on supported @@ -697,6 +918,12 @@ the version of the cross compiled host Python. ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no +.. cmdoption:: HOSTRUNNER + + Program to run CPython for the host platform for cross-compilation. + + .. versionadded:: 3.11 + Cross compiling example:: @@ -777,15 +1004,15 @@ Example on Linux x86-64:: At the beginning of the files, C extensions are built as built-in modules. Extensions defined after the ``*shared*`` marker are built as dynamic libraries. -The :c:macro:`PyAPI_FUNC()`, :c:macro:`PyAPI_DATA()` and -:c:macro:`PyMODINIT_FUNC` macros of :file:`Include/pyport.h` are defined +The :c:macro:`!PyAPI_FUNC()`, :c:macro:`!PyAPI_DATA()` and +:c:macro:`PyMODINIT_FUNC` macros of :file:`Include/exports.h` are defined differently depending if the ``Py_BUILD_CORE_MODULE`` macro is defined: * Use ``Py_EXPORTED_SYMBOL`` if the ``Py_BUILD_CORE_MODULE`` is defined * Use ``Py_IMPORTED_SYMBOL`` otherwise. If the ``Py_BUILD_CORE_BUILTIN`` macro is used by mistake on a C extension -built as a shared library, its ``PyInit_xxx()`` function is not exported, +built as a shared library, its :samp:`PyInit_{xxx}()` function is not exported, causing an :exc:`ImportError` on import. @@ -806,8 +1033,8 @@ Preprocessor flags .. envvar:: CPPFLAGS - (Objective) C/C++ preprocessor flags, e.g. ``-I`` if you have - headers in a nonstandard directory ````. + (Objective) C/C++ preprocessor flags, e.g. :samp:`-I{include_dir}` if you have + headers in a nonstandard directory *include_dir*. Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's value to be able to build extension modules using the @@ -996,8 +1223,8 @@ Linker flags .. envvar:: LDFLAGS - Linker flags, e.g. ``-L`` if you have libraries in a nonstandard - directory ````. + Linker flags, e.g. :samp:`-L{lib_dir}` if you have libraries in a nonstandard + directory *lib_dir*. Both :envvar:`CPPFLAGS` and :envvar:`LDFLAGS` need to contain the shell's value to be able to build extension modules using the diff --git a/Doc/using/unix.rst b/Doc/using/unix.rst index 0044eb07f56eec..58838c28e6eb86 100644 --- a/Doc/using/unix.rst +++ b/Doc/using/unix.rst @@ -30,9 +30,9 @@ following links: for Debian users https://en.opensuse.org/Portal:Packaging for OpenSuse users - https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-creating-rpms.html + https://docs.fedoraproject.org/en-US/package-maintainers/Packaging_Tutorial_GNU_Hello/ for Fedora users - http://www.slackbook.org/html/package-management-making-packages.html + https://slackbook.org/html/package-management-making-packages.html for Slackware users diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc index 2fc90126482268..1cf438b198a9af 100644 --- a/Doc/using/venv-create.inc +++ b/Doc/using/venv-create.inc @@ -35,37 +35,48 @@ your :ref:`Python installation `:: The command, if run with ``-h``, will show the available options:: - usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] - [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps] - ENV_DIR [ENV_DIR ...] - - Creates virtual Python environments in one or more target directories. - - positional arguments: - ENV_DIR A directory to create the environment in. - - optional arguments: - -h, --help show this help message and exit - --system-site-packages - Give the virtual environment access to the system - site-packages dir. - --symlinks Try to use symlinks rather than copies, when symlinks - are not the default for the platform. - --copies Try to use copies rather than symlinks, even when - symlinks are the default for the platform. - --clear Delete the contents of the environment directory if it - already exists, before environment creation. - --upgrade Upgrade the environment directory to use this version - of Python, assuming Python has been upgraded in-place. - --without-pip Skips installing or upgrading pip in the virtual - environment (pip is bootstrapped by default) - --prompt PROMPT Provides an alternative prompt prefix for this - environment. - --upgrade-deps Upgrade core dependencies (pip) to the - latest version in PyPI - - Once an environment has been created, you may wish to activate it, e.g. by - sourcing an activate script in its bin directory. + usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] + [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps] + [--without-scm-ignore-file] + ENV_DIR [ENV_DIR ...] + + Creates virtual Python environments in one or more target directories. + + positional arguments: + ENV_DIR A directory to create the environment in. + + options: + -h, --help show this help message and exit + --system-site-packages + Give the virtual environment access to the system + site-packages dir. + --symlinks Try to use symlinks rather than copies, when + symlinks are not the default for the platform. + --copies Try to use copies rather than symlinks, even when + symlinks are the default for the platform. + --clear Delete the contents of the environment directory if + it already exists, before environment creation. + --upgrade Upgrade the environment directory to use this + version of Python, assuming Python has been upgraded + in-place. + --without-pip Skips installing or upgrading pip in the virtual + environment (pip is bootstrapped by default) + --prompt PROMPT Provides an alternative prompt prefix for this + environment. + --upgrade-deps Upgrade core dependencies (pip) to the latest + version in PyPI + --without-scm-ignore-file + Skips adding the default SCM ignore file to the + environment directory (the default is a .gitignore + file). + + Once an environment has been created, you may wish to activate it, e.g. by + sourcing an activate script in its bin directory. + +.. versionchanged:: 3.13 + + ``--without-scm-ignore-file`` was added along with creating an ignore file + for ``git`` by default. .. versionchanged:: 3.12 diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst index ca79c9d3a9d3a8..2476e60a26d485 100644 --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -889,7 +889,7 @@ minor version. I.e. ``/usr/bin/python3.7-32`` will request usage of the The "-64" suffix is deprecated, and now implies "any architecture that is not provably i386/32-bit". To request a specific environment, use the new - ``-V:`` argument with the complete tag. + :samp:`-V:{TAG}` argument with the complete tag. The ``/usr/bin/env`` form of shebang line has one further special property. Before looking for installed Python interpreters, this form will search the @@ -1192,7 +1192,7 @@ non-standard paths in the registry and user site-packages. * Adds ``._pth`` file support and removes ``applocal`` option from ``pyvenv.cfg``. - * Adds ``pythonXX.zip`` as a potential landmark when directly adjacent + * Adds :file:`python{XX}.zip` as a potential landmark when directly adjacent to the executable. .. deprecated:: diff --git a/Doc/whatsnew/2.0.rst b/Doc/whatsnew/2.0.rst index 71f681881f446f..c2b0ae8c76302a 100644 --- a/Doc/whatsnew/2.0.rst +++ b/Doc/whatsnew/2.0.rst @@ -153,9 +153,9 @@ Lundh. A detailed explanation of the interface was written up as :pep:`100`, significant points about the Unicode interfaces. In Python source code, Unicode strings are written as ``u"string"``. Arbitrary -Unicode characters can be written using a new escape sequence, ``\uHHHH``, where +Unicode characters can be written using a new escape sequence, :samp:`\\u{HHHH}`, where *HHHH* is a 4-digit hexadecimal number from 0000 to FFFF. The existing -``\xHHHH`` escape sequence can also be used, and octal escapes can be used for +:samp:`\\x{HH}` escape sequence can also be used, and octal escapes can be used for characters up to U+01FF, which is represented by ``\777``. Unicode strings, just like regular strings, are an immutable sequence type. diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst index ba18ce343c35d1..ec1ca417ee139d 100644 --- a/Doc/whatsnew/2.3.rst +++ b/Doc/whatsnew/2.3.rst @@ -1889,7 +1889,7 @@ Changes to Python's build process and to the C API include: * The :c:macro:`!DL_EXPORT` and :c:macro:`!DL_IMPORT` macros are now deprecated. Initialization functions for Python extension modules should now be declared using the new macro :c:macro:`PyMODINIT_FUNC`, while the Python core will - generally use the :c:macro:`PyAPI_FUNC` and :c:macro:`PyAPI_DATA` macros. + generally use the :c:macro:`!PyAPI_FUNC` and :c:macro:`!PyAPI_DATA` macros. * The interpreter can be compiled without any docstrings for the built-in functions and modules by supplying :option:`!--without-doc-strings` to the diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst index beba4428e67c3f..f3912d42180bfd 100644 --- a/Doc/whatsnew/2.6.rst +++ b/Doc/whatsnew/2.6.rst @@ -125,7 +125,7 @@ and to C extension code as :c:data:`!Py_Py3kWarningFlag`. .. seealso:: - The 3xxx series of PEPs, which contains proposals for Python 3.0. + The 3\ *xxx* series of PEPs, which contains proposals for Python 3.0. :pep:`3000` describes the development process for Python 3.0. Start with :pep:`3100` that describes the general goals for Python 3.0, and then explore the higher-numbered PEPS that propose diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1e6e0befa9819a..20cabbd25cc686 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -878,7 +878,7 @@ Other Language Changes (Contributed by Raymond Hettinger in :issue:`43475`.) * A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting - the :const:`__debug__` constant. (Contributed by Dong-hee Na in :issue:`45000`.) + the :const:`__debug__` constant. (Contributed by Donghee Na in :issue:`45000`.) * :exc:`SyntaxError` exceptions now have ``end_lineno`` and ``end_offset`` attributes. They will be ``None`` if not determined. @@ -1255,7 +1255,7 @@ pipe. (Contributed by Pablo Galindo in :issue:`41625`.) Add :const:`~os.O_EVTONLY`, :const:`~os.O_FSYNC`, :const:`~os.O_SYMLINK` and :const:`~os.O_NOFOLLOW_ANY` for macOS. -(Contributed by Dong-hee Na in :issue:`43106`.) +(Contributed by Donghee Na in :issue:`43106`.) os.path ------- @@ -1582,7 +1582,7 @@ Optimizations * The following built-in functions now support the faster :pep:`590` vectorcall calling convention: :func:`map`, :func:`filter`, :func:`reversed`, :func:`bool` and :func:`float`. - (Contributed by Dong-hee Na and Jeroen Demeyer in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`.) + (Contributed by Donghee Na and Jeroen Demeyer in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`.) * :class:`BZ2File` performance is improved by removing internal ``RLock``. This makes :class:`BZ2File` thread unsafe in the face of multiple simultaneous @@ -1817,7 +1817,7 @@ Removed scheduled to be removed in Python 3.6, but such removals were delayed until after Python 2.7 EOL. Existing users should copy whatever classes they use into their code. - (Contributed by Dong-hee Na and Terry J. Reedy in :issue:`42299`.) + (Contributed by Donghee Na and Terry J. Reedy in :issue:`42299`.) * Removed the :c:func:`!PyModule_GetWarningsModule` function that was useless now due to the :mod:`!_warnings` module was converted to a builtin module in 2.6. diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index cc5cfee08d2b32..257025da91a7ed 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -45,7 +45,7 @@ when researching a change. This article explains the new features in Python 3.11, compared to 3.10. - +Python 3.11 was released on October 24, 2022. For full details, see the :ref:`changelog `. @@ -218,7 +218,7 @@ Windows ``py.exe`` launcher improvements The copy of the :ref:`launcher` included with Python 3.11 has been significantly updated. It now supports company/tag syntax as defined in :pep:`514` using the -``-V:/`` argument instead of the limited ``-.``. +:samp:`-V:{}/{}` argument instead of the limited :samp:`-{}.{}`. This allows launching distributions other than ``PythonCore``, the one hosted on `python.org `_. @@ -227,8 +227,8 @@ installs will be searched. For example, ``-V:OtherPython/`` will select the "best" tag registered for ``OtherPython``, while ``-V:3.11`` or ``-V:/3.11`` will select the "best" distribution with tag ``3.11``. -When using the legacy ``-``, ``-.``, -``--`` or ``-.-`` arguments, +When using the legacy :samp:`-{}`, :samp:`-{}.{}`, +:samp:`-{}-{}` or :samp:`-{}.{}-{}` arguments, all existing behaviour should be preserved from past versions, and only releases from ``PythonCore`` will be selected. However, the ``-64`` suffix now implies "not 32-bit" (not necessarily x86-64), @@ -499,7 +499,7 @@ Other CPython Implementation Changes * The special methods :meth:`~object.__complex__` for :class:`complex` and :meth:`~object.__bytes__` for :class:`bytes` are implemented to support the :class:`typing.SupportsComplex` and :class:`typing.SupportsBytes` protocols. - (Contributed by Mark Dickinson and Dong-hee Na in :issue:`24234`.) + (Contributed by Mark Dickinson and Donghee Na in :issue:`24234`.) * ``siphash13`` is added as a new internal hashing algorithm. It has similar security properties as ``siphash24``, @@ -897,7 +897,7 @@ os * On Windows, :func:`os.urandom` now uses ``BCryptGenRandom()``, instead of ``CryptGenRandom()`` which is deprecated. - (Contributed by Dong-hee Na in :issue:`44611`.) + (Contributed by Donghee Na in :issue:`44611`.) .. _whatsnew311-pathlib: @@ -1089,7 +1089,7 @@ time `_ which has a resolution of 100 nanoseconds (10\ :sup:`-7` seconds). Previously, it had a resolution of 1 millisecond (10\ :sup:`-3` seconds). - (Contributed by Benjamin Szőke, Dong-hee Na, Eryk Sun and Victor Stinner in :issue:`21302` and :issue:`45429`.) + (Contributed by Benjamin Szőke, Donghee Na, Eryk Sun and Victor Stinner in :issue:`21302` and :issue:`45429`.) .. _whatsnew311-tkinter: @@ -1305,7 +1305,7 @@ This section covers specific optimizations independent of the * :func:`unicodedata.normalize` now normalizes pure-ASCII strings in constant time. - (Contributed by Dong-hee Na in :issue:`44987`.) + (Contributed by Donghee Na in :issue:`44987`.) .. _whatsnew311-faster-cpython: @@ -1452,7 +1452,7 @@ Bucher, with additional help from Irit Katriel and Dennis Sweeney.) | | | | (up to) | | +===============+====================+=======================================================+===================+===================+ | Binary | ``x + x`` | Binary add, multiply and subtract for common types | 10% | Mark Shannon, | -| operations | | such as :class:`int`, :class:`float` and :class:`str` | | Dong-hee Na, | +| operations | | such as :class:`int`, :class:`float` and :class:`str` | | Donghee Na, | | | ``x - x`` | take custom fast paths for their underlying types. | | Brandt Bucher, | | | | | | Dennis Sweeney | | | ``x * x`` | | | | @@ -1839,7 +1839,7 @@ Standard Library * :class:`!webbrowser.MacOSX` is deprecated and will be removed in Python 3.13. It is untested, undocumented, and not used by :mod:`webbrowser` itself. - (Contributed by Dong-hee Na in :issue:`42255`.) + (Contributed by Donghee Na in :issue:`42255`.) * The behavior of returning a value from a :class:`~unittest.TestCase` and :class:`~unittest.IsolatedAsyncioTestCase` test methods (other than the @@ -1984,7 +1984,7 @@ Removed C APIs are :ref:`listed separately `. :meth:`!NullTranslations.set_output_charset` methods, and the *codeset* parameter of :func:`!translation` and :func:`!install`, since they are only used for the :func:`!l*gettext` functions. - (Contributed by Dong-hee Na and Serhiy Storchaka in :issue:`44235`.) + (Contributed by Donghee Na and Serhiy Storchaka in :issue:`44235`.) * Removed from the :mod:`inspect` module: @@ -2009,7 +2009,7 @@ Removed C APIs are :ref:`listed separately `. * Removed the :class:`!MailmanProxy` class in the :mod:`smtpd` module, as it is unusable without the external :mod:`!mailman` package. - (Contributed by Dong-hee Na in :issue:`35800`.) + (Contributed by Donghee Na in :issue:`35800`.) * Removed the deprecated :meth:`!split` method of :class:`!_tkinter.TkappType`. (Contributed by Erlend E. Aasland in :issue:`38371`.) @@ -2151,7 +2151,7 @@ Build Changes * CPython can now be built with the `ThinLTO `_ option via passing ``thin`` to :option:`--with-lto`, i.e. ``--with-lto=thin``. - (Contributed by Dong-hee Na and Brett Holman in :issue:`44340`.) + (Contributed by Donghee Na and Brett Holman in :issue:`44340`.) * Freelists for object structs can now be disabled. A new :program:`configure` option :option:`--without-freelists` can be used to disable all freelists diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst index fb31a07930da25..2a186e8c8484ec 100644 --- a/Doc/whatsnew/3.12.rst +++ b/Doc/whatsnew/3.12.rst @@ -67,21 +67,23 @@ Summary -- Release highlights New grammar features: -* :pep:`701`: Syntactic formalization of f-strings +* :ref:`whatsnew312-pep701` Interpreter improvements: * :ref:`whatsnew312-pep684` +* :ref:`whatsnew312-pep669` + New typing features: -* :pep:`688`: Making the buffer protocol accessible in Python +* :ref:`whatsnew312-pep688` * :ref:`whatsnew312-pep692` * :ref:`whatsnew312-pep695` -* :pep:`698`: Override Decorator for Static Typing +* :ref:`whatsnew312-pep698` Important deprecations, removals or restrictions: @@ -96,7 +98,7 @@ Improved Error Messages * Modules from the standard library are now potentially suggested as part of the error messages displayed by the interpreter when a :exc:`NameError` is - raised to the top level. Contributed by Pablo Galindo in :gh:`98254`. + raised to the top level. (Contributed by Pablo Galindo in :gh:`98254`.) >>> sys.version_info Traceback (most recent call last): @@ -107,7 +109,7 @@ Improved Error Messages Now if a :exc:`NameError` is raised in a method and the instance has an attribute that's exactly equal to the name in the exception, the suggestion will include ``self.`` instead of the closest match in the method - scope. Contributed by Pablo Galindo in :gh:`99139`. + scope. (Contributed by Pablo Galindo in :gh:`99139`.) >>> class A: ... def __init__(self): @@ -115,7 +117,7 @@ Improved Error Messages ... ... def foo(self): ... somethin = blech - + ... >>> A().foo() Traceback (most recent call last): File "", line 1 @@ -123,9 +125,8 @@ Improved Error Messages ^^^^^ NameError: name 'blech' is not defined. Did you mean: 'self.blech'? - * Improve the :exc:`SyntaxError` error message when the user types ``import x - from y`` instead of ``from y import x``. Contributed by Pablo Galindo in :gh:`98931`. + from y`` instead of ``from y import x``. (Contributed by Pablo Galindo in :gh:`98931`.) >>> import a.y.z from b.y.z Traceback (most recent call last): @@ -136,7 +137,7 @@ Improved Error Messages * :exc:`ImportError` exceptions raised from failed ``from import `` statements now include suggestions for the value of ```` based on the - available names in ````. Contributed by Pablo Galindo in :gh:`91058`. + available names in ````. (Contributed by Pablo Galindo in :gh:`91058`.) >>> from collections import chainmap Traceback (most recent call last): @@ -152,12 +153,13 @@ New Features PEP 701: Syntactic formalization of f-strings --------------------------------------------- -:pep:`701` lifts some restrictions on the usage of f-strings. Expression components -inside f-strings can now be any valid Python expression including backslashes, -unicode escaped sequences, multi-line expressions, comments and strings reusing the -same quote as the containing f-string. Let's cover these in detail: +:pep:`701` lifts some restrictions on the usage of :term:`f-strings `. +Expression components inside f-strings can now be any valid Python expression, +including strings reusing the same quote as the containing f-string, +multi-line expressions, comments, backslashes, and unicode escape sequences. +Let's cover these in detail: -* Quote reuse: in Python 3.11, reusing the same quotes as the containing f-string +* Quote reuse: in Python 3.11, reusing the same quotes as the enclosing f-string raises a :exc:`SyntaxError`, forcing the user to either use other available quotes (like using double quotes or triple quotes if the f-string uses single quotes). In Python 3.12, you can now do things like this: @@ -180,11 +182,12 @@ same quote as the containing f-string. Let's cover these in detail: >>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}" '2' -* Multi-line expressions and comments: In Python 3.11, f-strings expressions - must be defined in a single line even if outside f-strings expressions could - span multiple lines (like literal lists being defined over multiple lines), - making them harder to read. In Python 3.12 you can now define expressions - spanning multiple lines and include comments on them: +* Multi-line expressions and comments: In Python 3.11, f-string expressions + must be defined in a single line, even if the expression within the f-string + could normally span multiple lines + (like literal lists being defined over multiple lines), + making them harder to read. In Python 3.12 you can now define f-strings + spanning multiple lines, and add inline comments: >>> f"This is the playlist: {", ".join([ ... 'Take me back to Eden', # My, my, those eyes like fire @@ -194,10 +197,10 @@ same quote as the containing f-string. Let's cover these in detail: 'This is the playlist: Take me back to Eden, Alkaline, Ascensionism' * Backslashes and unicode characters: before Python 3.12 f-string expressions - couldn't contain any ``\`` character. This also affected unicode escaped - sequences (such as ``\N{snowman}``) as these contain the ``\N`` part that - previously could not be part of expression components of f-strings. Now, you - can define expressions like this: + couldn't contain any ``\`` character. This also affected unicode :ref:`escape + sequences ` (such as ``\N{snowman}``) as these contain + the ``\N`` part that previously could not be part of expression components of + f-strings. Now, you can define expressions like this: >>> print(f"This is the playlist: {"\n".join(songs)}") This is the playlist: Take me back to Eden @@ -209,7 +212,7 @@ same quote as the containing f-string. Let's cover these in detail: See :pep:`701` for more details. As a positive side-effect of how this feature has been implemented (by parsing f-strings -with the PEG parser (see :pep:`617`), now error messages for f-strings are more precise +with :pep:`the PEG parser <617>`, now error messages for f-strings are more precise and include the exact location of the error. For example, in Python 3.11, the following f-string raises a :exc:`SyntaxError`: @@ -244,17 +247,18 @@ PEP 709: Comprehension inlining Dictionary, list, and set comprehensions are now inlined, rather than creating a new single-use function object for each execution of the comprehension. This -speeds up execution of a comprehension by up to 2x. +speeds up execution of a comprehension by up to two times. +See :pep:`709` for further details. -Comprehension iteration variables remain isolated; they don't overwrite a +Comprehension iteration variables remain isolated and don't overwrite a variable of the same name in the outer scope, nor are they visible after the -comprehension. This isolation is now maintained via stack/locals manipulation, -not via separate function scope. - -Inlining does result in a few visible behavior changes: +comprehension. Inlining does result in a few visible behavior changes: * There is no longer a separate frame for the comprehension in tracebacks, and tracing/profiling no longer shows the comprehension as a function call. +* The :mod:`symtable` module will no longer produce child symbol tables for each + comprehension; instead, the comprehension's locals will be included in the + parent function's symbol table. * Calling :func:`locals` inside a comprehension now includes variables from outside the comprehension, and no longer includes the synthetic ``.0`` variable for the comprehension "argument". @@ -265,7 +269,9 @@ Inlining does result in a few visible behavior changes: create a list of keys to iterate over: ``keys = list(locals()); [k for k in keys]``. -Contributed by Carl Meyer and Vladimir Matveev in :pep:`709`. +(Contributed by Carl Meyer and Vladimir Matveev in :pep:`709`.) + +.. _whatsnew312-pep688: PEP 688: Making the buffer protocol accessible in Python -------------------------------------------------------- @@ -285,9 +291,11 @@ can be used to customize buffer creation. PEP 684: A Per-Interpreter GIL ------------------------------ -Sub-interpreters may now be created with a unique GIL per interpreter. +:pep:`684` introduces a per-interpreter :term:`GIL `, +so that sub-interpreters may now be created with a unique GIL per interpreter. This allows Python programs to take full advantage of multiple CPU -cores. +cores. This is currently only available through the C-API, +though a Python API is :pep:`anticipated for 3.13 <554>`. Use the new :c:func:`Py_NewInterpreterFromConfig` function to create an interpreter with its own GIL:: @@ -301,19 +309,32 @@ create an interpreter with its own GIL:: if (PyStatus_Exception(status)) { return -1; } - /* The new interpeter is now active in the current thread. */ + /* The new interpreter is now active in the current thread. */ For further examples how to use the C-API for sub-interpreters with a per-interpreter GIL, see :source:`Modules/_xxsubinterpretersmodule.c`. -A Python API is anticipated for 3.13. (See :pep:`554`.) - (Contributed by Eric Snow in :gh:`104210`, etc.) +.. _whatsnew312-pep669: + +PEP 669: Low impact monitoring for CPython +------------------------------------------ + +:pep:`669` defines a new :mod:`API ` for profilers, +debuggers, and other tools to monitor events in CPython. +It covers a wide range of events, including calls, +returns, lines, exceptions, jumps, and more. +This means that you only pay for what you use, providing support +for near-zero overhead debuggers and coverage tools. +See :mod:`sys.monitoring` for details. + +(Contributed by Mark Shannon in :gh:`103083`.) + New Features Related to Type Hints ================================== -This section covers major changes affecting :pep:`484` type hints and +This section covers major changes affecting :pep:`type hints <484>` and the :mod:`typing` module. .. _whatsnew312-pep692: @@ -325,7 +346,7 @@ Typing ``**kwargs`` in a function signature as introduced by :pep:`484` allowed for valid annotations only in cases where all of the ``**kwargs`` were of the same type. -This PEP specifies a more precise way of typing ``**kwargs`` by relying on +:pep:`692` specifies a more precise way of typing ``**kwargs`` by relying on typed dictionaries:: from typing import TypedDict, Unpack @@ -340,6 +361,8 @@ See :pep:`692` for more details. (Contributed by Franek Magiera in :gh:`103629`.) +.. _whatsnew312-pep698: + PEP 698: Override Decorator for Static Typing --------------------------------------------- @@ -367,6 +390,8 @@ Example:: def get_colour(self) -> str: return "red" +See :pep:`698` for more details. + (Contributed by Steven Troxler in :gh:`101561`.) .. _whatsnew312-pep695: @@ -412,8 +437,8 @@ parameters with bounds or constraints:: The value of type aliases and the bound and constraints of type variables created through this syntax are evaluated only on demand (see -:ref:`lazy-evaluation`). This means type aliases are able to refer to other -types defined later in the file. +:ref:`lazy evaluation `). This means type aliases are able to +refer to other types defined later in the file. Type parameters declared through a type parameter list are visible within the scope of the declaration and any nested scopes, but not in the outer scope. For @@ -436,12 +461,12 @@ and others in :gh:`103764`.) Other Language Changes ====================== -* Add :ref:`perf_profiling` through the new - environment variable :envvar:`PYTHONPERFSUPPORT`, - the new command-line option :option:`-X perf <-X>`, +* Add :ref:`support for the perf profiler ` through the new + environment variable :envvar:`PYTHONPERFSUPPORT` + and command-line option :option:`-X perf <-X>`, as well as the new :func:`sys.activate_stack_trampoline`, :func:`sys.deactivate_stack_trampoline`, - and :func:`sys.is_stack_trampoline_active` APIs. + and :func:`sys.is_stack_trampoline_active` functions. (Design by Pablo Galindo. Contributed by Pablo Galindo and Christian Heimes with contributions from Gregory P. Smith [Google] and Mark Shannon in :gh:`96123`.) @@ -450,7 +475,7 @@ Other Language Changes have a new a *filter* argument that allows limiting tar features than may be surprising or dangerous, such as creating files outside the destination directory. - See :ref:`tarfile-extraction-filter` for details. + See :ref:`tarfile extraction filters ` for details. In Python 3.14, the default will switch to ``'data'``. (Contributed by Petr Viktorin in :pep:`706`.) @@ -459,7 +484,7 @@ Other Language Changes (Contributed by Serhiy Storchaka in :gh:`87995`.) * :class:`memoryview` now supports the half-float type (the "e" format code). - (Contributed by Dong-hee Na and Antoine Pitrou in :gh:`90751`.) + (Contributed by Donghee Na and Antoine Pitrou in :gh:`90751`.) * The parser now raises :exc:`SyntaxError` when parsing source code containing null bytes. (Contributed by Pablo Galindo in :gh:`96670`.) @@ -478,8 +503,8 @@ Other Language Changes * A backslash-character pair that is not a valid escape sequence now generates a :exc:`SyntaxWarning`, instead of :exc:`DeprecationWarning`. For example, ``re.compile("\d+\.\d+")`` now emits a :exc:`SyntaxWarning` - (``"\d"`` is an invalid escape sequence), use raw strings for regular - expression: ``re.compile(r"\d+\.\d+")``. + (``"\d"`` is an invalid escape sequence, use raw strings for regular + expression: ``re.compile(r"\d+\.\d+")``). In a future Python version, :exc:`SyntaxError` will eventually be raised, instead of :exc:`SyntaxWarning`. (Contributed by Victor Stinner in :gh:`98401`.) @@ -508,7 +533,7 @@ Other Language Changes when summing floats or mixed ints and floats. (Contributed by Raymond Hettinger in :gh:`100425`.) -* Exceptions raised in a typeobject's ``__set_name__`` method are no longer +* Exceptions raised in a class or type's ``__set_name__`` method are no longer wrapped by a :exc:`RuntimeError`. Context information is added to the exception as a :pep:`678` note. (Contributed by Irit Katriel in :gh:`77757`.) @@ -544,20 +569,20 @@ asyncio * Added :func:`asyncio.eager_task_factory` and :func:`asyncio.create_eager_task_factory` functions to allow opting an event loop in to eager task execution, making some use-cases 2x to 5x faster. - (Contributed by Jacob Bower & Itamar O in :gh:`102853`, :gh:`104140`, and :gh:`104138`) + (Contributed by Jacob Bower & Itamar Oren in :gh:`102853`, :gh:`104140`, and :gh:`104138`) -* On Linux, :mod:`asyncio` uses :class:`~asyncio.PidfdChildWatcher` by default +* On Linux, :mod:`asyncio` uses :class:`asyncio.PidfdChildWatcher` by default if :func:`os.pidfd_open` is available and functional instead of - :class:`~asyncio.ThreadedChildWatcher`. + :class:`asyncio.ThreadedChildWatcher`. (Contributed by Kumar Aditya in :gh:`98024`.) -* The child watcher classes :class:`~asyncio.MultiLoopChildWatcher`, - :class:`~asyncio.FastChildWatcher`, :class:`~asyncio.AbstractChildWatcher` - and :class:`~asyncio.SafeChildWatcher` are deprecated and +* The child watcher classes :class:`asyncio.MultiLoopChildWatcher`, + :class:`asyncio.FastChildWatcher`, :class:`asyncio.AbstractChildWatcher` + and :class:`asyncio.SafeChildWatcher` are deprecated and will be removed in Python 3.14. It is recommended to not manually configure a child watcher as the event loop now uses the best available - child watcher for each platform (:class:`~asyncio.PidfdChildWatcher` - if supported and :class:`~asyncio.ThreadedChildWatcher` otherwise). + child watcher for each platform (:class:`asyncio.PidfdChildWatcher` + if supported and :class:`asyncio.ThreadedChildWatcher` otherwise). (Contributed by Kumar Aditya in :gh:`94597`.) * :func:`asyncio.set_child_watcher`, :func:`asyncio.get_child_watcher`, @@ -571,7 +596,7 @@ asyncio (Contributed by Kumar Aditya in :gh:`99388`.) * Add C implementation of :func:`asyncio.current_task` for 4x-6x speedup. - (Contributed by Itamar Ostricher and Pranav Thulasiram Bhat in :gh:`100344`.) + (Contributed by Itamar Oren and Pranav Thulasiram Bhat in :gh:`100344`.) * :func:`asyncio.iscoroutine` now returns ``False`` for generators as :mod:`asyncio` does not support legacy generator-based coroutines. @@ -584,15 +609,16 @@ asyncio calendar -------- -* Add enums :data:`~calendar.Month` and :data:`~calendar.Day`. +* Add enums :data:`calendar.Month` and :data:`calendar.Day` + defining months of the year and days of the week. (Contributed by Prince Roshan in :gh:`103636`.) csv --- -* Add :const:`~csv.QUOTE_NOTNULL` and :const:`~csv.QUOTE_STRINGS` flags to +* Add :const:`csv.QUOTE_NOTNULL` and :const:`csv.QUOTE_STRINGS` flags to provide finer grained control of ``None`` and empty strings by - :class:`~csv.writer` objects. + :class:`csv.writer` objects. dis --- @@ -602,7 +628,7 @@ dis :mod:`dis` module. :opcode:`HAVE_ARGUMENT` is still relevant to real opcodes, but it is not useful for pseudo instructions. Use the new - :data:`~dis.hasarg` collection instead. + :data:`dis.hasarg` collection instead. (Contributed by Irit Katriel in :gh:`94216`.) fractions @@ -611,6 +637,12 @@ fractions * Objects of type :class:`fractions.Fraction` now support float-style formatting. (Contributed by Mark Dickinson in :gh:`100161`.) +importlib.resources +------------------- + +* :func:`importlib.resources.as_file` now supports resource directories. + (Contributed by Jason R. Coombs in :gh:`97930`.) + inspect ------- @@ -682,11 +714,11 @@ pathlib ------- * Add support for subclassing :class:`pathlib.PurePath` and - :class:`~pathlib.Path`, plus their Posix- and Windows-specific variants. - Subclasses may override the :meth:`~pathlib.PurePath.with_segments` method + :class:`pathlib.Path`, plus their Posix- and Windows-specific variants. + Subclasses may override the :meth:`pathlib.PurePath.with_segments` method to pass information between path instances. -* Add :meth:`~pathlib.Path.walk` for walking the directory trees and generating +* Add :meth:`pathlib.Path.walk` for walking the directory trees and generating all file or directory names within them, similar to :func:`os.walk`. (Contributed by Stanislav Zmiev in :gh:`90385`.) @@ -755,20 +787,20 @@ sqlite3 * Add a :ref:`command-line interface `. (Contributed by Erlend E. Aasland in :gh:`77617`.) -* Add the :attr:`~sqlite3.Connection.autocommit` attribute - to :class:`~sqlite3.Connection` - and the *autocommit* parameter to :func:`~sqlite3.connect` +* Add the :attr:`sqlite3.Connection.autocommit` attribute + to :class:`sqlite3.Connection` + and the *autocommit* parameter to :func:`sqlite3.connect` to control :pep:`249`-compliant :ref:`transaction handling `. (Contributed by Erlend E. Aasland in :gh:`83638`.) * Add *entrypoint* keyword-only parameter to - :meth:`~sqlite3.Connection.load_extension`, + :meth:`sqlite3.Connection.load_extension`, for overriding the SQLite extension entry point. (Contributed by Erlend E. Aasland in :gh:`103015`.) -* Add :meth:`~sqlite3.Connection.getconfig` and - :meth:`~sqlite3.Connection.setconfig` to :class:`~sqlite3.Connection` +* Add :meth:`sqlite3.Connection.getconfig` and + :meth:`sqlite3.Connection.setconfig` to :class:`sqlite3.Connection` to make configuration changes to a database connection. (Contributed by Erlend E. Aasland in :gh:`103489`.) @@ -838,8 +870,8 @@ tkinter tokenize -------- -* The :mod:`tokenize` module includes the changes introduced in :pep:`701`. ( - Contributed by Marta Gómez Macías and Pablo Galindo in :gh:`102856`.) +* The :mod:`tokenize` module includes the changes introduced in :pep:`701`. + (Contributed by Marta Gómez Macías and Pablo Galindo in :gh:`102856`.) See :ref:`whatsnew312-porting-to-python312` for more information on the changes to the :mod:`tokenize` module. @@ -947,7 +979,7 @@ Optimizations * Added experimental support for using the BOLT binary optimizer in the build process, which improves performance by 1-5%. - (Contributed by Kevin Modzelewski in :gh:`90536` and tuned by Dong-hee Na in :gh:`101525`) + (Contributed by Kevin Modzelewski in :gh:`90536` and tuned by Donghee Na in :gh:`101525`) * Speed up the regular expression substitution (functions :func:`re.sub` and :func:`re.subn` and corresponding :class:`!re.Pattern` methods) for @@ -955,7 +987,7 @@ Optimizations (Contributed by Serhiy Storchaka in :gh:`91524`.) * Speed up :class:`asyncio.Task` creation by deferring expensive string formatting. - (Contributed by Itamar O in :gh:`103793`.) + (Contributed by Itamar Oren in :gh:`103793`.) * The :func:`tokenize.tokenize` and :func:`tokenize.generate_tokens` functions are up to 64% faster as a side effect of the changes required to cover :pep:`701` in @@ -970,14 +1002,17 @@ Optimizations CPython bytecode changes ======================== -* Remove the :opcode:`LOAD_METHOD` instruction. It has been merged into +* Remove the :opcode:`!LOAD_METHOD` instruction. It has been merged into :opcode:`LOAD_ATTR`. :opcode:`LOAD_ATTR` will now behave like the old - :opcode:`LOAD_METHOD` instruction if the low bit of its oparg is set. + :opcode:`!LOAD_METHOD` instruction if the low bit of its oparg is set. (Contributed by Ken Jin in :gh:`93429`.) * Remove the :opcode:`!JUMP_IF_FALSE_OR_POP` and :opcode:`!JUMP_IF_TRUE_OR_POP` instructions. (Contributed by Irit Katriel in :gh:`102859`.) +* Removed the :opcode:`!PRECALL` instruction. (Contributed by Mark Shannon in + :gh:`92925`.) + * Add the :opcode:`LOAD_FAST_AND_CLEAR` instruction as part of the implementation of :pep:`709`. (Contributed by Carl Meyer in :gh:`101441`.) @@ -1030,6 +1065,18 @@ Deprecated contain the creation time, which is also available in the new ``st_birthtime`` field. (Contributed by Steve Dower in :gh:`99726`.) +* :mod:`os`: On POSIX platforms, :func:`os.fork` can now raise a + :exc:`DeprecationWarning` when it can detect being called from a + multithreaded process. There has always been a fundamental incompatibility + with the POSIX platform when doing so. Even if such code *appeared* to work. + We added the warning to to raise awareness as issues encounted by code doing + this are becoming more frequent. See the :func:`os.fork` documentation for + more details. + + When this warning appears due to usage of :mod:`multiprocessing` or + :mod:`concurrent.futures` the fix is to use a different + :mod:`multiprocessing` start method such as ``"spawn"`` or ``"forkserver"``. + * :mod:`shutil`: The *onerror* argument of :func:`shutil.rmtree` is deprecated as will be removed in Python 3.14. Use *onexc* instead. (Contributed by Irit Katriel in :gh:`102828`.) @@ -1246,13 +1293,19 @@ although there is currently no date scheduled for their removal. Removed ======= -* ``asynchat`` and ``asyncore``: These two modules have been removed +asynchat and asyncore +--------------------- + +* These two modules have been removed according to the schedule in :pep:`594`, having been deprecated in Python 3.6. Use :mod:`asyncio` instead. (Contributed by Nikita Sobolev in :gh:`96580`.) -* :mod:`configparser`: Several names deprecated in the :mod:`configparser` way back in 3.2 have +configparser +------------ + +* Several names deprecated in the :mod:`configparser` way back in 3.2 have been removed per :gh:`89336`: * :class:`configparser.ParsingError` no longer has a ``filename`` attribute @@ -1262,13 +1315,19 @@ Removed * :class:`configparser.ConfigParser` no longer has a ``readfp`` method. Use :meth:`~configparser.ConfigParser.read_file` instead. -* ``distutils``: Remove the ``distutils`` package. It was deprecated in Python 3.10 by +distutils +--------- + +* Remove the :py:mod:`!distutils` package. It was deprecated in Python 3.10 by :pep:`632` "Deprecate distutils module". For projects still using ``distutils`` and cannot be updated to something else, the ``setuptools`` project can be installed: it still provides ``distutils``. (Contributed by Victor Stinner in :gh:`92584`.) -* :mod:`ensurepip`: Remove the bundled setuptools wheel from :mod:`ensurepip`, +ensurepip +--------- + +* Remove the bundled setuptools wheel from :mod:`ensurepip`, and stop installing setuptools in environments created by :mod:`venv`. ``pip (>= 22.1)`` does not require setuptools to be installed in the @@ -1286,27 +1345,42 @@ Removed (Contributed by Pradyun Gedam in :gh:`95299`.) -* :mod:`enum`: Remove ``EnumMeta.__getattr__``, which is no longer needed for +enum +---- + +* Remove :mod:`enum`'s ``EnumMeta.__getattr__``, which is no longer needed for enum attribute access. (Contributed by Ethan Furman in :gh:`95083`.) -* :mod:`ftplib`: Remove the ``FTP_TLS.ssl_version`` class attribute: use the +ftplib +------ + +* Remove :mod:`ftplib`'s ``FTP_TLS.ssl_version`` class attribute: use the *context* parameter instead. (Contributed by Victor Stinner in :gh:`94172`.) -* :mod:`gzip`: Remove the ``filename`` attribute of :class:`gzip.GzipFile`, +gzip +---- + +* Remove the ``filename`` attribute of :mod:`gzip`'s :class:`gzip.GzipFile`, deprecated since Python 2.6, use the :attr:`~gzip.GzipFile.name` attribute instead. In write mode, the ``filename`` attribute added ``'.gz'`` file extension if it was not present. (Contributed by Victor Stinner in :gh:`94196`.) -* :mod:`hashlib`: Remove the pure Python implementation of +hashlib +------- + +* Remove the pure Python implementation of :mod:`hashlib`'s :func:`hashlib.pbkdf2_hmac()`, deprecated in Python 3.10. Python 3.10 and newer requires OpenSSL 1.1.1 (:pep:`644`): this OpenSSL version provides a C implementation of :func:`~hashlib.pbkdf2_hmac()` which is faster. (Contributed by Victor Stinner in :gh:`94199`.) -* :mod:`importlib`: Many previously deprecated cleanups in :mod:`importlib` have now been +importlib +--------- + +* Many previously deprecated cleanups in :mod:`importlib` have now been completed: * References to, and support for :meth:`!module_repr()` has been removed. @@ -1322,10 +1396,13 @@ Removed * ``importlib.abc.Finder``, ``pkgutil.ImpImporter``, and ``pkgutil.ImpLoader`` have been removed. (Contributed by Barry Warsaw in :gh:`98040`.) - * The :mod:`!imp` module has been removed. (Contributed by Barry Warsaw in - :gh:`98040`.) +imp +--- + +* The :mod:`!imp` module has been removed. (Contributed by Barry Warsaw in + :gh:`98040`.) - * Replace removed :mod:`!imp` functions with :mod:`importlib` functions: +* Replace removed :mod:`!imp` functions with :mod:`importlib` functions: ================================= ======================================= imp importlib @@ -1342,7 +1419,7 @@ Removed ``imp.source_from_cache()`` :func:`importlib.util.source_from_cache` ================================= ======================================= - * Replace ``imp.load_source()`` with:: +* Replace ``imp.load_source()`` with:: import importlib.util import importlib.machinery @@ -1357,28 +1434,34 @@ Removed loader.exec_module(module) return module - * Removed :mod:`!imp` functions and attributes with no replacements: +* Removed :mod:`!imp` functions and attributes with no replacements: - * undocumented functions: + * undocumented functions: - * ``imp.init_builtin()`` - * ``imp.load_compiled()`` - * ``imp.load_dynamic()`` - * ``imp.load_package()`` + * ``imp.init_builtin()`` + * ``imp.load_compiled()`` + * ``imp.load_dynamic()`` + * ``imp.load_package()`` - * ``imp.lock_held()``, ``imp.acquire_lock()``, ``imp.release_lock()``: - the locking scheme has changed in Python 3.3 to per-module locks. - * ``imp.find_module()`` constants: ``SEARCH_ERROR``, ``PY_SOURCE``, - ``PY_COMPILED``, ``C_EXTENSION``, ``PY_RESOURCE``, ``PKG_DIRECTORY``, - ``C_BUILTIN``, ``PY_FROZEN``, ``PY_CODERESOURCE``, ``IMP_HOOK``. + * ``imp.lock_held()``, ``imp.acquire_lock()``, ``imp.release_lock()``: + the locking scheme has changed in Python 3.3 to per-module locks. + * ``imp.find_module()`` constants: ``SEARCH_ERROR``, ``PY_SOURCE``, + ``PY_COMPILED``, ``C_EXTENSION``, ``PY_RESOURCE``, ``PKG_DIRECTORY``, + ``C_BUILTIN``, ``PY_FROZEN``, ``PY_CODERESOURCE``, ``IMP_HOOK``. -* :mod:`io`: Remove ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated in Python +io +-- + +* Remove :mod:`io`'s ``io.OpenWrapper`` and ``_pyio.OpenWrapper``, deprecated in Python 3.10: just use :func:`open` instead. The :func:`open` (:func:`io.open`) function is a built-in function. Since Python 3.10, :func:`!_pyio.open` is also a static method. (Contributed by Victor Stinner in :gh:`94169`.) -* :mod:`locale`: Remove the :func:`!locale.format` function, deprecated in Python 3.7: +locale +------ + +* Remove :mod:`locale`'s :func:`!locale.format` function, deprecated in Python 3.7: use :func:`locale.format_string` instead. (Contributed by Victor Stinner in :gh:`94226`.) @@ -1390,7 +1473,10 @@ Removed .. _aiosmtpd: https://pypi.org/project/aiosmtpd/ -* :mod:`sqlite3`: The following undocumented :mod:`sqlite3` features, deprecated in Python +sqlite3 +------- + +* The following undocumented :mod:`sqlite3` features, deprecated in Python 3.10, are now removed: * ``sqlite3.enable_shared_cache()`` @@ -1406,30 +1492,34 @@ Removed (Contributed by Erlend E. Aasland in :gh:`92548`.) -* :mod:`ssl`: +ssl +--- - * Remove the :func:`!ssl.RAND_pseudo_bytes` function, deprecated in Python 3.6: - use :func:`os.urandom` or :func:`ssl.RAND_bytes` instead. - (Contributed by Victor Stinner in :gh:`94199`.) +* Remove :mod:`ssl`'s :func:`!ssl.RAND_pseudo_bytes` function, deprecated in Python 3.6: + use :func:`os.urandom` or :func:`ssl.RAND_bytes` instead. + (Contributed by Victor Stinner in :gh:`94199`.) - * Remove the :func:`!ssl.match_hostname` function. - It was deprecated in Python 3.7. OpenSSL performs - hostname matching since Python 3.7, Python no longer uses the - :func:`!ssl.match_hostname` function. - (Contributed by Victor Stinner in :gh:`94199`.) +* Remove the :func:`!ssl.match_hostname` function. + It was deprecated in Python 3.7. OpenSSL performs + hostname matching since Python 3.7, Python no longer uses the + :func:`!ssl.match_hostname` function. + (Contributed by Victor Stinner in :gh:`94199`.) - * Remove the :func:`!ssl.wrap_socket` function, deprecated in Python 3.7: - instead, create a :class:`ssl.SSLContext` object and call its - :class:`ssl.SSLContext.wrap_socket` method. Any package that still uses - :func:`!ssl.wrap_socket` is broken and insecure. The function neither sends a - SNI TLS extension nor validates server hostname. Code is subject to `CWE-295 - `_: Improper Certificate - Validation. - (Contributed by Victor Stinner in :gh:`94199`.) +* Remove the :func:`!ssl.wrap_socket` function, deprecated in Python 3.7: + instead, create a :class:`ssl.SSLContext` object and call its + :class:`ssl.SSLContext.wrap_socket` method. Any package that still uses + :func:`!ssl.wrap_socket` is broken and insecure. The function neither sends a + SNI TLS extension nor validates server hostname. Code is subject to `CWE-295 + `_: Improper Certificate + Validation. + (Contributed by Victor Stinner in :gh:`94199`.) + +unittest +-------- -* :mod:`unittest`: Removed many old deprecated :mod:`unittest` features: +* Removed many old deprecated :mod:`unittest` features: - - A number of :class:`~unittest.TestCase` method aliases: + * A number of :class:`~unittest.TestCase` method aliases: ============================ =============================== =============== Deprecated alias Method Name Deprecated in @@ -1454,34 +1544,46 @@ Removed You can use https://github.com/isidentical/teyit to automatically modernise your unit tests. - - Undocumented and broken :class:`~unittest.TestCase` method + * Undocumented and broken :class:`~unittest.TestCase` method ``assertDictContainsSubset`` (deprecated in Python 3.2). - - Undocumented :meth:`TestLoader.loadTestsFromModule + * Undocumented :meth:`TestLoader.loadTestsFromModule ` parameter *use_load_tests* (deprecated and ignored since Python 3.2). - - An alias of the :class:`~unittest.TextTestResult` class: + * An alias of the :class:`~unittest.TextTestResult` class: ``_TextTestResult`` (deprecated in Python 3.2). (Contributed by Serhiy Storchaka in :issue:`45162`.) -* :mod:`webbrowser`: Remove support for obsolete browsers from :mod:`webbrowser`. +webbrowser +---------- + +* Remove support for obsolete browsers from :mod:`webbrowser`. Removed browsers include: Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird, and Firefox versions 35 and below (:gh:`102871`). -* :mod:`xml.etree.ElementTree`: Remove the ``ElementTree.Element.copy()`` method of the +xml.etree.ElementTree +--------------------- + +* Remove the ``ElementTree.Element.copy()`` method of the pure Python implementation, deprecated in Python 3.10, use the :func:`copy.copy` function instead. The C implementation of :mod:`xml.etree.ElementTree` has no ``copy()`` method, only a ``__copy__()`` method. (Contributed by Victor Stinner in :gh:`94383`.) -* :mod:`zipimport`: Remove ``find_loader()`` and ``find_module()`` methods, +zipimport +--------- + +* Remove :mod:`zipimport`'s ``find_loader()`` and ``find_module()`` methods, deprecated in Python 3.10: use the ``find_spec()`` method instead. See :pep:`451` for the rationale. (Contributed by Victor Stinner in :gh:`94379`.) -* Removed the ``suspicious`` rule from the documentation Makefile, and +Others +------ + +* Removed the ``suspicious`` rule from the documentation :file:`Makefile`, and removed ``Doc/tools/rstlint.py``, both in favor of `sphinx-lint `_. (Contributed by Julien Palard in :gh:`98179`.) @@ -1547,7 +1649,7 @@ Changes in the Python API so only a very small set of users might be affected. This change helps with interpreter isolation. Furthermore, :mod:`syslog` is a wrapper around process-global resources, which are best managed from the main interpreter. - (Contributed by Dong-hee Na in :gh:`99127`.) + (Contributed by Donghee Na in :gh:`99127`.) * The undocumented locking behavior of :func:`~functools.cached_property` is removed, because it locked across all instances of the class, leading to high @@ -1571,7 +1673,7 @@ Changes in the Python API functions is now changed due to the changes introduced in :pep:`701`. This means that ``STRING`` tokens are not emitted any more for f-strings and the tokens described in :pep:`701` are now produced instead: ``FSTRING_START``, - ``FSRING_MIDDLE`` and ``FSTRING_END`` are now emitted for f-string "string" + ``FSTRING_MIDDLE`` and ``FSTRING_END`` are now emitted for f-string "string" parts in addition to the appropriate tokens for the tokenization in the expression components. For example for the f-string ``f"start {1+1} end"`` the old version of the tokenizer emitted:: @@ -1608,9 +1710,9 @@ Changes in the Python API Build Changes ============= -* Python no longer uses ``setup.py`` to build shared C extension modules. +* Python no longer uses :file:`setup.py` to build shared C extension modules. Build parameters like headers and libraries are detected in ``configure`` - script. Extensions are built by ``Makefile``. Most extensions use + script. Extensions are built by :file:`Makefile`. Most extensions use ``pkg-config`` and fall back to manual detection. (Contributed by Christian Heimes in :gh:`93939`.) @@ -1621,9 +1723,9 @@ Build Changes * CPython now uses the ThinLTO option as the default link time optimization policy if the Clang compiler accepts the flag. - (Contributed by Dong-hee Na in :gh:`89536`.) + (Contributed by Donghee Na in :gh:`89536`.) -* Add ``COMPILEALL_OPTS`` variable in Makefile to override :mod:`compileall` +* Add ``COMPILEALL_OPTS`` variable in :file:`Makefile` to override :mod:`compileall` options (default: ``-j0``) in ``make install``. Also merged the 3 ``compileall`` commands into a single command to build .pyc files for all optimization levels (0, 1, 2) at once. @@ -1750,7 +1852,7 @@ New Features * Added :c:func:`PyCode_AddWatcher` and :c:func:`PyCode_ClearWatcher` APIs to register callbacks to receive notification on creation and destruction of code objects. - (Contributed by Itamar Ostricher in :gh:`91054`.) + (Contributed by Itamar Oren in :gh:`91054`.) * Add :c:func:`PyFrame_GetVar` and :c:func:`PyFrame_GetVarString` functions to get a frame variable by its name. @@ -1790,7 +1892,7 @@ New Features - ``SSTATE_INTERNED_IMMORTAL_STATIC`` An identifier for interned unicode objects that are immortal and static - ``sys.getunicodeinternedsize`` This returns the total number of unicode - objects that have been interned. This is now needed for refleak.py to + objects that have been interned. This is now needed for :file:`refleak.py` to correctly track reference counts and allocated blocks (Contributed by Eddie Elizondo in :gh:`84436`.) @@ -1981,10 +2083,10 @@ Deprecated * Creating immutable types (:c:macro:`Py_TPFLAGS_IMMUTABLETYPE`) with mutable bases is deprecated and will be disabled in Python 3.14. -* The ``structmember.h`` header is deprecated, though it continues to be +* The :file:`structmember.h` header is deprecated, though it continues to be available and there are no plans to remove it. - Its contents are now available just by including ``Python.h``, + Its contents are now available just by including :file:`Python.h`, with a ``Py`` prefix added if it was missing: - :c:struct:`PyMemberDef`, :c:func:`PyMember_GetOne` and @@ -1994,14 +2096,14 @@ Deprecated - The flags :c:macro:`Py_READONLY` (previously ``READONLY``) and :c:macro:`Py_AUDIT_READ` (previously all uppercase) - Several items are not exposed from ``Python.h``: + Several items are not exposed from :file:`Python.h`: - :c:macro:`T_OBJECT` (use :c:macro:`Py_T_OBJECT_EX`) - :c:macro:`T_NONE` (previously undocumented, and pretty quirky) - The macro ``WRITE_RESTRICTED`` which does nothing. - The macros ``RESTRICTED`` and ``READ_RESTRICTED``, equivalents of :c:macro:`Py_AUDIT_READ`. - - In some configurations, ```` is not included from ``Python.h``. + - In some configurations, ```` is not included from :file:`Python.h`. It should be included manually when using ``offsetof()``. The deprecated header continues to provide its original @@ -2031,8 +2133,8 @@ Deprecated Removed ------- -* Remove the ``token.h`` header file. There was never any public tokenizer C - API. The ``token.h`` header file was only designed to be used by Python +* Remove the :file:`token.h` header file. There was never any public tokenizer C + API. The :file:`token.h` header file was only designed to be used by Python internals. (Contributed by Victor Stinner in :gh:`92651`.) diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index ffded6ea8350f7..a4b0f69d67b617 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -115,12 +115,24 @@ array It can be used instead of ``'u'`` type code, which is deprecated. (Contributed by Inada Naoki in :gh:`80480`.) +copy +---- + +* Add :func:`copy.replace` function which allows to create a modified copy of + an object, which is especially useful for immutable objects. + It supports named tuples created with the factory function + :func:`collections.namedtuple`, :class:`~dataclasses.dataclass` instances, + various :mod:`datetime` objects, :class:`~inspect.Signature` objects, + :class:`~inspect.Parameter` objects, :ref:`code object `, and + any user classes which define the :meth:`!__replace__` method. + (Contributed by Serhiy Storchaka in :gh:`108751`.) + dbm --- * Add :meth:`dbm.gnu.gdbm.clear` and :meth:`dbm.ndbm.ndbm.clear` methods that remove all items from the database. - (Contributed by Dong-hee Na in :gh:`107122`.) + (Contributed by Donghee Na in :gh:`107122`.) doctest ------- @@ -176,6 +188,10 @@ pdb the new ``exceptions [exc_number]`` command for Pdb. (Contributed by Matthias Bussonnier in :gh:`106676`.) +* Expressions/Statements whose prefix is a pdb command are now correctly + identified and executed. + (Contributed by Tian Gao in :gh:`108464`.) + sqlite3 ------- @@ -195,7 +211,7 @@ tkinter traceback --------- -* Add *show_group* paramter to :func:`traceback.TracebackException.format_exception_only` +* Add *show_group* parameter to :func:`traceback.TracebackException.format_exception_only` to format the nested exceptions of a :exc:`BaseExceptionGroup` instance, recursively. (Contributed by Irit Katriel in :gh:`105292`.) @@ -207,6 +223,16 @@ typing check whether a class is a :class:`typing.Protocol`. (Contributed by Jelle Zijlstra in :gh:`104873`.) +venv +---- + +* Add support for adding source control management (SCM) ignore files to a + virtual environment's directory. By default, Git is supported. This is + implemented as opt-in via the API which can be extended to support other SCMs + (:class:`venv.EnvBuilder` and :func:`venv.create`), and opt-out via the CLI + (using ``--without-scm-ignore-files``). (Contributed by Brett Cannon in + :gh:`108125`.) + Optimizations ============= @@ -235,10 +261,19 @@ Deprecated practice. (Contributed by Victor Stinner in :gh:`106535`.) -* :mod:`typing`: Creating a :class:`typing.NamedTuple` class using keyword arguments to denote - the fields (``NT = NamedTuple("NT", x=int, y=int)``) is deprecated, and will - be disallowed in Python 3.15. Use the class-based syntax or the functional - syntax instead. (Contributed by Alex Waygood in :gh:`105566`.) +* :mod:`http.server`: :class:`http.server.CGIHTTPRequestHandler` now emits a + :exc:`DeprecationWarning` as it will be removed in 3.15. Process based CGI + http servers have been out of favor for a very long time. This code was + outdated, unmaintained, and rarely used. It has a high potential for both + security and functionality bugs. This includes removal of the ``--cgi`` + flag to the ``python -m http.server`` command line in 3.15. + +* :mod:`typing`: + + * Creating a :class:`typing.NamedTuple` class using keyword arguments to denote + the fields (``NT = NamedTuple("NT", x=int, y=int)``) is deprecated, and will + be disallowed in Python 3.15. Use the class-based syntax or the functional + syntax instead. (Contributed by Alex Waygood in :gh:`105566`.) * When using the functional syntax to create a :class:`typing.NamedTuple` class or a :class:`typing.TypedDict` class, failing to pass a value to the @@ -288,6 +323,11 @@ Deprecated (Contributed by Erlend E. Aasland in :gh:`107948` and :gh:`108278`.) +* The ``dis.HAVE_ARGUMENT`` separator is deprecated. Check membership + in :data:`~dis.hasarg` instead. + (Contributed by Irit Katriel in :gh:`109319`.) + + Pending Removal in Python 3.14 ------------------------------ @@ -396,6 +436,11 @@ Pending Removal in Python 3.14 Pending Removal in Python 3.15 ------------------------------ +* :class:`http.server.CGIHTTPRequestHandler` will be removed along with its + related ``--cgi`` flag to ``python -m http.server``. It was obsolete and + rarely used. No direct replacement exists. *Anything* is better than CGI + to interface a web server with a request handler. + * :class:`typing.NamedTuple`: * The undocumented keyword argument syntax for creating NamedTuple classes @@ -886,6 +931,18 @@ New Features be treated as a failure. (Contributed by Serhiy Storchaka in :gh:`106307`.) +* Add fixed variants of functions which silently ignore errors: + + - :c:func:`PyObject_HasAttrWithError` replaces :c:func:`PyObject_HasAttr`. + - :c:func:`PyObject_HasAttrStringWithError` replaces :c:func:`PyObject_HasAttrString`. + - :c:func:`PyMapping_HasKeyWithError` replaces :c:func:`PyMapping_HasKey`. + - :c:func:`PyMapping_HasKeyStringWithError` replaces :c:func:`PyMapping_HasKeyString`. + + New functions return not only ``1`` for true and ``0`` for false, but also + ``-1`` for error. + + (Contributed by Serhiy Storchaka in :gh:`108511`.) + * If Python is built in :ref:`debug mode ` or :option:`with assertions <--with-assertions>`, :c:func:`PyTuple_SET_ITEM` and :c:func:`PyList_SET_ITEM` now check the index argument with an assertion. @@ -937,6 +994,21 @@ Porting to Python 3.13 functions: ``close()``, ``getpagesize()``, ``getpid()`` and ``sysconf()``. (Contributed by Victor Stinner in :gh:`108765`.) +* ``Python.h`` no longer includes these standard header files: ````, + ```` and ````. If needed, they should now be + included explicitly. For example, ```` provides the ``clock()`` and + ``gmtime()`` functions, ```` provides the ``select()`` + function, and ```` provides the ``futimes()``, ``gettimeofday()`` + and ``setitimer()`` functions. + (Contributed by Victor Stinner in :gh:`108765`.) + +* ``Python.h`` no longer includes the ```` standard header file. If + needed, it should now be included explicitly. For example, it provides + ``isalpha()`` and ``tolower()`` functions which are locale dependent. Python + provides locale independent functions, like :c:func:`!Py_ISALPHA` and + :c:func:`!Py_TOLOWER`. + (Contributed by Victor Stinner in :gh:`108765`.) + Deprecated ---------- diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst index 3f98c82c2fa556..e440193d6f3d29 100644 --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -2067,7 +2067,7 @@ The :pep:`418` added new functions to the :mod:`time` module: Other new functions: * :func:`~time.clock_getres`, :func:`~time.clock_gettime` and - :func:`~time.clock_settime` functions with ``CLOCK_xxx`` constants. + :func:`~time.clock_settime` functions with :samp:`CLOCK_{xxx}` constants. (Contributed by Victor Stinner in :issue:`10278`.) To improve cross platform consistency, :func:`~time.sleep` now raises a diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst index a36e9fa852723a..2ddab76814369e 100644 --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -2085,7 +2085,7 @@ Deprecations in the Python API :meth:`importlib.abc.MetaPathFinder.find_spec`; :meth:`!importlib.abc.PathEntryFinder.find_loader` and :meth:`!find_module` are replaced by - :meth:`importlib.abc.PathEntryFinder.find_spec`; all of the ``xxxLoader`` ABC + :meth:`importlib.abc.PathEntryFinder.find_spec`; all of the :samp:`{xxx}Loader` ABC ``load_module`` methods (:meth:`!importlib.abc.Loader.load_module`, :meth:`!importlib.abc.InspectLoader.load_module`, :meth:`!importlib.abc.FileLoader.load_module`, diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst index 0c45a42d1a7c17..ae6affcab664c6 100644 --- a/Doc/whatsnew/3.5.rst +++ b/Doc/whatsnew/3.5.rst @@ -921,7 +921,7 @@ and improves their substitutability for lists. Docstrings produced by :func:`~collections.namedtuple` can now be updated:: Point = namedtuple('Point', ['x', 'y']) - Point.__doc__ += ': Cartesian coodinate' + Point.__doc__ += ': Cartesian coordinate' Point.x.__doc__ = 'abscissa' Point.y.__doc__ = 'ordinate' diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index 7946bf910af2c4..e15180c89f594c 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -404,7 +404,7 @@ Other Language Changes or :meth:`~object.__complex__` is not available. (Contributed by Serhiy Storchaka in :issue:`20092`.) -* Added support of ``\N{name}`` escapes in :mod:`regular expressions `:: +* Added support of :samp:`\\N\\{{name}\\}` escapes in :mod:`regular expressions `:: >>> notice = 'Copyright © 2019' >>> copyright_year_pattern = re.compile(r'\N{copyright sign}\s*(\d{4})') @@ -947,7 +947,7 @@ This made it difficult to update, experiment with, or teach the various logging configuration options using the interactive prompt or a Jupyter notebook. -(Suggested by Raymond Hettinger, implemented by Dong-hee Na, and +(Suggested by Raymond Hettinger, implemented by Donghee Na, and reviewed by Vinay Sajip in :issue:`33897`.) @@ -1714,7 +1714,7 @@ Deprecated * The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` has been deprecated. - (Contributed by Dong-hee Na in :issue:`35283`.) + (Contributed by Donghee Na in :issue:`35283`.) * Many builtin and extension functions that take integer arguments will now emit a deprecation warning for :class:`~decimal.Decimal`\ s, diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 8e2df19419bfc2..cb2482ee48d7fa 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -44,7 +44,6 @@ This article explains the new features in Python 3.9, compared to 3.8. Python 3.9 was released on October 5, 2020. - For full details, see the :ref:`changelog `. .. seealso:: @@ -415,7 +414,7 @@ datetime The :meth:`~datetime.date.isocalendar()` of :class:`datetime.date` and :meth:`~datetime.datetime.isocalendar()` of :class:`datetime.datetime` methods now returns a :func:`~collections.namedtuple` instead of a :class:`tuple`. -(Contributed by Dong-hee Na in :issue:`24416`.) +(Contributed by Donghee Na in :issue:`24416`.) distutils --------- @@ -429,14 +428,14 @@ fcntl Added constants :const:`~fcntl.F_OFD_GETLK`, :const:`~fcntl.F_OFD_SETLK` and :const:`~fcntl.F_OFD_SETLKW`. -(Contributed by Dong-hee Na in :issue:`38602`.) +(Contributed by Donghee Na in :issue:`38602`.) ftplib ------- :class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise a :class:`ValueError` if the given timeout for their constructor is zero to prevent the creation of -a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.) +a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) gc -- @@ -468,7 +467,7 @@ http ---- HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` are added to -:class:`http.HTTPStatus`. (Contributed by Dong-hee Na in :issue:`39509` and Ross Rhodes in :issue:`39507`.) +:class:`http.HTTPStatus`. (Contributed by Donghee Na in :issue:`39509` and Ross Rhodes in :issue:`39507`.) IDLE and idlelib ---------------- @@ -509,14 +508,14 @@ an optional *timeout* parameter for their constructors. Also, the :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and :class:`~imaplib.IMAP4_stream` were applied to this change. -(Contributed by Dong-hee Na in :issue:`38615`.) +(Contributed by Donghee Na in :issue:`38615`.) :meth:`imaplib.IMAP4.unselect` is added. :meth:`imaplib.IMAP4.unselect` frees server's resources associated with the selected mailbox and returns the server to the authenticated state. This command performs the same actions as :meth:`imaplib.IMAP4.close`, except that no messages are permanently removed from the currently -selected mailbox. (Contributed by Dong-hee Na in :issue:`40375`.) +selected mailbox. (Contributed by Donghee Na in :issue:`40375`.) importlib --------- @@ -588,13 +587,13 @@ nntplib :class:`~!nntplib.NNTP` and :class:`~!nntplib.NNTP_SSL` now raise a :class:`ValueError` if the given timeout for their constructor is zero to prevent the creation of -a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.) +a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) os -- Added :const:`~os.CLD_KILLED` and :const:`~os.CLD_STOPPED` for :attr:`si_code`. -(Contributed by Dong-hee Na in :issue:`38493`.) +(Contributed by Donghee Na in :issue:`38493`.) Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) and :const:`os.P_PIDFD` (:issue:`38713`) for process management with file @@ -629,7 +628,7 @@ poplib :class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a :class:`ValueError` if the given timeout for their constructor is zero to prevent the creation of -a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.) +a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) pprint ------ @@ -661,10 +660,10 @@ smtplib :class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a :class:`ValueError` if the given timeout for their constructor is zero to prevent the creation of -a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.) +a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.) :class:`~smtplib.LMTP` constructor now has an optional *timeout* parameter. -(Contributed by Dong-hee Na in :issue:`39329`.) +(Contributed by Donghee Na in :issue:`39329`.) socket ------ @@ -777,7 +776,7 @@ Optimizations * A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`, :class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using :pep:`590` vectorcall protocol. - (Contributed by Dong-hee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.) + (Contributed by Donghee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.) * Optimized :func:`~set.difference_update` for the case when the other set is much larger than the base set. @@ -791,7 +790,7 @@ Optimizations * :term:`floor division` of float operation now has a better performance. Also the message of :exc:`ZeroDivisionError` for this operation is updated. - (Contributed by Dong-hee Na in :issue:`39434`.) + (Contributed by Donghee Na in :issue:`39434`.) * Decoding short ASCII strings with UTF-8 and ascii codecs is now about 15% faster. (Contributed by Inada Naoki in :issue:`37348`.) @@ -961,7 +960,7 @@ Removed are not supported or not enabled by NNTP server administrators. For ``xgtitle()``, please use :meth:`!nntplib.NNTP.descriptions` or :meth:`!nntplib.NNTP.description` instead. - (Contributed by Dong-hee Na in :issue:`39366`.) + (Contributed by Donghee Na in :issue:`39366`.) * :class:`array.array`: ``tostring()`` and ``fromstring()`` methods have been removed. They were aliases to ``tobytes()`` and ``frombytes()``, deprecated @@ -994,7 +993,7 @@ Removed * The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` has been removed. It was deprecated since Python 3.8. Use :meth:`~threading.Thread.is_alive()` instead. - (Contributed by Dong-hee Na in :issue:`37804`.) + (Contributed by Donghee Na in :issue:`37804`.) * Methods ``getchildren()`` and ``getiterator()`` of classes :class:`~xml.etree.ElementTree.ElementTree` and @@ -1315,7 +1314,7 @@ New Features * The :c:func:`PyModule_AddType` function is added to help adding a type to a module. - (Contributed by Dong-hee Na in :issue:`40024`.) + (Contributed by Donghee Na in :issue:`40024`.) * Added the functions :c:func:`PyObject_GC_IsTracked` and :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if diff --git a/Grammar/python.gram b/Grammar/python.gram index e7c817856d514b..73aaa796b075bc 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -19,8 +19,6 @@ _PyPegen_parse(Parser *p) result = eval_rule(p); } else if (p->start_rule == Py_func_type_input) { result = func_type_rule(p); - } else if (p->start_rule == Py_fstring_input) { - result = fstring_rule(p); } return result; @@ -89,7 +87,6 @@ file[mod_ty]: a=[statements] ENDMARKER { _PyPegen_make_module(p, a) } interactive[mod_ty]: a=statement_newline { _PyAST_Interactive(a, p->arena) } eval[mod_ty]: a=expressions NEWLINE* ENDMARKER { _PyAST_Expression(a, p->arena) } func_type[mod_ty]: '(' a=[type_expressions] ')' '->' b=expression NEWLINE* ENDMARKER { _PyAST_FunctionType(a, b, p->arena) } -fstring[expr_ty]: star_expressions # GENERAL STATEMENTS # ================== @@ -647,20 +644,20 @@ type_param_seq[asdl_type_param_seq*]: a[asdl_type_param_seq*]=','.type_param+ [' type_param[type_param_ty] (memo): | a=NAME b=[type_param_bound] { _PyAST_TypeVar(a->v.Name.id, b, EXTRA) } - | '*' a=NAME colon=":" e=expression { + | '*' a=NAME colon=':' e=expression { RAISE_SYNTAX_ERROR_STARTING_FROM(colon, e->kind == Tuple_kind ? "cannot use constraints with TypeVarTuple" : "cannot use bound with TypeVarTuple") } | '*' a=NAME { _PyAST_TypeVarTuple(a->v.Name.id, EXTRA) } - | '**' a=NAME colon=":" e=expression { + | '**' a=NAME colon=':' e=expression { RAISE_SYNTAX_ERROR_STARTING_FROM(colon, e->kind == Tuple_kind ? "cannot use constraints with ParamSpec" : "cannot use bound with ParamSpec") } | '**' a=NAME { _PyAST_ParamSpec(a->v.Name.id, EXTRA) } -type_param_bound[expr_ty]: ":" e=expression { e } +type_param_bound[expr_ty]: ':' e=expression { e } # EXPRESSIONS # ----------- @@ -915,7 +912,7 @@ fstring_middle[expr_ty]: | fstring_replacement_field | t=FSTRING_MIDDLE { _PyPegen_constant_from_token(p, t) } fstring_replacement_field[expr_ty]: - | '{' a=(yield_expr | star_expressions) debug_expr="="? conversion=[fstring_conversion] format=[fstring_full_format_spec] rbrace='}' { + | '{' a=(yield_expr | star_expressions) debug_expr='='? conversion=[fstring_conversion] format=[fstring_full_format_spec] rbrace='}' { _PyPegen_formatted_value(p, a, debug_expr, conversion, format, rbrace, EXTRA) } | invalid_replacement_field fstring_conversion[ResultTokenWithMetadata*]: @@ -1170,7 +1167,7 @@ invalid_expression: _PyPegen_check_legacy_stmt(p, a) ? NULL : p->tokens[p->mark-1]->level == 0 ? NULL : RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Perhaps you forgot a comma?") } | a=disjunction 'if' b=disjunction !('else'|':') { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "expected 'else' after 'if' expression") } - | a='lambda' [lambda_params] b=':' &(FSTRING_MIDDLE | fstring_replacement_field) { + | a='lambda' [lambda_params] b=':' &FSTRING_MIDDLE { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "f-string: lambda expressions are not allowed without parentheses") } invalid_named_expression(memo): diff --git a/Include/Python.h b/Include/Python.h index 4cc72bb23ce7a3..7312cc87d5cc33 100644 --- a/Include/Python.h +++ b/Include/Python.h @@ -17,7 +17,6 @@ // Include standard header files #include // assert() -#include // tolower() #include // uintptr_t #include // INT_MAX #include // HUGE_VAL @@ -49,6 +48,7 @@ #include "pytypedefs.h" #include "pybuffer.h" #include "pystats.h" +#include "pyatomic.h" #include "object.h" #include "objimpl.h" #include "typeslots.h" diff --git a/Include/abstract.h b/Include/abstract.h index dd915004e7834e..bd12a54963c13f 100644 --- a/Include/abstract.h +++ b/Include/abstract.h @@ -50,6 +50,25 @@ extern "C" { This function always succeeds. */ + +/* Implemented elsewhere: + + int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name); + + Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise. + This is equivalent to the Python expression: hasattr(o,attr_name). + Returns -1 on failure. */ + + +/* Implemented elsewhere: + + int PyObject_HasAttrWithError(PyObject *o, PyObject *attr_name); + + Returns 1 if o has the attribute attr_name, and 0 otherwise. + This is equivalent to the Python expression: hasattr(o,attr_name). + Returns -1 on failure. */ + + /* Implemented elsewhere: PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name); @@ -821,6 +840,18 @@ PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key); This function always succeeds. */ PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key); +/* Return 1 if the mapping object has the key 'key', and 0 otherwise. + This is equivalent to the Python expression: key in o. + On failure, return -1. */ + +PyAPI_FUNC(int) PyMapping_HasKeyWithError(PyObject *o, PyObject *key); + +/* Return 1 if the mapping object has the key 'key', and 0 otherwise. + This is equivalent to the Python expression: key in o. + On failure, return -1. */ + +PyAPI_FUNC(int) PyMapping_HasKeyStringWithError(PyObject *o, const char *key); + /* On success, return a list or tuple of the keys in mapping object 'o'. On failure, return NULL. */ PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o); diff --git a/Include/compile.h b/Include/compile.h index 3c5acd7209f763..52d0bc76c9fca4 100644 --- a/Include/compile.h +++ b/Include/compile.h @@ -10,9 +10,6 @@ extern "C" { #define Py_eval_input 258 #define Py_func_type_input 345 -/* This doesn't need to match anything */ -#define Py_fstring_input 800 - #ifndef Py_LIMITED_API # define Py_CPYTHON_COMPILE_H # include "cpython/compile.h" diff --git a/Include/cpython/code.h b/Include/cpython/code.h index 24c5ec23590c94..45b09a1265df80 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -8,16 +8,21 @@ extern "C" { #endif - +/* Count of all local monitoring events */ +#define _PY_MONITORING_LOCAL_EVENTS 10 /* Count of all "real" monitoring events (not derived from other events) */ #define _PY_MONITORING_UNGROUPED_EVENTS 15 /* Count of all monitoring events */ #define _PY_MONITORING_EVENTS 17 -/* Table of which tools are active for each monitored event. */ -typedef struct _Py_Monitors { +/* Tables of which tools are active for each monitored event. */ +typedef struct _Py_LocalMonitors { + uint8_t tools[_PY_MONITORING_LOCAL_EVENTS]; +} _Py_LocalMonitors; + +typedef struct _Py_GlobalMonitors { uint8_t tools[_PY_MONITORING_UNGROUPED_EVENTS]; -} _Py_Monitors; +} _Py_GlobalMonitors; /* Each instruction in a code object is a fixed-width value, * currently 2 bytes: 1-byte opcode + 1-byte oparg. The EXTENDED_ARG @@ -88,9 +93,9 @@ typedef struct { */ typedef struct { /* Monitoring specific to this code object */ - _Py_Monitors local_monitors; + _Py_LocalMonitors local_monitors; /* Monitoring that is active on this code object */ - _Py_Monitors active_monitors; + _Py_LocalMonitors active_monitors; /* The tools that are to be notified for events for the matching code unit */ uint8_t *tools; /* Information to support line events */ diff --git a/Include/cpython/import.h b/Include/cpython/import.h index cdfdd15bfa48d2..7daf0b84fcf71b 100644 --- a/Include/cpython/import.h +++ b/Include/cpython/import.h @@ -17,7 +17,6 @@ struct _frozen { const unsigned char *code; int size; int is_package; - PyObject *(*get_code)(void); }; /* Embedding apps may change this pointer to point to their favorite diff --git a/Include/cpython/initconfig.h b/Include/cpython/initconfig.h index 7fb7a9868be926..ee130467824daa 100644 --- a/Include/cpython/initconfig.h +++ b/Include/cpython/initconfig.h @@ -215,6 +215,11 @@ typedef struct PyConfig { // If non-zero, we believe we're running from a source tree. int _is_python_build; + +#ifdef Py_STATS + // If non-zero, turns on statistics gathering. + int _pystats; +#endif } PyConfig; PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config); diff --git a/Include/cpython/optimizer.h b/Include/cpython/optimizer.h index 10457afc180a00..47536108a9665e 100644 --- a/Include/cpython/optimizer.h +++ b/Include/cpython/optimizer.h @@ -40,7 +40,7 @@ PyAPI_FUNC(_PyOptimizerObject *) PyUnstable_GetOptimizer(void); PyAPI_FUNC(_PyExecutorObject *) PyUnstable_GetExecutor(PyCodeObject *code, int offset); -struct _PyInterpreterFrame * +int _PyOptimizer_BackEdge(struct _PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNIT *dest, PyObject **stack_pointer); extern _PyOptimizerObject _PyOptimizer_Default; diff --git a/Include/cpython/pyatomic.h b/Include/cpython/pyatomic.h index 73712db847087d..ab182381b39f00 100644 --- a/Include/cpython/pyatomic.h +++ b/Include/cpython/pyatomic.h @@ -83,9 +83,9 @@ // # release // ... -#ifndef Py_ATOMIC_H -#define Py_ATOMIC_H - +#ifndef Py_CPYTHON_ATOMIC_H +# error "this header file must not be included directly" +#endif // --- _Py_atomic_add -------------------------------------------------------- // Atomically adds `value` to `obj` and returns the previous value @@ -501,6 +501,3 @@ static inline void _Py_atomic_fence_release(void); #else # error "no available pyatomic implementation for this platform/compiler" #endif - -#endif /* Py_ATOMIC_H */ - diff --git a/Include/cpython/pyatomic_msc.h b/Include/cpython/pyatomic_msc.h index c88bb03cc8f94a..287ed43b5714cd 100644 --- a/Include/cpython/pyatomic_msc.h +++ b/Include/cpython/pyatomic_msc.h @@ -906,7 +906,7 @@ _Py_atomic_store_ptr_release(void *obj, void *value) #if defined(_M_X64) || defined(_M_IX86) *(void * volatile *)obj = value; #elif defined(_M_ARM64) - __stlr64(obj, (uintptr_t)value); + __stlr64((unsigned __int64 volatile *)obj, (uintptr_t)value); #else # error "no implementation of _Py_atomic_store_ptr_release" #endif diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index 9633a5407f28a6..da96eec4b35aab 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -116,10 +116,6 @@ PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( PyObject *filename, int lineno); -PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg( - const char *err_msg, - PyObject *obj); - PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc( const char *func, const char *message); diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index fc5f58db86dbe8..5e184d0ca0944b 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -194,18 +194,17 @@ struct _ts { }; -/* WASI has limited call stack. Python's recursion limit depends on code - layout, optimization, and WASI runtime. Wasmtime can handle about 700 - recursions, sometimes less. 500 is a more conservative limit. */ -#ifndef C_RECURSION_LIMIT -# ifdef __wasi__ -# define C_RECURSION_LIMIT 500 -# else - // This value is duplicated in Lib/test/support/__init__.py -# define C_RECURSION_LIMIT 1500 -# endif +#ifdef __wasi__ + // WASI has limited call stack. Python's recursion limit depends on code + // layout, optimization, and WASI runtime. Wasmtime can handle about 700 + // recursions, sometimes less. 500 is a more conservative limit. +# define Py_C_RECURSION_LIMIT 500 +#else + // This value is duplicated in Lib/test/support/__init__.py +# define Py_C_RECURSION_LIMIT 1500 #endif + /* other API */ /* Similar to PyThreadState_Get(), but don't issue a fatal error @@ -310,6 +309,7 @@ PyAPI_FUNC(void) _PyCrossInterpreterData_Clear( PyAPI_FUNC(int) _PyObject_GetCrossInterpreterData(PyObject *, _PyCrossInterpreterData *); PyAPI_FUNC(PyObject *) _PyCrossInterpreterData_NewObject(_PyCrossInterpreterData *); PyAPI_FUNC(int) _PyCrossInterpreterData_Release(_PyCrossInterpreterData *); +PyAPI_FUNC(int) _PyCrossInterpreterData_ReleaseAndRawFree(_PyCrossInterpreterData *); PyAPI_FUNC(int) _PyObject_CheckCrossInterpreterData(PyObject *); diff --git a/Include/cpython/pystats.h b/Include/cpython/pystats.h new file mode 100644 index 00000000000000..150e16faa96ca1 --- /dev/null +++ b/Include/cpython/pystats.h @@ -0,0 +1,120 @@ +// Statistics on Python performance. +// +// API: +// +// - _Py_INCREF_STAT_INC() and _Py_DECREF_STAT_INC() used by Py_INCREF() +// and Py_DECREF(). +// - _Py_stats variable +// +// Functions of the sys module: +// +// - sys._stats_on() +// - sys._stats_off() +// - sys._stats_clear() +// - sys._stats_dump() +// +// Python must be built with ./configure --enable-pystats to define the +// Py_STATS macro. +// +// Define _PY_INTERPRETER macro to increment interpreter_increfs and +// interpreter_decrefs. Otherwise, increment increfs and decrefs. + +#ifndef Py_CPYTHON_PYSTATS_H +# error "this header file must not be included directly" +#endif + +#define SPECIALIZATION_FAILURE_KINDS 36 + +/* Stats for determining who is calling PyEval_EvalFrame */ +#define EVAL_CALL_TOTAL 0 +#define EVAL_CALL_VECTOR 1 +#define EVAL_CALL_GENERATOR 2 +#define EVAL_CALL_LEGACY 3 +#define EVAL_CALL_FUNCTION_VECTORCALL 4 +#define EVAL_CALL_BUILD_CLASS 5 +#define EVAL_CALL_SLOT 6 +#define EVAL_CALL_FUNCTION_EX 7 +#define EVAL_CALL_API 8 +#define EVAL_CALL_METHOD 9 + +#define EVAL_CALL_KINDS 10 + +typedef struct _specialization_stats { + uint64_t success; + uint64_t failure; + uint64_t hit; + uint64_t deferred; + uint64_t miss; + uint64_t deopt; + uint64_t failure_kinds[SPECIALIZATION_FAILURE_KINDS]; +} SpecializationStats; + +typedef struct _opcode_stats { + SpecializationStats specialization; + uint64_t execution_count; + uint64_t pair_count[256]; +} OpcodeStats; + +typedef struct _call_stats { + uint64_t inlined_py_calls; + uint64_t pyeval_calls; + uint64_t frames_pushed; + uint64_t frame_objects_created; + uint64_t eval_calls[EVAL_CALL_KINDS]; +} CallStats; + +typedef struct _object_stats { + uint64_t increfs; + uint64_t decrefs; + uint64_t interpreter_increfs; + uint64_t interpreter_decrefs; + uint64_t allocations; + uint64_t allocations512; + uint64_t allocations4k; + uint64_t allocations_big; + uint64_t frees; + uint64_t to_freelist; + uint64_t from_freelist; + uint64_t new_values; + uint64_t dict_materialized_on_request; + uint64_t dict_materialized_new_key; + uint64_t dict_materialized_too_big; + uint64_t dict_materialized_str_subclass; + uint64_t dict_dematerialized; + uint64_t type_cache_hits; + uint64_t type_cache_misses; + uint64_t type_cache_dunder_hits; + uint64_t type_cache_dunder_misses; + uint64_t type_cache_collisions; + uint64_t optimization_attempts; + uint64_t optimization_traces_created; + uint64_t optimization_traces_executed; + uint64_t optimization_uops_executed; + /* Temporary value used during GC */ + uint64_t object_visits; +} ObjectStats; + +typedef struct _gc_stats { + uint64_t collections; + uint64_t object_visits; + uint64_t objects_collected; +} GCStats; + +typedef struct _stats { + OpcodeStats opcode_stats[256]; + CallStats call_stats; + ObjectStats object_stats; + GCStats *gc_stats; +} PyStats; + + +// Export for shared extensions like 'math' +PyAPI_DATA(PyStats*) _Py_stats; + +#ifdef _PY_INTERPRETER +# define _Py_INCREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.interpreter_increfs++; } while (0) +# define _Py_DECREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.interpreter_decrefs++; } while (0) +#else +# define _Py_INCREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.increfs++; } while (0) +# define _Py_DECREF_STAT_INC() do { if (_Py_stats) _Py_stats->object_stats.decrefs++; } while (0) +#endif diff --git a/Include/exports.h b/Include/exports.h index 59373c39ff757c..ce601216f17156 100644 --- a/Include/exports.h +++ b/Include/exports.h @@ -1,6 +1,29 @@ #ifndef Py_EXPORTS_H #define Py_EXPORTS_H +/* Declarations for symbol visibility. + + PyAPI_FUNC(type): Declares a public Python API function and return type + PyAPI_DATA(type): Declares public Python data and its type + PyMODINIT_FUNC: A Python module init function. If these functions are + inside the Python core, they are private to the core. + If in an extension module, it may be declared with + external linkage depending on the platform. + + As a number of platforms support/require "__declspec(dllimport/dllexport)", + we support a HAVE_DECLSPEC_DLL macro to save duplication. +*/ + +/* + All windows ports, except cygwin, are handled in PC/pyconfig.h. + + Cygwin is the only other autoconf platform requiring special + linkage handling and it uses __declspec(). +*/ +#if defined(__CYGWIN__) +# define HAVE_DECLSPEC_DLL +#endif + #if defined(_WIN32) || defined(__CYGWIN__) #if defined(Py_ENABLE_SHARED) #define Py_IMPORTED_SYMBOL __declspec(dllimport) @@ -33,4 +56,53 @@ #endif #endif +/* only get special linkage if built as shared or platform is Cygwin */ +#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) +# if defined(HAVE_DECLSPEC_DLL) +# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) +# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE +# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE + /* module init functions inside the core need no external linkage */ + /* except for Cygwin to handle embedding */ +# if defined(__CYGWIN__) +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* +# else /* __CYGWIN__ */ +# define PyMODINIT_FUNC PyObject* +# endif /* __CYGWIN__ */ +# else /* Py_BUILD_CORE */ + /* Building an extension module, or an embedded situation */ + /* public Python functions and data are imported */ + /* Under Cygwin, auto-import functions to prevent compilation */ + /* failures similar to those described at the bottom of 4.1: */ + /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ +# if !defined(__CYGWIN__) +# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE +# endif /* !__CYGWIN__ */ +# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE + /* module init functions outside the core must be exported */ +# if defined(__cplusplus) +# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* +# else /* __cplusplus */ +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* +# endif /* __cplusplus */ +# endif /* Py_BUILD_CORE */ +# endif /* HAVE_DECLSPEC_DLL */ +#endif /* Py_ENABLE_SHARED */ + +/* If no external linkage macros defined by now, create defaults */ +#ifndef PyAPI_FUNC +# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE +#endif +#ifndef PyAPI_DATA +# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE +#endif +#ifndef PyMODINIT_FUNC +# if defined(__cplusplus) +# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* +# else /* __cplusplus */ +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* +# endif /* __cplusplus */ +#endif + + #endif /* Py_EXPORTS_H */ diff --git a/Include/fileutils.h b/Include/fileutils.h index ba5acc84fcb185..1509198e45f0ca 100644 --- a/Include/fileutils.h +++ b/Include/fileutils.h @@ -1,5 +1,41 @@ #ifndef Py_FILEUTILS_H #define Py_FILEUTILS_H + +/******************************* + * stat() and fstat() fiddling * + *******************************/ + +#ifdef HAVE_SYS_STAT_H +# include // S_ISREG() +#elif defined(HAVE_STAT_H) +# include // S_ISREG() +#endif + +#ifndef S_IFMT + // VisualAge C/C++ Failed to Define MountType Field in sys/stat.h. +# define S_IFMT 0170000 +#endif +#ifndef S_IFLNK + // Windows doesn't define S_IFLNK, but posixmodule.c maps + // IO_REPARSE_TAG_SYMLINK to S_IFLNK. +# define S_IFLNK 0120000 +#endif +#ifndef S_ISREG +# define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) +#endif +#ifndef S_ISDIR +# define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) +#endif +#ifndef S_ISCHR +# define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR) +#endif +#ifndef S_ISLNK +# define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK) +#endif + + +// Move this down here since some C++ #include's don't like to be included +// inside an extern "C". #ifdef __cplusplus extern "C" { #endif diff --git a/Include/internal/pycore_atomic_funcs.h b/Include/internal/pycore_atomic_funcs.h deleted file mode 100644 index a708789cea733b..00000000000000 --- a/Include/internal/pycore_atomic_funcs.h +++ /dev/null @@ -1,94 +0,0 @@ -/* Atomic functions: similar to pycore_atomic.h, but don't need - to declare variables as atomic. - - Py_ssize_t type: - - * value = _Py_atomic_size_get(&var) - * _Py_atomic_size_set(&var, value) - - Use sequentially-consistent ordering (__ATOMIC_SEQ_CST memory order): - enforce total ordering with all other atomic functions. -*/ -#ifndef Py_ATOMIC_FUNC_H -#define Py_ATOMIC_FUNC_H -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef Py_BUILD_CORE -# error "this header requires Py_BUILD_CORE define" -#endif - -#if defined(_MSC_VER) -# include // _InterlockedExchange() -#endif - - -// Use builtin atomic operations in GCC >= 4.7 and clang -#ifdef HAVE_BUILTIN_ATOMIC - -static inline Py_ssize_t _Py_atomic_size_get(Py_ssize_t *var) -{ - return __atomic_load_n(var, __ATOMIC_SEQ_CST); -} - -static inline void _Py_atomic_size_set(Py_ssize_t *var, Py_ssize_t value) -{ - __atomic_store_n(var, value, __ATOMIC_SEQ_CST); -} - -#elif defined(_MSC_VER) - -static inline Py_ssize_t _Py_atomic_size_get(Py_ssize_t *var) -{ -#if SIZEOF_VOID_P == 8 - Py_BUILD_ASSERT(sizeof(__int64) == sizeof(*var)); - volatile __int64 *volatile_var = (volatile __int64 *)var; - __int64 old; - do { - old = *volatile_var; - } while(_InterlockedCompareExchange64(volatile_var, old, old) != old); -#else - Py_BUILD_ASSERT(sizeof(long) == sizeof(*var)); - volatile long *volatile_var = (volatile long *)var; - long old; - do { - old = *volatile_var; - } while(_InterlockedCompareExchange(volatile_var, old, old) != old); -#endif - return old; -} - -static inline void _Py_atomic_size_set(Py_ssize_t *var, Py_ssize_t value) -{ -#if SIZEOF_VOID_P == 8 - Py_BUILD_ASSERT(sizeof(__int64) == sizeof(*var)); - volatile __int64 *volatile_var = (volatile __int64 *)var; - _InterlockedExchange64(volatile_var, value); -#else - Py_BUILD_ASSERT(sizeof(long) == sizeof(*var)); - volatile long *volatile_var = (volatile long *)var; - _InterlockedExchange(volatile_var, value); -#endif -} - -#else -// Fallback implementation using volatile - -static inline Py_ssize_t _Py_atomic_size_get(Py_ssize_t *var) -{ - volatile Py_ssize_t *volatile_var = (volatile Py_ssize_t *)var; - return *volatile_var; -} - -static inline void _Py_atomic_size_set(Py_ssize_t *var, Py_ssize_t value) -{ - volatile Py_ssize_t *volatile_var = (volatile Py_ssize_t *)var; - *volatile_var = value; -} -#endif - -#ifdef __cplusplus -} -#endif -#endif /* Py_ATOMIC_FUNC_H */ diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index e9535023cec46b..23d0fa399d7e6f 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -44,7 +44,7 @@ extern void _PyEval_SignalReceived(PyInterpreterState *interp); // Export for '_testinternalcapi' shared extension PyAPI_FUNC(int) _PyEval_AddPendingCall( PyInterpreterState *interp, - int (*func)(void *), + _Py_pending_call_func func, void *arg, int mainthreadonly); diff --git a/Include/internal/pycore_ceval_state.h b/Include/internal/pycore_ceval_state.h index 6e3d669dc646af..d0af5b542233e0 100644 --- a/Include/internal/pycore_ceval_state.h +++ b/Include/internal/pycore_ceval_state.h @@ -11,6 +11,8 @@ extern "C" { #include "pycore_gil.h" // struct _gil_runtime_state +typedef int (*_Py_pending_call_func)(void *); + struct _pending_calls { int busy; PyThread_type_lock lock; @@ -22,7 +24,7 @@ struct _pending_calls { int async_exc; #define NPENDINGCALLS 32 struct _pending_call { - int (*func)(void *); + _Py_pending_call_func func; void *arg; } calls[NPENDINGCALLS]; int first; diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index f5127a81144353..a77fa11baf8413 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -233,6 +233,9 @@ extern void _PyLineTable_InitAddressRange( extern int _PyLineTable_NextAddressRange(PyCodeAddressRange *range); extern int _PyLineTable_PreviousAddressRange(PyCodeAddressRange *range); +/** API for executors */ +extern void _PyCode_Clear_Executors(PyCodeObject *code); + #define ENABLE_SPECIALIZATION 1 /* Specialization functions */ @@ -250,7 +253,7 @@ extern void _Py_Specialize_BinarySubscr(PyObject *sub, PyObject *container, extern void _Py_Specialize_StoreSubscr(PyObject *container, PyObject *sub, _Py_CODEUNIT *instr); extern void _Py_Specialize_Call(PyObject *callable, _Py_CODEUNIT *instr, - int nargs, PyObject *kwnames); + int nargs); extern void _Py_Specialize_BinaryOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr, int oparg, PyObject **locals); extern void _Py_Specialize_CompareOp(PyObject *lhs, PyObject *rhs, @@ -268,17 +271,17 @@ extern int _PyStaticCode_Init(PyCodeObject *co); #ifdef Py_STATS -#define STAT_INC(opname, name) do { if (_py_stats) _py_stats->opcode_stats[opname].specialization.name++; } while (0) -#define STAT_DEC(opname, name) do { if (_py_stats) _py_stats->opcode_stats[opname].specialization.name--; } while (0) -#define OPCODE_EXE_INC(opname) do { if (_py_stats) _py_stats->opcode_stats[opname].execution_count++; } while (0) -#define CALL_STAT_INC(name) do { if (_py_stats) _py_stats->call_stats.name++; } while (0) -#define OBJECT_STAT_INC(name) do { if (_py_stats) _py_stats->object_stats.name++; } while (0) +#define STAT_INC(opname, name) do { if (_Py_stats) _Py_stats->opcode_stats[opname].specialization.name++; } while (0) +#define STAT_DEC(opname, name) do { if (_Py_stats) _Py_stats->opcode_stats[opname].specialization.name--; } while (0) +#define OPCODE_EXE_INC(opname) do { if (_Py_stats) _Py_stats->opcode_stats[opname].execution_count++; } while (0) +#define CALL_STAT_INC(name) do { if (_Py_stats) _Py_stats->call_stats.name++; } while (0) +#define OBJECT_STAT_INC(name) do { if (_Py_stats) _Py_stats->object_stats.name++; } while (0) #define OBJECT_STAT_INC_COND(name, cond) \ - do { if (_py_stats && cond) _py_stats->object_stats.name++; } while (0) -#define EVAL_CALL_STAT_INC(name) do { if (_py_stats) _py_stats->call_stats.eval_calls[name]++; } while (0) + do { if (_Py_stats && cond) _Py_stats->object_stats.name++; } while (0) +#define EVAL_CALL_STAT_INC(name) do { if (_Py_stats) _Py_stats->call_stats.eval_calls[name]++; } while (0) #define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) \ - do { if (_py_stats && PyFunction_Check(callable)) _py_stats->call_stats.eval_calls[name]++; } while (0) -#define GC_STAT_ADD(gen, name, n) do { if (_py_stats) _py_stats->gc_stats[(gen)].name += (n); } while (0) + do { if (_Py_stats && PyFunction_Check(callable)) _Py_stats->call_stats.eval_calls[name]++; } while (0) +#define GC_STAT_ADD(gen, name, n) do { if (_Py_stats) _Py_stats->gc_stats[(gen)].name += (n); } while (0) // Export for '_opcode' shared extension PyAPI_FUNC(PyObject*) _Py_GetSpecializationStats(void); @@ -462,8 +465,6 @@ adaptive_counter_backoff(uint16_t counter) { return adaptive_counter_bits(value, backoff); } -extern uint32_t _Py_next_func_version; - /* Comparison bit masks. */ diff --git a/Include/internal/pycore_emscripten_signal.h b/Include/internal/pycore_emscripten_signal.h index d1bcb9a92c7726..754193e21dec5a 100644 --- a/Include/internal/pycore_emscripten_signal.h +++ b/Include/internal/pycore_emscripten_signal.h @@ -18,6 +18,7 @@ _Py_CheckEmscriptenSignalsPeriodically(void); #define _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY() _Py_CheckEmscriptenSignalsPeriodically() extern int Py_EMSCRIPTEN_SIGNAL_HANDLING; +extern int _Py_emscripten_signal_clock; #else diff --git a/Include/internal/pycore_emscripten_trampoline.h b/Include/internal/pycore_emscripten_trampoline.h new file mode 100644 index 00000000000000..e519c99ad86cce --- /dev/null +++ b/Include/internal/pycore_emscripten_trampoline.h @@ -0,0 +1,81 @@ +#ifndef Py_EMSCRIPTEN_TRAMPOLINE_H +#define Py_EMSCRIPTEN_TRAMPOLINE_H + +#include "pycore_runtime.h" // _PyRuntimeState + +/** + * C function call trampolines to mitigate bad function pointer casts. + * + * Section 6.3.2.3, paragraph 8 reads: + * + * A pointer to a function of one type may be converted to a pointer to a + * function of another type and back again; the result shall compare equal to + * the original pointer. If a converted pointer is used to call a function + * whose type is not compatible with the pointed-to type, the behavior is + * undefined. + * + * Typical native ABIs ignore additional arguments or fill in missing values + * with 0/NULL in function pointer cast. Compilers do not show warnings when a + * function pointer is explicitly casted to an incompatible type. + * + * Bad fpcasts are an issue in WebAssembly. WASM's indirect_call has strict + * function signature checks. Argument count, types, and return type must match. + * + * Third party code unintentionally rely on problematic fpcasts. The call + * trampoline mitigates common occurrences of bad fpcasts on Emscripten. + */ + +#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) + +void _Py_EmscriptenTrampoline_Init(_PyRuntimeState *runtime); + +PyObject* +_PyEM_TrampolineCall_JavaScript(PyCFunctionWithKeywords func, + PyObject* self, + PyObject* args, + PyObject* kw); + +PyObject* +_PyEM_TrampolineCall_Reflection(PyCFunctionWithKeywords func, + PyObject* self, + PyObject* args, + PyObject* kw); + +#define _PyEM_TrampolineCall(meth, self, args, kw) \ + ((_PyRuntime.wasm_type_reflection_available) ? \ + (_PyEM_TrampolineCall_Reflection((PyCFunctionWithKeywords)(meth), (self), (args), (kw))) : \ + (_PyEM_TrampolineCall_JavaScript((PyCFunctionWithKeywords)(meth), (self), (args), (kw)))) + +#define _PyCFunction_TrampolineCall(meth, self, args) \ + _PyEM_TrampolineCall( \ + (*(PyCFunctionWithKeywords)(void(*)(void))(meth)), (self), (args), NULL) + +#define _PyCFunctionWithKeywords_TrampolineCall(meth, self, args, kw) \ + _PyEM_TrampolineCall((meth), (self), (args), (kw)) + +#define descr_set_trampoline_call(set, obj, value, closure) \ + ((int)_PyEM_TrampolineCall((PyCFunctionWithKeywords)(set), (obj), (value), (PyObject*)(closure))) + +#define descr_get_trampoline_call(get, obj, closure) \ + _PyEM_TrampolineCall((PyCFunctionWithKeywords)(get), (obj), (PyObject*)(closure), NULL) + + +#else // defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) + +#define _Py_EmscriptenTrampoline_Init(runtime) + +#define _PyCFunction_TrampolineCall(meth, self, args) \ + (meth)((self), (args)) + +#define _PyCFunctionWithKeywords_TrampolineCall(meth, self, args, kw) \ + (meth)((self), (args), (kw)) + +#define descr_set_trampoline_call(set, obj, value, closure) \ + (set)((obj), (value), (closure)) + +#define descr_get_trampoline_call(get, obj, closure) \ + (get)((obj), (closure)) + +#endif // defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) + +#endif // ndef Py_EMSCRIPTEN_SIGNAL_H diff --git a/Include/internal/pycore_fileutils.h b/Include/internal/pycore_fileutils.h index 9236e5907a48d5..2f89da2c6ecd91 100644 --- a/Include/internal/pycore_fileutils.h +++ b/Include/internal/pycore_fileutils.h @@ -318,6 +318,8 @@ PyAPI_FUNC(int) _PyLong_FileDescriptor_Converter(PyObject *, void *); // Export for test_peg_generator PyAPI_FUNC(char*) _Py_UniversalNewlineFgetsWithSize(char *, int, FILE*, PyObject *, size_t*); +extern int _PyFile_Flush(PyObject *); + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_instruments.h b/Include/internal/pycore_instruments.h index 43214aef7f7a1b..97dcfb9f8672f7 100644 --- a/Include/internal/pycore_instruments.h +++ b/Include/internal/pycore_instruments.h @@ -5,7 +5,6 @@ # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_bitutils.h" // _Py_popcount32 #include "pycore_frame.h" // _PyInterpreterFrame #ifdef __cplusplus @@ -29,7 +28,7 @@ extern "C" { #define PY_MONITORING_EVENT_STOP_ITERATION 9 #define PY_MONITORING_IS_INSTRUMENTED_EVENT(ev) \ - ((ev) <= PY_MONITORING_EVENT_STOP_ITERATION) + ((ev) < _PY_MONITORING_LOCAL_EVENTS) /* Other events, mainly exceptions */ diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h index f171c546efd53c..ba5764e943e676 100644 --- a/Include/internal/pycore_interp.h +++ b/Include/internal/pycore_interp.h @@ -186,8 +186,9 @@ struct _is { _PyOptimizerObject *optimizer; uint16_t optimizer_resume_threshold; uint16_t optimizer_backedge_threshold; + uint32_t next_func_version; - _Py_Monitors monitors; + _Py_GlobalMonitors monitors; bool f_opcode_trace_set; bool sys_profile_initialized; bool sys_trace_initialized; diff --git a/Include/internal/pycore_llist.h b/Include/internal/pycore_llist.h new file mode 100644 index 00000000000000..5fd261da05fa5d --- /dev/null +++ b/Include/internal/pycore_llist.h @@ -0,0 +1,107 @@ +// A doubly-linked list that can be embedded in a struct. +// +// Usage: +// struct llist_node head = LLIST_INIT(head); +// typedef struct { +// ... +// struct llist_node node; +// ... +// } MyObj; +// +// llist_insert_tail(&head, &obj->node); +// llist_remove(&obj->node); +// +// struct llist_node *node; +// llist_for_each(node, &head) { +// MyObj *obj = llist_data(node, MyObj, node); +// ... +// } +// + +#ifndef Py_INTERNAL_LLIST_H +#define Py_INTERNAL_LLIST_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "Py_BUILD_CORE must be defined to include this header" +#endif + +struct llist_node { + struct llist_node *next; + struct llist_node *prev; +}; + +// Get the struct containing a node. +#define llist_data(node, type, member) \ + (type*)((char*)node - offsetof(type, member)) + +// Iterate over a list. +#define llist_for_each(node, head) \ + for (node = (head)->next; node != (head); node = node->next) + +// Iterate over a list, but allow removal of the current node. +#define llist_for_each_safe(node, head) \ + for (struct llist_node *_next = (node = (head)->next, node->next); \ + node != (head); node = _next, _next = node->next) + +#define LLIST_INIT(head) { &head, &head } + +static inline void +llist_init(struct llist_node *head) +{ + head->next = head; + head->prev = head; +} + +// Returns 1 if the list is empty, 0 otherwise. +static inline int +llist_empty(struct llist_node *head) +{ + return head->next == head; +} + +// Appends to the tail of the list. +static inline void +llist_insert_tail(struct llist_node *head, struct llist_node *node) +{ + node->prev = head->prev; + node->next = head; + head->prev->next = node; + head->prev = node; +} + +// Remove a node from the list. +static inline void +llist_remove(struct llist_node *node) +{ + struct llist_node *prev = node->prev; + struct llist_node *next = node->next; + prev->next = next; + next->prev = prev; + node->prev = NULL; + node->next = NULL; +} + +// Append all nodes from head2 onto head1. head2 is left empty. +static inline void +llist_concat(struct llist_node *head1, struct llist_node *head2) +{ + if (!llist_empty(head2)) { + head1->prev->next = head2->next; + head2->next->prev = head1->prev; + + head1->prev = head2->prev; + head2->prev->next = head1; + llist_init(head2); + } +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_LLIST_H */ diff --git a/Include/internal/pycore_lock.h b/Include/internal/pycore_lock.h new file mode 100644 index 00000000000000..c4bb76a40e7b12 --- /dev/null +++ b/Include/internal/pycore_lock.h @@ -0,0 +1,158 @@ +// Lightweight locks and other synchronization mechanisms. +// +// These implementations are based on WebKit's WTF::Lock. See +// https://webkit.org/blog/6161/locking-in-webkit/ for a description of the +// design. +#ifndef Py_INTERNAL_LOCK_H +#define Py_INTERNAL_LOCK_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_time.h" // _PyTime_t + + +// A mutex that occupies one byte. The lock can be zero initialized. +// +// Only the two least significant bits are used. The remaining bits should be +// zero: +// 0b00: unlocked +// 0b01: locked +// 0b10: unlocked and has parked threads +// 0b11: locked and has parked threads +// +// Typical initialization: +// PyMutex m = (PyMutex){0}; +// +// Typical usage: +// PyMutex_Lock(&m); +// ... +// PyMutex_Unlock(&m); +typedef struct _PyMutex { + uint8_t v; +} PyMutex; + +#define _Py_UNLOCKED 0 +#define _Py_LOCKED 1 +#define _Py_HAS_PARKED 2 + +// (private) slow path for locking the mutex +PyAPI_FUNC(void) _PyMutex_LockSlow(PyMutex *m); + +// (private) slow path for unlocking the mutex +PyAPI_FUNC(void) _PyMutex_UnlockSlow(PyMutex *m); + +// Locks the mutex. +// +// If the mutex is currently locked, the calling thread will be parked until +// the mutex is unlocked. If the current thread holds the GIL, then the GIL +// will be released while the thread is parked. +static inline void +PyMutex_Lock(PyMutex *m) +{ + uint8_t expected = _Py_UNLOCKED; + if (!_Py_atomic_compare_exchange_uint8(&m->v, &expected, _Py_LOCKED)) { + _PyMutex_LockSlow(m); + } +} + +// Unlocks the mutex. +static inline void +PyMutex_Unlock(PyMutex *m) +{ + uint8_t expected = _Py_LOCKED; + if (!_Py_atomic_compare_exchange_uint8(&m->v, &expected, _Py_UNLOCKED)) { + _PyMutex_UnlockSlow(m); + } +} + +// Checks if the mutex is currently locked. +static inline int +PyMutex_IsLocked(PyMutex *m) +{ + return (_Py_atomic_load_uint8(&m->v) & _Py_LOCKED) != 0; +} + +typedef enum _PyLockFlags { + // Do not detach/release the GIL when waiting on the lock. + _Py_LOCK_DONT_DETACH = 0, + + // Detach/release the GIL while waiting on the lock. + _PY_LOCK_DETACH = 1, + + // Handle signals if interrupted while waiting on the lock. + _PY_LOCK_HANDLE_SIGNALS = 2, +} _PyLockFlags; + +// Lock a mutex with an optional timeout and additional options. See +// _PyLockFlags for details. +extern PyLockStatus +_PyMutex_LockTimed(PyMutex *m, _PyTime_t timeout_ns, _PyLockFlags flags); + +// Unlock a mutex, returns 0 if the mutex is not locked (used for improved +// error messages). +extern int _PyMutex_TryUnlock(PyMutex *m); + + +// PyEvent is a one-time event notification +typedef struct { + uint8_t v; +} PyEvent; + +// Set the event and notify any waiting threads. +// Export for '_testinternalcapi' shared extension +PyAPI_FUNC(void) _PyEvent_Notify(PyEvent *evt); + +// Wait for the event to be set. If the event is already set, then this returns +// immediately. +PyAPI_FUNC(void) PyEvent_Wait(PyEvent *evt); + +// Wait for the event to be set, or until the timeout expires. If the event is +// already set, then this returns immediately. Returns 1 if the event was set, +// and 0 if the timeout expired or thread was interrupted. +PyAPI_FUNC(int) PyEvent_WaitTimed(PyEvent *evt, _PyTime_t timeout_ns); + + +// _PyRawMutex implements a word-sized mutex that that does not depend on the +// parking lot API, and therefore can be used in the parking lot +// implementation. +// +// The mutex uses a packed representation: the least significant bit is used to +// indicate whether the mutex is locked or not. The remaining bits are either +// zero or a pointer to a `struct raw_mutex_entry` (see lock.c). +typedef struct { + uintptr_t v; +} _PyRawMutex; + +// Slow paths for lock/unlock +extern void _PyRawMutex_LockSlow(_PyRawMutex *m); +extern void _PyRawMutex_UnlockSlow(_PyRawMutex *m); + +static inline void +_PyRawMutex_Lock(_PyRawMutex *m) +{ + uintptr_t unlocked = _Py_UNLOCKED; + if (_Py_atomic_compare_exchange_uintptr(&m->v, &unlocked, _Py_LOCKED)) { + return; + } + _PyRawMutex_LockSlow(m); +} + +static inline void +_PyRawMutex_Unlock(_PyRawMutex *m) +{ + uintptr_t locked = _Py_LOCKED; + if (_Py_atomic_compare_exchange_uintptr(&m->v, &locked, _Py_UNLOCKED)) { + return; + } + _PyRawMutex_UnlockSlow(m); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_LOCK_H */ diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index daa06ebfbf91a4..2d50f42c9c614d 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -10,6 +10,7 @@ extern "C" { #include #include "pycore_gc.h" // _PyObject_GC_IS_TRACKED() +#include "pycore_emscripten_trampoline.h" // _PyCFunction_TrampolineCall() #include "pycore_interp.h" // PyInterpreterState.gc #include "pycore_pystate.h" // _PyInterpreterState_GET() diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index aaf3541e095468..bb37e9a1d1b6b6 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -25,8 +25,8 @@ ((OP) == POP_BLOCK) || \ 0) -#define EXIT_TRACE 300 -#define SAVE_IP 301 +#define _EXIT_TRACE 300 +#define _SET_IP 301 #define _GUARD_BOTH_INT 302 #define _BINARY_OP_MULTIPLY_INT 303 #define _BINARY_OP_ADD_INT 304 @@ -39,40 +39,38 @@ #define _BINARY_OP_ADD_UNICODE 311 #define _BINARY_OP_INPLACE_ADD_UNICODE 312 #define _POP_FRAME 313 -#define _LOAD_LOCALS 314 -#define _LOAD_FROM_DICT_OR_GLOBALS 315 -#define _GUARD_GLOBALS_VERSION 316 -#define _GUARD_BUILTINS_VERSION 317 -#define _LOAD_GLOBAL_MODULE 318 -#define _LOAD_GLOBAL_BUILTINS 319 -#define _GUARD_TYPE_VERSION 320 -#define _CHECK_MANAGED_OBJECT_HAS_VALUES 321 -#define _LOAD_ATTR_INSTANCE_VALUE 322 -#define IS_NONE 323 -#define _ITER_CHECK_LIST 324 -#define _ITER_JUMP_LIST 325 -#define _IS_ITER_EXHAUSTED_LIST 326 -#define _ITER_NEXT_LIST 327 -#define _ITER_CHECK_TUPLE 328 -#define _ITER_JUMP_TUPLE 329 -#define _IS_ITER_EXHAUSTED_TUPLE 330 -#define _ITER_NEXT_TUPLE 331 -#define _ITER_CHECK_RANGE 332 -#define _ITER_JUMP_RANGE 333 -#define _IS_ITER_EXHAUSTED_RANGE 334 -#define _ITER_NEXT_RANGE 335 -#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS 336 -#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 337 -#define _CHECK_PEP_523 338 -#define _CHECK_FUNCTION_EXACT_ARGS 339 -#define _CHECK_STACK_SPACE 340 -#define _INIT_CALL_PY_EXACT_ARGS 341 -#define _PUSH_FRAME 342 -#define _POP_JUMP_IF_FALSE 343 -#define _POP_JUMP_IF_TRUE 344 -#define JUMP_TO_TOP 345 -#define SAVE_CURRENT_IP 346 -#define INSERT 347 +#define _GUARD_GLOBALS_VERSION 314 +#define _GUARD_BUILTINS_VERSION 315 +#define _LOAD_GLOBAL_MODULE 316 +#define _LOAD_GLOBAL_BUILTINS 317 +#define _GUARD_TYPE_VERSION 318 +#define _CHECK_MANAGED_OBJECT_HAS_VALUES 319 +#define _LOAD_ATTR_INSTANCE_VALUE 320 +#define _IS_NONE 321 +#define _ITER_CHECK_LIST 322 +#define _ITER_JUMP_LIST 323 +#define _IS_ITER_EXHAUSTED_LIST 324 +#define _ITER_NEXT_LIST 325 +#define _ITER_CHECK_TUPLE 326 +#define _ITER_JUMP_TUPLE 327 +#define _IS_ITER_EXHAUSTED_TUPLE 328 +#define _ITER_NEXT_TUPLE 329 +#define _ITER_CHECK_RANGE 330 +#define _ITER_JUMP_RANGE 331 +#define _IS_ITER_EXHAUSTED_RANGE 332 +#define _ITER_NEXT_RANGE 333 +#define _CHECK_CALL_BOUND_METHOD_EXACT_ARGS 334 +#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 335 +#define _CHECK_PEP_523 336 +#define _CHECK_FUNCTION_EXACT_ARGS 337 +#define _CHECK_STACK_SPACE 338 +#define _INIT_CALL_PY_EXACT_ARGS 339 +#define _PUSH_FRAME 340 +#define _POP_JUMP_IF_FALSE 341 +#define _POP_JUMP_IF_TRUE 342 +#define _JUMP_TO_TOP 343 +#define _SAVE_CURRENT_IP 344 +#define _INSERT 345 extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump); #ifdef NEED_OPCODE_METADATA @@ -82,6 +80,8 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 0; case RESUME: return 0; + case RESUME_CHECK: + return 0; case INSTRUMENTED_RESUME: return 0; case LOAD_CLOSURE: @@ -170,6 +170,8 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 2; case BINARY_OP_ADD_UNICODE: return 2; + case _BINARY_OP_INPLACE_ADD_UNICODE: + return 2; case BINARY_OP_INPLACE_ADD_UNICODE: return 2; case BINARY_SUBSCR: @@ -266,16 +268,12 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case DELETE_GLOBAL: return 0; - case _LOAD_LOCALS: - return 0; case LOAD_LOCALS: return 0; - case _LOAD_FROM_DICT_OR_GLOBALS: + case LOAD_FROM_DICT_OR_GLOBALS: return 1; case LOAD_NAME: return 0; - case LOAD_FROM_DICT_OR_GLOBALS: - return 1; case LOAD_GLOBAL: return 0; case _GUARD_GLOBALS_VERSION: @@ -406,7 +404,7 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case POP_JUMP_IF_TRUE: return 1; - case IS_NONE: + case _IS_NONE: return 1; case POP_JUMP_IF_NONE: return 1; @@ -434,6 +432,8 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 0; case _ITER_CHECK_LIST: return 1; + case _ITER_JUMP_LIST: + return 1; case _IS_ITER_EXHAUSTED_LIST: return 1; case _ITER_NEXT_LIST: @@ -442,6 +442,8 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case _ITER_CHECK_TUPLE: return 1; + case _ITER_JUMP_TUPLE: + return 1; case _IS_ITER_EXHAUSTED_TUPLE: return 1; case _ITER_NEXT_TUPLE: @@ -450,6 +452,8 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case _ITER_CHECK_RANGE: return 1; + case _ITER_JUMP_RANGE: + return 1; case _IS_ITER_EXHAUSTED_RANGE: return 1; case _ITER_NEXT_RANGE: @@ -484,8 +488,6 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case LOAD_ATTR_METHOD_LAZY_DICT: return 1; - case KW_NAMES: - return 0; case INSTRUMENTED_CALL: return 0; case CALL: @@ -510,38 +512,42 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return oparg + 2; case CALL_PY_WITH_DEFAULTS: return oparg + 2; - case CALL_NO_KW_TYPE_1: + case CALL_TYPE_1: return oparg + 2; - case CALL_NO_KW_STR_1: + case CALL_STR_1: return oparg + 2; - case CALL_NO_KW_TUPLE_1: + case CALL_TUPLE_1: return oparg + 2; - case CALL_NO_KW_ALLOC_AND_ENTER_INIT: + case CALL_ALLOC_AND_ENTER_INIT: return oparg + 2; case EXIT_INIT_CHECK: return 1; case CALL_BUILTIN_CLASS: return oparg + 2; - case CALL_NO_KW_BUILTIN_O: + case CALL_BUILTIN_O: return oparg + 2; - case CALL_NO_KW_BUILTIN_FAST: + case CALL_BUILTIN_FAST: return oparg + 2; case CALL_BUILTIN_FAST_WITH_KEYWORDS: return oparg + 2; - case CALL_NO_KW_LEN: + case CALL_LEN: return oparg + 2; - case CALL_NO_KW_ISINSTANCE: + case CALL_ISINSTANCE: return oparg + 2; - case CALL_NO_KW_LIST_APPEND: + case CALL_LIST_APPEND: return oparg + 2; - case CALL_NO_KW_METHOD_DESCRIPTOR_O: + case CALL_METHOD_DESCRIPTOR_O: return oparg + 2; case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: return oparg + 2; - case CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS: + case CALL_METHOD_DESCRIPTOR_NOARGS: return oparg + 2; - case CALL_NO_KW_METHOD_DESCRIPTOR_FAST: + case CALL_METHOD_DESCRIPTOR_FAST: return oparg + 2; + case INSTRUMENTED_CALL_KW: + return 0; + case CALL_KW: + return oparg + 3; case INSTRUMENTED_CALL_FUNCTION_EX: return 0; case CALL_FUNCTION_EX: @@ -590,15 +596,15 @@ int _PyOpcode_num_popped(int opcode, int oparg, bool jump) { return 1; case _POP_JUMP_IF_TRUE: return 1; - case JUMP_TO_TOP: + case _JUMP_TO_TOP: return 0; - case SAVE_IP: + case _SET_IP: return 0; - case SAVE_CURRENT_IP: + case _SAVE_CURRENT_IP: return 0; - case EXIT_TRACE: + case _EXIT_TRACE: return 0; - case INSERT: + case _INSERT: return oparg + 1; default: return -1; @@ -614,6 +620,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case RESUME: return 0; + case RESUME_CHECK: + return 0; case INSTRUMENTED_RESUME: return 0; case LOAD_CLOSURE: @@ -702,6 +710,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 1; case BINARY_OP_ADD_UNICODE: return 1; + case _BINARY_OP_INPLACE_ADD_UNICODE: + return 0; case BINARY_OP_INPLACE_ADD_UNICODE: return 0; case BINARY_SUBSCR: @@ -798,16 +808,12 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case DELETE_GLOBAL: return 0; - case _LOAD_LOCALS: - return 1; case LOAD_LOCALS: return 1; - case _LOAD_FROM_DICT_OR_GLOBALS: + case LOAD_FROM_DICT_OR_GLOBALS: return 1; case LOAD_NAME: return 1; - case LOAD_FROM_DICT_OR_GLOBALS: - return 1; case LOAD_GLOBAL: return ((oparg & 1) ? 1 : 0) + 1; case _GUARD_GLOBALS_VERSION: @@ -938,7 +944,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case POP_JUMP_IF_TRUE: return 0; - case IS_NONE: + case _IS_NONE: return 1; case POP_JUMP_IF_NONE: return 0; @@ -966,6 +972,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case _ITER_CHECK_LIST: return 1; + case _ITER_JUMP_LIST: + return 1; case _IS_ITER_EXHAUSTED_LIST: return 2; case _ITER_NEXT_LIST: @@ -974,6 +982,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 2; case _ITER_CHECK_TUPLE: return 1; + case _ITER_JUMP_TUPLE: + return 1; case _IS_ITER_EXHAUSTED_TUPLE: return 2; case _ITER_NEXT_TUPLE: @@ -982,6 +992,8 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 2; case _ITER_CHECK_RANGE: return 1; + case _ITER_JUMP_RANGE: + return 1; case _IS_ITER_EXHAUSTED_RANGE: return 2; case _ITER_NEXT_RANGE: @@ -1016,8 +1028,6 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 1; case LOAD_ATTR_METHOD_LAZY_DICT: return 2; - case KW_NAMES: - return 0; case INSTRUMENTED_CALL: return 0; case CALL: @@ -1042,37 +1052,41 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 1; case CALL_PY_WITH_DEFAULTS: return 1; - case CALL_NO_KW_TYPE_1: + case CALL_TYPE_1: return 1; - case CALL_NO_KW_STR_1: + case CALL_STR_1: return 1; - case CALL_NO_KW_TUPLE_1: + case CALL_TUPLE_1: return 1; - case CALL_NO_KW_ALLOC_AND_ENTER_INIT: + case CALL_ALLOC_AND_ENTER_INIT: return 1; case EXIT_INIT_CHECK: return 0; case CALL_BUILTIN_CLASS: return 1; - case CALL_NO_KW_BUILTIN_O: + case CALL_BUILTIN_O: return 1; - case CALL_NO_KW_BUILTIN_FAST: + case CALL_BUILTIN_FAST: return 1; case CALL_BUILTIN_FAST_WITH_KEYWORDS: return 1; - case CALL_NO_KW_LEN: + case CALL_LEN: return 1; - case CALL_NO_KW_ISINSTANCE: + case CALL_ISINSTANCE: return 1; - case CALL_NO_KW_LIST_APPEND: + case CALL_LIST_APPEND: return 1; - case CALL_NO_KW_METHOD_DESCRIPTOR_O: + case CALL_METHOD_DESCRIPTOR_O: return 1; case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: return 1; - case CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS: + case CALL_METHOD_DESCRIPTOR_NOARGS: return 1; - case CALL_NO_KW_METHOD_DESCRIPTOR_FAST: + case CALL_METHOD_DESCRIPTOR_FAST: + return 1; + case INSTRUMENTED_CALL_KW: + return 0; + case CALL_KW: return 1; case INSTRUMENTED_CALL_FUNCTION_EX: return 0; @@ -1122,15 +1136,15 @@ int _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { return 0; case _POP_JUMP_IF_TRUE: return 0; - case JUMP_TO_TOP: + case _JUMP_TO_TOP: return 0; - case SAVE_IP: + case _SET_IP: return 0; - case SAVE_CURRENT_IP: + case _SAVE_CURRENT_IP: return 0; - case EXIT_TRACE: + case _EXIT_TRACE: return 0; - case INSERT: + case _INSERT: return oparg + 1; default: return -1; @@ -1192,7 +1206,7 @@ struct opcode_macro_expansion { #define OPARG_CACHE_4 4 #define OPARG_TOP 5 #define OPARG_BOTTOM 6 -#define OPARG_SAVE_IP 7 +#define OPARG_SET_IP 7 #define OPCODE_METADATA_FMT(OP) (_PyOpcode_opcode_metadata[(OP)].instr_format) #define SAME_OPCODE_METADATA(OP1, OP2) \ @@ -1207,6 +1221,7 @@ extern const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SI const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [NOP] = { true, INSTR_FMT_IX, 0 }, [RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, + [RESUME_CHECK] = { true, INSTR_FMT_IX, HAS_DEOPT_FLAG }, [INSTRUMENTED_RESUME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, [LOAD_CLOSURE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG }, [LOAD_FAST_CHECK] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_LOCAL_FLAG | HAS_ERROR_FLAG }, @@ -1300,11 +1315,9 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [DELETE_ATTR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, [STORE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, [DELETE_GLOBAL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, - [_LOAD_LOCALS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, [LOAD_LOCALS] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, - [_LOAD_FROM_DICT_OR_GLOBALS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, - [LOAD_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, [LOAD_FROM_DICT_OR_GLOBALS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, + [LOAD_NAME] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, [LOAD_GLOBAL] = { true, INSTR_FMT_IBC000, HAS_ARG_FLAG | HAS_NAME_FLAG | HAS_ERROR_FLAG }, [_GUARD_GLOBALS_VERSION] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG }, [_GUARD_BUILTINS_VERSION] = { true, INSTR_FMT_IXC, HAS_DEOPT_FLAG }, @@ -1368,11 +1381,11 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [JUMP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [JUMP_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [ENTER_EXECUTOR] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, - [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [IS_NONE] = { true, INSTR_FMT_IX, 0 }, - [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, - [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, + [POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, + [POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, + [_IS_NONE] = { true, INSTR_FMT_IX, 0 }, + [POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, + [POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [JUMP_BACKWARD_NO_INTERRUPT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG }, [GET_LEN] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, [MATCH_CLASS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, @@ -1412,7 +1425,6 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, [LOAD_ATTR_METHOD_LAZY_DICT] = { true, INSTR_FMT_IBC00000000, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [KW_NAMES] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_CONST_FLAG }, [INSTRUMENTED_CALL] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, [CALL] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, @@ -1421,26 +1433,28 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [_CHECK_FUNCTION_EXACT_ARGS] = { true, INSTR_FMT_IBC0, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, [_CHECK_STACK_SPACE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, [_INIT_CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [_PUSH_FRAME] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [_PUSH_FRAME] = { true, INSTR_FMT_IX, 0 }, + [CALL_BOUND_METHOD_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, + [CALL_PY_EXACT_ARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, [CALL_PY_WITH_DEFAULTS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [CALL_NO_KW_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, - [CALL_NO_KW_STR_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_TUPLE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_TYPE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG }, + [CALL_STR_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_TUPLE_1] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_ALLOC_AND_ENTER_INIT] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, [EXIT_INIT_CHECK] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, [CALL_BUILTIN_CLASS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_BUILTIN_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_BUILTIN_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_LEN] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_ISINSTANCE] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_LEN] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_ISINSTANCE] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_LIST_APPEND] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_METHOD_DESCRIPTOR_O] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, - [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_METHOD_DESCRIPTOR_NOARGS] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [CALL_METHOD_DESCRIPTOR_FAST] = { true, INSTR_FMT_IBC00, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_DEOPT_FLAG | HAS_ERROR_FLAG }, + [INSTRUMENTED_CALL_KW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG }, + [CALL_KW] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, [INSTRUMENTED_CALL_FUNCTION_EX] = { true, INSTR_FMT_IX, 0 }, [CALL_FUNCTION_EX] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG | HAS_ERROR_FLAG }, [MAKE_FUNCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, @@ -1456,20 +1470,20 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = { [INSTRUMENTED_INSTRUCTION] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG }, [INSTRUMENTED_JUMP_FORWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [INSTRUMENTED_JUMP_BACKWARD] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_EVAL_BREAK_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, + [INSTRUMENTED_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG }, + [INSTRUMENTED_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG }, + [INSTRUMENTED_POP_JUMP_IF_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG }, + [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG }, [EXTENDED_ARG] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [CACHE] = { true, INSTR_FMT_IX, 0 }, [RESERVED] = { true, INSTR_FMT_IX, 0 }, [_POP_JUMP_IF_FALSE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, [_POP_JUMP_IF_TRUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, - [SAVE_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, - [SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, - [EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, - [INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, + [_JUMP_TO_TOP] = { true, INSTR_FMT_IX, HAS_EVAL_BREAK_FLAG }, + [_SET_IP] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, + [_SAVE_CURRENT_IP] = { true, INSTR_FMT_IX, 0 }, + [_EXIT_TRACE] = { true, INSTR_FMT_IX, 0 }, + [_INSERT] = { true, INSTR_FMT_IB, HAS_ARG_FLAG }, }; #endif // NEED_OPCODE_METADATA @@ -1477,7 +1491,7 @@ extern const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACR #ifdef NEED_OPCODE_METADATA const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPANSION_SIZE] = { [NOP] = { .nuops = 1, .uops = { { NOP, 0, 0 } } }, - [RESUME] = { .nuops = 1, .uops = { { RESUME, 0, 0 } } }, + [RESUME_CHECK] = { .nuops = 1, .uops = { { RESUME_CHECK, 0, 0 } } }, [LOAD_FAST_CHECK] = { .nuops = 1, .uops = { { LOAD_FAST_CHECK, 0, 0 } } }, [LOAD_FAST] = { .nuops = 1, .uops = { { LOAD_FAST, 0, 0 } } }, [LOAD_FAST_AND_CLEAR] = { .nuops = 1, .uops = { { LOAD_FAST_AND_CLEAR, 0, 0 } } }, @@ -1522,8 +1536,8 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [DELETE_SUBSCR] = { .nuops = 1, .uops = { { DELETE_SUBSCR, 0, 0 } } }, [CALL_INTRINSIC_1] = { .nuops = 1, .uops = { { CALL_INTRINSIC_1, 0, 0 } } }, [CALL_INTRINSIC_2] = { .nuops = 1, .uops = { { CALL_INTRINSIC_2, 0, 0 } } }, - [RETURN_VALUE] = { .nuops = 3, .uops = { { SAVE_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, - [RETURN_CONST] = { .nuops = 4, .uops = { { LOAD_CONST, 0, 0 }, { SAVE_IP, 7, 0 }, { SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, + [RETURN_VALUE] = { .nuops = 3, .uops = { { _SET_IP, 7, 0 }, { _SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, + [RETURN_CONST] = { .nuops = 4, .uops = { { LOAD_CONST, 0, 0 }, { _SET_IP, 7, 0 }, { _SAVE_CURRENT_IP, 0, 0 }, { _POP_FRAME, 0, 0 } } }, [GET_AITER] = { .nuops = 1, .uops = { { GET_AITER, 0, 0 } } }, [GET_ANEXT] = { .nuops = 1, .uops = { { GET_ANEXT, 0, 0 } } }, [GET_AWAITABLE] = { .nuops = 1, .uops = { { GET_AWAITABLE, 0, 0 } } }, @@ -1541,9 +1555,9 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [DELETE_ATTR] = { .nuops = 1, .uops = { { DELETE_ATTR, 0, 0 } } }, [STORE_GLOBAL] = { .nuops = 1, .uops = { { STORE_GLOBAL, 0, 0 } } }, [DELETE_GLOBAL] = { .nuops = 1, .uops = { { DELETE_GLOBAL, 0, 0 } } }, - [LOAD_LOCALS] = { .nuops = 1, .uops = { { _LOAD_LOCALS, 0, 0 } } }, - [LOAD_NAME] = { .nuops = 2, .uops = { { _LOAD_LOCALS, 0, 0 }, { _LOAD_FROM_DICT_OR_GLOBALS, 0, 0 } } }, - [LOAD_FROM_DICT_OR_GLOBALS] = { .nuops = 1, .uops = { { _LOAD_FROM_DICT_OR_GLOBALS, 0, 0 } } }, + [LOAD_LOCALS] = { .nuops = 1, .uops = { { LOAD_LOCALS, 0, 0 } } }, + [LOAD_FROM_DICT_OR_GLOBALS] = { .nuops = 1, .uops = { { LOAD_FROM_DICT_OR_GLOBALS, 0, 0 } } }, + [LOAD_NAME] = { .nuops = 1, .uops = { { LOAD_NAME, 0, 0 } } }, [LOAD_GLOBAL] = { .nuops = 1, .uops = { { LOAD_GLOBAL, 0, 0 } } }, [LOAD_GLOBAL_MODULE] = { .nuops = 2, .uops = { { _GUARD_GLOBALS_VERSION, 1, 1 }, { _LOAD_GLOBAL_MODULE, 1, 3 } } }, [LOAD_GLOBAL_BUILTIN] = { .nuops = 3, .uops = { { _GUARD_GLOBALS_VERSION, 1, 1 }, { _GUARD_BUILTINS_VERSION, 1, 2 }, { _LOAD_GLOBAL_BUILTINS, 1, 3 } } }, @@ -1586,19 +1600,22 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN [GET_YIELD_FROM_ITER] = { .nuops = 1, .uops = { { GET_YIELD_FROM_ITER, 0, 0 } } }, [WITH_EXCEPT_START] = { .nuops = 1, .uops = { { WITH_EXCEPT_START, 0, 0 } } }, [PUSH_EXC_INFO] = { .nuops = 1, .uops = { { PUSH_EXC_INFO, 0, 0 } } }, - [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { SAVE_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, - [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { SAVE_IP, 7, 3 }, { SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, - [CALL_NO_KW_TYPE_1] = { .nuops = 1, .uops = { { CALL_NO_KW_TYPE_1, 0, 0 } } }, - [CALL_NO_KW_STR_1] = { .nuops = 1, .uops = { { CALL_NO_KW_STR_1, 0, 0 } } }, - [CALL_NO_KW_TUPLE_1] = { .nuops = 1, .uops = { { CALL_NO_KW_TUPLE_1, 0, 0 } } }, + [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { _SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, + [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, 0, 0 }, { _CHECK_FUNCTION_EXACT_ARGS, 2, 1 }, { _CHECK_STACK_SPACE, 0, 0 }, { _INIT_CALL_PY_EXACT_ARGS, 0, 0 }, { _SET_IP, 7, 3 }, { _SAVE_CURRENT_IP, 0, 0 }, { _PUSH_FRAME, 0, 0 } } }, + [CALL_TYPE_1] = { .nuops = 1, .uops = { { CALL_TYPE_1, 0, 0 } } }, + [CALL_STR_1] = { .nuops = 1, .uops = { { CALL_STR_1, 0, 0 } } }, + [CALL_TUPLE_1] = { .nuops = 1, .uops = { { CALL_TUPLE_1, 0, 0 } } }, [EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { EXIT_INIT_CHECK, 0, 0 } } }, - [CALL_NO_KW_BUILTIN_O] = { .nuops = 1, .uops = { { CALL_NO_KW_BUILTIN_O, 0, 0 } } }, - [CALL_NO_KW_BUILTIN_FAST] = { .nuops = 1, .uops = { { CALL_NO_KW_BUILTIN_FAST, 0, 0 } } }, - [CALL_NO_KW_LEN] = { .nuops = 1, .uops = { { CALL_NO_KW_LEN, 0, 0 } } }, - [CALL_NO_KW_ISINSTANCE] = { .nuops = 1, .uops = { { CALL_NO_KW_ISINSTANCE, 0, 0 } } }, - [CALL_NO_KW_METHOD_DESCRIPTOR_O] = { .nuops = 1, .uops = { { CALL_NO_KW_METHOD_DESCRIPTOR_O, 0, 0 } } }, - [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 1, .uops = { { CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS, 0, 0 } } }, - [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = { .nuops = 1, .uops = { { CALL_NO_KW_METHOD_DESCRIPTOR_FAST, 0, 0 } } }, + [CALL_BUILTIN_CLASS] = { .nuops = 1, .uops = { { CALL_BUILTIN_CLASS, 0, 0 } } }, + [CALL_BUILTIN_O] = { .nuops = 1, .uops = { { CALL_BUILTIN_O, 0, 0 } } }, + [CALL_BUILTIN_FAST] = { .nuops = 1, .uops = { { CALL_BUILTIN_FAST, 0, 0 } } }, + [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 1, .uops = { { CALL_BUILTIN_FAST_WITH_KEYWORDS, 0, 0 } } }, + [CALL_LEN] = { .nuops = 1, .uops = { { CALL_LEN, 0, 0 } } }, + [CALL_ISINSTANCE] = { .nuops = 1, .uops = { { CALL_ISINSTANCE, 0, 0 } } }, + [CALL_METHOD_DESCRIPTOR_O] = { .nuops = 1, .uops = { { CALL_METHOD_DESCRIPTOR_O, 0, 0 } } }, + [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = { .nuops = 1, .uops = { { CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, 0, 0 } } }, + [CALL_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 1, .uops = { { CALL_METHOD_DESCRIPTOR_NOARGS, 0, 0 } } }, + [CALL_METHOD_DESCRIPTOR_FAST] = { .nuops = 1, .uops = { { CALL_METHOD_DESCRIPTOR_FAST, 0, 0 } } }, [MAKE_FUNCTION] = { .nuops = 1, .uops = { { MAKE_FUNCTION, 0, 0 } } }, [SET_FUNCTION_ATTRIBUTE] = { .nuops = 1, .uops = { { SET_FUNCTION_ATTRIBUTE, 0, 0 } } }, [BUILD_SLICE] = { .nuops = 1, .uops = { { BUILD_SLICE, 0, 0 } } }, @@ -1614,8 +1631,8 @@ const struct opcode_macro_expansion _PyOpcode_macro_expansion[OPCODE_MACRO_EXPAN extern const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE]; #ifdef NEED_OPCODE_METADATA const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { - [EXIT_TRACE] = "EXIT_TRACE", - [SAVE_IP] = "SAVE_IP", + [_EXIT_TRACE] = "_EXIT_TRACE", + [_SET_IP] = "_SET_IP", [_GUARD_BOTH_INT] = "_GUARD_BOTH_INT", [_BINARY_OP_MULTIPLY_INT] = "_BINARY_OP_MULTIPLY_INT", [_BINARY_OP_ADD_INT] = "_BINARY_OP_ADD_INT", @@ -1628,8 +1645,6 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_BINARY_OP_ADD_UNICODE] = "_BINARY_OP_ADD_UNICODE", [_BINARY_OP_INPLACE_ADD_UNICODE] = "_BINARY_OP_INPLACE_ADD_UNICODE", [_POP_FRAME] = "_POP_FRAME", - [_LOAD_LOCALS] = "_LOAD_LOCALS", - [_LOAD_FROM_DICT_OR_GLOBALS] = "_LOAD_FROM_DICT_OR_GLOBALS", [_GUARD_GLOBALS_VERSION] = "_GUARD_GLOBALS_VERSION", [_GUARD_BUILTINS_VERSION] = "_GUARD_BUILTINS_VERSION", [_LOAD_GLOBAL_MODULE] = "_LOAD_GLOBAL_MODULE", @@ -1637,7 +1652,7 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_GUARD_TYPE_VERSION] = "_GUARD_TYPE_VERSION", [_CHECK_MANAGED_OBJECT_HAS_VALUES] = "_CHECK_MANAGED_OBJECT_HAS_VALUES", [_LOAD_ATTR_INSTANCE_VALUE] = "_LOAD_ATTR_INSTANCE_VALUE", - [IS_NONE] = "IS_NONE", + [_IS_NONE] = "_IS_NONE", [_ITER_CHECK_LIST] = "_ITER_CHECK_LIST", [_ITER_JUMP_LIST] = "_ITER_JUMP_LIST", [_IS_ITER_EXHAUSTED_LIST] = "_IS_ITER_EXHAUSTED_LIST", @@ -1659,9 +1674,9 @@ const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE] = { [_PUSH_FRAME] = "_PUSH_FRAME", [_POP_JUMP_IF_FALSE] = "_POP_JUMP_IF_FALSE", [_POP_JUMP_IF_TRUE] = "_POP_JUMP_IF_TRUE", - [JUMP_TO_TOP] = "JUMP_TO_TOP", - [SAVE_CURRENT_IP] = "SAVE_CURRENT_IP", - [INSERT] = "INSERT", + [_JUMP_TO_TOP] = "_JUMP_TO_TOP", + [_SAVE_CURRENT_IP] = "_SAVE_CURRENT_IP", + [_INSERT] = "_INSERT", }; #endif // NEED_OPCODE_METADATA @@ -1673,21 +1688,9 @@ const char *const _PyOpcode_OpName[268] = { [RESUME] = "RESUME", [BEFORE_ASYNC_WITH] = "BEFORE_ASYNC_WITH", [BEFORE_WITH] = "BEFORE_WITH", - [BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT", - [BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT", - [BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE", [BINARY_OP_INPLACE_ADD_UNICODE] = "BINARY_OP_INPLACE_ADD_UNICODE", - [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT", - [BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT", - [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT", - [BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT", [BINARY_SLICE] = "BINARY_SLICE", [BINARY_SUBSCR] = "BINARY_SUBSCR", - [BINARY_SUBSCR_DICT] = "BINARY_SUBSCR_DICT", - [BINARY_SUBSCR_GETITEM] = "BINARY_SUBSCR_GETITEM", - [BINARY_SUBSCR_LIST_INT] = "BINARY_SUBSCR_LIST_INT", - [BINARY_SUBSCR_STR_INT] = "BINARY_SUBSCR_STR_INT", - [BINARY_SUBSCR_TUPLE_INT] = "BINARY_SUBSCR_TUPLE_INT", [CHECK_EG_MATCH] = "CHECK_EG_MATCH", [CHECK_EXC_MATCH] = "CHECK_EXC_MATCH", [CLEANUP_THROW] = "CLEANUP_THROW", @@ -1719,19 +1722,9 @@ const char *const _PyOpcode_OpName[268] = { [RETURN_GENERATOR] = "RETURN_GENERATOR", [RETURN_VALUE] = "RETURN_VALUE", [SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS", - [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE", - [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT", [STORE_SLICE] = "STORE_SLICE", [STORE_SUBSCR] = "STORE_SUBSCR", - [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT", - [STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT", [TO_BOOL] = "TO_BOOL", - [TO_BOOL_ALWAYS_TRUE] = "TO_BOOL_ALWAYS_TRUE", - [TO_BOOL_BOOL] = "TO_BOOL_BOOL", - [TO_BOOL_INT] = "TO_BOOL_INT", - [TO_BOOL_LIST] = "TO_BOOL_LIST", - [TO_BOOL_NONE] = "TO_BOOL_NONE", - [TO_BOOL_STR] = "TO_BOOL_STR", [UNARY_INVERT] = "UNARY_INVERT", [UNARY_NEGATIVE] = "UNARY_NEGATIVE", [UNARY_NOT] = "UNARY_NOT", @@ -1745,31 +1738,11 @@ const char *const _PyOpcode_OpName[268] = { [BUILD_STRING] = "BUILD_STRING", [BUILD_TUPLE] = "BUILD_TUPLE", [CALL] = "CALL", - [CALL_BOUND_METHOD_EXACT_ARGS] = "CALL_BOUND_METHOD_EXACT_ARGS", - [CALL_BUILTIN_CLASS] = "CALL_BUILTIN_CLASS", - [CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS", [CALL_FUNCTION_EX] = "CALL_FUNCTION_EX", [CALL_INTRINSIC_1] = "CALL_INTRINSIC_1", [CALL_INTRINSIC_2] = "CALL_INTRINSIC_2", - [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - [CALL_NO_KW_ALLOC_AND_ENTER_INIT] = "CALL_NO_KW_ALLOC_AND_ENTER_INIT", - [CALL_NO_KW_BUILTIN_FAST] = "CALL_NO_KW_BUILTIN_FAST", - [CALL_NO_KW_BUILTIN_O] = "CALL_NO_KW_BUILTIN_O", - [CALL_NO_KW_ISINSTANCE] = "CALL_NO_KW_ISINSTANCE", - [CALL_NO_KW_LEN] = "CALL_NO_KW_LEN", - [CALL_NO_KW_LIST_APPEND] = "CALL_NO_KW_LIST_APPEND", - [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = "CALL_NO_KW_METHOD_DESCRIPTOR_FAST", - [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = "CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS", - [CALL_NO_KW_METHOD_DESCRIPTOR_O] = "CALL_NO_KW_METHOD_DESCRIPTOR_O", - [CALL_NO_KW_STR_1] = "CALL_NO_KW_STR_1", - [CALL_NO_KW_TUPLE_1] = "CALL_NO_KW_TUPLE_1", - [CALL_NO_KW_TYPE_1] = "CALL_NO_KW_TYPE_1", - [CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS", - [CALL_PY_WITH_DEFAULTS] = "CALL_PY_WITH_DEFAULTS", + [CALL_KW] = "CALL_KW", [COMPARE_OP] = "COMPARE_OP", - [COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT", - [COMPARE_OP_INT] = "COMPARE_OP_INT", - [COMPARE_OP_STR] = "COMPARE_OP_STR", [CONTAINS_OP] = "CONTAINS_OP", [CONVERT_VALUE] = "CONVERT_VALUE", [COPY] = "COPY", @@ -1784,10 +1757,6 @@ const char *const _PyOpcode_OpName[268] = { [ENTER_EXECUTOR] = "ENTER_EXECUTOR", [EXTENDED_ARG] = "EXTENDED_ARG", [FOR_ITER] = "FOR_ITER", - [FOR_ITER_GEN] = "FOR_ITER_GEN", - [FOR_ITER_LIST] = "FOR_ITER_LIST", - [FOR_ITER_RANGE] = "FOR_ITER_RANGE", - [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE", [GET_AWAITABLE] = "GET_AWAITABLE", [IMPORT_FROM] = "IMPORT_FROM", [IMPORT_NAME] = "IMPORT_NAME", @@ -1795,22 +1764,9 @@ const char *const _PyOpcode_OpName[268] = { [JUMP_BACKWARD] = "JUMP_BACKWARD", [JUMP_BACKWARD_NO_INTERRUPT] = "JUMP_BACKWARD_NO_INTERRUPT", [JUMP_FORWARD] = "JUMP_FORWARD", - [KW_NAMES] = "KW_NAMES", [LIST_APPEND] = "LIST_APPEND", [LIST_EXTEND] = "LIST_EXTEND", [LOAD_ATTR] = "LOAD_ATTR", - [LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS", - [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN", - [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE", - [LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT", - [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT", - [LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES", - [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE", - [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "LOAD_ATTR_NONDESCRIPTOR_NO_DICT", - [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", - [LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY", - [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT", - [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT", [LOAD_CONST] = "LOAD_CONST", [LOAD_DEREF] = "LOAD_DEREF", [LOAD_FAST] = "LOAD_FAST", @@ -1820,12 +1776,8 @@ const char *const _PyOpcode_OpName[268] = { [LOAD_FROM_DICT_OR_DEREF] = "LOAD_FROM_DICT_OR_DEREF", [LOAD_FROM_DICT_OR_GLOBALS] = "LOAD_FROM_DICT_OR_GLOBALS", [LOAD_GLOBAL] = "LOAD_GLOBAL", - [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN", - [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE", [LOAD_NAME] = "LOAD_NAME", [LOAD_SUPER_ATTR] = "LOAD_SUPER_ATTR", - [LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR", - [LOAD_SUPER_ATTR_METHOD] = "LOAD_SUPER_ATTR_METHOD", [MAKE_CELL] = "MAKE_CELL", [MAP_ADD] = "MAP_ADD", [MATCH_CLASS] = "MATCH_CLASS", @@ -1837,12 +1789,10 @@ const char *const _PyOpcode_OpName[268] = { [RERAISE] = "RERAISE", [RETURN_CONST] = "RETURN_CONST", [SEND] = "SEND", - [SEND_GEN] = "SEND_GEN", [SET_ADD] = "SET_ADD", [SET_FUNCTION_ATTRIBUTE] = "SET_FUNCTION_ATTRIBUTE", [SET_UPDATE] = "SET_UPDATE", [STORE_ATTR] = "STORE_ATTR", - [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT", [STORE_DEREF] = "STORE_DEREF", [STORE_FAST] = "STORE_FAST", [STORE_FAST_LOAD_FAST] = "STORE_FAST_LOAD_FAST", @@ -1852,10 +1802,76 @@ const char *const _PyOpcode_OpName[268] = { [SWAP] = "SWAP", [UNPACK_EX] = "UNPACK_EX", [UNPACK_SEQUENCE] = "UNPACK_SEQUENCE", + [YIELD_VALUE] = "YIELD_VALUE", + [BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT", + [BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT", + [BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE", + [BINARY_OP_MULTIPLY_FLOAT] = "BINARY_OP_MULTIPLY_FLOAT", + [BINARY_OP_MULTIPLY_INT] = "BINARY_OP_MULTIPLY_INT", + [BINARY_OP_SUBTRACT_FLOAT] = "BINARY_OP_SUBTRACT_FLOAT", + [BINARY_OP_SUBTRACT_INT] = "BINARY_OP_SUBTRACT_INT", + [BINARY_SUBSCR_DICT] = "BINARY_SUBSCR_DICT", + [BINARY_SUBSCR_GETITEM] = "BINARY_SUBSCR_GETITEM", + [BINARY_SUBSCR_LIST_INT] = "BINARY_SUBSCR_LIST_INT", + [BINARY_SUBSCR_STR_INT] = "BINARY_SUBSCR_STR_INT", + [BINARY_SUBSCR_TUPLE_INT] = "BINARY_SUBSCR_TUPLE_INT", + [CALL_ALLOC_AND_ENTER_INIT] = "CALL_ALLOC_AND_ENTER_INIT", + [CALL_BOUND_METHOD_EXACT_ARGS] = "CALL_BOUND_METHOD_EXACT_ARGS", + [CALL_BUILTIN_CLASS] = "CALL_BUILTIN_CLASS", + [CALL_BUILTIN_FAST] = "CALL_BUILTIN_FAST", + [CALL_BUILTIN_FAST_WITH_KEYWORDS] = "CALL_BUILTIN_FAST_WITH_KEYWORDS", + [CALL_BUILTIN_O] = "CALL_BUILTIN_O", + [CALL_ISINSTANCE] = "CALL_ISINSTANCE", + [CALL_LEN] = "CALL_LEN", + [CALL_LIST_APPEND] = "CALL_LIST_APPEND", + [CALL_METHOD_DESCRIPTOR_FAST] = "CALL_METHOD_DESCRIPTOR_FAST", + [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", + [CALL_METHOD_DESCRIPTOR_NOARGS] = "CALL_METHOD_DESCRIPTOR_NOARGS", + [CALL_METHOD_DESCRIPTOR_O] = "CALL_METHOD_DESCRIPTOR_O", + [CALL_PY_EXACT_ARGS] = "CALL_PY_EXACT_ARGS", + [CALL_PY_WITH_DEFAULTS] = "CALL_PY_WITH_DEFAULTS", + [CALL_STR_1] = "CALL_STR_1", + [CALL_TUPLE_1] = "CALL_TUPLE_1", + [CALL_TYPE_1] = "CALL_TYPE_1", + [COMPARE_OP_FLOAT] = "COMPARE_OP_FLOAT", + [COMPARE_OP_INT] = "COMPARE_OP_INT", + [COMPARE_OP_STR] = "COMPARE_OP_STR", + [FOR_ITER_GEN] = "FOR_ITER_GEN", + [FOR_ITER_LIST] = "FOR_ITER_LIST", + [FOR_ITER_RANGE] = "FOR_ITER_RANGE", + [FOR_ITER_TUPLE] = "FOR_ITER_TUPLE", + [LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS", + [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = "LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN", + [LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE", + [LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT", + [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT", + [LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES", + [LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE", + [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = "LOAD_ATTR_NONDESCRIPTOR_NO_DICT", + [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES", + [LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY", + [LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT", + [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT", + [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN", + [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE", + [LOAD_SUPER_ATTR_ATTR] = "LOAD_SUPER_ATTR_ATTR", + [LOAD_SUPER_ATTR_METHOD] = "LOAD_SUPER_ATTR_METHOD", + [RESUME_CHECK] = "RESUME_CHECK", + [SEND_GEN] = "SEND_GEN", + [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE", + [STORE_ATTR_SLOT] = "STORE_ATTR_SLOT", + [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT", + [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT", + [STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT", + [TO_BOOL_ALWAYS_TRUE] = "TO_BOOL_ALWAYS_TRUE", + [TO_BOOL_BOOL] = "TO_BOOL_BOOL", + [TO_BOOL_INT] = "TO_BOOL_INT", + [TO_BOOL_LIST] = "TO_BOOL_LIST", + [TO_BOOL_NONE] = "TO_BOOL_NONE", + [TO_BOOL_STR] = "TO_BOOL_STR", [UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST", [UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE", [UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE", - [YIELD_VALUE] = "YIELD_VALUE", [INSTRUMENTED_RESUME] = "INSTRUMENTED_RESUME", [INSTRUMENTED_END_FOR] = "INSTRUMENTED_END_FOR", [INSTRUMENTED_END_SEND] = "INSTRUMENTED_END_SEND", @@ -1865,6 +1881,7 @@ const char *const _PyOpcode_OpName[268] = { [INSTRUMENTED_LOAD_SUPER_ATTR] = "INSTRUMENTED_LOAD_SUPER_ATTR", [INSTRUMENTED_FOR_ITER] = "INSTRUMENTED_FOR_ITER", [INSTRUMENTED_CALL] = "INSTRUMENTED_CALL", + [INSTRUMENTED_CALL_KW] = "INSTRUMENTED_CALL_KW", [INSTRUMENTED_CALL_FUNCTION_EX] = "INSTRUMENTED_CALL_FUNCTION_EX", [INSTRUMENTED_INSTRUCTION] = "INSTRUMENTED_INSTRUCTION", [INSTRUMENTED_JUMP_FORWARD] = "INSTRUMENTED_JUMP_FORWARD", @@ -1893,7 +1910,6 @@ extern const uint8_t _PyOpcode_Caches[256]; #ifdef NEED_OPCODE_METADATA const uint8_t _PyOpcode_Caches[256] = { [TO_BOOL] = 3, - [BINARY_OP] = 1, [BINARY_SUBSCR] = 1, [STORE_SUBSCR] = 1, [SEND] = 1, @@ -1903,8 +1919,13 @@ const uint8_t _PyOpcode_Caches[256] = { [LOAD_SUPER_ATTR] = 1, [LOAD_ATTR] = 9, [COMPARE_OP] = 1, + [POP_JUMP_IF_FALSE] = 1, + [POP_JUMP_IF_TRUE] = 1, + [POP_JUMP_IF_NONE] = 1, + [POP_JUMP_IF_NOT_NONE] = 1, [FOR_ITER] = 1, [CALL] = 3, + [BINARY_OP] = 1, [JUMP_BACKWARD] = 1, }; #endif // NEED_OPCODE_METADATA @@ -1939,27 +1960,28 @@ const uint8_t _PyOpcode_Deopt[256] = { [BUILD_TUPLE] = BUILD_TUPLE, [CACHE] = CACHE, [CALL] = CALL, + [CALL_ALLOC_AND_ENTER_INIT] = CALL, [CALL_BOUND_METHOD_EXACT_ARGS] = CALL, [CALL_BUILTIN_CLASS] = CALL, + [CALL_BUILTIN_FAST] = CALL, [CALL_BUILTIN_FAST_WITH_KEYWORDS] = CALL, + [CALL_BUILTIN_O] = CALL, [CALL_FUNCTION_EX] = CALL_FUNCTION_EX, [CALL_INTRINSIC_1] = CALL_INTRINSIC_1, [CALL_INTRINSIC_2] = CALL_INTRINSIC_2, + [CALL_ISINSTANCE] = CALL, + [CALL_KW] = CALL_KW, + [CALL_LEN] = CALL, + [CALL_LIST_APPEND] = CALL, + [CALL_METHOD_DESCRIPTOR_FAST] = CALL, [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = CALL, - [CALL_NO_KW_ALLOC_AND_ENTER_INIT] = CALL, - [CALL_NO_KW_BUILTIN_FAST] = CALL, - [CALL_NO_KW_BUILTIN_O] = CALL, - [CALL_NO_KW_ISINSTANCE] = CALL, - [CALL_NO_KW_LEN] = CALL, - [CALL_NO_KW_LIST_APPEND] = CALL, - [CALL_NO_KW_METHOD_DESCRIPTOR_FAST] = CALL, - [CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS] = CALL, - [CALL_NO_KW_METHOD_DESCRIPTOR_O] = CALL, - [CALL_NO_KW_STR_1] = CALL, - [CALL_NO_KW_TUPLE_1] = CALL, - [CALL_NO_KW_TYPE_1] = CALL, + [CALL_METHOD_DESCRIPTOR_NOARGS] = CALL, + [CALL_METHOD_DESCRIPTOR_O] = CALL, [CALL_PY_EXACT_ARGS] = CALL, [CALL_PY_WITH_DEFAULTS] = CALL, + [CALL_STR_1] = CALL, + [CALL_TUPLE_1] = CALL, + [CALL_TYPE_1] = CALL, [CHECK_EG_MATCH] = CHECK_EG_MATCH, [CHECK_EXC_MATCH] = CHECK_EXC_MATCH, [CLEANUP_THROW] = CLEANUP_THROW, @@ -2002,6 +2024,7 @@ const uint8_t _PyOpcode_Deopt[256] = { [IMPORT_NAME] = IMPORT_NAME, [INSTRUMENTED_CALL] = INSTRUMENTED_CALL, [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX, + [INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW, [INSTRUMENTED_END_FOR] = INSTRUMENTED_END_FOR, [INSTRUMENTED_END_SEND] = INSTRUMENTED_END_SEND, [INSTRUMENTED_FOR_ITER] = INSTRUMENTED_FOR_ITER, @@ -2023,7 +2046,6 @@ const uint8_t _PyOpcode_Deopt[256] = { [JUMP_BACKWARD] = JUMP_BACKWARD, [JUMP_BACKWARD_NO_INTERRUPT] = JUMP_BACKWARD_NO_INTERRUPT, [JUMP_FORWARD] = JUMP_FORWARD, - [KW_NAMES] = KW_NAMES, [LIST_APPEND] = LIST_APPEND, [LIST_EXTEND] = LIST_EXTEND, [LOAD_ASSERTION_ERROR] = LOAD_ASSERTION_ERROR, @@ -2077,6 +2099,7 @@ const uint8_t _PyOpcode_Deopt[256] = { [RERAISE] = RERAISE, [RESERVED] = RESERVED, [RESUME] = RESUME, + [RESUME_CHECK] = RESUME, [RETURN_CONST] = RETURN_CONST, [RETURN_GENERATOR] = RETURN_GENERATOR, [RETURN_VALUE] = RETURN_VALUE, @@ -2122,37 +2145,36 @@ const uint8_t _PyOpcode_Deopt[256] = { #endif // NEED_OPCODE_METADATA #define EXTRA_CASES \ - case 188: \ - case 189: \ - case 190: \ - case 191: \ - case 192: \ - case 193: \ - case 194: \ - case 195: \ - case 196: \ - case 197: \ - case 198: \ - case 199: \ - case 200: \ - case 201: \ - case 202: \ - case 203: \ - case 204: \ - case 205: \ - case 206: \ - case 207: \ - case 208: \ - case 209: \ - case 210: \ - case 211: \ - case 212: \ - case 213: \ - case 214: \ - case 215: \ - case 216: \ - case 217: \ - case 218: \ + case 119: \ + case 120: \ + case 121: \ + case 122: \ + case 123: \ + case 124: \ + case 125: \ + case 126: \ + case 127: \ + case 128: \ + case 129: \ + case 130: \ + case 131: \ + case 132: \ + case 133: \ + case 134: \ + case 135: \ + case 136: \ + case 137: \ + case 138: \ + case 139: \ + case 140: \ + case 141: \ + case 142: \ + case 143: \ + case 144: \ + case 145: \ + case 146: \ + case 147: \ + case 148: \ case 219: \ case 220: \ case 221: \ @@ -2170,7 +2192,6 @@ const uint8_t _PyOpcode_Deopt[256] = { case 233: \ case 234: \ case 235: \ - case 236: \ case 255: \ ; diff --git a/Include/internal/pycore_parking_lot.h b/Include/internal/pycore_parking_lot.h new file mode 100644 index 00000000000000..f444da730055e8 --- /dev/null +++ b/Include/internal/pycore_parking_lot.h @@ -0,0 +1,99 @@ +// ParkingLot is an internal API for building efficient synchronization +// primitives like mutexes and events. +// +// The API and name is inspired by WebKit's WTF::ParkingLot, which in turn +// is inspired Linux's futex API. +// See https://webkit.org/blog/6161/locking-in-webkit/. +// +// The core functionality is an atomic "compare-and-sleep" operation along with +// an atomic "wake-up" operation. + +#ifndef Py_INTERNAL_PARKING_LOT_H +#define Py_INTERNAL_PARKING_LOT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_time.h" // _PyTime_t + + +enum { + // The thread was unparked by another thread. + Py_PARK_OK = 0, + + // The value of `address` did not match `expected`. + Py_PARK_AGAIN = -1, + + // The thread was unparked due to a timeout. + Py_PARK_TIMEOUT = -2, + + // The thread was interrupted by a signal. + Py_PARK_INTR = -3, +}; + +// Checks that `*address == *expected` and puts the thread to sleep until an +// unpark operation is called on the same `address`. Otherwise, the function +// returns `Py_PARK_AGAIN`. The comparison behaves like memcmp, but is +// performed atomically with respect to unpark operations. +// +// The `address_size` argument is the size of the data pointed to by the +// `address` and `expected` pointers (i.e., sizeof(*address)). It must be +// 1, 2, 4, or 8. +// +// The `timeout_ns` argument specifies the maximum amount of time to wait, with +// -1 indicating an infinite wait. +// +// `park_arg`, which can be NULL, is passed to the unpark operation. +// +// If `detach` is true, then the thread will detach/release the GIL while +// waiting. +// +// Example usage: +// +// if (_Py_atomic_compare_exchange_uint8(address, &expected, new_value)) { +// int res = _PyParkingLot_Park(address, &new_value, sizeof(*address), +// timeout_ns, NULL, 1); +// ... +// } +PyAPI_FUNC(int) +_PyParkingLot_Park(const void *address, const void *expected, + size_t address_size, _PyTime_t timeout_ns, + void *park_arg, int detach); + +// Callback for _PyParkingLot_Unpark: +// +// `arg` is the data of the same name provided to the _PyParkingLot_Unpark() +// call. +// `park_arg` is the data provided to _PyParkingLot_Park() call or NULL if +// no waiting thread was found. +// `has_more_waiters` is true if there are more threads waiting on the same +// address. May be true in cases where threads are waiting on a different +// address that map to the same internal bucket. +typedef void _Py_unpark_fn_t(void *arg, void *park_arg, int has_more_waiters); + +// Unparks a single thread waiting on `address`. +// +// Note that fn() is called regardless of whether a thread was unparked. If +// no threads are waiting on `address` then the `park_arg` argument to fn() +// will be NULL. +// +// Example usage: +// void callback(void *arg, void *park_arg, int has_more_waiters); +// _PyParkingLot_Unpark(address, &callback, arg); +PyAPI_FUNC(void) +_PyParkingLot_Unpark(const void *address, _Py_unpark_fn_t *fn, void *arg); + +// Unparks all threads waiting on `address`. +PyAPI_FUNC(void) _PyParkingLot_UnparkAll(const void *address); + +// Resets the parking lot state after a fork. Forgets all parked threads. +PyAPI_FUNC(void) _PyParkingLot_AfterFork(void); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_PARKING_LOT_H */ diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h index 0f16fb894d17e1..184eb35e52b47b 100644 --- a/Include/internal/pycore_pyerrors.h +++ b/Include/internal/pycore_pyerrors.h @@ -170,6 +170,11 @@ Py_DEPRECATED(3.12) extern void _PyErr_ChainExceptions(PyObject *, PyObject *, P // Export for '_zoneinfo' shared extension PyAPI_FUNC(void) _PyErr_ChainExceptions1(PyObject *); +// Export for '_lsprof' shared extension +PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg( + const char *err_msg, + PyObject *obj); + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index a30036aeb57e05..9fc8ae903b2ac0 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -67,6 +67,12 @@ _Py_ThreadCanHandleSignals(PyInterpreterState *interp) extern _Py_thread_local PyThreadState *_Py_tss_tstate; #endif +#ifndef NDEBUG +extern int _PyThreadState_CheckConsistency(PyThreadState *tstate); +#endif + +int _PyThreadState_MustExit(PyThreadState *tstate); + // Export for most shared extensions, used via _PyThreadState_GET() static // inline function. PyAPI_FUNC(PyThreadState *) _PyThreadState_GetCurrent(void); diff --git a/Include/internal/pycore_pystats.h b/Include/internal/pycore_pystats.h new file mode 100644 index 00000000000000..f8af398a560586 --- /dev/null +++ b/Include/internal/pycore_pystats.h @@ -0,0 +1,21 @@ +#ifndef Py_INTERNAL_PYSTATS_H +#define Py_INTERNAL_PYSTATS_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#ifdef Py_STATS +extern void _Py_StatsOn(void); +extern void _Py_StatsOff(void); +extern void _Py_StatsClear(void); +extern int _Py_PrintSpecializationStats(int to_file); +#endif + +#ifdef __cplusplus +} +#endif +#endif // !Py_INTERNAL_PYSTATS_H diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h index 2ce46f3201d8af..0ddc405f221a1c 100644 --- a/Include/internal/pycore_runtime.h +++ b/Include/internal/pycore_runtime.h @@ -267,6 +267,13 @@ typedef struct pyruntimestate { /* PyInterpreterState.interpreters.main */ PyInterpreterState _main_interpreter; + +#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) + // Used in "Python/emscripten_trampoline.c" to choose between type + // reflection trampoline and EM_JS trampoline. + bool wasm_type_reflection_available; +#endif + } _PyRuntimeState; diff --git a/Include/internal/pycore_semaphore.h b/Include/internal/pycore_semaphore.h new file mode 100644 index 00000000000000..2a4ecb7147acee --- /dev/null +++ b/Include/internal/pycore_semaphore.h @@ -0,0 +1,64 @@ +// The _PySemaphore API a simplified cross-platform semaphore used to implement +// wakeup/sleep. +#ifndef Py_INTERNAL_SEMAPHORE_H +#define Py_INTERNAL_SEMAPHORE_H + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_time.h" // _PyTime_t + +#ifdef MS_WINDOWS +# define WIN32_LEAN_AND_MEAN +# include +#elif defined(HAVE_PTHREAD_H) +# include +#elif defined(HAVE_PTHREAD_STUBS) +# include "cpython/pthread_stubs.h" +#else +# error "Require native threads. See https://bugs.python.org/issue31370" +#endif + +#if (defined(_POSIX_SEMAPHORES) && (_POSIX_SEMAPHORES+0) != -1 && \ + defined(HAVE_SEM_TIMEDWAIT)) +# define _Py_USE_SEMAPHORES +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _PySemaphore { +#if defined(MS_WINDOWS) + HANDLE platform_sem; +#elif defined(_Py_USE_SEMAPHORES) + sem_t platform_sem; +#else + pthread_mutex_t mutex; + pthread_cond_t cond; + int counter; +#endif +} _PySemaphore; + +// Puts the current thread to sleep until _PySemaphore_Wakeup() is called. +// If `detach` is true, then the thread will detach/release the GIL while +// sleeping. +PyAPI_FUNC(int) +_PySemaphore_Wait(_PySemaphore *sema, _PyTime_t timeout_ns, int detach); + +// Wakes up a single thread waiting on sema. Note that _PySemaphore_Wakeup() +// can be called before _PySemaphore_Wait(). +PyAPI_FUNC(void) +_PySemaphore_Wakeup(_PySemaphore *sema); + +// Initializes/destroys a semaphore +PyAPI_FUNC(void) _PySemaphore_Init(_PySemaphore *sema); +PyAPI_FUNC(void) _PySemaphore_Destroy(_PySemaphore *sema); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_SEMAPHORE_H */ diff --git a/Include/internal/pycore_uops.h b/Include/internal/pycore_uops.h index 254eeca2361bea..249f5c010e0092 100644 --- a/Include/internal/pycore_uops.h +++ b/Include/internal/pycore_uops.h @@ -8,6 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif +#include "pycore_frame.h" // _PyInterpreterFrame + #define _Py_UOP_MAX_TRACE_LENGTH 64 typedef struct { diff --git a/Include/object.h b/Include/object.h index b94b2907e4f163..9058558e3cd4d9 100644 --- a/Include/object.h +++ b/Include/object.h @@ -394,6 +394,10 @@ PyAPI_FUNC(int) PyObject_GetOptionalAttrString(PyObject *, const char *, PyObjec PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_DelAttr(PyObject *v, PyObject *name); PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000 +PyAPI_FUNC(int) PyObject_HasAttrWithError(PyObject *, PyObject *); +PyAPI_FUNC(int) PyObject_HasAttrStringWithError(PyObject *, const char *); +#endif PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *); @@ -656,17 +660,15 @@ static inline void Py_DECREF(PyObject *op) { #elif defined(Py_REF_DEBUG) static inline void Py_DECREF(const char *filename, int lineno, PyObject *op) { + if (op->ob_refcnt <= 0) { + _Py_NegativeRefcount(filename, lineno, op); + } if (_Py_IsImmortal(op)) { return; } _Py_DECREF_STAT_INC(); _Py_DECREF_DecRefTotal(); - if (--op->ob_refcnt != 0) { - if (op->ob_refcnt < 0) { - _Py_NegativeRefcount(filename, lineno, op); - } - } - else { + if (--op->ob_refcnt == 0) { _Py_Dealloc(op); } } diff --git a/Include/opcode_ids.h b/Include/opcode_ids.h index cd43716415d1db..ba25bd459c1bcd 100644 --- a/Include/opcode_ids.h +++ b/Include/opcode_ids.h @@ -13,202 +13,204 @@ extern "C" { #define CACHE 0 #define BEFORE_ASYNC_WITH 1 #define BEFORE_WITH 2 -#define BINARY_OP_ADD_FLOAT 3 -#define BINARY_OP_ADD_INT 4 -#define BINARY_OP_ADD_UNICODE 5 -#define BINARY_OP_INPLACE_ADD_UNICODE 6 -#define BINARY_OP_MULTIPLY_FLOAT 7 -#define BINARY_OP_MULTIPLY_INT 8 -#define BINARY_OP_SUBTRACT_FLOAT 9 -#define BINARY_OP_SUBTRACT_INT 10 -#define BINARY_SLICE 11 -#define BINARY_SUBSCR 12 -#define BINARY_SUBSCR_DICT 13 -#define BINARY_SUBSCR_GETITEM 14 -#define BINARY_SUBSCR_LIST_INT 15 -#define BINARY_SUBSCR_STR_INT 16 +#define BINARY_OP_INPLACE_ADD_UNICODE 3 +#define BINARY_SLICE 4 +#define BINARY_SUBSCR 5 +#define CHECK_EG_MATCH 6 +#define CHECK_EXC_MATCH 7 +#define CLEANUP_THROW 8 +#define DELETE_SUBSCR 9 +#define END_ASYNC_FOR 10 +#define END_FOR 11 +#define END_SEND 12 +#define EXIT_INIT_CHECK 13 +#define FORMAT_SIMPLE 14 +#define FORMAT_WITH_SPEC 15 +#define GET_AITER 16 #define RESERVED 17 -#define BINARY_SUBSCR_TUPLE_INT 18 -#define CHECK_EG_MATCH 19 -#define CHECK_EXC_MATCH 20 -#define CLEANUP_THROW 21 -#define DELETE_SUBSCR 22 -#define END_ASYNC_FOR 23 -#define END_FOR 24 -#define END_SEND 25 -#define EXIT_INIT_CHECK 26 -#define FORMAT_SIMPLE 27 -#define FORMAT_WITH_SPEC 28 -#define GET_AITER 29 -#define GET_ANEXT 30 -#define GET_ITER 31 -#define GET_LEN 32 -#define GET_YIELD_FROM_ITER 33 -#define INTERPRETER_EXIT 34 -#define LOAD_ASSERTION_ERROR 35 -#define LOAD_BUILD_CLASS 36 -#define LOAD_LOCALS 37 -#define MAKE_FUNCTION 38 -#define MATCH_KEYS 39 -#define MATCH_MAPPING 40 -#define MATCH_SEQUENCE 41 -#define NOP 42 -#define POP_EXCEPT 43 -#define POP_TOP 44 -#define PUSH_EXC_INFO 45 -#define PUSH_NULL 46 -#define RETURN_GENERATOR 47 -#define RETURN_VALUE 48 -#define SETUP_ANNOTATIONS 49 -#define STORE_ATTR_INSTANCE_VALUE 50 -#define STORE_ATTR_SLOT 51 -#define STORE_SLICE 52 -#define STORE_SUBSCR 53 -#define STORE_SUBSCR_DICT 54 -#define STORE_SUBSCR_LIST_INT 55 -#define TO_BOOL 56 -#define TO_BOOL_ALWAYS_TRUE 57 -#define TO_BOOL_BOOL 58 -#define TO_BOOL_INT 59 -#define TO_BOOL_LIST 60 -#define TO_BOOL_NONE 61 -#define TO_BOOL_STR 62 -#define UNARY_INVERT 63 -#define UNARY_NEGATIVE 64 -#define UNARY_NOT 65 -#define WITH_EXCEPT_START 66 -#define HAVE_ARGUMENT 67 -#define BINARY_OP 67 -#define BUILD_CONST_KEY_MAP 68 -#define BUILD_LIST 69 -#define BUILD_MAP 70 -#define BUILD_SET 71 -#define BUILD_SLICE 72 -#define BUILD_STRING 73 -#define BUILD_TUPLE 74 -#define CALL 75 -#define CALL_BOUND_METHOD_EXACT_ARGS 76 -#define CALL_BUILTIN_CLASS 77 -#define CALL_BUILTIN_FAST_WITH_KEYWORDS 78 -#define CALL_FUNCTION_EX 79 -#define CALL_INTRINSIC_1 80 -#define CALL_INTRINSIC_2 81 -#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 82 -#define CALL_NO_KW_ALLOC_AND_ENTER_INIT 83 -#define CALL_NO_KW_BUILTIN_FAST 84 -#define CALL_NO_KW_BUILTIN_O 85 -#define CALL_NO_KW_ISINSTANCE 86 -#define CALL_NO_KW_LEN 87 -#define CALL_NO_KW_LIST_APPEND 88 -#define CALL_NO_KW_METHOD_DESCRIPTOR_FAST 89 -#define CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS 90 -#define CALL_NO_KW_METHOD_DESCRIPTOR_O 91 -#define CALL_NO_KW_STR_1 92 -#define CALL_NO_KW_TUPLE_1 93 -#define CALL_NO_KW_TYPE_1 94 -#define CALL_PY_EXACT_ARGS 95 -#define CALL_PY_WITH_DEFAULTS 96 -#define COMPARE_OP 97 -#define COMPARE_OP_FLOAT 98 -#define COMPARE_OP_INT 99 -#define COMPARE_OP_STR 100 -#define CONTAINS_OP 101 -#define CONVERT_VALUE 102 -#define COPY 103 -#define COPY_FREE_VARS 104 -#define DELETE_ATTR 105 -#define DELETE_DEREF 106 -#define DELETE_FAST 107 -#define DELETE_GLOBAL 108 -#define DELETE_NAME 109 -#define DICT_MERGE 110 -#define DICT_UPDATE 111 -#define ENTER_EXECUTOR 112 -#define EXTENDED_ARG 113 -#define FOR_ITER 114 -#define FOR_ITER_GEN 115 -#define FOR_ITER_LIST 116 -#define FOR_ITER_RANGE 117 -#define FOR_ITER_TUPLE 118 -#define GET_AWAITABLE 119 -#define IMPORT_FROM 120 -#define IMPORT_NAME 121 -#define IS_OP 122 -#define JUMP_BACKWARD 123 -#define JUMP_BACKWARD_NO_INTERRUPT 124 -#define JUMP_FORWARD 125 -#define KW_NAMES 126 -#define LIST_APPEND 127 -#define LIST_EXTEND 128 -#define LOAD_ATTR 129 -#define LOAD_ATTR_CLASS 130 -#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 131 -#define LOAD_ATTR_INSTANCE_VALUE 132 -#define LOAD_ATTR_METHOD_LAZY_DICT 133 -#define LOAD_ATTR_METHOD_NO_DICT 134 -#define LOAD_ATTR_METHOD_WITH_VALUES 135 -#define LOAD_ATTR_MODULE 136 -#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 137 -#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 138 -#define LOAD_ATTR_PROPERTY 139 -#define LOAD_ATTR_SLOT 140 -#define LOAD_ATTR_WITH_HINT 141 -#define LOAD_CONST 142 -#define LOAD_DEREF 143 -#define LOAD_FAST 144 -#define LOAD_FAST_AND_CLEAR 145 -#define LOAD_FAST_CHECK 146 -#define LOAD_FAST_LOAD_FAST 147 -#define LOAD_FROM_DICT_OR_DEREF 148 -#define LOAD_FROM_DICT_OR_GLOBALS 149 -#define LOAD_GLOBAL 150 -#define LOAD_GLOBAL_BUILTIN 151 -#define LOAD_GLOBAL_MODULE 152 -#define LOAD_NAME 153 -#define LOAD_SUPER_ATTR 154 -#define LOAD_SUPER_ATTR_ATTR 155 -#define LOAD_SUPER_ATTR_METHOD 156 -#define MAKE_CELL 157 -#define MAP_ADD 158 -#define MATCH_CLASS 159 -#define POP_JUMP_IF_FALSE 160 -#define POP_JUMP_IF_NONE 161 -#define POP_JUMP_IF_NOT_NONE 162 -#define POP_JUMP_IF_TRUE 163 -#define RAISE_VARARGS 164 -#define RERAISE 165 -#define RESUME 166 -#define RETURN_CONST 167 -#define SEND 168 -#define SEND_GEN 169 -#define SET_ADD 170 -#define SET_FUNCTION_ATTRIBUTE 171 -#define SET_UPDATE 172 -#define STORE_ATTR 173 -#define STORE_ATTR_WITH_HINT 174 -#define STORE_DEREF 175 -#define STORE_FAST 176 -#define STORE_FAST_LOAD_FAST 177 -#define STORE_FAST_STORE_FAST 178 -#define STORE_GLOBAL 179 -#define STORE_NAME 180 -#define SWAP 181 -#define UNPACK_EX 182 -#define UNPACK_SEQUENCE 183 -#define UNPACK_SEQUENCE_LIST 184 -#define UNPACK_SEQUENCE_TUPLE 185 -#define UNPACK_SEQUENCE_TWO_TUPLE 186 -#define YIELD_VALUE 187 -#define MIN_INSTRUMENTED_OPCODE 237 -#define INSTRUMENTED_RESUME 237 -#define INSTRUMENTED_END_FOR 238 -#define INSTRUMENTED_END_SEND 239 -#define INSTRUMENTED_RETURN_VALUE 240 -#define INSTRUMENTED_RETURN_CONST 241 -#define INSTRUMENTED_YIELD_VALUE 242 -#define INSTRUMENTED_LOAD_SUPER_ATTR 243 -#define INSTRUMENTED_FOR_ITER 244 -#define INSTRUMENTED_CALL 245 +#define GET_ANEXT 18 +#define GET_ITER 19 +#define GET_LEN 20 +#define GET_YIELD_FROM_ITER 21 +#define INTERPRETER_EXIT 22 +#define LOAD_ASSERTION_ERROR 23 +#define LOAD_BUILD_CLASS 24 +#define LOAD_LOCALS 25 +#define MAKE_FUNCTION 26 +#define MATCH_KEYS 27 +#define MATCH_MAPPING 28 +#define MATCH_SEQUENCE 29 +#define NOP 30 +#define POP_EXCEPT 31 +#define POP_TOP 32 +#define PUSH_EXC_INFO 33 +#define PUSH_NULL 34 +#define RETURN_GENERATOR 35 +#define RETURN_VALUE 36 +#define SETUP_ANNOTATIONS 37 +#define STORE_SLICE 38 +#define STORE_SUBSCR 39 +#define TO_BOOL 40 +#define UNARY_INVERT 41 +#define UNARY_NEGATIVE 42 +#define UNARY_NOT 43 +#define WITH_EXCEPT_START 44 +#define HAVE_ARGUMENT 45 +#define BINARY_OP 45 +#define BUILD_CONST_KEY_MAP 46 +#define BUILD_LIST 47 +#define BUILD_MAP 48 +#define BUILD_SET 49 +#define BUILD_SLICE 50 +#define BUILD_STRING 51 +#define BUILD_TUPLE 52 +#define CALL 53 +#define CALL_FUNCTION_EX 54 +#define CALL_INTRINSIC_1 55 +#define CALL_INTRINSIC_2 56 +#define CALL_KW 57 +#define COMPARE_OP 58 +#define CONTAINS_OP 59 +#define CONVERT_VALUE 60 +#define COPY 61 +#define COPY_FREE_VARS 62 +#define DELETE_ATTR 63 +#define DELETE_DEREF 64 +#define DELETE_FAST 65 +#define DELETE_GLOBAL 66 +#define DELETE_NAME 67 +#define DICT_MERGE 68 +#define DICT_UPDATE 69 +#define ENTER_EXECUTOR 70 +#define EXTENDED_ARG 71 +#define FOR_ITER 72 +#define GET_AWAITABLE 73 +#define IMPORT_FROM 74 +#define IMPORT_NAME 75 +#define IS_OP 76 +#define JUMP_BACKWARD 77 +#define JUMP_BACKWARD_NO_INTERRUPT 78 +#define JUMP_FORWARD 79 +#define LIST_APPEND 80 +#define LIST_EXTEND 81 +#define LOAD_ATTR 82 +#define LOAD_CONST 83 +#define LOAD_DEREF 84 +#define LOAD_FAST 85 +#define LOAD_FAST_AND_CLEAR 86 +#define LOAD_FAST_CHECK 87 +#define LOAD_FAST_LOAD_FAST 88 +#define LOAD_FROM_DICT_OR_DEREF 89 +#define LOAD_FROM_DICT_OR_GLOBALS 90 +#define LOAD_GLOBAL 91 +#define LOAD_NAME 92 +#define LOAD_SUPER_ATTR 93 +#define MAKE_CELL 94 +#define MAP_ADD 95 +#define MATCH_CLASS 96 +#define POP_JUMP_IF_FALSE 97 +#define POP_JUMP_IF_NONE 98 +#define POP_JUMP_IF_NOT_NONE 99 +#define POP_JUMP_IF_TRUE 100 +#define RAISE_VARARGS 101 +#define RERAISE 102 +#define RETURN_CONST 103 +#define SEND 104 +#define SET_ADD 105 +#define SET_FUNCTION_ATTRIBUTE 106 +#define SET_UPDATE 107 +#define STORE_ATTR 108 +#define STORE_DEREF 109 +#define STORE_FAST 110 +#define STORE_FAST_LOAD_FAST 111 +#define STORE_FAST_STORE_FAST 112 +#define STORE_GLOBAL 113 +#define STORE_NAME 114 +#define SWAP 115 +#define UNPACK_EX 116 +#define UNPACK_SEQUENCE 117 +#define YIELD_VALUE 118 +#define RESUME 149 +#define BINARY_OP_ADD_FLOAT 150 +#define BINARY_OP_ADD_INT 151 +#define BINARY_OP_ADD_UNICODE 152 +#define BINARY_OP_MULTIPLY_FLOAT 153 +#define BINARY_OP_MULTIPLY_INT 154 +#define BINARY_OP_SUBTRACT_FLOAT 155 +#define BINARY_OP_SUBTRACT_INT 156 +#define BINARY_SUBSCR_DICT 157 +#define BINARY_SUBSCR_GETITEM 158 +#define BINARY_SUBSCR_LIST_INT 159 +#define BINARY_SUBSCR_STR_INT 160 +#define BINARY_SUBSCR_TUPLE_INT 161 +#define CALL_ALLOC_AND_ENTER_INIT 162 +#define CALL_BOUND_METHOD_EXACT_ARGS 163 +#define CALL_BUILTIN_CLASS 164 +#define CALL_BUILTIN_FAST 165 +#define CALL_BUILTIN_FAST_WITH_KEYWORDS 166 +#define CALL_BUILTIN_O 167 +#define CALL_ISINSTANCE 168 +#define CALL_LEN 169 +#define CALL_LIST_APPEND 170 +#define CALL_METHOD_DESCRIPTOR_FAST 171 +#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 172 +#define CALL_METHOD_DESCRIPTOR_NOARGS 173 +#define CALL_METHOD_DESCRIPTOR_O 174 +#define CALL_PY_EXACT_ARGS 175 +#define CALL_PY_WITH_DEFAULTS 176 +#define CALL_STR_1 177 +#define CALL_TUPLE_1 178 +#define CALL_TYPE_1 179 +#define COMPARE_OP_FLOAT 180 +#define COMPARE_OP_INT 181 +#define COMPARE_OP_STR 182 +#define FOR_ITER_GEN 183 +#define FOR_ITER_LIST 184 +#define FOR_ITER_RANGE 185 +#define FOR_ITER_TUPLE 186 +#define LOAD_ATTR_CLASS 187 +#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN 188 +#define LOAD_ATTR_INSTANCE_VALUE 189 +#define LOAD_ATTR_METHOD_LAZY_DICT 190 +#define LOAD_ATTR_METHOD_NO_DICT 191 +#define LOAD_ATTR_METHOD_WITH_VALUES 192 +#define LOAD_ATTR_MODULE 193 +#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT 194 +#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 195 +#define LOAD_ATTR_PROPERTY 196 +#define LOAD_ATTR_SLOT 197 +#define LOAD_ATTR_WITH_HINT 198 +#define LOAD_GLOBAL_BUILTIN 199 +#define LOAD_GLOBAL_MODULE 200 +#define LOAD_SUPER_ATTR_ATTR 201 +#define LOAD_SUPER_ATTR_METHOD 202 +#define RESUME_CHECK 203 +#define SEND_GEN 204 +#define STORE_ATTR_INSTANCE_VALUE 205 +#define STORE_ATTR_SLOT 206 +#define STORE_ATTR_WITH_HINT 207 +#define STORE_SUBSCR_DICT 208 +#define STORE_SUBSCR_LIST_INT 209 +#define TO_BOOL_ALWAYS_TRUE 210 +#define TO_BOOL_BOOL 211 +#define TO_BOOL_INT 212 +#define TO_BOOL_LIST 213 +#define TO_BOOL_NONE 214 +#define TO_BOOL_STR 215 +#define UNPACK_SEQUENCE_LIST 216 +#define UNPACK_SEQUENCE_TUPLE 217 +#define UNPACK_SEQUENCE_TWO_TUPLE 218 +#define MIN_INSTRUMENTED_OPCODE 236 +#define INSTRUMENTED_RESUME 236 +#define INSTRUMENTED_END_FOR 237 +#define INSTRUMENTED_END_SEND 238 +#define INSTRUMENTED_RETURN_VALUE 239 +#define INSTRUMENTED_RETURN_CONST 240 +#define INSTRUMENTED_YIELD_VALUE 241 +#define INSTRUMENTED_LOAD_SUPER_ATTR 242 +#define INSTRUMENTED_FOR_ITER 243 +#define INSTRUMENTED_CALL 244 +#define INSTRUMENTED_CALL_KW 245 #define INSTRUMENTED_CALL_FUNCTION_EX 246 #define INSTRUMENTED_INSTRUCTION 247 #define INSTRUMENTED_JUMP_FORWARD 248 diff --git a/Include/pyatomic.h b/Include/pyatomic.h new file mode 100644 index 00000000000000..2ce2c81cf5251a --- /dev/null +++ b/Include/pyatomic.h @@ -0,0 +1,16 @@ +#ifndef Py_ATOMIC_H +#define Py_ATOMIC_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_LIMITED_API +# define Py_CPYTHON_ATOMIC_H +# include "cpython/pyatomic.h" +# undef Py_CPYTHON_ATOMIC_H +#endif + +#ifdef __cplusplus +} +#endif +#endif /* !Py_ATOMIC_H */ diff --git a/Include/pyport.h b/Include/pyport.h index f2046de2bbcc5a..40d580a870fc75 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -48,6 +48,10 @@ # define Py_BUILD_CORE #endif +#if defined(Py_LIMITED_API) && defined(Py_BUILD_CORE) +# error "Py_LIMITED_API is not compatible with Py_BUILD_CORE" +#endif + /************************************************************************** Symbols and macros to supply platform-independent interfaces to basic @@ -184,62 +188,6 @@ typedef Py_ssize_t Py_ssize_clean_t; # define Py_MEMCPY memcpy #endif -/******************************************** - * WRAPPER FOR and/or * - ********************************************/ - -#ifdef HAVE_SYS_TIME_H -#include -#endif -#include - -/****************************** - * WRAPPER FOR * - ******************************/ - -/* NB caller must include */ - -#ifdef HAVE_SYS_SELECT_H -#include -#endif /* !HAVE_SYS_SELECT_H */ - -/******************************* - * stat() and fstat() fiddling * - *******************************/ - -#ifdef HAVE_SYS_STAT_H -#include -#elif defined(HAVE_STAT_H) -#include -#endif - -#ifndef S_IFMT -/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */ -#define S_IFMT 0170000 -#endif - -#ifndef S_IFLNK -/* Windows doesn't define S_IFLNK but posixmodule.c maps - * IO_REPARSE_TAG_SYMLINK to S_IFLNK */ -# define S_IFLNK 0120000 -#endif - -#ifndef S_ISREG -#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) -#endif - -#ifndef S_ISDIR -#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) -#endif - -#ifndef S_ISCHR -#define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR) -#endif - -#ifndef S_ISLNK -#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK) -#endif - #ifdef __cplusplus /* Move this down here since some C++ #include's don't like to be included inside an extern "C" */ @@ -411,117 +359,8 @@ extern "C" { # define Py_NO_INLINE #endif -/* On 4.4BSD-descendants, ctype functions serves the whole range of - * wchar_t character set rather than single byte code points only. - * This characteristic can break some operations of string object - * including str.upper() and str.split() on UTF-8 locales. This - * workaround was provided by Tim Robbins of FreeBSD project. - */ - -#if defined(__APPLE__) -# define _PY_PORT_CTYPE_UTF8_ISSUE -#endif - -#ifdef _PY_PORT_CTYPE_UTF8_ISSUE -#ifndef __cplusplus - /* The workaround below is unsafe in C++ because - * the defines these symbols as real functions, - * with a slightly different signature. - * See issue #10910 - */ -#include -#include -#undef isalnum -#define isalnum(c) iswalnum(btowc(c)) -#undef isalpha -#define isalpha(c) iswalpha(btowc(c)) -#undef islower -#define islower(c) iswlower(btowc(c)) -#undef isspace -#define isspace(c) iswspace(btowc(c)) -#undef isupper -#define isupper(c) iswupper(btowc(c)) -#undef tolower -#define tolower(c) towlower(btowc(c)) -#undef toupper -#define toupper(c) towupper(btowc(c)) -#endif -#endif - - -/* Declarations for symbol visibility. - - PyAPI_FUNC(type): Declares a public Python API function and return type - PyAPI_DATA(type): Declares public Python data and its type - PyMODINIT_FUNC: A Python module init function. If these functions are - inside the Python core, they are private to the core. - If in an extension module, it may be declared with - external linkage depending on the platform. - - As a number of platforms support/require "__declspec(dllimport/dllexport)", - we support a HAVE_DECLSPEC_DLL macro to save duplication. -*/ - -/* - All windows ports, except cygwin, are handled in PC/pyconfig.h. - - Cygwin is the only other autoconf platform requiring special - linkage handling and it uses __declspec(). -*/ -#if defined(__CYGWIN__) -# define HAVE_DECLSPEC_DLL -#endif - #include "exports.h" -/* only get special linkage if built as shared or platform is Cygwin */ -#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) -# if defined(HAVE_DECLSPEC_DLL) -# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) -# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE -# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE - /* module init functions inside the core need no external linkage */ - /* except for Cygwin to handle embedding */ -# if defined(__CYGWIN__) -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# else /* __CYGWIN__ */ -# define PyMODINIT_FUNC PyObject* -# endif /* __CYGWIN__ */ -# else /* Py_BUILD_CORE */ - /* Building an extension module, or an embedded situation */ - /* public Python functions and data are imported */ - /* Under Cygwin, auto-import functions to prevent compilation */ - /* failures similar to those described at the bottom of 4.1: */ - /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ -# if !defined(__CYGWIN__) -# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE -# endif /* !__CYGWIN__ */ -# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE - /* module init functions outside the core must be exported */ -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# endif /* __cplusplus */ -# endif /* Py_BUILD_CORE */ -# endif /* HAVE_DECLSPEC_DLL */ -#endif /* Py_ENABLE_SHARED */ - -/* If no external linkage macros defined by now, create defaults */ -#ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE -#endif -#ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE -#endif -#ifndef PyMODINIT_FUNC -# if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* -# else /* __cplusplus */ -# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* -# endif /* __cplusplus */ -#endif - /* limits.h constants that may be missing */ #ifndef INT_MAX diff --git a/Include/pystats.h b/Include/pystats.h index b1957596745f00..acfa32201711e0 100644 --- a/Include/pystats.h +++ b/Include/pystats.h @@ -1,4 +1,9 @@ - +// Statistics on Python performance (public API). +// +// Define _Py_INCREF_STAT_INC() and _Py_DECREF_STAT_INC() used by Py_INCREF() +// and Py_DECREF(). +// +// See Include/cpython/pystats.h for the full API. #ifndef Py_PYSTATS_H #define Py_PYSTATS_H @@ -6,119 +11,16 @@ extern "C" { #endif -#ifdef Py_STATS - -#define SPECIALIZATION_FAILURE_KINDS 36 - -/* Stats for determining who is calling PyEval_EvalFrame */ -#define EVAL_CALL_TOTAL 0 -#define EVAL_CALL_VECTOR 1 -#define EVAL_CALL_GENERATOR 2 -#define EVAL_CALL_LEGACY 3 -#define EVAL_CALL_FUNCTION_VECTORCALL 4 -#define EVAL_CALL_BUILD_CLASS 5 -#define EVAL_CALL_SLOT 6 -#define EVAL_CALL_FUNCTION_EX 7 -#define EVAL_CALL_API 8 -#define EVAL_CALL_METHOD 9 - -#define EVAL_CALL_KINDS 10 - -typedef struct _specialization_stats { - uint64_t success; - uint64_t failure; - uint64_t hit; - uint64_t deferred; - uint64_t miss; - uint64_t deopt; - uint64_t failure_kinds[SPECIALIZATION_FAILURE_KINDS]; -} SpecializationStats; - -typedef struct _opcode_stats { - SpecializationStats specialization; - uint64_t execution_count; - uint64_t pair_count[256]; -} OpcodeStats; - -typedef struct _call_stats { - uint64_t inlined_py_calls; - uint64_t pyeval_calls; - uint64_t frames_pushed; - uint64_t frame_objects_created; - uint64_t eval_calls[EVAL_CALL_KINDS]; -} CallStats; - -typedef struct _object_stats { - uint64_t increfs; - uint64_t decrefs; - uint64_t interpreter_increfs; - uint64_t interpreter_decrefs; - uint64_t allocations; - uint64_t allocations512; - uint64_t allocations4k; - uint64_t allocations_big; - uint64_t frees; - uint64_t to_freelist; - uint64_t from_freelist; - uint64_t new_values; - uint64_t dict_materialized_on_request; - uint64_t dict_materialized_new_key; - uint64_t dict_materialized_too_big; - uint64_t dict_materialized_str_subclass; - uint64_t dict_dematerialized; - uint64_t type_cache_hits; - uint64_t type_cache_misses; - uint64_t type_cache_dunder_hits; - uint64_t type_cache_dunder_misses; - uint64_t type_cache_collisions; - uint64_t optimization_attempts; - uint64_t optimization_traces_created; - uint64_t optimization_traces_executed; - uint64_t optimization_uops_executed; - /* Temporary value used during GC */ - uint64_t object_visits; -} ObjectStats; - -typedef struct _gc_stats { - uint64_t collections; - uint64_t object_visits; - uint64_t objects_collected; -} GCStats; - -typedef struct _stats { - OpcodeStats opcode_stats[256]; - CallStats call_stats; - ObjectStats object_stats; - GCStats *gc_stats; -} PyStats; - - -PyAPI_DATA(PyStats) _py_stats_struct; -PyAPI_DATA(PyStats *) _py_stats; - -extern void _Py_StatsClear(void); -extern void _Py_PrintSpecializationStats(int to_file); - -#ifdef _PY_INTERPRETER - -#define _Py_INCREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.interpreter_increfs++; } while (0) -#define _Py_DECREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.interpreter_decrefs++; } while (0) - +#if defined(Py_STATS) && !defined(Py_LIMITED_API) +# define Py_CPYTHON_PYSTATS_H +# include "cpython/pystats.h" +# undef Py_CPYTHON_PYSTATS_H #else - -#define _Py_INCREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.increfs++; } while (0) -#define _Py_DECREF_STAT_INC() do { if (_py_stats) _py_stats->object_stats.decrefs++; } while (0) - -#endif - -#else - -#define _Py_INCREF_STAT_INC() ((void)0) -#define _Py_DECREF_STAT_INC() ((void)0) - +# define _Py_INCREF_STAT_INC() ((void)0) +# define _Py_DECREF_STAT_INC() ((void)0) #endif // !Py_STATS #ifdef __cplusplus } #endif -#endif /* !Py_PYSTATs_H */ +#endif // !Py_PYSTATS_H diff --git a/Lib/_opcode_metadata.py b/Lib/_opcode_metadata.py index b02aa771c347e7..5dd06ae487dfcf 100644 --- a/Lib/_opcode_metadata.py +++ b/Lib/_opcode_metadata.py @@ -4,6 +4,9 @@ # Do not edit! _specializations = { + "RESUME": [ + "RESUME_CHECK", + ], "TO_BOOL": [ "TO_BOOL_ALWAYS_TRUE", "TO_BOOL_BOOL", @@ -82,21 +85,21 @@ "CALL_BOUND_METHOD_EXACT_ARGS", "CALL_PY_EXACT_ARGS", "CALL_PY_WITH_DEFAULTS", - "CALL_NO_KW_TYPE_1", - "CALL_NO_KW_STR_1", - "CALL_NO_KW_TUPLE_1", + "CALL_TYPE_1", + "CALL_STR_1", + "CALL_TUPLE_1", "CALL_BUILTIN_CLASS", - "CALL_NO_KW_BUILTIN_O", - "CALL_NO_KW_BUILTIN_FAST", + "CALL_BUILTIN_O", + "CALL_BUILTIN_FAST", "CALL_BUILTIN_FAST_WITH_KEYWORDS", - "CALL_NO_KW_LEN", - "CALL_NO_KW_ISINSTANCE", - "CALL_NO_KW_LIST_APPEND", - "CALL_NO_KW_METHOD_DESCRIPTOR_O", + "CALL_LEN", + "CALL_ISINSTANCE", + "CALL_LIST_APPEND", + "CALL_METHOD_DESCRIPTOR_O", "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS", - "CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS", - "CALL_NO_KW_METHOD_DESCRIPTOR_FAST", - "CALL_NO_KW_ALLOC_AND_ENTER_INIT", + "CALL_METHOD_DESCRIPTOR_NOARGS", + "CALL_METHOD_DESCRIPTOR_FAST", + "CALL_ALLOC_AND_ENTER_INIT", ], } @@ -104,206 +107,208 @@ _specializations["BINARY_OP"].append("BINARY_OP_INPLACE_ADD_UNICODE") _specialized_opmap = { - 'BINARY_OP_ADD_FLOAT': 3, - 'BINARY_OP_ADD_INT': 4, - 'BINARY_OP_ADD_UNICODE': 5, - 'BINARY_OP_INPLACE_ADD_UNICODE': 6, - 'BINARY_OP_MULTIPLY_FLOAT': 7, - 'BINARY_OP_MULTIPLY_INT': 8, - 'BINARY_OP_SUBTRACT_FLOAT': 9, - 'BINARY_OP_SUBTRACT_INT': 10, - 'BINARY_SUBSCR_DICT': 13, - 'BINARY_SUBSCR_GETITEM': 14, - 'BINARY_SUBSCR_LIST_INT': 15, - 'BINARY_SUBSCR_STR_INT': 16, - 'BINARY_SUBSCR_TUPLE_INT': 18, - 'STORE_ATTR_INSTANCE_VALUE': 50, - 'STORE_ATTR_SLOT': 51, - 'STORE_SUBSCR_DICT': 54, - 'STORE_SUBSCR_LIST_INT': 55, - 'TO_BOOL_ALWAYS_TRUE': 57, - 'TO_BOOL_BOOL': 58, - 'TO_BOOL_INT': 59, - 'TO_BOOL_LIST': 60, - 'TO_BOOL_NONE': 61, - 'TO_BOOL_STR': 62, - 'CALL_BOUND_METHOD_EXACT_ARGS': 76, - 'CALL_BUILTIN_CLASS': 77, - 'CALL_BUILTIN_FAST_WITH_KEYWORDS': 78, - 'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 82, - 'CALL_NO_KW_ALLOC_AND_ENTER_INIT': 83, - 'CALL_NO_KW_BUILTIN_FAST': 84, - 'CALL_NO_KW_BUILTIN_O': 85, - 'CALL_NO_KW_ISINSTANCE': 86, - 'CALL_NO_KW_LEN': 87, - 'CALL_NO_KW_LIST_APPEND': 88, - 'CALL_NO_KW_METHOD_DESCRIPTOR_FAST': 89, - 'CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS': 90, - 'CALL_NO_KW_METHOD_DESCRIPTOR_O': 91, - 'CALL_NO_KW_STR_1': 92, - 'CALL_NO_KW_TUPLE_1': 93, - 'CALL_NO_KW_TYPE_1': 94, - 'CALL_PY_EXACT_ARGS': 95, - 'CALL_PY_WITH_DEFAULTS': 96, - 'COMPARE_OP_FLOAT': 98, - 'COMPARE_OP_INT': 99, - 'COMPARE_OP_STR': 100, - 'FOR_ITER_GEN': 115, - 'FOR_ITER_LIST': 116, - 'FOR_ITER_RANGE': 117, - 'FOR_ITER_TUPLE': 118, - 'LOAD_ATTR_CLASS': 130, - 'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 131, - 'LOAD_ATTR_INSTANCE_VALUE': 132, - 'LOAD_ATTR_METHOD_LAZY_DICT': 133, - 'LOAD_ATTR_METHOD_NO_DICT': 134, - 'LOAD_ATTR_METHOD_WITH_VALUES': 135, - 'LOAD_ATTR_MODULE': 136, - 'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 137, - 'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 138, - 'LOAD_ATTR_PROPERTY': 139, - 'LOAD_ATTR_SLOT': 140, - 'LOAD_ATTR_WITH_HINT': 141, - 'LOAD_GLOBAL_BUILTIN': 151, - 'LOAD_GLOBAL_MODULE': 152, - 'LOAD_SUPER_ATTR_ATTR': 155, - 'LOAD_SUPER_ATTR_METHOD': 156, - 'SEND_GEN': 169, - 'STORE_ATTR_WITH_HINT': 174, - 'UNPACK_SEQUENCE_LIST': 184, - 'UNPACK_SEQUENCE_TUPLE': 185, - 'UNPACK_SEQUENCE_TWO_TUPLE': 186, + 'BINARY_OP_INPLACE_ADD_UNICODE': 3, + 'BINARY_OP_ADD_FLOAT': 150, + 'BINARY_OP_ADD_INT': 151, + 'BINARY_OP_ADD_UNICODE': 152, + 'BINARY_OP_MULTIPLY_FLOAT': 153, + 'BINARY_OP_MULTIPLY_INT': 154, + 'BINARY_OP_SUBTRACT_FLOAT': 155, + 'BINARY_OP_SUBTRACT_INT': 156, + 'BINARY_SUBSCR_DICT': 157, + 'BINARY_SUBSCR_GETITEM': 158, + 'BINARY_SUBSCR_LIST_INT': 159, + 'BINARY_SUBSCR_STR_INT': 160, + 'BINARY_SUBSCR_TUPLE_INT': 161, + 'CALL_ALLOC_AND_ENTER_INIT': 162, + 'CALL_BOUND_METHOD_EXACT_ARGS': 163, + 'CALL_BUILTIN_CLASS': 164, + 'CALL_BUILTIN_FAST': 165, + 'CALL_BUILTIN_FAST_WITH_KEYWORDS': 166, + 'CALL_BUILTIN_O': 167, + 'CALL_ISINSTANCE': 168, + 'CALL_LEN': 169, + 'CALL_LIST_APPEND': 170, + 'CALL_METHOD_DESCRIPTOR_FAST': 171, + 'CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS': 172, + 'CALL_METHOD_DESCRIPTOR_NOARGS': 173, + 'CALL_METHOD_DESCRIPTOR_O': 174, + 'CALL_PY_EXACT_ARGS': 175, + 'CALL_PY_WITH_DEFAULTS': 176, + 'CALL_STR_1': 177, + 'CALL_TUPLE_1': 178, + 'CALL_TYPE_1': 179, + 'COMPARE_OP_FLOAT': 180, + 'COMPARE_OP_INT': 181, + 'COMPARE_OP_STR': 182, + 'FOR_ITER_GEN': 183, + 'FOR_ITER_LIST': 184, + 'FOR_ITER_RANGE': 185, + 'FOR_ITER_TUPLE': 186, + 'LOAD_ATTR_CLASS': 187, + 'LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN': 188, + 'LOAD_ATTR_INSTANCE_VALUE': 189, + 'LOAD_ATTR_METHOD_LAZY_DICT': 190, + 'LOAD_ATTR_METHOD_NO_DICT': 191, + 'LOAD_ATTR_METHOD_WITH_VALUES': 192, + 'LOAD_ATTR_MODULE': 193, + 'LOAD_ATTR_NONDESCRIPTOR_NO_DICT': 194, + 'LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES': 195, + 'LOAD_ATTR_PROPERTY': 196, + 'LOAD_ATTR_SLOT': 197, + 'LOAD_ATTR_WITH_HINT': 198, + 'LOAD_GLOBAL_BUILTIN': 199, + 'LOAD_GLOBAL_MODULE': 200, + 'LOAD_SUPER_ATTR_ATTR': 201, + 'LOAD_SUPER_ATTR_METHOD': 202, + 'RESUME_CHECK': 203, + 'SEND_GEN': 204, + 'STORE_ATTR_INSTANCE_VALUE': 205, + 'STORE_ATTR_SLOT': 206, + 'STORE_ATTR_WITH_HINT': 207, + 'STORE_SUBSCR_DICT': 208, + 'STORE_SUBSCR_LIST_INT': 209, + 'TO_BOOL_ALWAYS_TRUE': 210, + 'TO_BOOL_BOOL': 211, + 'TO_BOOL_INT': 212, + 'TO_BOOL_LIST': 213, + 'TO_BOOL_NONE': 214, + 'TO_BOOL_STR': 215, + 'UNPACK_SEQUENCE_LIST': 216, + 'UNPACK_SEQUENCE_TUPLE': 217, + 'UNPACK_SEQUENCE_TWO_TUPLE': 218, } opmap = { 'CACHE': 0, 'BEFORE_ASYNC_WITH': 1, 'BEFORE_WITH': 2, - 'BINARY_SLICE': 11, - 'BINARY_SUBSCR': 12, + 'BINARY_SLICE': 4, + 'BINARY_SUBSCR': 5, + 'CHECK_EG_MATCH': 6, + 'CHECK_EXC_MATCH': 7, + 'CLEANUP_THROW': 8, + 'DELETE_SUBSCR': 9, + 'END_ASYNC_FOR': 10, + 'END_FOR': 11, + 'END_SEND': 12, + 'EXIT_INIT_CHECK': 13, + 'FORMAT_SIMPLE': 14, + 'FORMAT_WITH_SPEC': 15, + 'GET_AITER': 16, 'RESERVED': 17, - 'CHECK_EG_MATCH': 19, - 'CHECK_EXC_MATCH': 20, - 'CLEANUP_THROW': 21, - 'DELETE_SUBSCR': 22, - 'END_ASYNC_FOR': 23, - 'END_FOR': 24, - 'END_SEND': 25, - 'EXIT_INIT_CHECK': 26, - 'FORMAT_SIMPLE': 27, - 'FORMAT_WITH_SPEC': 28, - 'GET_AITER': 29, - 'GET_ANEXT': 30, - 'GET_ITER': 31, - 'GET_LEN': 32, - 'GET_YIELD_FROM_ITER': 33, - 'INTERPRETER_EXIT': 34, - 'LOAD_ASSERTION_ERROR': 35, - 'LOAD_BUILD_CLASS': 36, - 'LOAD_LOCALS': 37, - 'MAKE_FUNCTION': 38, - 'MATCH_KEYS': 39, - 'MATCH_MAPPING': 40, - 'MATCH_SEQUENCE': 41, - 'NOP': 42, - 'POP_EXCEPT': 43, - 'POP_TOP': 44, - 'PUSH_EXC_INFO': 45, - 'PUSH_NULL': 46, - 'RETURN_GENERATOR': 47, - 'RETURN_VALUE': 48, - 'SETUP_ANNOTATIONS': 49, - 'STORE_SLICE': 52, - 'STORE_SUBSCR': 53, - 'TO_BOOL': 56, - 'UNARY_INVERT': 63, - 'UNARY_NEGATIVE': 64, - 'UNARY_NOT': 65, - 'WITH_EXCEPT_START': 66, - 'BINARY_OP': 67, - 'BUILD_CONST_KEY_MAP': 68, - 'BUILD_LIST': 69, - 'BUILD_MAP': 70, - 'BUILD_SET': 71, - 'BUILD_SLICE': 72, - 'BUILD_STRING': 73, - 'BUILD_TUPLE': 74, - 'CALL': 75, - 'CALL_FUNCTION_EX': 79, - 'CALL_INTRINSIC_1': 80, - 'CALL_INTRINSIC_2': 81, - 'COMPARE_OP': 97, - 'CONTAINS_OP': 101, - 'CONVERT_VALUE': 102, - 'COPY': 103, - 'COPY_FREE_VARS': 104, - 'DELETE_ATTR': 105, - 'DELETE_DEREF': 106, - 'DELETE_FAST': 107, - 'DELETE_GLOBAL': 108, - 'DELETE_NAME': 109, - 'DICT_MERGE': 110, - 'DICT_UPDATE': 111, - 'ENTER_EXECUTOR': 112, - 'EXTENDED_ARG': 113, - 'FOR_ITER': 114, - 'GET_AWAITABLE': 119, - 'IMPORT_FROM': 120, - 'IMPORT_NAME': 121, - 'IS_OP': 122, - 'JUMP_BACKWARD': 123, - 'JUMP_BACKWARD_NO_INTERRUPT': 124, - 'JUMP_FORWARD': 125, - 'KW_NAMES': 126, - 'LIST_APPEND': 127, - 'LIST_EXTEND': 128, - 'LOAD_ATTR': 129, - 'LOAD_CONST': 142, - 'LOAD_DEREF': 143, - 'LOAD_FAST': 144, - 'LOAD_FAST_AND_CLEAR': 145, - 'LOAD_FAST_CHECK': 146, - 'LOAD_FAST_LOAD_FAST': 147, - 'LOAD_FROM_DICT_OR_DEREF': 148, - 'LOAD_FROM_DICT_OR_GLOBALS': 149, - 'LOAD_GLOBAL': 150, - 'LOAD_NAME': 153, - 'LOAD_SUPER_ATTR': 154, - 'MAKE_CELL': 157, - 'MAP_ADD': 158, - 'MATCH_CLASS': 159, - 'POP_JUMP_IF_FALSE': 160, - 'POP_JUMP_IF_NONE': 161, - 'POP_JUMP_IF_NOT_NONE': 162, - 'POP_JUMP_IF_TRUE': 163, - 'RAISE_VARARGS': 164, - 'RERAISE': 165, - 'RESUME': 166, - 'RETURN_CONST': 167, - 'SEND': 168, - 'SET_ADD': 170, - 'SET_FUNCTION_ATTRIBUTE': 171, - 'SET_UPDATE': 172, - 'STORE_ATTR': 173, - 'STORE_DEREF': 175, - 'STORE_FAST': 176, - 'STORE_FAST_LOAD_FAST': 177, - 'STORE_FAST_STORE_FAST': 178, - 'STORE_GLOBAL': 179, - 'STORE_NAME': 180, - 'SWAP': 181, - 'UNPACK_EX': 182, - 'UNPACK_SEQUENCE': 183, - 'YIELD_VALUE': 187, - 'INSTRUMENTED_RESUME': 237, - 'INSTRUMENTED_END_FOR': 238, - 'INSTRUMENTED_END_SEND': 239, - 'INSTRUMENTED_RETURN_VALUE': 240, - 'INSTRUMENTED_RETURN_CONST': 241, - 'INSTRUMENTED_YIELD_VALUE': 242, - 'INSTRUMENTED_LOAD_SUPER_ATTR': 243, - 'INSTRUMENTED_FOR_ITER': 244, - 'INSTRUMENTED_CALL': 245, + 'GET_ANEXT': 18, + 'GET_ITER': 19, + 'GET_LEN': 20, + 'GET_YIELD_FROM_ITER': 21, + 'INTERPRETER_EXIT': 22, + 'LOAD_ASSERTION_ERROR': 23, + 'LOAD_BUILD_CLASS': 24, + 'LOAD_LOCALS': 25, + 'MAKE_FUNCTION': 26, + 'MATCH_KEYS': 27, + 'MATCH_MAPPING': 28, + 'MATCH_SEQUENCE': 29, + 'NOP': 30, + 'POP_EXCEPT': 31, + 'POP_TOP': 32, + 'PUSH_EXC_INFO': 33, + 'PUSH_NULL': 34, + 'RETURN_GENERATOR': 35, + 'RETURN_VALUE': 36, + 'SETUP_ANNOTATIONS': 37, + 'STORE_SLICE': 38, + 'STORE_SUBSCR': 39, + 'TO_BOOL': 40, + 'UNARY_INVERT': 41, + 'UNARY_NEGATIVE': 42, + 'UNARY_NOT': 43, + 'WITH_EXCEPT_START': 44, + 'BINARY_OP': 45, + 'BUILD_CONST_KEY_MAP': 46, + 'BUILD_LIST': 47, + 'BUILD_MAP': 48, + 'BUILD_SET': 49, + 'BUILD_SLICE': 50, + 'BUILD_STRING': 51, + 'BUILD_TUPLE': 52, + 'CALL': 53, + 'CALL_FUNCTION_EX': 54, + 'CALL_INTRINSIC_1': 55, + 'CALL_INTRINSIC_2': 56, + 'CALL_KW': 57, + 'COMPARE_OP': 58, + 'CONTAINS_OP': 59, + 'CONVERT_VALUE': 60, + 'COPY': 61, + 'COPY_FREE_VARS': 62, + 'DELETE_ATTR': 63, + 'DELETE_DEREF': 64, + 'DELETE_FAST': 65, + 'DELETE_GLOBAL': 66, + 'DELETE_NAME': 67, + 'DICT_MERGE': 68, + 'DICT_UPDATE': 69, + 'ENTER_EXECUTOR': 70, + 'EXTENDED_ARG': 71, + 'FOR_ITER': 72, + 'GET_AWAITABLE': 73, + 'IMPORT_FROM': 74, + 'IMPORT_NAME': 75, + 'IS_OP': 76, + 'JUMP_BACKWARD': 77, + 'JUMP_BACKWARD_NO_INTERRUPT': 78, + 'JUMP_FORWARD': 79, + 'LIST_APPEND': 80, + 'LIST_EXTEND': 81, + 'LOAD_ATTR': 82, + 'LOAD_CONST': 83, + 'LOAD_DEREF': 84, + 'LOAD_FAST': 85, + 'LOAD_FAST_AND_CLEAR': 86, + 'LOAD_FAST_CHECK': 87, + 'LOAD_FAST_LOAD_FAST': 88, + 'LOAD_FROM_DICT_OR_DEREF': 89, + 'LOAD_FROM_DICT_OR_GLOBALS': 90, + 'LOAD_GLOBAL': 91, + 'LOAD_NAME': 92, + 'LOAD_SUPER_ATTR': 93, + 'MAKE_CELL': 94, + 'MAP_ADD': 95, + 'MATCH_CLASS': 96, + 'POP_JUMP_IF_FALSE': 97, + 'POP_JUMP_IF_NONE': 98, + 'POP_JUMP_IF_NOT_NONE': 99, + 'POP_JUMP_IF_TRUE': 100, + 'RAISE_VARARGS': 101, + 'RERAISE': 102, + 'RETURN_CONST': 103, + 'SEND': 104, + 'SET_ADD': 105, + 'SET_FUNCTION_ATTRIBUTE': 106, + 'SET_UPDATE': 107, + 'STORE_ATTR': 108, + 'STORE_DEREF': 109, + 'STORE_FAST': 110, + 'STORE_FAST_LOAD_FAST': 111, + 'STORE_FAST_STORE_FAST': 112, + 'STORE_GLOBAL': 113, + 'STORE_NAME': 114, + 'SWAP': 115, + 'UNPACK_EX': 116, + 'UNPACK_SEQUENCE': 117, + 'YIELD_VALUE': 118, + 'RESUME': 149, + 'INSTRUMENTED_RESUME': 236, + 'INSTRUMENTED_END_FOR': 237, + 'INSTRUMENTED_END_SEND': 238, + 'INSTRUMENTED_RETURN_VALUE': 239, + 'INSTRUMENTED_RETURN_CONST': 240, + 'INSTRUMENTED_YIELD_VALUE': 241, + 'INSTRUMENTED_LOAD_SUPER_ATTR': 242, + 'INSTRUMENTED_FOR_ITER': 243, + 'INSTRUMENTED_CALL': 244, + 'INSTRUMENTED_CALL_KW': 245, 'INSTRUMENTED_CALL_FUNCTION_EX': 246, 'INSTRUMENTED_INSTRUCTION': 247, 'INSTRUMENTED_JUMP_FORWARD': 248, @@ -326,5 +331,5 @@ 'SETUP_WITH': 266, 'STORE_FAST_MAYBE_NULL': 267, } -MIN_INSTRUMENTED_OPCODE = 237 -HAVE_ARGUMENT = 67 +MIN_INSTRUMENTED_OPCODE = 236 +HAVE_ARGUMENT = 45 diff --git a/Lib/_pydatetime.py b/Lib/_pydatetime.py index 549fcda19dccf2..88275481e7002b 100644 --- a/Lib/_pydatetime.py +++ b/Lib/_pydatetime.py @@ -1015,13 +1015,9 @@ def fromisocalendar(cls, year, week, day): def __repr__(self): """Convert to formal string, for repr(). - >>> dt = datetime(2010, 1, 1) - >>> repr(dt) - 'datetime.datetime(2010, 1, 1, 0, 0)' - - >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc) - >>> repr(dt) - 'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)' + >>> d = date(2010, 1, 1) + >>> repr(d) + 'datetime.date(2010, 1, 1)' """ return "%s.%s(%d, %d, %d)" % (_get_class_module(self), self.__class__.__qualname__, @@ -1112,6 +1108,8 @@ def replace(self, year=None, month=None, day=None): day = self._day return type(self)(year, month, day) + __replace__ = replace + # Comparisons of date objects with other. def __eq__(self, other): @@ -1236,7 +1234,7 @@ def __reduce__(self): class tzinfo: """Abstract base class for time zone info classes. - Subclasses must override the name(), utcoffset() and dst() methods. + Subclasses must override the tzname(), utcoffset() and dst() methods. """ __slots__ = () @@ -1637,6 +1635,8 @@ def replace(self, hour=None, minute=None, second=None, microsecond=None, fold = self._fold return type(self)(hour, minute, second, microsecond, tzinfo, fold=fold) + __replace__ = replace + # Pickle support. def _getstate(self, protocol=3): @@ -1983,6 +1983,8 @@ def replace(self, year=None, month=None, day=None, hour=None, return type(self)(year, month, day, hour, minute, second, microsecond, tzinfo, fold=fold) + __replace__ = replace + def _local_timezone(self): if self.tzinfo is None: ts = self._mktime() diff --git a/Lib/ast.py b/Lib/ast.py index 45b95963f81885..1f54309c8450d8 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -1225,17 +1225,7 @@ def _write_str_avoiding_backslashes(self, string, *, quote_types=_ALL_QUOTES): def visit_JoinedStr(self, node): self.write("f") - if self._avoid_backslashes: - with self.buffered() as buffer: - self._write_fstring_inner(node) - return self._write_str_avoiding_backslashes("".join(buffer)) - - # If we don't need to avoid backslashes globally (i.e., we only need - # to avoid them inside FormattedValues), it's cosmetically preferred - # to use escaped whitespace. That is, it's preferred to use backslashes - # for cases like: f"{x}\n". To accomplish this, we keep track of what - # in our buffer corresponds to FormattedValues and what corresponds to - # Constant parts of the f-string, and allow escapes accordingly. + fstring_parts = [] for value in node.values: with self.buffered() as buffer: @@ -1246,14 +1236,36 @@ def visit_JoinedStr(self, node): new_fstring_parts = [] quote_types = list(_ALL_QUOTES) + fallback_to_repr = False for value, is_constant in fstring_parts: - value, quote_types = self._str_literal_helper( - value, - quote_types=quote_types, - escape_special_whitespace=is_constant, - ) + if is_constant: + value, new_quote_types = self._str_literal_helper( + value, + quote_types=quote_types, + escape_special_whitespace=True, + ) + if set(new_quote_types).isdisjoint(quote_types): + fallback_to_repr = True + break + quote_types = new_quote_types + elif "\n" in value: + quote_types = [q for q in quote_types if q in _MULTI_QUOTES] + assert quote_types new_fstring_parts.append(value) + if fallback_to_repr: + # If we weren't able to find a quote type that works for all parts + # of the JoinedStr, fallback to using repr and triple single quotes. + quote_types = ["'''"] + new_fstring_parts.clear() + for value, is_constant in fstring_parts: + if is_constant: + value = repr('"' + value) # force repr to use single quotes + expected_prefix = "'\"" + assert value.startswith(expected_prefix), repr(value) + value = value[len(expected_prefix):-1] + new_fstring_parts.append(value) + value = "".join(new_fstring_parts) quote_type = quote_types[0] self.write(f"{quote_type}{value}{quote_type}") @@ -1273,16 +1285,12 @@ def _write_fstring_inner(self, node): def visit_FormattedValue(self, node): def unparse_inner(inner): - unparser = type(self)(_avoid_backslashes=True) + unparser = type(self)() unparser.set_precedence(_Precedence.TEST.next(), inner) return unparser.visit(inner) with self.delimit("{", "}"): expr = unparse_inner(node.value) - if "\\" in expr: - raise ValueError( - "Unable to avoid backslash in f-string expression part" - ) if expr.startswith("{"): # Separate pair of opening brackets as "{ {" self.write(" ") diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index 488e17d8bccd5b..3eb65a8a08b5a0 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -539,7 +539,7 @@ def _start_handshake(self): # start handshake timeout count down self._handshake_timeout_handle = \ self._loop.call_later(self._ssl_handshake_timeout, - lambda: self._check_handshake_timeout()) + self._check_handshake_timeout) self._do_handshake() @@ -619,7 +619,7 @@ def _start_shutdown(self): self._set_state(SSLProtocolState.FLUSHING) self._shutdown_timeout_handle = self._loop.call_later( self._ssl_shutdown_timeout, - lambda: self._check_shutdown_timeout() + self._check_shutdown_timeout ) self._do_flush() @@ -758,7 +758,7 @@ def _do_read__buffered(self): else: break else: - self._loop.call_soon(lambda: self._do_read()) + self._loop.call_soon(self._do_read) except SSLAgainErrors: pass if offset > 0: diff --git a/Lib/asyncio/subprocess.py b/Lib/asyncio/subprocess.py index c4e5ba2061cffc..043359bbd03f8a 100644 --- a/Lib/asyncio/subprocess.py +++ b/Lib/asyncio/subprocess.py @@ -147,15 +147,17 @@ def kill(self): async def _feed_stdin(self, input): debug = self._loop.get_debug() - if input is not None: - self.stdin.write(input) - if debug: - logger.debug( - '%r communicate: feed stdin (%s bytes)', self, len(input)) try: + if input is not None: + self.stdin.write(input) + if debug: + logger.debug( + '%r communicate: feed stdin (%s bytes)', self, len(input)) + await self.stdin.drain() except (BrokenPipeError, ConnectionResetError) as exc: - # communicate() ignores BrokenPipeError and ConnectionResetError + # communicate() ignores BrokenPipeError and ConnectionResetError. + # write() and drain() can raise these exceptions. if debug: logger.debug('%r communicate: stdin got %r', self, exc) diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index edc64fda2a6ad6..21a1b24194bcd8 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -17,7 +17,6 @@ import itertools import math import types -import warnings import weakref from types import GenericAlias diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index a2680865ed968f..28cef964debd36 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -226,8 +226,7 @@ async def _make_subprocess_transport(self, protocol, args, shell, return transp def _child_watcher_callback(self, pid, returncode, transp): - # Skip one iteration for callbacks to be executed - self.call_soon_threadsafe(self.call_soon, transp._process_exited, returncode) + self.call_soon_threadsafe(transp._process_exited, returncode) async def create_unix_connection( self, protocol_factory, path=None, *, diff --git a/Lib/calendar.py b/Lib/calendar.py index e43ba4a078bcac..2a4deb70a0111f 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -721,7 +721,7 @@ def main(args=None): parser.add_argument( "-L", "--locale", default=None, - help="locale to be used from month and weekday names" + help="locale to use for month and weekday names" ) parser.add_argument( "-e", "--encoding", diff --git a/Lib/codecs.py b/Lib/codecs.py index c1c55d8afef389..82f23983e719c2 100644 --- a/Lib/codecs.py +++ b/Lib/codecs.py @@ -414,6 +414,9 @@ def __enter__(self): def __exit__(self, type, value, tb): self.stream.close() + def __reduce_ex__(self, proto): + raise TypeError("can't serialize %s" % self.__class__.__name__) + ### class StreamReader(Codec): @@ -663,6 +666,9 @@ def __enter__(self): def __exit__(self, type, value, tb): self.stream.close() + def __reduce_ex__(self, proto): + raise TypeError("can't serialize %s" % self.__class__.__name__) + ### class StreamReaderWriter: @@ -750,6 +756,9 @@ def __enter__(self): def __exit__(self, type, value, tb): self.stream.close() + def __reduce_ex__(self, proto): + raise TypeError("can't serialize %s" % self.__class__.__name__) + ### class StreamRecoder: @@ -866,6 +875,9 @@ def __enter__(self): def __exit__(self, type, value, tb): self.stream.close() + def __reduce_ex__(self, proto): + raise TypeError("can't serialize %s" % self.__class__.__name__) + ### Shortcuts def open(filename, mode='r', encoding=None, errors='strict', buffering=-1): diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 8652dc8a4ec450..a461550ea40da7 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -495,6 +495,7 @@ def __getnewargs__(self): '_field_defaults': field_defaults, '__new__': __new__, '_make': _make, + '__replace__': _replace, '_replace': _replace, '__repr__': __repr__, '_asdict': _asdict, diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index 301207f59de37a..48d8db3ed423a5 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -71,6 +71,11 @@ def __init__(self): self._reader, self._writer = mp.Pipe(duplex=False) def close(self): + # Please note that we do not take the shutdown lock when + # calling clear() (to avoid deadlocking) so this method can + # only be called safely from the same thread as all calls to + # clear() even if you hold the shutdown lock. Otherwise we + # might try to read from the closed pipe. if not self._closed: self._closed = True self._writer.close() @@ -426,8 +431,12 @@ def wait_result_broken_or_wakeup(self): elif wakeup_reader in ready: is_broken = False - with self.shutdown_lock: - self.thread_wakeup.clear() + # No need to hold the _shutdown_lock here because: + # 1. we're the only thread to use the wakeup reader + # 2. we're also the only thread to call thread_wakeup.close() + # 3. we want to avoid a possible deadlock when both reader and writer + # would block (gh-105829) + self.thread_wakeup.clear() return result_item, is_broken, cause @@ -489,7 +498,14 @@ def terminate_broken(self, cause): # Mark pending tasks as failed. for work_id, work_item in self.pending_work_items.items(): - work_item.future.set_exception(bpe) + try: + work_item.future.set_exception(bpe) + except _base.InvalidStateError as exc: + # set_exception() fails if the future is cancelled: ignore it. + # Trying to check if the future is cancelled before calling + # set_exception() would leave a race condition if the future is + # cancelled between the check and set_exception(). + pass # Delete references to object. See issue16284 del work_item self.pending_work_items.clear() @@ -503,6 +519,10 @@ def terminate_broken(self, cause): # https://github.com/python/cpython/issues/94777 self.call_queue._reader.close() + # gh-107219: Close the connection writer which can unblock + # Queue._feed() if it was stuck in send_bytes(). + self.call_queue._writer.close() + # clean up resources self.join_executor_internals() @@ -706,7 +726,10 @@ def __init__(self, max_workers=None, mp_context=None, # as it could result in a deadlock if a worker process dies with the # _result_queue write lock still acquired. # - # _shutdown_lock must be locked to access _ThreadWakeup. + # _shutdown_lock must be locked to access _ThreadWakeup.close() and + # .wakeup(). Care must also be taken to not call clear or close from + # more than one thread since _ThreadWakeup.clear() is not protected by + # the _shutdown_lock self._executor_manager_thread_wakeup = _ThreadWakeup() # Create communication channels for the executor diff --git a/Lib/copy.py b/Lib/copy.py index da2908ef623d8c..6d7bb9a111b5b4 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -290,3 +290,16 @@ def _reconstruct(x, memo, func, args, return y del types, weakref + + +def replace(obj, /, **changes): + """Return a new object replacing specified fields with new values. + + This is especially useful for immutable objects, like named tuples or + frozen dataclasses. + """ + cls = obj.__class__ + func = getattr(cls, '__replace__', None) + if func is None: + raise TypeError(f"replace() does not support {cls.__name__} objects") + return func(obj, **changes) diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 21f3fa5c213f1f..84f8d68ce092a4 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1073,6 +1073,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, globals, slots, )) + _set_new_attribute(cls, '__replace__', _replace) # Get the fields as a list, and include only real fields. This is # used in all of the following methods. @@ -1546,13 +1547,15 @@ class C: c1 = replace(c, x=3) assert c1.x == 3 and c1.y == 2 """ + if not _is_dataclass_instance(obj): + raise TypeError("replace() should be called on dataclass instances") + return _replace(obj, **changes) + +def _replace(obj, /, **changes): # We're going to mutate 'changes', but that's okay because it's a # new dict, even if called with 'replace(obj, **my_changes)'. - if not _is_dataclass_instance(obj): - raise TypeError("replace() should be called on dataclass instances") - # It's an error to have init=False fields in 'changes'. # If a field is not in 'changes', read its value from the provided obj. diff --git a/Lib/enum.py b/Lib/enum.py index 4b99e7bda2cca5..f5448a1788e4d2 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1,8 +1,6 @@ import sys import builtins as bltns from types import MappingProxyType, DynamicClassAttribute -from operator import or_ as _or_ -from functools import reduce __all__ = [ @@ -730,6 +728,11 @@ def __call__(cls, value, names=None, *values, module=None, qualname=None, type=N value = (value, names) + values return cls.__new__(cls, value) # otherwise, functional API: we're creating a new Enum type + if names is None and type is None: + # no body? no data-type? possibly wrong usage + raise TypeError( + f"{cls} has no members; specify `names=()` if you meant to create a new, empty, enum" + ) return cls._create_( class_name=value, names=names, @@ -1879,7 +1882,8 @@ def __call__(self, enumeration): missed = [v for v in values if v not in member_values] if missed: missing_names.append(name) - missing_value |= reduce(_or_, missed) + for val in missed: + missing_value |= val if missing_names: if len(missing_names) == 1: alias = 'alias %s is missing' % missing_names[0] diff --git a/Lib/functools.py b/Lib/functools.py index a2fc28779dbddc..55990e742bf23f 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -19,8 +19,9 @@ # import types, weakref # Deferred to single_dispatch() from reprlib import recursive_repr from _thread import RLock -from types import GenericAlias +# Avoid importing types, so we can speedup import time +GenericAlias = type(list[int]) ################################################################################ ### update_wrapper() and wraps() decorator @@ -236,7 +237,7 @@ def __ge__(self, other): def reduce(function, sequence, initial=_initial_missing): """ - reduce(function, iterable[, initial]) -> value + reduce(function, iterable[, initial], /) -> value Apply a function of two arguments cumulatively to the items of a sequence or iterable, from left to right, so as to reduce the iterable to a single diff --git a/Lib/http/server.py b/Lib/http/server.py index ca6240d9a921e6..ee7a9b6aa55b88 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -2,18 +2,18 @@ Note: BaseHTTPRequestHandler doesn't implement any HTTP request; see SimpleHTTPRequestHandler for simple implementations of GET, HEAD and POST, -and CGIHTTPRequestHandler for CGI scripts. +and (deprecated) CGIHTTPRequestHandler for CGI scripts. -It does, however, optionally implement HTTP/1.1 persistent connections, -as of version 0.3. +It does, however, optionally implement HTTP/1.1 persistent connections. Notes on CGIHTTPRequestHandler ------------------------------ -This class implements GET and POST requests to cgi-bin scripts. +This class is deprecated. It implements GET and POST requests to cgi-bin scripts. -If the os.fork() function is not present (e.g. on Windows), -subprocess.Popen() is used as a fallback, with slightly altered semantics. +If the os.fork() function is not present (Windows), subprocess.Popen() is used, +with slightly altered but never documented semantics. Use from a threaded +process is likely to trigger a warning at os.fork() time. In all cases, the implementation is intentionally naive -- all requests are executed synchronously. @@ -986,6 +986,12 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): """ + def __init__(self, *args, **kwargs): + import warnings + warnings._deprecated("http.server.CGIHTTPRequestHandler", + remove=(3, 15)) + super().__init__(*args, **kwargs) + # Determine platform specifics have_fork = hasattr(os, 'fork') diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 0717e202ecbcde..0019897c943e14 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -455,6 +455,10 @@ def _write_atomic(path, data, mode=0o666): # Python 3.13a1 3557 (Make the conversion to boolean in jumps explicit) # Python 3.13a1 3558 (Reorder the stack items for CALL) # Python 3.13a1 3559 (Generate opcode IDs from bytecodes.c) +# Python 3.13a1 3560 (Add RESUME_CHECK instruction) +# Python 3.13a1 3561 (Add cache entry to branch instructions) +# Python 3.13a1 3562 (Assign opcode IDs for internal ops in separate range) +# Python 3.13a1 3563 (Add CALL_KW and remove KW_NAMES) # Python 3.14 will start with 3600 @@ -471,7 +475,7 @@ def _write_atomic(path, data, mode=0o666): # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3559).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3563).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c diff --git a/Lib/inspect.py b/Lib/inspect.py index c8211833dd0831..aaa22bef896602 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -2870,6 +2870,8 @@ def __str__(self): return formatted + __replace__ = replace + def __repr__(self): return '<{} "{}">'.format(self.__class__.__name__, self) @@ -3130,6 +3132,8 @@ def replace(self, *, parameters=_void, return_annotation=_void): return type(self)(parameters, return_annotation=return_annotation) + __replace__ = replace + def _hash_basis(self): params = tuple(param for param in self.parameters.values() if param.kind != _KEYWORD_ONLY) diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index 04eaea811cfbbe..7c425a2d8e7034 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -9,6 +9,7 @@ __all__ = [ 'Client', 'Listener', 'Pipe', 'wait' ] +import errno import io import os import sys @@ -41,6 +42,7 @@ BUFSIZE = 8192 # A very generous timeout when it comes to local connections... CONNECTION_TIMEOUT = 20. +WSA_OPERATION_ABORTED = 995 _mmap_counter = itertools.count() @@ -271,12 +273,22 @@ class PipeConnection(_ConnectionBase): with FILE_FLAG_OVERLAPPED. """ _got_empty_message = False + _send_ov = None def _close(self, _CloseHandle=_winapi.CloseHandle): + ov = self._send_ov + if ov is not None: + # Interrupt WaitForMultipleObjects() in _send_bytes() + ov.cancel() _CloseHandle(self._handle) def _send_bytes(self, buf): + if self._send_ov is not None: + # A connection should only be used by a single thread + raise ValueError("concurrent send_bytes() calls " + "are not supported") ov, err = _winapi.WriteFile(self._handle, buf, overlapped=True) + self._send_ov = ov try: if err == _winapi.ERROR_IO_PENDING: waitres = _winapi.WaitForMultipleObjects( @@ -286,7 +298,13 @@ def _send_bytes(self, buf): ov.cancel() raise finally: + self._send_ov = None nwritten, err = ov.GetOverlappedResult(True) + if err == WSA_OPERATION_ABORTED: + # close() was called by another thread while + # WaitForMultipleObjects() was waiting for the overlapped + # operation. + raise OSError(errno.EPIPE, "handle is closed") assert err == 0 assert nwritten == len(buf) diff --git a/Lib/opcode.py b/Lib/opcode.py index 386a2fba396a6a..88f4df7c0e8c38 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -93,6 +93,18 @@ "counter": 1, "version": 2, }, + "POP_JUMP_IF_TRUE": { + "counter": 1, + }, + "POP_JUMP_IF_FALSE": { + "counter": 1, + }, + "POP_JUMP_IF_NONE": { + "counter": 1, + }, + "POP_JUMP_IF_NOT_NONE": { + "counter": 1, + }, } _inline_cache_entries = { diff --git a/Lib/pdb.py b/Lib/pdb.py index 90f26a2eb99848..fd62d246f124ab 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -237,6 +237,9 @@ def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None, pass self.allow_kbdint = False self.nosigint = nosigint + # Consider these characters as part of the command so when the users type + # c.a or c['a'], it won't be recognized as a c(ontinue) command + self.identchars = cmd.Cmd.identchars + '=.[](),"\'+-*/%@&|<>~^' # Read ~/.pdbrc and ./.pdbrc self.rcLines = [] @@ -491,6 +494,8 @@ def interaction(self, frame, tb_or_exc): Pdb._previous_sigint_handler = None _chained_exceptions, tb = self._get_tb_and_exceptions(tb_or_exc) + if isinstance(tb_or_exc, BaseException): + assert tb is not None, "main exception must have a traceback" with self._hold_exceptions(_chained_exceptions): if self.setup(frame, tb): # no interaction desired at this time (happens if .pdbrc contains @@ -509,6 +514,22 @@ def displayhook(self, obj): if obj is not None: self.message(repr(obj)) + @contextmanager + def _disable_tab_completion(self): + if self.use_rawinput and self.completekey == 'tab': + try: + import readline + except ImportError: + yield + return + try: + readline.parse_and_bind('tab: self-insert') + yield + finally: + readline.parse_and_bind('tab: complete') + else: + yield + def default(self, line): if line[:1] == '!': line = line[1:].strip() locals = self.curframe_locals @@ -516,28 +537,29 @@ def default(self, line): try: if (code := codeop.compile_command(line + '\n', '', 'single')) is None: # Multi-line mode - buffer = line - continue_prompt = "... " - while (code := codeop.compile_command(buffer, '', 'single')) is None: - if self.use_rawinput: - try: - line = input(continue_prompt) - except (EOFError, KeyboardInterrupt): - self.lastcmd = "" - print('\n') - return - else: - self.stdout.write(continue_prompt) - self.stdout.flush() - line = self.stdin.readline() - if not len(line): - self.lastcmd = "" - self.stdout.write('\n') - self.stdout.flush() - return + with self._disable_tab_completion(): + buffer = line + continue_prompt = "... " + while (code := codeop.compile_command(buffer, '', 'single')) is None: + if self.use_rawinput: + try: + line = input(continue_prompt) + except (EOFError, KeyboardInterrupt): + self.lastcmd = "" + print('\n') + return else: - line = line.rstrip('\r\n') - buffer += '\n' + line + self.stdout.write(continue_prompt) + self.stdout.flush() + line = self.stdin.readline() + if not len(line): + self.lastcmd = "" + self.stdout.write('\n') + self.stdout.flush() + return + else: + line = line.rstrip('\r\n') + buffer += '\n' + line save_stdout = sys.stdout save_stdin = sys.stdin save_displayhook = sys.displayhook @@ -1166,7 +1188,12 @@ def do_exceptions(self, arg): rep = repr(exc) if len(rep) > 80: rep = rep[:77] + "..." - self.message(f"{prompt} {ix:>3} {rep}") + indicator = ( + " -" + if self._chained_exceptions[ix].__traceback__ is None + else f"{ix:>3}" + ) + self.message(f"{prompt} {indicator} {rep}") else: try: number = int(arg) @@ -1174,6 +1201,10 @@ def do_exceptions(self, arg): self.error("Argument must be an integer") return if 0 <= number < len(self._chained_exceptions): + if self._chained_exceptions[number].__traceback__ is None: + self.error("This exception does not have a traceback, cannot jump to it") + return + self._chained_exception_index = number self.setup(None, self._chained_exceptions[number].__traceback__) self.print_stack_entry(self.stack[self.curindex]) @@ -1722,8 +1753,11 @@ def do_alias(self, arg): for alias in keys: self.message("%s = %s" % (alias, self.aliases[alias])) return - if args[0] in self.aliases and len(args) == 1: - self.message("%s = %s" % (args[0], self.aliases[args[0]])) + if len(args) == 1: + if args[0] in self.aliases: + self.message("%s = %s" % (args[0], self.aliases[args[0]])) + else: + self.error(f"Unknown alias '{args[0]}'") else: self.aliases[args[0]] = ' '.join(args[1:]) @@ -2007,19 +2041,27 @@ def post_mortem(t=None): If `t` is an exception object, the `exceptions` command makes it possible to list and inspect its chained exceptions (if any). """ + return _post_mortem(t, Pdb()) + + +def _post_mortem(t, pdb_instance): + """ + Private version of post_mortem, which allow to pass a pdb instance + for testing purposes. + """ # handling the default if t is None: exc = sys.exception() if exc is not None: t = exc.__traceback__ - if t is None: + if t is None or (isinstance(t, BaseException) and t.__traceback__ is None): raise ValueError("A valid traceback must be passed if no " "exception is being handled") - p = Pdb() - p.reset() - p.interaction(None, t) + pdb_instance.reset() + pdb_instance.interaction(None, t) + def pm(): """Enter post-mortem debugging of the traceback found in sys.last_exc.""" @@ -2039,8 +2081,6 @@ def help(): pydoc.pager(__doc__) _usage = """\ -usage: pdb.py [-c command] ... [-m module | pyfile] [arg] ... - Debug the Python program given by pyfile. Alternatively, an executable module or package to debug can be specified using the -m switch. @@ -2055,34 +2095,44 @@ def help(): def main(): - import getopt - - opts, args = getopt.getopt(sys.argv[1:], 'mhc:', ['help', 'command=']) - - if not args: - print(_usage) + import argparse + + parser = argparse.ArgumentParser(prog="pdb", + description=_usage, + formatter_class=argparse.RawDescriptionHelpFormatter, + allow_abbrev=False) + + parser.add_argument('-c', '--command', action='append', default=[], metavar='command') + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('-m', metavar='module') + group.add_argument('pyfile', nargs='?') + parser.add_argument('args', nargs="*") + + if len(sys.argv) == 1: + # If no arguments were given (python -m pdb), print the whole help message. + # Without this check, argparse would only complain about missing required arguments. + parser.print_help() sys.exit(2) - if any(opt in ['-h', '--help'] for opt, optarg in opts): - print(_usage) - sys.exit() - - commands = [optarg for opt, optarg in opts if opt in ['-c', '--command']] + opts = parser.parse_args() - module_indicated = any(opt in ['-m'] for opt, optarg in opts) - cls = _ModuleTarget if module_indicated else _ScriptTarget - target = cls(args[0]) + if opts.m: + file = opts.m + target = _ModuleTarget(file) + else: + file = opts.pyfile + target = _ScriptTarget(file) target.check() - sys.argv[:] = args # Hide "pdb.py" and pdb options from argument list + sys.argv[:] = [file] + opts.args # Hide "pdb.py" and pdb options from argument list # Note on saving/restoring sys.argv: it's a good idea when sys.argv was # modified by the script being debugged. It's a bad idea when it was # changed by the user from the command line. There is a "restart" command # which allows explicit specification of command line arguments. pdb = Pdb() - pdb.rcLines.extend(commands) + pdb.rcLines.extend(opts.command) while True: try: pdb._run(target) diff --git a/Lib/pickle.py b/Lib/pickle.py index fe86f80f51d3b9..4f5ad5b71e8899 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -396,6 +396,8 @@ def decode_long(data): return int.from_bytes(data, byteorder='little', signed=True) +_NoValue = object() + # Pickling machinery class _Pickler: @@ -542,8 +544,8 @@ def save(self, obj, save_persistent_id=True): return rv = NotImplemented - reduce = getattr(self, "reducer_override", None) - if reduce is not None: + reduce = getattr(self, "reducer_override", _NoValue) + if reduce is not _NoValue: rv = reduce(obj) if rv is NotImplemented: @@ -556,8 +558,8 @@ def save(self, obj, save_persistent_id=True): # Check private dispatch table if any, or else # copyreg.dispatch_table - reduce = getattr(self, 'dispatch_table', dispatch_table).get(t) - if reduce is not None: + reduce = getattr(self, 'dispatch_table', dispatch_table).get(t, _NoValue) + if reduce is not _NoValue: rv = reduce(obj) else: # Check for a class with a custom metaclass; treat as regular @@ -567,12 +569,12 @@ def save(self, obj, save_persistent_id=True): return # Check for a __reduce_ex__ method, fall back to __reduce__ - reduce = getattr(obj, "__reduce_ex__", None) - if reduce is not None: + reduce = getattr(obj, "__reduce_ex__", _NoValue) + if reduce is not _NoValue: rv = reduce(self.proto) else: - reduce = getattr(obj, "__reduce__", None) - if reduce is not None: + reduce = getattr(obj, "__reduce__", _NoValue) + if reduce is not _NoValue: rv = reduce() else: raise PicklingError("Can't pickle %r object: %r" % @@ -1705,8 +1707,8 @@ def load_build(self): stack = self.stack state = stack.pop() inst = stack[-1] - setstate = getattr(inst, "__setstate__", None) - if setstate is not None: + setstate = getattr(inst, "__setstate__", _NoValue) + if setstate is not _NoValue: setstate(state) return slotstate = None diff --git a/Lib/random.py b/Lib/random.py index 586c3f7f9da938..84bbfc5df1bf23 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -827,7 +827,7 @@ def binomialvariate(self, n=1, p=0.5): return k # Acceptance-rejection test. - # Note, the original paper errorneously omits the call to log(v) + # Note, the original paper erroneously omits the call to log(v) # when comparing to the log of the rescaled binomial distribution. if not setup_complete: alpha = (2.83 + 5.1 / b) * spq diff --git a/Lib/ssl.py b/Lib/ssl.py index c4c5a4ca894ee5..62e55857141dfc 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -876,6 +876,31 @@ def getpeercert(self, binary_form=False): """ return self._sslobj.getpeercert(binary_form) + def get_verified_chain(self): + """Returns verified certificate chain provided by the other + end of the SSL channel as a list of DER-encoded bytes. + + If certificate verification was disabled method acts the same as + ``SSLSocket.get_unverified_chain``. + """ + chain = self._sslobj.get_verified_chain() + + if chain is None: + return [] + + return [cert.public_bytes(_ssl.ENCODING_DER) for cert in chain] + + def get_unverified_chain(self): + """Returns raw certificate chain provided by the other + end of the SSL channel as a list of DER-encoded bytes. + """ + chain = self._sslobj.get_unverified_chain() + + if chain is None: + return [] + + return [cert.public_bytes(_ssl.ENCODING_DER) for cert in chain] + def selected_npn_protocol(self): """Return the currently selected NPN protocol as a string, or ``None`` if a next protocol was not negotiated or if NPN is not supported by one @@ -1129,6 +1154,14 @@ def getpeercert(self, binary_form=False): self._check_connected() return self._sslobj.getpeercert(binary_form) + @_sslcopydoc + def get_verified_chain(self): + return self._sslobj.get_verified_chain() + + @_sslcopydoc + def get_unverified_chain(self): + return self._sslobj.get_unverified_chain() + @_sslcopydoc def selected_npn_protocol(self): self._checkClosed() diff --git a/Lib/test/.ruff.toml b/Lib/test/.ruff.toml new file mode 100644 index 00000000000000..e202766b147e6d --- /dev/null +++ b/Lib/test/.ruff.toml @@ -0,0 +1,35 @@ +fix = true +select = [ + "F811", # Redefinition of unused variable (useful for finding test methods with the same name) +] +extend-exclude = [ + # Excluded (these aren't actually executed, they're just "data files") + "tokenizedata/*.py", + # Failed to lint + "encoded_modules/module_iso_8859_1.py", + "encoded_modules/module_koi8_r.py", + # Failed to parse + "support/socket_helper.py", + "test_fstring.py", + # TODO Fix: F811 Redefinition of unused name + "test__opcode.py", + "test_buffer.py", + "test_ctypes/test_arrays.py", + "test_ctypes/test_functions.py", + "test_dataclasses/__init__.py", + "test_descr.py", + "test_enum.py", + "test_functools.py", + "test_genericclass.py", + "test_grammar.py", + "test_import/__init__.py", + "test_keywordonlyarg.py", + "test_pkg.py", + "test_subclassinit.py", + "test_typing.py", + "test_unittest/testmock/testpatch.py", + "test_yield_from.py", + "time_hashlib.py", + # Pending https://github.com/python/cpython/pull/109139 + "test_monitoring.py", +] diff --git a/Lib/test/__main__.py b/Lib/test/__main__.py index 19a6b2b8904526..e5780b784b4b05 100644 --- a/Lib/test/__main__.py +++ b/Lib/test/__main__.py @@ -1,2 +1,2 @@ -from test.libregrtest import main +from test.libregrtest.main import main main() diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index bcbb4c2929d69e..730b887dd4bcac 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -675,6 +675,7 @@ def test_close(self): close_queue(q) + @support.requires_resource('walltime') def test_many_processes(self): if self.TYPE == 'threads': self.skipTest('test not appropriate for {}'.format(self.TYPE)) @@ -4991,6 +4992,7 @@ def test_wait_slow(self): def test_wait_socket_slow(self): self.test_wait_socket(True) + @support.requires_resource('walltime') def test_wait_timeout(self): from multiprocessing.connection import wait @@ -5019,6 +5021,7 @@ def signal_and_sleep(cls, sem, period): sem.release() time.sleep(period) + @support.requires_resource('walltime') def test_wait_integer(self): from multiprocessing.connection import wait @@ -5469,7 +5472,9 @@ def test_nested_startmethod(self): while not queue.empty(): results.append(queue.get()) - self.assertEqual(results, [2, 1]) + # gh-109706: queue.put(1) can write into the queue before queue.put(2), + # there is no synchronization in the test. + self.assertSetEqual(set(results), set([2, 1])) @unittest.skipIf(sys.platform == "win32", diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py index ad8f72f556331d..f0cedde308d53b 100644 --- a/Lib/test/audit-tests.py +++ b/Lib/test/audit-tests.py @@ -186,7 +186,7 @@ class C(A): ) -def test_open(): +def test_open(testfn): # SSLContext.load_dh_params uses _Py_fopen_obj rather than normal open() try: import ssl @@ -199,11 +199,11 @@ def test_open(): # All of them should fail with TestHook(raise_on_events={"open"}) as hook: for fn, *args in [ - (open, sys.argv[2], "r"), + (open, testfn, "r"), (open, sys.executable, "rb"), (open, 3, "wb"), - (open, sys.argv[2], "w", -1, None, None, None, False, lambda *a: 1), - (load_dh_params, sys.argv[2]), + (open, testfn, "w", -1, None, None, None, False, lambda *a: 1), + (load_dh_params, testfn), ]: if not fn: continue @@ -216,11 +216,11 @@ def test_open(): [ i for i in [ - (sys.argv[2], "r"), + (testfn, "r"), (sys.executable, "r"), (3, "w"), - (sys.argv[2], "w"), - (sys.argv[2], "rb") if load_dh_params else None, + (testfn, "w"), + (testfn, "rb") if load_dh_params else None, ] if i is not None ], @@ -289,7 +289,7 @@ def hook(event, args): def test_unraisablehook(): - from _testcapi import write_unraisable_exc + from _testinternalcapi import write_unraisable_exc def unraisablehook(hookargs): pass @@ -517,12 +517,15 @@ def test_not_in_gc(): assert hook not in o -def test_time(): +def test_time(mode): import time def hook(event, args): if event.startswith("time."): - print(event, *args) + if mode == 'print': + print(event, *args) + elif mode == 'fail': + raise AssertionError('hook failed') sys.addaudithook(hook) time.sleep(0) @@ -549,4 +552,4 @@ def hook(event, args): suppress_msvcrt_asserts() test = sys.argv[1] - globals()[test]() + globals()[test](*sys.argv[2:]) diff --git a/Lib/test/autotest.py b/Lib/test/autotest.py index fa85cc153a133a..b5a1fab404c72d 100644 --- a/Lib/test/autotest.py +++ b/Lib/test/autotest.py @@ -1,5 +1,5 @@ # This should be equivalent to running regrtest.py from the cmdline. # It can be especially handy if you're in an interactive shell, e.g., # from test import autotest. -from test.libregrtest import main +from test.libregrtest.main import main main() diff --git a/Lib/test/badsyntax_future3.py b/Lib/test/badsyntax_future3.py deleted file mode 100644 index f1c8417edaa297..00000000000000 --- a/Lib/test/badsyntax_future3.py +++ /dev/null @@ -1,10 +0,0 @@ -"""This is a test""" -from __future__ import nested_scopes -from __future__ import rested_snopes - -def f(x): - def g(y): - return x + y - return g - -result = f(2)(4) diff --git a/Lib/test/badsyntax_future4.py b/Lib/test/badsyntax_future4.py deleted file mode 100644 index b5f4c98e922ac2..00000000000000 --- a/Lib/test/badsyntax_future4.py +++ /dev/null @@ -1,10 +0,0 @@ -"""This is a test""" -import __future__ -from __future__ import nested_scopes - -def f(x): - def g(y): - return x + y - return g - -result = f(2)(4) diff --git a/Lib/test/badsyntax_future5.py b/Lib/test/badsyntax_future5.py deleted file mode 100644 index 8a7e5fcb70ff2e..00000000000000 --- a/Lib/test/badsyntax_future5.py +++ /dev/null @@ -1,12 +0,0 @@ -"""This is a test""" -from __future__ import nested_scopes -import foo -from __future__ import nested_scopes - - -def f(x): - def g(y): - return x + y - return g - -result = f(2)(4) diff --git a/Lib/test/badsyntax_future6.py b/Lib/test/badsyntax_future6.py deleted file mode 100644 index 5a8b55a02c41bf..00000000000000 --- a/Lib/test/badsyntax_future6.py +++ /dev/null @@ -1,10 +0,0 @@ -"""This is a test""" -"this isn't a doc string" -from __future__ import nested_scopes - -def f(x): - def g(y): - return x + y - return g - -result = f(2)(4) diff --git a/Lib/test/badsyntax_future7.py b/Lib/test/badsyntax_future7.py deleted file mode 100644 index 131db2c2164cf2..00000000000000 --- a/Lib/test/badsyntax_future7.py +++ /dev/null @@ -1,11 +0,0 @@ -"""This is a test""" - -from __future__ import nested_scopes; import string; from __future__ import \ - nested_scopes - -def f(x): - def g(y): - return x + y - return g - -result = f(2)(4) diff --git a/Lib/test/badsyntax_future8.py b/Lib/test/badsyntax_future8.py deleted file mode 100644 index ca45289e2e5a4f..00000000000000 --- a/Lib/test/badsyntax_future8.py +++ /dev/null @@ -1,10 +0,0 @@ -"""This is a test""" - -from __future__ import * - -def f(x): - def g(y): - return x + y - return g - -print(f(2)(4)) diff --git a/Lib/test/badsyntax_future9.py b/Lib/test/badsyntax_future9.py deleted file mode 100644 index 916de06ab71e97..00000000000000 --- a/Lib/test/badsyntax_future9.py +++ /dev/null @@ -1,10 +0,0 @@ -"""This is a test""" - -from __future__ import nested_scopes, braces - -def f(x): - def g(y): - return x + y - return g - -print(f(2)(4)) diff --git a/Lib/test/bisect_cmd.py b/Lib/test/bisect_cmd.py index 0bdd7a43c03f7b..5cb804bd469dc3 100755 --- a/Lib/test/bisect_cmd.py +++ b/Lib/test/bisect_cmd.py @@ -109,9 +109,10 @@ def parse_args(): def main(): args = parse_args() - if '-w' in args.test_args or '--verbose2' in args.test_args: - print("WARNING: -w/--verbose2 option should not be used to bisect!") - print() + for opt in ('-w', '--rerun', '--verbose2'): + if opt in args.test_args: + print(f"WARNING: {opt} option should not be used to bisect!") + print() if args.input: with open(args.input) as fp: diff --git a/Lib/test/allsans.pem b/Lib/test/certdata/allsans.pem similarity index 100% rename from Lib/test/allsans.pem rename to Lib/test/certdata/allsans.pem diff --git a/Lib/test/badcert.pem b/Lib/test/certdata/badcert.pem similarity index 100% rename from Lib/test/badcert.pem rename to Lib/test/certdata/badcert.pem diff --git a/Lib/test/badkey.pem b/Lib/test/certdata/badkey.pem similarity index 100% rename from Lib/test/badkey.pem rename to Lib/test/certdata/badkey.pem diff --git a/Lib/test/capath/4e1295a3.0 b/Lib/test/certdata/capath/4e1295a3.0 similarity index 100% rename from Lib/test/capath/4e1295a3.0 rename to Lib/test/certdata/capath/4e1295a3.0 diff --git a/Lib/test/capath/5ed36f99.0 b/Lib/test/certdata/capath/5ed36f99.0 similarity index 100% rename from Lib/test/capath/5ed36f99.0 rename to Lib/test/certdata/capath/5ed36f99.0 diff --git a/Lib/test/capath/6e88d7b8.0 b/Lib/test/certdata/capath/6e88d7b8.0 similarity index 100% rename from Lib/test/capath/6e88d7b8.0 rename to Lib/test/certdata/capath/6e88d7b8.0 diff --git a/Lib/test/capath/99d0fa06.0 b/Lib/test/certdata/capath/99d0fa06.0 similarity index 100% rename from Lib/test/capath/99d0fa06.0 rename to Lib/test/certdata/capath/99d0fa06.0 diff --git a/Lib/test/capath/b1930218.0 b/Lib/test/certdata/capath/b1930218.0 similarity index 100% rename from Lib/test/capath/b1930218.0 rename to Lib/test/certdata/capath/b1930218.0 diff --git a/Lib/test/capath/ceff1710.0 b/Lib/test/certdata/capath/ceff1710.0 similarity index 100% rename from Lib/test/capath/ceff1710.0 rename to Lib/test/certdata/capath/ceff1710.0 diff --git a/Lib/test/ffdh3072.pem b/Lib/test/certdata/ffdh3072.pem similarity index 100% rename from Lib/test/ffdh3072.pem rename to Lib/test/certdata/ffdh3072.pem diff --git a/Lib/test/idnsans.pem b/Lib/test/certdata/idnsans.pem similarity index 100% rename from Lib/test/idnsans.pem rename to Lib/test/certdata/idnsans.pem diff --git a/Lib/test/keycert.passwd.pem b/Lib/test/certdata/keycert.passwd.pem similarity index 100% rename from Lib/test/keycert.passwd.pem rename to Lib/test/certdata/keycert.passwd.pem diff --git a/Lib/test/keycert.pem b/Lib/test/certdata/keycert.pem similarity index 100% rename from Lib/test/keycert.pem rename to Lib/test/certdata/keycert.pem diff --git a/Lib/test/keycert2.pem b/Lib/test/certdata/keycert2.pem similarity index 100% rename from Lib/test/keycert2.pem rename to Lib/test/certdata/keycert2.pem diff --git a/Lib/test/keycert3.pem b/Lib/test/certdata/keycert3.pem similarity index 100% rename from Lib/test/keycert3.pem rename to Lib/test/certdata/keycert3.pem diff --git a/Lib/test/keycert4.pem b/Lib/test/certdata/keycert4.pem similarity index 100% rename from Lib/test/keycert4.pem rename to Lib/test/certdata/keycert4.pem diff --git a/Lib/test/keycertecc.pem b/Lib/test/certdata/keycertecc.pem similarity index 100% rename from Lib/test/keycertecc.pem rename to Lib/test/certdata/keycertecc.pem diff --git a/Lib/test/make_ssl_certs.py b/Lib/test/certdata/make_ssl_certs.py similarity index 100% rename from Lib/test/make_ssl_certs.py rename to Lib/test/certdata/make_ssl_certs.py diff --git a/Lib/test/nokia.pem b/Lib/test/certdata/nokia.pem similarity index 100% rename from Lib/test/nokia.pem rename to Lib/test/certdata/nokia.pem diff --git a/Lib/test/nosan.pem b/Lib/test/certdata/nosan.pem similarity index 100% rename from Lib/test/nosan.pem rename to Lib/test/certdata/nosan.pem diff --git a/Lib/test/nullbytecert.pem b/Lib/test/certdata/nullbytecert.pem similarity index 100% rename from Lib/test/nullbytecert.pem rename to Lib/test/certdata/nullbytecert.pem diff --git a/Lib/test/nullcert.pem b/Lib/test/certdata/nullcert.pem similarity index 100% rename from Lib/test/nullcert.pem rename to Lib/test/certdata/nullcert.pem diff --git a/Lib/test/pycacert.pem b/Lib/test/certdata/pycacert.pem similarity index 100% rename from Lib/test/pycacert.pem rename to Lib/test/certdata/pycacert.pem diff --git a/Lib/test/pycakey.pem b/Lib/test/certdata/pycakey.pem similarity index 100% rename from Lib/test/pycakey.pem rename to Lib/test/certdata/pycakey.pem diff --git a/Lib/test/revocation.crl b/Lib/test/certdata/revocation.crl similarity index 100% rename from Lib/test/revocation.crl rename to Lib/test/certdata/revocation.crl diff --git a/Lib/test/secp384r1.pem b/Lib/test/certdata/secp384r1.pem similarity index 100% rename from Lib/test/secp384r1.pem rename to Lib/test/certdata/secp384r1.pem diff --git a/Lib/test/selfsigned_pythontestdotnet.pem b/Lib/test/certdata/selfsigned_pythontestdotnet.pem similarity index 100% rename from Lib/test/selfsigned_pythontestdotnet.pem rename to Lib/test/certdata/selfsigned_pythontestdotnet.pem diff --git a/Lib/test/ssl_cert.pem b/Lib/test/certdata/ssl_cert.pem similarity index 100% rename from Lib/test/ssl_cert.pem rename to Lib/test/certdata/ssl_cert.pem diff --git a/Lib/test/ssl_key.passwd.pem b/Lib/test/certdata/ssl_key.passwd.pem similarity index 100% rename from Lib/test/ssl_key.passwd.pem rename to Lib/test/certdata/ssl_key.passwd.pem diff --git a/Lib/test/ssl_key.pem b/Lib/test/certdata/ssl_key.pem similarity index 100% rename from Lib/test/ssl_key.pem rename to Lib/test/certdata/ssl_key.pem diff --git a/Lib/test/talos-2019-0758.pem b/Lib/test/certdata/talos-2019-0758.pem similarity index 100% rename from Lib/test/talos-2019-0758.pem rename to Lib/test/certdata/talos-2019-0758.pem diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index 55e061950ff280..8bda17358db87f 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -1699,22 +1699,23 @@ def test_replace(self): cls = self.theclass args = [1, 2, 3] base = cls(*args) - self.assertEqual(base, base.replace()) + self.assertEqual(base.replace(), base) + self.assertEqual(copy.replace(base), base) - i = 0 - for name, newval in (("year", 2), - ("month", 3), - ("day", 4)): + changes = (("year", 2), + ("month", 3), + ("day", 4)) + for i, (name, newval) in enumerate(changes): newargs = args[:] newargs[i] = newval expected = cls(*newargs) - got = base.replace(**{name: newval}) - self.assertEqual(expected, got) - i += 1 + self.assertEqual(base.replace(**{name: newval}), expected) + self.assertEqual(copy.replace(base, **{name: newval}), expected) # Out of bounds. base = cls(2000, 2, 29) self.assertRaises(ValueError, base.replace, year=2001) + self.assertRaises(ValueError, copy.replace, base, year=2001) def test_subclass_replace(self): class DateSubclass(self.theclass): @@ -1722,6 +1723,7 @@ class DateSubclass(self.theclass): dt = DateSubclass(2012, 1, 1) self.assertIs(type(dt.replace(year=2013)), DateSubclass) + self.assertIs(type(copy.replace(dt, year=2013)), DateSubclass) def test_subclass_date(self): @@ -2856,26 +2858,27 @@ def test_replace(self): cls = self.theclass args = [1, 2, 3, 4, 5, 6, 7] base = cls(*args) - self.assertEqual(base, base.replace()) - - i = 0 - for name, newval in (("year", 2), - ("month", 3), - ("day", 4), - ("hour", 5), - ("minute", 6), - ("second", 7), - ("microsecond", 8)): + self.assertEqual(base.replace(), base) + self.assertEqual(copy.replace(base), base) + + changes = (("year", 2), + ("month", 3), + ("day", 4), + ("hour", 5), + ("minute", 6), + ("second", 7), + ("microsecond", 8)) + for i, (name, newval) in enumerate(changes): newargs = args[:] newargs[i] = newval expected = cls(*newargs) - got = base.replace(**{name: newval}) - self.assertEqual(expected, got) - i += 1 + self.assertEqual(base.replace(**{name: newval}), expected) + self.assertEqual(copy.replace(base, **{name: newval}), expected) # Out of bounds. base = cls(2000, 2, 29) self.assertRaises(ValueError, base.replace, year=2001) + self.assertRaises(ValueError, copy.replace, base, year=2001) @support.run_with_tz('EDT4') def test_astimezone(self): @@ -3671,19 +3674,19 @@ def test_replace(self): cls = self.theclass args = [1, 2, 3, 4] base = cls(*args) - self.assertEqual(base, base.replace()) - - i = 0 - for name, newval in (("hour", 5), - ("minute", 6), - ("second", 7), - ("microsecond", 8)): + self.assertEqual(base.replace(), base) + self.assertEqual(copy.replace(base), base) + + changes = (("hour", 5), + ("minute", 6), + ("second", 7), + ("microsecond", 8)) + for i, (name, newval) in enumerate(changes): newargs = args[:] newargs[i] = newval expected = cls(*newargs) - got = base.replace(**{name: newval}) - self.assertEqual(expected, got) - i += 1 + self.assertEqual(base.replace(**{name: newval}), expected) + self.assertEqual(copy.replace(base, **{name: newval}), expected) # Out of bounds. base = cls(1) @@ -3691,6 +3694,10 @@ def test_replace(self): self.assertRaises(ValueError, base.replace, minute=-1) self.assertRaises(ValueError, base.replace, second=100) self.assertRaises(ValueError, base.replace, microsecond=1000000) + self.assertRaises(ValueError, copy.replace, base, hour=24) + self.assertRaises(ValueError, copy.replace, base, minute=-1) + self.assertRaises(ValueError, copy.replace, base, second=100) + self.assertRaises(ValueError, copy.replace, base, microsecond=1000000) def test_subclass_replace(self): class TimeSubclass(self.theclass): @@ -3698,6 +3705,7 @@ class TimeSubclass(self.theclass): ctime = TimeSubclass(12, 30) self.assertIs(type(ctime.replace(hour=10)), TimeSubclass) + self.assertIs(type(copy.replace(ctime, hour=10)), TimeSubclass) def test_subclass_time(self): @@ -4085,31 +4093,37 @@ def test_replace(self): zm200 = FixedOffset(timedelta(minutes=-200), "-200") args = [1, 2, 3, 4, z100] base = cls(*args) - self.assertEqual(base, base.replace()) - - i = 0 - for name, newval in (("hour", 5), - ("minute", 6), - ("second", 7), - ("microsecond", 8), - ("tzinfo", zm200)): + self.assertEqual(base.replace(), base) + self.assertEqual(copy.replace(base), base) + + changes = (("hour", 5), + ("minute", 6), + ("second", 7), + ("microsecond", 8), + ("tzinfo", zm200)) + for i, (name, newval) in enumerate(changes): newargs = args[:] newargs[i] = newval expected = cls(*newargs) - got = base.replace(**{name: newval}) - self.assertEqual(expected, got) - i += 1 + self.assertEqual(base.replace(**{name: newval}), expected) + self.assertEqual(copy.replace(base, **{name: newval}), expected) # Ensure we can get rid of a tzinfo. self.assertEqual(base.tzname(), "+100") base2 = base.replace(tzinfo=None) self.assertIsNone(base2.tzinfo) self.assertIsNone(base2.tzname()) + base22 = copy.replace(base, tzinfo=None) + self.assertIsNone(base22.tzinfo) + self.assertIsNone(base22.tzname()) # Ensure we can add one. base3 = base2.replace(tzinfo=z100) self.assertEqual(base, base3) self.assertIs(base.tzinfo, base3.tzinfo) + base32 = copy.replace(base22, tzinfo=z100) + self.assertEqual(base, base32) + self.assertIs(base.tzinfo, base32.tzinfo) # Out of bounds. base = cls(1) @@ -4117,6 +4131,10 @@ def test_replace(self): self.assertRaises(ValueError, base.replace, minute=-1) self.assertRaises(ValueError, base.replace, second=100) self.assertRaises(ValueError, base.replace, microsecond=1000000) + self.assertRaises(ValueError, copy.replace, base, hour=24) + self.assertRaises(ValueError, copy.replace, base, minute=-1) + self.assertRaises(ValueError, copy.replace, base, second=100) + self.assertRaises(ValueError, copy.replace, base, microsecond=1000000) def test_mixed_compare(self): t1 = self.theclass(1, 2, 3) @@ -4885,38 +4903,45 @@ def test_replace(self): zm200 = FixedOffset(timedelta(minutes=-200), "-200") args = [1, 2, 3, 4, 5, 6, 7, z100] base = cls(*args) - self.assertEqual(base, base.replace()) - - i = 0 - for name, newval in (("year", 2), - ("month", 3), - ("day", 4), - ("hour", 5), - ("minute", 6), - ("second", 7), - ("microsecond", 8), - ("tzinfo", zm200)): + self.assertEqual(base.replace(), base) + self.assertEqual(copy.replace(base), base) + + changes = (("year", 2), + ("month", 3), + ("day", 4), + ("hour", 5), + ("minute", 6), + ("second", 7), + ("microsecond", 8), + ("tzinfo", zm200)) + for i, (name, newval) in enumerate(changes): newargs = args[:] newargs[i] = newval expected = cls(*newargs) - got = base.replace(**{name: newval}) - self.assertEqual(expected, got) - i += 1 + self.assertEqual(base.replace(**{name: newval}), expected) + self.assertEqual(copy.replace(base, **{name: newval}), expected) # Ensure we can get rid of a tzinfo. self.assertEqual(base.tzname(), "+100") base2 = base.replace(tzinfo=None) self.assertIsNone(base2.tzinfo) self.assertIsNone(base2.tzname()) + base22 = copy.replace(base, tzinfo=None) + self.assertIsNone(base22.tzinfo) + self.assertIsNone(base22.tzname()) # Ensure we can add one. base3 = base2.replace(tzinfo=z100) self.assertEqual(base, base3) self.assertIs(base.tzinfo, base3.tzinfo) + base32 = copy.replace(base22, tzinfo=z100) + self.assertEqual(base, base32) + self.assertIs(base.tzinfo, base32.tzinfo) # Out of bounds. base = cls(2000, 2, 29) self.assertRaises(ValueError, base.replace, year=2001) + self.assertRaises(ValueError, copy.replace, base, year=2001) def test_more_astimezone(self): # The inherited test_astimezone covered some trivial and error cases. diff --git a/Lib/test/libregrtest/__init__.py b/Lib/test/libregrtest/__init__.py index 5e8dba5dbde71a..e69de29bb2d1d6 100644 --- a/Lib/test/libregrtest/__init__.py +++ b/Lib/test/libregrtest/__init__.py @@ -1,2 +0,0 @@ -from test.libregrtest.cmdline import _parse_args, RESOURCE_NAMES, ALL_RESOURCES -from test.libregrtest.main import main diff --git a/Lib/test/libregrtest/cmdline.py b/Lib/test/libregrtest/cmdline.py index ebe57920d9185c..99f28152f1a1c7 100644 --- a/Lib/test/libregrtest/cmdline.py +++ b/Lib/test/libregrtest/cmdline.py @@ -1,5 +1,5 @@ import argparse -import os +import os.path import shlex import sys from test.support import os_helper @@ -107,6 +107,8 @@ cpu - Used for certain CPU-heavy tests. + walltime - Long running but not CPU-bound tests. + subprocess Run all tests for the subprocess module. urlfetch - It is okay to download files required on testing. @@ -129,7 +131,7 @@ ALL_RESOURCES = ('audio', 'curses', 'largefile', 'network', - 'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui') + 'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui', 'walltime') # Other resources excluded from --use=all: # @@ -147,6 +149,10 @@ def __init__(self, **kwargs) -> None: self.verbose = 0 self.quiet = False self.exclude = False + self.cleanup = False + self.wait = False + self.list_cases = False + self.list_tests = False self.single = False self.randomize = False self.fromfile = None @@ -155,8 +161,8 @@ def __init__(self, **kwargs) -> None: self.trace = False self.coverdir = 'coverage' self.runleaks = False - self.huntrleaks = False - self.verbose2 = False + self.huntrleaks: tuple[int, int, str] | None = None + self.rerun = False self.verbose3 = False self.print_slow = False self.random_seed = None @@ -168,6 +174,13 @@ def __init__(self, **kwargs) -> None: self.ignore_tests = None self.pgo = False self.pgo_extended = False + self.worker_json = None + self.start = None + self.timeout = None + self.memlimit = None + self.threshold = None + self.fail_rerun = False + self.tempdir = None super().__init__(**kwargs) @@ -203,7 +216,6 @@ def _create_parser(): group.add_argument('--wait', action='store_true', help='wait for user input, e.g., allow a debugger ' 'to be attached') - group.add_argument('--worker-args', metavar='ARGS') group.add_argument('-S', '--start', metavar='START', help='the name of the test at which to start.' + more_details) @@ -213,8 +225,10 @@ def _create_parser(): group = parser.add_argument_group('Verbosity') group.add_argument('-v', '--verbose', action='count', help='run tests in verbose mode with output to stdout') - group.add_argument('-w', '--verbose2', action='store_true', + group.add_argument('-w', '--rerun', action='store_true', help='re-run failed tests in verbose mode') + group.add_argument('--verbose2', action='store_true', dest='rerun', + help='deprecated alias to --rerun') group.add_argument('-W', '--verbose3', action='store_true', help='display test output on failure') group.add_argument('-q', '--quiet', action='store_true', @@ -309,6 +323,9 @@ def _create_parser(): group.add_argument('--fail-env-changed', action='store_true', help='if a test file alters the environment, mark ' 'the test as failed') + group.add_argument('--fail-rerun', action='store_true', + help='if a test failed and then passed when re-run, ' + 'mark the tests as failed') group.add_argument('--junit-xml', dest='xmlpath', metavar='FILENAME', help='writes JUnit-style XML results to the specified ' @@ -380,7 +397,7 @@ def _parse_args(args, **kwargs): ns.python = shlex.split(ns.python) if ns.failfast and not (ns.verbose or ns.verbose3): parser.error("-G/--failfast needs either -v or -W") - if ns.pgo and (ns.verbose or ns.verbose2 or ns.verbose3): + if ns.pgo and (ns.verbose or ns.rerun or ns.verbose3): parser.error("--pgo/-v don't go together!") if ns.pgo_extended: ns.pgo = True # pgo_extended implies pgo @@ -394,10 +411,6 @@ def _parse_args(args, **kwargs): if ns.timeout is not None: if ns.timeout <= 0: ns.timeout = None - if ns.use_mp is not None: - if ns.use_mp <= 0: - # Use all cores + extras for tests that like to sleep - ns.use_mp = 2 + (os.cpu_count() or 1) if ns.use: for a in ns.use: for r in a: @@ -441,4 +454,13 @@ def _parse_args(args, **kwargs): # --forever implies --failfast ns.failfast = True + if ns.huntrleaks: + warmup, repetitions, _ = ns.huntrleaks + if warmup < 1 or repetitions < 1: + msg = ("Invalid values for the --huntrleaks/-R parameters. The " + "number of warmups and repetitions must be at least 1 " + "each (1:1).") + print(msg, file=sys.stderr, flush=True) + sys.exit(2) + return ns diff --git a/Lib/test/libregrtest/findtests.py b/Lib/test/libregrtest/findtests.py new file mode 100644 index 00000000000000..60f21980c10dd0 --- /dev/null +++ b/Lib/test/libregrtest/findtests.py @@ -0,0 +1,104 @@ +import os +import sys +import unittest + +from test import support + +from .utils import ( + StrPath, TestName, TestTuple, TestList, FilterTuple, + abs_module_name, count, printlist) + + +# If these test directories are encountered recurse into them and treat each +# "test_*.py" file or each sub-directory as a separate test module. This can +# increase parallelism. +# +# Beware this can't generally be done for any directory with sub-tests as the +# __init__.py may do things which alter what tests are to be run. +SPLITTESTDIRS: set[TestName] = { + "test_asyncio", + "test_concurrent_futures", + "test_future_stmt", + "test_multiprocessing_fork", + "test_multiprocessing_forkserver", + "test_multiprocessing_spawn", +} + + +def findtestdir(path: StrPath | None = None) -> StrPath: + return path or os.path.dirname(os.path.dirname(__file__)) or os.curdir + + +def findtests(*, testdir: StrPath | None = None, exclude=(), + split_test_dirs: set[TestName] = SPLITTESTDIRS, + base_mod: str = "") -> TestList: + """Return a list of all applicable test modules.""" + testdir = findtestdir(testdir) + tests = [] + for name in os.listdir(testdir): + mod, ext = os.path.splitext(name) + if (not mod.startswith("test_")) or (mod in exclude): + continue + if base_mod: + fullname = f"{base_mod}.{mod}" + else: + fullname = mod + if fullname in split_test_dirs: + subdir = os.path.join(testdir, mod) + if not base_mod: + fullname = f"test.{mod}" + tests.extend(findtests(testdir=subdir, exclude=exclude, + split_test_dirs=split_test_dirs, + base_mod=fullname)) + elif ext in (".py", ""): + tests.append(fullname) + return sorted(tests) + + +def split_test_packages(tests, *, testdir: StrPath | None = None, exclude=(), + split_test_dirs=SPLITTESTDIRS): + testdir = findtestdir(testdir) + splitted = [] + for name in tests: + if name in split_test_dirs: + subdir = os.path.join(testdir, name) + splitted.extend(findtests(testdir=subdir, exclude=exclude, + split_test_dirs=split_test_dirs, + base_mod=name)) + else: + splitted.append(name) + return splitted + + +def _list_cases(suite): + for test in suite: + if isinstance(test, unittest.loader._FailedTest): + continue + if isinstance(test, unittest.TestSuite): + _list_cases(test) + elif isinstance(test, unittest.TestCase): + if support.match_test(test): + print(test.id()) + +def list_cases(tests: TestTuple, *, + match_tests: FilterTuple | None = None, + ignore_tests: FilterTuple | None = None, + test_dir: StrPath | None = None): + support.verbose = False + support.set_match_tests(match_tests, ignore_tests) + + skipped = [] + for test_name in tests: + module_name = abs_module_name(test_name, test_dir) + try: + suite = unittest.defaultTestLoader.loadTestsFromName(module_name) + _list_cases(suite) + except unittest.SkipTest: + skipped.append(test_name) + + if skipped: + sys.stdout.flush() + stderr = sys.stderr + print(file=stderr) + print(count(len(skipped), "test"), "skipped:", file=stderr) + printlist(skipped, file=stderr) diff --git a/Lib/test/libregrtest/logger.py b/Lib/test/libregrtest/logger.py new file mode 100644 index 00000000000000..2f0c4bf1c84b5c --- /dev/null +++ b/Lib/test/libregrtest/logger.py @@ -0,0 +1,85 @@ +import os +import time + +from .results import TestResults +from .runtests import RunTests +from .utils import print_warning, MS_WINDOWS + +if MS_WINDOWS: + from .win_utils import WindowsLoadTracker + + +class Logger: + def __init__(self, results: TestResults, quiet: bool, pgo: bool): + self.start_time = time.perf_counter() + self.test_count_text = '' + self.test_count_width = 3 + self.win_load_tracker: WindowsLoadTracker | None = None + self._results: TestResults = results + self._quiet: bool = quiet + self._pgo: bool = pgo + + def log(self, line: str = '') -> None: + empty = not line + + # add the system load prefix: "load avg: 1.80 " + load_avg = self.get_load_avg() + if load_avg is not None: + line = f"load avg: {load_avg:.2f} {line}" + + # add the timestamp prefix: "0:01:05 " + log_time = time.perf_counter() - self.start_time + + mins, secs = divmod(int(log_time), 60) + hours, mins = divmod(mins, 60) + formatted_log_time = "%d:%02d:%02d" % (hours, mins, secs) + + line = f"{formatted_log_time} {line}" + if empty: + line = line[:-1] + + print(line, flush=True) + + def get_load_avg(self) -> float | None: + if hasattr(os, 'getloadavg'): + return os.getloadavg()[0] + if self.win_load_tracker is not None: + return self.win_load_tracker.getloadavg() + return None + + def display_progress(self, test_index: int, text: str) -> None: + if self._quiet: + return + results = self._results + + # "[ 51/405/1] test_tcl passed" + line = f"{test_index:{self.test_count_width}}{self.test_count_text}" + fails = len(results.bad) + len(results.env_changed) + if fails and not self._pgo: + line = f"{line}/{fails}" + self.log(f"[{line}] {text}") + + def set_tests(self, runtests: RunTests) -> None: + if runtests.forever: + self.test_count_text = '' + self.test_count_width = 3 + else: + self.test_count_text = '/{}'.format(len(runtests.tests)) + self.test_count_width = len(self.test_count_text) - 1 + + def start_load_tracker(self) -> None: + if not MS_WINDOWS: + return + + try: + self.win_load_tracker = WindowsLoadTracker() + except PermissionError as error: + # Standard accounts may not have access to the performance + # counters. + print_warning(f'Failed to create WindowsLoadTracker: {error}') + + def stop_load_tracker(self) -> None: + if self.win_load_tracker is None: + return + self.win_load_tracker.close() + self.win_load_tracker = None diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index 3d290c849b43ed..a9dd08702deb59 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -1,46 +1,26 @@ -import faulthandler -import locale import os -import platform import random import re import sys -import sysconfig -import tempfile import time -import unittest -from test.libregrtest.cmdline import _parse_args -from test.libregrtest.runtest import ( - findtests, split_test_packages, runtest, get_abs_module, is_failed, - PROGRESS_MIN_TIME, - Passed, Failed, EnvChanged, Skipped, ResourceDenied, Interrupted, - ChildError, DidNotRun) -from test.libregrtest.setup import setup_tests -from test.libregrtest.pgo import setup_pgo_tests -from test.libregrtest.utils import (removepy, count, format_duration, - printlist, get_build_info) + from test import support from test.support import os_helper -from test.support import threading_helper - - -# bpo-38203: Maximum delay in seconds to exit Python (call Py_Finalize()). -# Used to protect against threading._shutdown() hang. -# Must be smaller than buildbot "1200 seconds without output" limit. -EXIT_TIMEOUT = 120.0 -# gh-90681: When rerunning tests, we might need to rerun the whole -# class or module suite if some its life-cycle hooks fail. -# Test level hooks are not affected. -_TEST_LIFECYCLE_HOOKS = frozenset(( - 'setUpClass', 'tearDownClass', - 'setUpModule', 'tearDownModule', -)) - -EXITCODE_BAD_TEST = 2 -EXITCODE_INTERRUPTED = 130 -EXITCODE_ENV_CHANGED = 3 -EXITCODE_NO_TESTS_RAN = 4 +from .cmdline import _parse_args, Namespace +from .findtests import findtests, split_test_packages, list_cases +from .logger import Logger +from .result import State +from .runtests import RunTests, HuntRefleak +from .setup import setup_process, setup_test_dir +from .single import run_single_test, PROGRESS_MIN_TIME +from .pgo import setup_pgo_tests +from .results import TestResults +from .utils import ( + StrPath, StrJSON, TestName, TestList, TestTuple, FilterTuple, + strip_py_suffix, count, format_duration, + printlist, get_temp_dir, get_work_dir, exit_timeout, + display_header, cleanup_temp_dir) class Regrtest: @@ -66,260 +46,201 @@ class Regrtest: directly to set the values that would normally be set by flags on the command line. """ - def __init__(self): - # Namespace of command line options - self.ns = None + def __init__(self, ns: Namespace): + # Log verbosity + self.verbose: int = int(ns.verbose) + self.quiet: bool = ns.quiet + self.pgo: bool = ns.pgo + self.pgo_extended: bool = ns.pgo_extended + + # Test results + self.results: TestResults = TestResults() + self.first_state: str | None = None + + # Logger + self.logger = Logger(self.results, self.quiet, self.pgo) + + # Actions + self.want_header: bool = ns.header + self.want_list_tests: bool = ns.list_tests + self.want_list_cases: bool = ns.list_cases + self.want_wait: bool = ns.wait + self.want_cleanup: bool = ns.cleanup + self.want_rerun: bool = ns.rerun + self.want_run_leaks: bool = ns.runleaks + + # Select tests + if ns.match_tests: + self.match_tests: FilterTuple | None = tuple(ns.match_tests) + else: + self.match_tests = None + if ns.ignore_tests: + self.ignore_tests: FilterTuple | None = tuple(ns.ignore_tests) + else: + self.ignore_tests = None + self.exclude: bool = ns.exclude + self.fromfile: StrPath | None = ns.fromfile + self.starting_test: TestName | None = ns.start + self.cmdline_args: TestList = ns.args + + # Workers + if ns.use_mp is None: + num_workers = 0 # run sequentially + elif ns.use_mp <= 0: + num_workers = -1 # use the number of CPUs + else: + num_workers = ns.use_mp + self.num_workers: int = num_workers + self.worker_json: StrJSON | None = ns.worker_json + + # Options to run tests + self.fail_fast: bool = ns.failfast + self.fail_env_changed: bool = ns.fail_env_changed + self.fail_rerun: bool = ns.fail_rerun + self.forever: bool = ns.forever + self.randomize: bool = ns.randomize + self.random_seed: int | None = ns.random_seed + self.output_on_failure: bool = ns.verbose3 + self.timeout: float | None = ns.timeout + if ns.huntrleaks: + warmups, runs, filename = ns.huntrleaks + filename = os.path.abspath(filename) + self.hunt_refleak: HuntRefleak | None = HuntRefleak(warmups, runs, filename) + else: + self.hunt_refleak = None + self.test_dir: StrPath | None = ns.testdir + self.junit_filename: StrPath | None = ns.xmlpath + self.memory_limit: str | None = ns.memlimit + self.gc_threshold: int | None = ns.threshold + self.use_resources: tuple[str, ...] = tuple(ns.use_resources) + if ns.python: + self.python_cmd: tuple[str, ...] | None = tuple(ns.python) + else: + self.python_cmd = None + self.coverage: bool = ns.trace + self.coverage_dir: StrPath | None = ns.coverdir + self.tmp_dir: StrPath | None = ns.tempdir # tests - self.tests = [] - self.selected = [] - - # test results - self.good = [] - self.bad = [] - self.skipped = [] - self.resource_denieds = [] - self.environment_changed = [] - self.run_no_tests = [] - self.need_rerun = [] - self.rerun = [] - self.first_result = None - self.interrupted = False - - # used by --slow - self.test_times = [] - - # used by --coverage, trace.Trace instance - self.tracer = None + self.first_runtests: RunTests | None = None + + # used by --slowest + self.print_slowest: bool = ns.print_slow # used to display the progress bar "[ 3/100]" - self.start_time = time.monotonic() - self.test_count = '' - self.test_count_width = 1 + self.start_time = time.perf_counter() # used by --single - self.next_single_test = None - self.next_single_filename = None - - # used by --junit-xml - self.testsuite_xml = None - - # misc - self.win_load_tracker = None - self.tmp_dir = None - self.worker_test_name = None - - def get_executed(self): - return (set(self.good) | set(self.bad) | set(self.skipped) - | set(self.resource_denieds) | set(self.environment_changed) - | set(self.run_no_tests)) - - def accumulate_result(self, result, rerun=False): - test_name = result.name - - if not isinstance(result, (ChildError, Interrupted)) and not rerun: - self.test_times.append((result.duration_sec, test_name)) - - if isinstance(result, Passed): - self.good.append(test_name) - elif isinstance(result, ResourceDenied): - self.skipped.append(test_name) - self.resource_denieds.append(test_name) - elif isinstance(result, Skipped): - self.skipped.append(test_name) - elif isinstance(result, EnvChanged): - self.environment_changed.append(test_name) - elif isinstance(result, Failed): - if not rerun: - self.bad.append(test_name) - self.need_rerun.append(result) - elif isinstance(result, DidNotRun): - self.run_no_tests.append(test_name) - elif isinstance(result, Interrupted): - self.interrupted = True - else: - raise ValueError("invalid test result: %r" % result) - - if rerun and not isinstance(result, (Failed, Interrupted)): - self.bad.remove(test_name) - - xml_data = result.xml_data - if xml_data: - import xml.etree.ElementTree as ET - for e in xml_data: - try: - self.testsuite_xml.append(ET.fromstring(e)) - except ET.ParseError: - print(xml_data, file=sys.__stderr__) - raise + self.single_test_run: bool = ns.single + self.next_single_test: TestName | None = None + self.next_single_filename: StrPath | None = None def log(self, line=''): - empty = not line - - # add the system load prefix: "load avg: 1.80 " - load_avg = self.getloadavg() - if load_avg is not None: - line = f"load avg: {load_avg:.2f} {line}" - - # add the timestamp prefix: "0:01:05 " - test_time = time.monotonic() - self.start_time - - mins, secs = divmod(int(test_time), 60) - hours, mins = divmod(mins, 60) - test_time = "%d:%02d:%02d" % (hours, mins, secs) - - line = f"{test_time} {line}" - if empty: - line = line[:-1] - - print(line, flush=True) - - def display_progress(self, test_index, text): - if self.ns.quiet: - return - - # "[ 51/405/1] test_tcl passed" - line = f"{test_index:{self.test_count_width}}{self.test_count}" - fails = len(self.bad) + len(self.environment_changed) - if fails and not self.ns.pgo: - line = f"{line}/{fails}" - self.log(f"[{line}] {text}") - - def parse_args(self, kwargs): - ns = _parse_args(sys.argv[1:], **kwargs) - - if ns.xmlpath: - support.junit_xml_list = self.testsuite_xml = [] + self.logger.log(line) - worker_args = ns.worker_args - if worker_args is not None: - from test.libregrtest.runtest_mp import parse_worker_args - ns, test_name = parse_worker_args(ns.worker_args) - ns.worker_args = worker_args - self.worker_test_name = test_name - - # Strip .py extensions. - removepy(ns.args) - - if ns.huntrleaks: - warmup, repetitions, _ = ns.huntrleaks - if warmup < 1 or repetitions < 1: - msg = ("Invalid values for the --huntrleaks/-R parameters. The " - "number of warmups and repetitions must be at least 1 " - "each (1:1).") - print(msg, file=sys.stderr, flush=True) - sys.exit(2) - - if ns.tempdir: - ns.tempdir = os.path.expanduser(ns.tempdir) - - self.ns = ns - - def find_tests(self, tests): - self.tests = tests - - if self.ns.single: + def find_tests(self, tests: TestList | None = None) -> tuple[TestTuple, TestList | None]: + if self.single_test_run: self.next_single_filename = os.path.join(self.tmp_dir, 'pynexttest') try: with open(self.next_single_filename, 'r') as fp: next_test = fp.read().strip() - self.tests = [next_test] + tests = [next_test] except OSError: pass - if self.ns.fromfile: - self.tests = [] + if self.fromfile: + tests = [] # regex to match 'test_builtin' in line: # '0:00:00 [ 4/400] test_builtin -- test_dict took 1 sec' regex = re.compile(r'\btest_[a-zA-Z0-9_]+\b') - with open(os.path.join(os_helper.SAVEDCWD, self.ns.fromfile)) as fp: + with open(os.path.join(os_helper.SAVEDCWD, self.fromfile)) as fp: for line in fp: line = line.split('#', 1)[0] line = line.strip() match = regex.search(line) if match is not None: - self.tests.append(match.group()) + tests.append(match.group()) - removepy(self.tests) + strip_py_suffix(tests) - if self.ns.pgo: + if self.pgo: # add default PGO tests if no tests are specified - setup_pgo_tests(self.ns) + setup_pgo_tests(self.cmdline_args, self.pgo_extended) - exclude = set() - if self.ns.exclude: - for arg in self.ns.args: - exclude.add(arg) - self.ns.args = [] + exclude_tests = set() + if self.exclude: + for arg in self.cmdline_args: + exclude_tests.add(arg) + self.cmdline_args = [] - alltests = findtests(testdir=self.ns.testdir, exclude=exclude) + alltests = findtests(testdir=self.test_dir, + exclude=exclude_tests) - if not self.ns.fromfile: - self.selected = self.tests or self.ns.args - if self.selected: - self.selected = split_test_packages(self.selected) + if not self.fromfile: + selected = tests or self.cmdline_args + if selected: + selected = split_test_packages(selected) else: - self.selected = alltests + selected = alltests else: - self.selected = self.tests + selected = tests - if self.ns.single: - self.selected = self.selected[:1] + if self.single_test_run: + selected = selected[:1] try: - pos = alltests.index(self.selected[0]) + pos = alltests.index(selected[0]) self.next_single_test = alltests[pos + 1] except IndexError: pass # Remove all the selected tests that precede start if it's set. - if self.ns.start: + if self.starting_test: try: - del self.selected[:self.selected.index(self.ns.start)] + del selected[:selected.index(self.starting_test)] except ValueError: - print("Couldn't find starting test (%s), using all tests" - % self.ns.start, file=sys.stderr) - - if self.ns.randomize: - if self.ns.random_seed is None: - self.ns.random_seed = random.randrange(10000000) - random.seed(self.ns.random_seed) - random.shuffle(self.selected) - - def list_tests(self): - for name in self.selected: - print(name) + print(f"Cannot find starting test: {self.starting_test}") + sys.exit(1) - def _list_cases(self, suite): - for test in suite: - if isinstance(test, unittest.loader._FailedTest): - continue - if isinstance(test, unittest.TestSuite): - self._list_cases(test) - elif isinstance(test, unittest.TestCase): - if support.match_test(test): - print(test.id()) - - def list_cases(self): - support.verbose = False - support.set_match_tests(self.ns.match_tests, self.ns.ignore_tests) - - for test_name in self.selected: - abstest = get_abs_module(self.ns, test_name) - try: - suite = unittest.defaultTestLoader.loadTestsFromName(abstest) - self._list_cases(suite) - except unittest.SkipTest: - self.skipped.append(test_name) + if self.randomize: + if self.random_seed is None: + self.random_seed = random.randrange(100_000_000) + random.seed(self.random_seed) + random.shuffle(selected) - if self.skipped: - print(file=sys.stderr) - print(count(len(self.skipped), "test"), "skipped:", file=sys.stderr) - printlist(self.skipped, file=sys.stderr) + return (tuple(selected), tests) - def rerun_failed_tests(self): - self.log() + @staticmethod + def list_tests(tests: TestTuple): + for name in tests: + print(name) - if self.ns.python: + def _rerun_failed_tests(self, runtests: RunTests): + # Configure the runner to re-run tests + if self.num_workers == 0: + # Always run tests in fresh processes to have more deterministic + # initial state. Don't re-run tests in parallel but limit to a + # single worker process to have side effects (on the system load + # and timings) between tests. + self.num_workers = 1 + + tests, match_tests_dict = self.results.prepare_rerun() + + # Re-run failed tests + self.log(f"Re-running {len(tests)} failed tests in verbose mode in subprocesses") + runtests = runtests.copy( + tests=tests, + rerun=True, + verbose=True, + forever=False, + fail_fast=False, + match_tests_dict=match_tests_dict, + output_on_failure=False) + self.logger.set_tests(runtests) + self._run_tests_mp(runtests, self.num_workers) + return runtests + + def rerun_failed_tests(self, runtests: RunTests): + if self.python_cmd: # Temp patch for https://github.com/python/cpython/issues/94052 self.log( "Re-running failed tests is not supported with --python " @@ -327,304 +248,107 @@ def rerun_failed_tests(self): ) return - self.ns.verbose = True - self.ns.failfast = False - self.ns.verbose3 = False - - self.first_result = self.get_tests_result() - - self.log("Re-running failed tests in verbose mode") - rerun_list = list(self.need_rerun) - self.need_rerun.clear() - for result in rerun_list: - test_name = result.name - self.rerun.append(test_name) - - errors = result.errors or [] - failures = result.failures or [] - error_names = [ - self.normalize_test_name(test_full_name, is_error=True) - for (test_full_name, *_) in errors] - failure_names = [ - self.normalize_test_name(test_full_name) - for (test_full_name, *_) in failures] - self.ns.verbose = True - orig_match_tests = self.ns.match_tests - if errors or failures: - if self.ns.match_tests is None: - self.ns.match_tests = [] - self.ns.match_tests.extend(error_names) - self.ns.match_tests.extend(failure_names) - matching = "matching: " + ", ".join(self.ns.match_tests) - self.log(f"Re-running {test_name} in verbose mode ({matching})") - else: - self.log(f"Re-running {test_name} in verbose mode") - result = runtest(self.ns, test_name) - self.ns.match_tests = orig_match_tests + self.first_state = self.get_state() - self.accumulate_result(result, rerun=True) + print() + rerun_runtests = self._rerun_failed_tests(runtests) - if isinstance(result, Interrupted): - break + if self.results.bad: + print(count(len(self.results.bad), 'test'), "failed again:") + printlist(self.results.bad) - if self.bad: - print(count(len(self.bad), 'test'), "failed again:") - printlist(self.bad) - - self.display_result() - - def normalize_test_name(self, test_full_name, *, is_error=False): - short_name = test_full_name.split(" ")[0] - if is_error and short_name in _TEST_LIFECYCLE_HOOKS: - # This means that we have a failure in a life-cycle hook, - # we need to rerun the whole module or class suite. - # Basically the error looks like this: - # ERROR: setUpClass (test.test_reg_ex.RegTest) - # or - # ERROR: setUpModule (test.test_reg_ex) - # So, we need to parse the class / module name. - lpar = test_full_name.index('(') - rpar = test_full_name.index(')') - return test_full_name[lpar + 1: rpar].split('.')[-1] - return short_name - - def display_result(self): + self.display_result(rerun_runtests) + + def display_result(self, runtests): # If running the test suite for PGO then no one cares about results. - if self.ns.pgo: + if runtests.pgo: return + state = self.get_state() print() - print("== Tests result: %s ==" % self.get_tests_result()) - - if self.interrupted: - print("Test suite interrupted by signal SIGINT.") - - omitted = set(self.selected) - self.get_executed() - if omitted: - print() - print(count(len(omitted), "test"), "omitted:") - printlist(omitted) - - if self.good and not self.ns.quiet: - print() - if (not self.bad - and not self.skipped - and not self.interrupted - and len(self.good) > 1): - print("All", end=' ') - print(count(len(self.good), "test"), "OK.") - - if self.ns.print_slow: - self.test_times.sort(reverse=True) - print() - print("10 slowest tests:") - for test_time, test in self.test_times[:10]: - print("- %s: %s" % (test, format_duration(test_time))) - - if self.bad: - print() - print(count(len(self.bad), "test"), "failed:") - printlist(self.bad) - - if self.environment_changed: - print() - print("{} altered the execution environment:".format( - count(len(self.environment_changed), "test"))) - printlist(self.environment_changed) - - if self.skipped and not self.ns.quiet: - print() - print(count(len(self.skipped), "test"), "skipped:") - printlist(self.skipped) - - if self.rerun: - print() - print("%s:" % count(len(self.rerun), "re-run test")) - printlist(self.rerun) - - if self.run_no_tests: - print() - print(count(len(self.run_no_tests), "test"), "run no tests:") - printlist(self.run_no_tests) - - def run_tests_sequential(self): - if self.ns.trace: + print(f"== Tests result: {state} ==") + + self.results.display_result(runtests.tests, + self.quiet, self.print_slowest) + + def run_test(self, test_name: TestName, runtests: RunTests, tracer): + if tracer is not None: + # If we're tracing code coverage, then we don't exit with status + # if on a false return value from main. + cmd = ('result = run_single_test(test_name, runtests)') + namespace = dict(locals()) + tracer.runctx(cmd, globals=globals(), locals=namespace) + result = namespace['result'] + else: + result = run_single_test(test_name, runtests) + + self.results.accumulate_result(result, runtests) + + return result + + def run_tests_sequentially(self, runtests): + if self.coverage: import trace - self.tracer = trace.Trace(trace=False, count=True) + tracer = trace.Trace(trace=False, count=True) + else: + tracer = None save_modules = sys.modules.keys() - msg = "Run tests sequentially" - if self.ns.timeout: - msg += " (timeout: %s)" % format_duration(self.ns.timeout) + jobs = runtests.get_jobs() + if jobs is not None: + tests = count(jobs, 'test') + else: + tests = 'tests' + msg = f"Run {tests} sequentially" + if runtests.timeout: + msg += " (timeout: %s)" % format_duration(runtests.timeout) self.log(msg) previous_test = None - for test_index, test_name in enumerate(self.tests, 1): - start_time = time.monotonic() + tests_iter = runtests.iter_tests() + for test_index, test_name in enumerate(tests_iter, 1): + start_time = time.perf_counter() text = test_name if previous_test: text = '%s -- %s' % (text, previous_test) - self.display_progress(test_index, text) - - if self.tracer: - # If we're tracing code coverage, then we don't exit with status - # if on a false return value from main. - cmd = ('result = runtest(self.ns, test_name); ' - 'self.accumulate_result(result)') - ns = dict(locals()) - self.tracer.runctx(cmd, globals=globals(), locals=ns) - result = ns['result'] - else: - result = runtest(self.ns, test_name) - self.accumulate_result(result) + self.logger.display_progress(test_index, text) - if isinstance(result, Interrupted): - break - - previous_test = str(result) - test_time = time.monotonic() - start_time - if test_time >= PROGRESS_MIN_TIME: - previous_test = "%s in %s" % (previous_test, format_duration(test_time)) - elif isinstance(result, Passed): - # be quiet: say nothing if the test passed shortly - previous_test = None + result = self.run_test(test_name, runtests, tracer) # Unload the newly imported modules (best effort finalization) for module in sys.modules.keys(): if module not in save_modules and module.startswith("test."): support.unload(module) - if self.ns.failfast and is_failed(result, self.ns): + if result.must_stop(self.fail_fast, self.fail_env_changed): break + previous_test = str(result) + test_time = time.perf_counter() - start_time + if test_time >= PROGRESS_MIN_TIME: + previous_test = "%s in %s" % (previous_test, format_duration(test_time)) + elif result.state == State.PASSED: + # be quiet: say nothing if the test passed shortly + previous_test = None + if previous_test: print(previous_test) - def _test_forever(self, tests): - while True: - for test_name in tests: - yield test_name - if self.bad: - return - if self.ns.fail_env_changed and self.environment_changed: - return - - def display_header(self): - # Print basic platform information - print("==", platform.python_implementation(), *sys.version.split()) - print("==", platform.platform(aliased=True), - "%s-endian" % sys.byteorder) - print("== Python build:", ' '.join(get_build_info())) - print("== cwd:", os.getcwd()) - cpu_count = os.cpu_count() - if cpu_count: - print("== CPU count:", cpu_count) - print("== encodings: locale=%s, FS=%s" - % (locale.getencoding(), sys.getfilesystemencoding())) - self.display_sanitizers() - - def display_sanitizers(self): - # This makes it easier to remember what to set in your local - # environment when trying to reproduce a sanitizer failure. - asan = support.check_sanitizer(address=True) - msan = support.check_sanitizer(memory=True) - ubsan = support.check_sanitizer(ub=True) - sanitizers = [] - if asan: - sanitizers.append("address") - if msan: - sanitizers.append("memory") - if ubsan: - sanitizers.append("undefined behavior") - if not sanitizers: - return - - print(f"== sanitizers: {', '.join(sanitizers)}") - for sanitizer, env_var in ( - (asan, "ASAN_OPTIONS"), - (msan, "MSAN_OPTIONS"), - (ubsan, "UBSAN_OPTIONS"), - ): - options= os.environ.get(env_var) - if sanitizer and options is not None: - print(f"== {env_var}={options!r}") - - def no_tests_run(self): - return not any((self.good, self.bad, self.skipped, self.interrupted, - self.environment_changed)) - - def get_tests_result(self): - result = [] - if self.bad: - result.append("FAILURE") - elif self.ns.fail_env_changed and self.environment_changed: - result.append("ENV CHANGED") - elif self.no_tests_run(): - result.append("NO TESTS RAN") - - if self.interrupted: - result.append("INTERRUPTED") - - if not result: - result.append("SUCCESS") - - result = ', '.join(result) - if self.first_result: - result = '%s then %s' % (self.first_result, result) - return result + return tracer - def run_tests(self): - # For a partial run, we do not need to clutter the output. - if (self.ns.header - or not(self.ns.pgo or self.ns.quiet or self.ns.single - or self.tests or self.ns.args)): - self.display_header() - - if self.ns.huntrleaks: - warmup, repetitions, _ = self.ns.huntrleaks - if warmup < 3: - msg = ("WARNING: Running tests with --huntrleaks/-R and less than " - "3 warmup repetitions can give false positives!") - print(msg, file=sys.stdout, flush=True) - - if self.ns.randomize: - print("Using random seed", self.ns.random_seed) - - if self.ns.forever: - self.tests = self._test_forever(list(self.selected)) - self.test_count = '' - self.test_count_width = 3 - else: - self.tests = iter(self.selected) - self.test_count = '/{}'.format(len(self.selected)) - self.test_count_width = len(self.test_count) - 1 - - if self.ns.use_mp: - from test.libregrtest.runtest_mp import run_tests_multiprocess - # If we're on windows and this is the parent runner (not a worker), - # track the load average. - if sys.platform == 'win32' and self.worker_test_name is None: - from test.libregrtest.win_utils import WindowsLoadTracker - - try: - self.win_load_tracker = WindowsLoadTracker() - except PermissionError as error: - # Standard accounts may not have access to the performance - # counters. - print(f'Failed to create WindowsLoadTracker: {error}') + def get_state(self): + state = self.results.get_state(self.fail_env_changed) + if self.first_state: + state = f'{self.first_state} then {state}' + return state - try: - run_tests_multiprocess(self) - finally: - if self.win_load_tracker is not None: - self.win_load_tracker.close() - self.win_load_tracker = None - else: - self.run_tests_sequential() + def _run_tests_mp(self, runtests: RunTests, num_workers: int) -> None: + from .run_workers import RunWorkers + RunWorkers(num_workers, runtests, self.logger, self.results).run() - def finalize(self): + def finalize_tests(self, tracer): if self.next_single_filename: if self.next_single_test: with open(self.next_single_filename, 'w') as fp: @@ -632,195 +356,156 @@ def finalize(self): else: os.unlink(self.next_single_filename) - if self.tracer: - r = self.tracer.results() - r.write_results(show_missing=True, summary=True, - coverdir=self.ns.coverdir) - - print() - duration = time.monotonic() - self.start_time - print("Total duration: %s" % format_duration(duration)) - print("Tests result: %s" % self.get_tests_result()) + if tracer is not None: + results = tracer.results() + results.write_results(show_missing=True, summary=True, + coverdir=self.coverage_dir) - if self.ns.runleaks: + if self.want_run_leaks: os.system("leaks %d" % os.getpid()) - def save_xml_result(self): - if not self.ns.xmlpath and not self.testsuite_xml: - return - - import xml.etree.ElementTree as ET - root = ET.Element("testsuites") - - # Manually count the totals for the overall summary - totals = {'tests': 0, 'errors': 0, 'failures': 0} - for suite in self.testsuite_xml: - root.append(suite) - for k in totals: - try: - totals[k] += int(suite.get(k, 0)) - except ValueError: - pass - - for k, v in totals.items(): - root.set(k, str(v)) - - xmlpath = os.path.join(os_helper.SAVEDCWD, self.ns.xmlpath) - with open(xmlpath, 'wb') as f: - for s in ET.tostringlist(root): - f.write(s) - - def fix_umask(self): - if support.is_emscripten: - # Emscripten has default umask 0o777, which breaks some tests. - # see https://github.com/emscripten-core/emscripten/issues/17269 - old_mask = os.umask(0) - if old_mask == 0o777: - os.umask(0o027) - else: - os.umask(old_mask) - - def set_temp_dir(self): - if self.ns.tempdir: - self.tmp_dir = self.ns.tempdir - - if not self.tmp_dir: - # When tests are run from the Python build directory, it is best practice - # to keep the test files in a subfolder. This eases the cleanup of leftover - # files using the "make distclean" command. - if sysconfig.is_python_build(): - self.tmp_dir = sysconfig.get_config_var('abs_builddir') - if self.tmp_dir is None: - # bpo-30284: On Windows, only srcdir is available. Using - # abs_builddir mostly matters on UNIX when building Python - # out of the source tree, especially when the source tree - # is read only. - self.tmp_dir = sysconfig.get_config_var('srcdir') - self.tmp_dir = os.path.join(self.tmp_dir, 'build') - else: - self.tmp_dir = tempfile.gettempdir() - - self.tmp_dir = os.path.abspath(self.tmp_dir) + if self.junit_filename: + self.results.write_junit(self.junit_filename) - def create_temp_dir(self): - os.makedirs(self.tmp_dir, exist_ok=True) + def display_summary(self): + duration = time.perf_counter() - self.logger.start_time + filtered = bool(self.match_tests) or bool(self.ignore_tests) - # Define a writable temp dir that will be used as cwd while running - # the tests. The name of the dir includes the pid to allow parallel - # testing (see the -j option). - # Emscripten and WASI have stubbed getpid(), Emscripten has only - # milisecond clock resolution. Use randint() instead. - if sys.platform in {"emscripten", "wasi"}: - nounce = random.randint(0, 1_000_000) - else: - nounce = os.getpid() - if self.worker_test_name is not None: - test_cwd = 'test_python_worker_{}'.format(nounce) - else: - test_cwd = 'test_python_{}'.format(nounce) - test_cwd += os_helper.FS_NONASCII - test_cwd = os.path.join(self.tmp_dir, test_cwd) - return test_cwd - - def cleanup(self): - import glob - - path = os.path.join(glob.escape(self.tmp_dir), 'test_python_*') - print("Cleanup %s directory" % self.tmp_dir) - for name in glob.glob(path): - if os.path.isdir(name): - print("Remove directory: %s" % name) - os_helper.rmtree(name) - else: - print("Remove file: %s" % name) - os_helper.unlink(name) + # Total duration + print() + print("Total duration: %s" % format_duration(duration)) - def main(self, tests=None, **kwargs): - self.parse_args(kwargs) + self.results.display_summary(self.first_runtests, filtered) + + # Result + state = self.get_state() + print(f"Result: {state}") + + def create_run_tests(self, tests: TestTuple): + return RunTests( + tests, + fail_fast=self.fail_fast, + fail_env_changed=self.fail_env_changed, + match_tests=self.match_tests, + ignore_tests=self.ignore_tests, + match_tests_dict=None, + rerun=False, + forever=self.forever, + pgo=self.pgo, + pgo_extended=self.pgo_extended, + output_on_failure=self.output_on_failure, + timeout=self.timeout, + verbose=self.verbose, + quiet=self.quiet, + hunt_refleak=self.hunt_refleak, + test_dir=self.test_dir, + use_junit=(self.junit_filename is not None), + memory_limit=self.memory_limit, + gc_threshold=self.gc_threshold, + use_resources=self.use_resources, + python_cmd=self.python_cmd, + randomize=self.randomize, + random_seed=self.random_seed, + json_file=None, + ) + + def _run_tests(self, selected: TestTuple, tests: TestList | None) -> int: + if self.hunt_refleak and self.hunt_refleak.warmups < 3: + msg = ("WARNING: Running tests with --huntrleaks/-R and " + "less than 3 warmup repetitions can give false positives!") + print(msg, file=sys.stdout, flush=True) + + if self.num_workers < 0: + # Use all CPUs + 2 extra worker processes for tests + # that like to sleep + self.num_workers = (os.cpu_count() or 1) + 2 - self.set_temp_dir() + # For a partial run, we do not need to clutter the output. + if (self.want_header + or not(self.pgo or self.quiet or self.single_test_run + or tests or self.cmdline_args)): + display_header() - self.fix_umask() + if self.randomize: + print("Using random seed", self.random_seed) - if self.ns.cleanup: - self.cleanup() - sys.exit(0) + runtests = self.create_run_tests(selected) + self.first_runtests = runtests + self.logger.set_tests(runtests) - test_cwd = self.create_temp_dir() + setup_process() + self.logger.start_load_tracker() try: - # Run the tests in a context manager that temporarily changes the CWD - # to a temporary and writable directory. If it's not possible to - # create or change the CWD, the original CWD will be used. - # The original CWD is available from os_helper.SAVEDCWD. - with os_helper.temp_cwd(test_cwd, quiet=True): - # When using multiprocessing, worker processes will use test_cwd - # as their parent temporary directory. So when the main process - # exit, it removes also subdirectories of worker processes. - self.ns.tempdir = test_cwd - - self._main(tests, kwargs) - except SystemExit as exc: - # bpo-38203: Python can hang at exit in Py_Finalize(), especially - # on threading._shutdown() call: put a timeout - if threading_helper.can_start_thread: - faulthandler.dump_traceback_later(EXIT_TIMEOUT, exit=True) - - sys.exit(exc.code) + if self.num_workers: + self._run_tests_mp(runtests, self.num_workers) + tracer = None + else: + tracer = self.run_tests_sequentially(runtests) - def getloadavg(self): - if self.win_load_tracker is not None: - return self.win_load_tracker.getloadavg() + self.display_result(runtests) - if hasattr(os, 'getloadavg'): - return os.getloadavg()[0] + if self.want_rerun and self.results.need_rerun(): + self.rerun_failed_tests(runtests) + finally: + self.logger.stop_load_tracker() - return None + self.display_summary() + self.finalize_tests(tracer) - def _main(self, tests, kwargs): - if self.worker_test_name is not None: - from test.libregrtest.runtest_mp import run_tests_worker - run_tests_worker(self.ns, self.worker_test_name) + return self.results.get_exitcode(self.fail_env_changed, + self.fail_rerun) - if self.ns.wait: - input("Press any key to continue...") + def run_tests(self, selected: TestTuple, tests: TestList | None) -> int: + os.makedirs(self.tmp_dir, exist_ok=True) + work_dir = get_work_dir(self.tmp_dir) - support.PGO = self.ns.pgo - support.PGO_EXTENDED = self.ns.pgo_extended + # Put a timeout on Python exit + with exit_timeout(): + # Run the tests in a context manager that temporarily changes the + # CWD to a temporary and writable directory. If it's not possible + # to create or change the CWD, the original CWD will be used. + # The original CWD is available from os_helper.SAVEDCWD. + with os_helper.temp_cwd(work_dir, quiet=True): + # When using multiprocessing, worker processes will use + # work_dir as their parent temporary directory. So when the + # main process exit, it removes also subdirectories of worker + # processes. + return self._run_tests(selected, tests) - setup_tests(self.ns) + def main(self, tests: TestList | None = None): + if self.junit_filename and not os.path.isabs(self.junit_filename): + self.junit_filename = os.path.abspath(self.junit_filename) - self.find_tests(tests) + strip_py_suffix(self.cmdline_args) - if self.ns.list_tests: - self.list_tests() - sys.exit(0) + self.tmp_dir = get_temp_dir(self.tmp_dir) - if self.ns.list_cases: - self.list_cases() + if self.want_cleanup: + cleanup_temp_dir(self.tmp_dir) sys.exit(0) - self.run_tests() - self.display_result() - - if self.ns.verbose2 and self.bad: - self.rerun_failed_tests() - - self.finalize() + if self.want_wait: + input("Press any key to continue...") - self.save_xml_result() + setup_test_dir(self.test_dir) + selected, tests = self.find_tests(tests) + + exitcode = 0 + if self.want_list_tests: + self.list_tests(selected) + elif self.want_list_cases: + list_cases(selected, + match_tests=self.match_tests, + ignore_tests=self.ignore_tests, + test_dir=self.test_dir) + else: + exitcode = self.run_tests(selected, tests) - if self.bad: - sys.exit(EXITCODE_BAD_TEST) - if self.interrupted: - sys.exit(EXITCODE_INTERRUPTED) - if self.ns.fail_env_changed and self.environment_changed: - sys.exit(EXITCODE_ENV_CHANGED) - if self.no_tests_run(): - sys.exit(EXITCODE_NO_TESTS_RAN) - sys.exit(0) + sys.exit(exitcode) def main(tests=None, **kwargs): """Run the Python suite.""" - Regrtest().main(tests=tests, **kwargs) + ns = _parse_args(sys.argv[1:], **kwargs) + Regrtest(ns).main(tests=tests) diff --git a/Lib/test/libregrtest/mypy.ini b/Lib/test/libregrtest/mypy.ini new file mode 100644 index 00000000000000..fefc347728a701 --- /dev/null +++ b/Lib/test/libregrtest/mypy.ini @@ -0,0 +1,33 @@ +# Config file for running mypy on libregrtest. +# Run mypy by invoking `mypy --config-file Lib/test/libregrtest/mypy.ini` +# on the command-line from the repo root + +[mypy] +files = Lib/test/libregrtest +explicit_package_bases = True +python_version = 3.11 +platform = linux +pretty = True + +# Enable most stricter settings +enable_error_code = ignore-without-code +strict = True + +# Various stricter settings that we can't yet enable +# Try to enable these in the following order: +disallow_any_generics = False +disallow_incomplete_defs = False +disallow_untyped_calls = False +disallow_untyped_defs = False +check_untyped_defs = False +warn_return_any = False + +disable_error_code = return + +# Enable --strict-optional for these ASAP: +[mypy-Lib.test.libregrtest.main.*,Lib.test.libregrtest.run_workers.*,Lib.test.libregrtest.worker.*,Lib.test.libregrtest.single.*,Lib.test.libregrtest.results.*,Lib.test.libregrtest.utils.*] +strict_optional = False + +# Various internal modules that typeshed deliberately doesn't have stubs for: +[mypy-_abc.*,_opcode.*,_overlapped.*,_testcapi.*,_testinternalcapi.*,test.*] +ignore_missing_imports = True diff --git a/Lib/test/libregrtest/pgo.py b/Lib/test/libregrtest/pgo.py index 42ce5fba7a97c3..cabbba73d5eff5 100644 --- a/Lib/test/libregrtest/pgo.py +++ b/Lib/test/libregrtest/pgo.py @@ -50,7 +50,7 @@ 'test_xml_etree_c', ] -def setup_pgo_tests(ns): - if not ns.args and not ns.pgo_extended: +def setup_pgo_tests(cmdline_args, pgo_extended: bool): + if not cmdline_args and not pgo_extended: # run default set of tests for PGO training - ns.args = PGO_TESTS[:] + cmdline_args[:] = PGO_TESTS[:] diff --git a/Lib/test/libregrtest/refleak.py b/Lib/test/libregrtest/refleak.py index cd11d385591f80..ada1a65b867ee6 100644 --- a/Lib/test/libregrtest/refleak.py +++ b/Lib/test/libregrtest/refleak.py @@ -1,10 +1,13 @@ -import os import sys import warnings from inspect import isabstract +from typing import Any + from test import support from test.support import os_helper -from test.libregrtest.utils import clear_caches + +from .runtests import HuntRefleak +from .utils import clear_caches try: from _abc import _get_dump @@ -19,7 +22,9 @@ def _get_dump(cls): cls._abc_negative_cache, cls._abc_negative_cache_version) -def dash_R(ns, test_name, test_func): +def runtest_refleak(test_name, test_func, + hunt_refleak: HuntRefleak, + quiet: bool): """Run a test multiple times, looking for reference leaks. Returns: @@ -41,6 +46,7 @@ def dash_R(ns, test_name, test_func): fs = warnings.filters[:] ps = copyreg.dispatch_table.copy() pic = sys.path_importer_cache.copy() + zdc: dict[str, Any] | None try: import zipimport except ImportError: @@ -62,9 +68,10 @@ def dash_R(ns, test_name, test_func): def get_pooled_int(value): return int_pool.setdefault(value, value) - nwarmup, ntracked, fname = ns.huntrleaks - fname = os.path.join(os_helper.SAVEDCWD, fname) - repcount = nwarmup + ntracked + warmups = hunt_refleak.warmups + runs = hunt_refleak.runs + filename = hunt_refleak.filename + repcount = warmups + runs # Pre-allocate to ensure that the loop doesn't allocate anything new rep_range = list(range(repcount)) @@ -78,16 +85,17 @@ def get_pooled_int(value): # initialize variables to make pyflakes quiet rc_before = alloc_before = fd_before = interned_before = 0 - if not ns.quiet: + if not quiet: print("beginning", repcount, "repetitions", file=sys.stderr) print(("1234567890"*(repcount//10 + 1))[:repcount], file=sys.stderr, flush=True) + results = None dash_R_cleanup(fs, ps, pic, zdc, abcs) support.gc_collect() for i in rep_range: - test_func() + results = test_func() dash_R_cleanup(fs, ps, pic, zdc, abcs) support.gc_collect() @@ -101,7 +109,7 @@ def get_pooled_int(value): rc_after = gettotalrefcount() - interned_after * 2 fd_after = fd_count() - if not ns.quiet: + if not quiet: print('.', end='', file=sys.stderr, flush=True) rc_deltas[i] = get_pooled_int(rc_after - rc_before) @@ -113,7 +121,7 @@ def get_pooled_int(value): fd_before = fd_after interned_before = interned_after - if not ns.quiet: + if not quiet: print(file=sys.stderr) # These checkers return False on success, True on failure @@ -142,16 +150,16 @@ def check_fd_deltas(deltas): (fd_deltas, 'file descriptors', check_fd_deltas) ]: # ignore warmup runs - deltas = deltas[nwarmup:] + deltas = deltas[warmups:] if checker(deltas): msg = '%s leaked %s %s, sum=%s' % ( test_name, deltas, item_name, sum(deltas)) print(msg, file=sys.stderr, flush=True) - with open(fname, "a", encoding="utf-8") as refrep: + with open(filename, "a", encoding="utf-8") as refrep: print(msg, file=refrep) refrep.flush() failed = True - return failed + return (failed, results) def dash_R_cleanup(fs, ps, pic, zdc, abcs): diff --git a/Lib/test/libregrtest/result.py b/Lib/test/libregrtest/result.py new file mode 100644 index 00000000000000..bf885264657d5c --- /dev/null +++ b/Lib/test/libregrtest/result.py @@ -0,0 +1,184 @@ +import dataclasses +import json +from typing import Any + +from test.support import TestStats + +from .utils import ( + StrJSON, TestName, FilterTuple, + format_duration, normalize_test_name, print_warning) + + +# Avoid enum.Enum to reduce the number of imports when tests are run +class State: + PASSED = "PASSED" + FAILED = "FAILED" + SKIPPED = "SKIPPED" + UNCAUGHT_EXC = "UNCAUGHT_EXC" + REFLEAK = "REFLEAK" + ENV_CHANGED = "ENV_CHANGED" + RESOURCE_DENIED = "RESOURCE_DENIED" + INTERRUPTED = "INTERRUPTED" + MULTIPROCESSING_ERROR = "MULTIPROCESSING_ERROR" + DID_NOT_RUN = "DID_NOT_RUN" + TIMEOUT = "TIMEOUT" + + @staticmethod + def is_failed(state): + return state in { + State.FAILED, + State.UNCAUGHT_EXC, + State.REFLEAK, + State.MULTIPROCESSING_ERROR, + State.TIMEOUT} + + @staticmethod + def has_meaningful_duration(state): + # Consider that the duration is meaningless for these cases. + # For example, if a whole test file is skipped, its duration + # is unlikely to be the duration of executing its tests, + # but just the duration to execute code which skips the test. + return state not in { + State.SKIPPED, + State.RESOURCE_DENIED, + State.INTERRUPTED, + State.MULTIPROCESSING_ERROR, + State.DID_NOT_RUN} + + @staticmethod + def must_stop(state): + return state in { + State.INTERRUPTED, + State.MULTIPROCESSING_ERROR} + + +@dataclasses.dataclass(slots=True) +class TestResult: + test_name: TestName + state: str | None = None + # Test duration in seconds + duration: float | None = None + xml_data: list[str] | None = None + stats: TestStats | None = None + + # errors and failures copied from support.TestFailedWithDetails + errors: list[tuple[str, str]] | None = None + failures: list[tuple[str, str]] | None = None + + def is_failed(self, fail_env_changed: bool) -> bool: + if self.state == State.ENV_CHANGED: + return fail_env_changed + return State.is_failed(self.state) + + def _format_failed(self): + if self.errors and self.failures: + le = len(self.errors) + lf = len(self.failures) + error_s = "error" + ("s" if le > 1 else "") + failure_s = "failure" + ("s" if lf > 1 else "") + return f"{self.test_name} failed ({le} {error_s}, {lf} {failure_s})" + + if self.errors: + le = len(self.errors) + error_s = "error" + ("s" if le > 1 else "") + return f"{self.test_name} failed ({le} {error_s})" + + if self.failures: + lf = len(self.failures) + failure_s = "failure" + ("s" if lf > 1 else "") + return f"{self.test_name} failed ({lf} {failure_s})" + + return f"{self.test_name} failed" + + def __str__(self) -> str: + match self.state: + case State.PASSED: + return f"{self.test_name} passed" + case State.FAILED: + return self._format_failed() + case State.SKIPPED: + return f"{self.test_name} skipped" + case State.UNCAUGHT_EXC: + return f"{self.test_name} failed (uncaught exception)" + case State.REFLEAK: + return f"{self.test_name} failed (reference leak)" + case State.ENV_CHANGED: + return f"{self.test_name} failed (env changed)" + case State.RESOURCE_DENIED: + return f"{self.test_name} skipped (resource denied)" + case State.INTERRUPTED: + return f"{self.test_name} interrupted" + case State.MULTIPROCESSING_ERROR: + return f"{self.test_name} process crashed" + case State.DID_NOT_RUN: + return f"{self.test_name} ran no tests" + case State.TIMEOUT: + return f"{self.test_name} timed out ({format_duration(self.duration)})" + case _: + raise ValueError("unknown result state: {state!r}") + + def has_meaningful_duration(self): + return State.has_meaningful_duration(self.state) + + def set_env_changed(self): + if self.state is None or self.state == State.PASSED: + self.state = State.ENV_CHANGED + + def must_stop(self, fail_fast: bool, fail_env_changed: bool) -> bool: + if State.must_stop(self.state): + return True + if fail_fast and self.is_failed(fail_env_changed): + return True + return False + + def get_rerun_match_tests(self) -> FilterTuple | None: + match_tests = [] + + errors = self.errors or [] + failures = self.failures or [] + for error_list, is_error in ( + (errors, True), + (failures, False), + ): + for full_name, *_ in error_list: + match_name = normalize_test_name(full_name, is_error=is_error) + if match_name is None: + # 'setUpModule (test.test_sys)': don't filter tests + return None + if not match_name: + error_type = "ERROR" if is_error else "FAIL" + print_warning(f"rerun failed to parse {error_type} test name: " + f"{full_name!r}: don't filter tests") + return None + match_tests.append(match_name) + + if not match_tests: + return None + return tuple(match_tests) + + def write_json_into(self, file) -> None: + json.dump(self, file, cls=_EncodeTestResult) + + @staticmethod + def from_json(worker_json: StrJSON) -> 'TestResult': + return json.loads(worker_json, object_hook=_decode_test_result) + + +class _EncodeTestResult(json.JSONEncoder): + def default(self, o: Any) -> dict[str, Any]: + if isinstance(o, TestResult): + result = dataclasses.asdict(o) + result["__test_result__"] = o.__class__.__name__ + return result + else: + return super().default(o) + + +def _decode_test_result(data: dict[str, Any]) -> TestResult | dict[str, Any]: + if "__test_result__" in data: + data.pop('__test_result__') + if data['stats'] is not None: + data['stats'] = TestStats(**data['stats']) + return TestResult(**data) + else: + return data diff --git a/Lib/test/libregrtest/results.py b/Lib/test/libregrtest/results.py new file mode 100644 index 00000000000000..6e7d65880f7347 --- /dev/null +++ b/Lib/test/libregrtest/results.py @@ -0,0 +1,258 @@ +import sys +from test.support import TestStats + +from .runtests import RunTests +from .result import State, TestResult +from .utils import ( + StrPath, TestName, TestTuple, TestList, FilterDict, + printlist, count, format_duration) + + +EXITCODE_BAD_TEST = 2 +EXITCODE_ENV_CHANGED = 3 +EXITCODE_NO_TESTS_RAN = 4 +EXITCODE_RERUN_FAIL = 5 +EXITCODE_INTERRUPTED = 130 + + +class TestResults: + def __init__(self): + self.bad: TestList = [] + self.good: TestList = [] + self.rerun_bad: TestList = [] + self.skipped: TestList = [] + self.resource_denied: TestList = [] + self.env_changed: TestList = [] + self.run_no_tests: TestList = [] + self.rerun: TestList = [] + self.bad_results: list[TestResult] = [] + + self.interrupted: bool = False + self.test_times: list[tuple[float, TestName]] = [] + self.stats = TestStats() + # used by --junit-xml + self.testsuite_xml: list[str] = [] + + def get_executed(self): + return (set(self.good) | set(self.bad) | set(self.skipped) + | set(self.resource_denied) | set(self.env_changed) + | set(self.run_no_tests)) + + def no_tests_run(self): + return not any((self.good, self.bad, self.skipped, self.interrupted, + self.env_changed)) + + def get_state(self, fail_env_changed): + state = [] + if self.bad: + state.append("FAILURE") + elif fail_env_changed and self.env_changed: + state.append("ENV CHANGED") + elif self.no_tests_run(): + state.append("NO TESTS RAN") + + if self.interrupted: + state.append("INTERRUPTED") + if not state: + state.append("SUCCESS") + + return ', '.join(state) + + def get_exitcode(self, fail_env_changed, fail_rerun): + exitcode = 0 + if self.bad: + exitcode = EXITCODE_BAD_TEST + elif self.interrupted: + exitcode = EXITCODE_INTERRUPTED + elif fail_env_changed and self.env_changed: + exitcode = EXITCODE_ENV_CHANGED + elif self.no_tests_run(): + exitcode = EXITCODE_NO_TESTS_RAN + elif fail_rerun and self.rerun: + exitcode = EXITCODE_RERUN_FAIL + return exitcode + + def accumulate_result(self, result: TestResult, runtests: RunTests): + test_name = result.test_name + rerun = runtests.rerun + fail_env_changed = runtests.fail_env_changed + + match result.state: + case State.PASSED: + self.good.append(test_name) + case State.ENV_CHANGED: + self.env_changed.append(test_name) + case State.SKIPPED: + self.skipped.append(test_name) + case State.RESOURCE_DENIED: + self.resource_denied.append(test_name) + case State.INTERRUPTED: + self.interrupted = True + case State.DID_NOT_RUN: + self.run_no_tests.append(test_name) + case _: + if result.is_failed(fail_env_changed): + self.bad.append(test_name) + self.bad_results.append(result) + else: + raise ValueError(f"invalid test state: {result.state!r}") + + if result.has_meaningful_duration() and not rerun: + self.test_times.append((result.duration, test_name)) + if result.stats is not None: + self.stats.accumulate(result.stats) + if rerun: + self.rerun.append(test_name) + + xml_data = result.xml_data + if xml_data: + self.add_junit(xml_data) + + def need_rerun(self): + return bool(self.bad_results) + + def prepare_rerun(self) -> tuple[TestTuple, FilterDict]: + tests: TestList = [] + match_tests_dict = {} + for result in self.bad_results: + tests.append(result.test_name) + + match_tests = result.get_rerun_match_tests() + # ignore empty match list + if match_tests: + match_tests_dict[result.test_name] = match_tests + + # Clear previously failed tests + self.rerun_bad.extend(self.bad) + self.bad.clear() + self.bad_results.clear() + + return (tuple(tests), match_tests_dict) + + def add_junit(self, xml_data: list[str]): + import xml.etree.ElementTree as ET + for e in xml_data: + try: + self.testsuite_xml.append(ET.fromstring(e)) + except ET.ParseError: + print(xml_data, file=sys.__stderr__) + raise + + def write_junit(self, filename: StrPath): + if not self.testsuite_xml: + # Don't create empty XML file + return + + import xml.etree.ElementTree as ET + root = ET.Element("testsuites") + + # Manually count the totals for the overall summary + totals = {'tests': 0, 'errors': 0, 'failures': 0} + for suite in self.testsuite_xml: + root.append(suite) + for k in totals: + try: + totals[k] += int(suite.get(k, 0)) + except ValueError: + pass + + for k, v in totals.items(): + root.set(k, str(v)) + + with open(filename, 'wb') as f: + for s in ET.tostringlist(root): + f.write(s) + + def display_result(self, tests: TestTuple, quiet: bool, print_slowest: bool): + if self.interrupted: + print("Test suite interrupted by signal SIGINT.") + + omitted = set(tests) - self.get_executed() + if omitted: + print() + print(count(len(omitted), "test"), "omitted:") + printlist(omitted) + + if self.good and not quiet: + print() + if (not self.bad + and not self.skipped + and not self.interrupted + and len(self.good) > 1): + print("All", end=' ') + print(count(len(self.good), "test"), "OK.") + + if print_slowest: + self.test_times.sort(reverse=True) + print() + print("10 slowest tests:") + for test_time, test in self.test_times[:10]: + print("- %s: %s" % (test, format_duration(test_time))) + + if self.bad: + print() + print(count(len(self.bad), "test"), "failed:") + printlist(self.bad) + + if self.env_changed: + print() + print("{} altered the execution environment:".format( + count(len(self.env_changed), "test"))) + printlist(self.env_changed) + + if self.skipped and not quiet: + print() + print(count(len(self.skipped), "test"), "skipped:") + printlist(self.skipped) + + if self.resource_denied and not quiet: + print() + print(count(len(self.resource_denied), "test"), "skipped (resource denied):") + printlist(self.resource_denied) + + if self.rerun: + print() + print("%s:" % count(len(self.rerun), "re-run test")) + printlist(self.rerun) + + if self.run_no_tests: + print() + print(count(len(self.run_no_tests), "test"), "run no tests:") + printlist(self.run_no_tests) + + def display_summary(self, first_runtests: RunTests, filtered: bool): + # Total tests + stats = self.stats + text = f'run={stats.tests_run:,}' + if filtered: + text = f"{text} (filtered)" + report = [text] + if stats.failures: + report.append(f'failures={stats.failures:,}') + if stats.skipped: + report.append(f'skipped={stats.skipped:,}') + print(f"Total tests: {' '.join(report)}") + + # Total test files + all_tests = [self.good, self.bad, self.rerun, + self.skipped, + self.env_changed, self.run_no_tests] + run = sum(map(len, all_tests)) + text = f'run={run}' + if not first_runtests.forever: + ntest = len(first_runtests.tests) + text = f"{text}/{ntest}" + if filtered: + text = f"{text} (filtered)" + report = [text] + for name, tests in ( + ('failed', self.bad), + ('env_changed', self.env_changed), + ('skipped', self.skipped), + ('resource_denied', self.resource_denied), + ('rerun', self.rerun), + ('run_no_tests', self.run_no_tests), + ): + if tests: + report.append(f'{name}={len(tests)}') + print(f"Total test files: {' '.join(report)}") diff --git a/Lib/test/libregrtest/run_workers.py b/Lib/test/libregrtest/run_workers.py new file mode 100644 index 00000000000000..89cc50b7c158d2 --- /dev/null +++ b/Lib/test/libregrtest/run_workers.py @@ -0,0 +1,584 @@ +import contextlib +import dataclasses +import faulthandler +import os.path +import queue +import signal +import subprocess +import sys +import tempfile +import threading +import time +import traceback +from typing import Literal, TextIO + +from test import support +from test.support import os_helper + +from .logger import Logger +from .result import TestResult, State +from .results import TestResults +from .runtests import RunTests, JsonFile, JsonFileType +from .single import PROGRESS_MIN_TIME +from .utils import ( + StrPath, TestName, MS_WINDOWS, + format_duration, print_warning, count, plural) +from .worker import create_worker_process, USE_PROCESS_GROUP + +if MS_WINDOWS: + import locale + import msvcrt + + + +# Display the running tests if nothing happened last N seconds +PROGRESS_UPDATE = 30.0 # seconds +assert PROGRESS_UPDATE >= PROGRESS_MIN_TIME + +# Kill the main process after 5 minutes. It is supposed to write an update +# every PROGRESS_UPDATE seconds. Tolerate 5 minutes for Python slowest +# buildbot workers. +MAIN_PROCESS_TIMEOUT = 5 * 60.0 +assert MAIN_PROCESS_TIMEOUT >= PROGRESS_UPDATE + +# Time to wait until a worker completes: should be immediate +JOIN_TIMEOUT = 30.0 # seconds + + +# We do not use a generator so multiple threads can call next(). +class MultiprocessIterator: + + """A thread-safe iterator over tests for multiprocess mode.""" + + def __init__(self, tests_iter): + self.lock = threading.Lock() + self.tests_iter = tests_iter + + def __iter__(self): + return self + + def __next__(self): + with self.lock: + if self.tests_iter is None: + raise StopIteration + return next(self.tests_iter) + + def stop(self): + with self.lock: + self.tests_iter = None + + +@dataclasses.dataclass(slots=True, frozen=True) +class MultiprocessResult: + result: TestResult + # bpo-45410: stderr is written into stdout to keep messages order + worker_stdout: str | None = None + err_msg: str | None = None + + +ExcStr = str +QueueOutput = tuple[Literal[False], MultiprocessResult] | tuple[Literal[True], ExcStr] + + +class ExitThread(Exception): + pass + + +class WorkerError(Exception): + def __init__(self, + test_name: TestName, + err_msg: str | None, + stdout: str | None, + state: str = State.MULTIPROCESSING_ERROR): + result = TestResult(test_name, state=state) + self.mp_result = MultiprocessResult(result, stdout, err_msg) + super().__init__() + + +class WorkerThread(threading.Thread): + def __init__(self, worker_id: int, runner: "RunWorkers") -> None: + super().__init__() + self.worker_id = worker_id + self.runtests = runner.runtests + self.pending = runner.pending + self.output = runner.output + self.timeout = runner.worker_timeout + self.log = runner.log + self.test_name: TestName | None = None + self.start_time: float | None = None + self._popen: subprocess.Popen[str] | None = None + self._killed = False + self._stopped = False + + def __repr__(self) -> str: + info = [f'WorkerThread #{self.worker_id}'] + if self.is_alive(): + info.append("running") + else: + info.append('stopped') + test = self.test_name + if test: + info.append(f'test={test}') + popen = self._popen + if popen is not None: + dt = time.monotonic() - self.start_time + info.extend((f'pid={self._popen.pid}', + f'time={format_duration(dt)}')) + return '<%s>' % ' '.join(info) + + def _kill(self) -> None: + popen = self._popen + if popen is None: + return + + if self._killed: + return + self._killed = True + + if USE_PROCESS_GROUP: + what = f"{self} process group" + else: + what = f"{self}" + + print(f"Kill {what}", file=sys.stderr, flush=True) + try: + if USE_PROCESS_GROUP: + os.killpg(popen.pid, signal.SIGKILL) + else: + popen.kill() + except ProcessLookupError: + # popen.kill(): the process completed, the WorkerThread thread + # read its exit status, but Popen.send_signal() read the returncode + # just before Popen.wait() set returncode. + pass + except OSError as exc: + print_warning(f"Failed to kill {what}: {exc!r}") + + def stop(self) -> None: + # Method called from a different thread to stop this thread + self._stopped = True + self._kill() + + def _run_process(self, runtests: RunTests, output_fd: int, + tmp_dir: StrPath | None = None) -> int | None: + popen = create_worker_process(runtests, output_fd, tmp_dir) + self._popen = popen + self._killed = False + + try: + if self._stopped: + # If kill() has been called before self._popen is set, + # self._popen is still running. Call again kill() + # to ensure that the process is killed. + self._kill() + raise ExitThread + + try: + # gh-94026: stdout+stderr are written to tempfile + retcode = popen.wait(timeout=self.timeout) + assert retcode is not None + return retcode + except subprocess.TimeoutExpired: + if self._stopped: + # kill() has been called: communicate() fails on reading + # closed stdout + raise ExitThread + + # On timeout, kill the process + self._kill() + + # None means TIMEOUT for the caller + retcode = None + # bpo-38207: Don't attempt to call communicate() again: on it + # can hang until all child processes using stdout + # pipes completes. + except OSError: + if self._stopped: + # kill() has been called: communicate() fails + # on reading closed stdout + raise ExitThread + raise + except: + self._kill() + raise + finally: + self._wait_completed() + self._popen = None + + def create_stdout(self, stack: contextlib.ExitStack) -> TextIO: + """Create stdout temporay file (file descriptor).""" + + if MS_WINDOWS: + # gh-95027: When stdout is not a TTY, Python uses the ANSI code + # page for the sys.stdout encoding. If the main process runs in a + # terminal, sys.stdout uses WindowsConsoleIO with UTF-8 encoding. + encoding = locale.getencoding() + else: + encoding = sys.stdout.encoding + + # gh-94026: Write stdout+stderr to a tempfile as workaround for + # non-blocking pipes on Emscripten with NodeJS. + # gh-109425: Use "backslashreplace" error handler: log corrupted + # stdout+stderr, instead of failing with a UnicodeDecodeError and not + # logging stdout+stderr at all. + stdout_file = tempfile.TemporaryFile('w+', + encoding=encoding, + errors='backslashreplace') + stack.enter_context(stdout_file) + return stdout_file + + def create_json_file(self, stack: contextlib.ExitStack) -> tuple[JsonFile, TextIO | None]: + """Create JSON file.""" + + json_file_use_stdout = self.runtests.json_file_use_stdout() + if json_file_use_stdout: + json_file = JsonFile(None, JsonFileType.STDOUT) + json_tmpfile = None + else: + json_tmpfile = tempfile.TemporaryFile('w+', encoding='utf8') + stack.enter_context(json_tmpfile) + + json_fd = json_tmpfile.fileno() + if MS_WINDOWS: + json_handle = msvcrt.get_osfhandle(json_fd) + json_file = JsonFile(json_handle, + JsonFileType.WINDOWS_HANDLE) + else: + json_file = JsonFile(json_fd, JsonFileType.UNIX_FD) + return (json_file, json_tmpfile) + + def create_worker_runtests(self, test_name: TestName, json_file: JsonFile) -> RunTests: + """Create the worker RunTests.""" + + tests = (test_name,) + if self.runtests.rerun: + match_tests = self.runtests.get_match_tests(test_name) + else: + match_tests = None + + kwargs = {} + if match_tests: + kwargs['match_tests'] = match_tests + return self.runtests.copy( + tests=tests, + json_file=json_file, + **kwargs) + + def run_tmp_files(self, worker_runtests: RunTests, + stdout_fd: int) -> tuple[int | None, list[StrPath]]: + # gh-93353: Check for leaked temporary files in the parent process, + # since the deletion of temporary files can happen late during + # Python finalization: too late for libregrtest. + if not support.is_wasi: + # Don't check for leaked temporary files and directories if Python is + # run on WASI. WASI don't pass environment variables like TMPDIR to + # worker processes. + tmp_dir = tempfile.mkdtemp(prefix="test_python_") + tmp_dir = os.path.abspath(tmp_dir) + try: + retcode = self._run_process(worker_runtests, + stdout_fd, tmp_dir) + finally: + tmp_files = os.listdir(tmp_dir) + os_helper.rmtree(tmp_dir) + else: + retcode = self._run_process(worker_runtests, stdout_fd) + tmp_files = [] + + return (retcode, tmp_files) + + def read_stdout(self, stdout_file: TextIO) -> str: + stdout_file.seek(0) + try: + return stdout_file.read().strip() + except Exception as exc: + # gh-101634: Catch UnicodeDecodeError if stdout cannot be + # decoded from encoding + raise WorkerError(self.test_name, + f"Cannot read process stdout: {exc}", None) + + def read_json(self, json_file: JsonFile, json_tmpfile: TextIO | None, + stdout: str) -> tuple[TestResult, str]: + try: + if json_tmpfile is not None: + json_tmpfile.seek(0) + worker_json = json_tmpfile.read() + elif json_file.file_type == JsonFileType.STDOUT: + stdout, _, worker_json = stdout.rpartition("\n") + stdout = stdout.rstrip() + else: + with json_file.open(encoding='utf8') as json_fp: + worker_json = json_fp.read() + except Exception as exc: + # gh-101634: Catch UnicodeDecodeError if stdout cannot be + # decoded from encoding + err_msg = f"Failed to read worker process JSON: {exc}" + raise WorkerError(self.test_name, err_msg, stdout, + state=State.MULTIPROCESSING_ERROR) + + if not worker_json: + raise WorkerError(self.test_name, "empty JSON", stdout) + + try: + result = TestResult.from_json(worker_json) + except Exception as exc: + # gh-101634: Catch UnicodeDecodeError if stdout cannot be + # decoded from encoding + err_msg = f"Failed to parse worker process JSON: {exc}" + raise WorkerError(self.test_name, err_msg, stdout, + state=State.MULTIPROCESSING_ERROR) + + return (result, stdout) + + def _runtest(self, test_name: TestName) -> MultiprocessResult: + with contextlib.ExitStack() as stack: + stdout_file = self.create_stdout(stack) + json_file, json_tmpfile = self.create_json_file(stack) + worker_runtests = self.create_worker_runtests(test_name, json_file) + + retcode, tmp_files = self.run_tmp_files(worker_runtests, + stdout_file.fileno()) + + stdout = self.read_stdout(stdout_file) + + if retcode is None: + raise WorkerError(self.test_name, None, stdout, state=State.TIMEOUT) + if retcode != 0: + raise WorkerError(self.test_name, f"Exit code {retcode}", stdout) + + result, stdout = self.read_json(json_file, json_tmpfile, stdout) + + if tmp_files: + msg = (f'\n\n' + f'Warning -- {test_name} leaked temporary files ' + f'({len(tmp_files)}): {", ".join(sorted(tmp_files))}') + stdout += msg + result.set_env_changed() + + return MultiprocessResult(result, stdout) + + def run(self) -> None: + fail_fast = self.runtests.fail_fast + fail_env_changed = self.runtests.fail_env_changed + while not self._stopped: + try: + try: + test_name = next(self.pending) + except StopIteration: + break + + self.start_time = time.monotonic() + self.test_name = test_name + try: + mp_result = self._runtest(test_name) + except WorkerError as exc: + mp_result = exc.mp_result + finally: + self.test_name = None + mp_result.result.duration = time.monotonic() - self.start_time + self.output.put((False, mp_result)) + + if mp_result.result.must_stop(fail_fast, fail_env_changed): + break + except ExitThread: + break + except BaseException: + self.output.put((True, traceback.format_exc())) + break + + def _wait_completed(self) -> None: + popen = self._popen + + try: + popen.wait(JOIN_TIMEOUT) + except (subprocess.TimeoutExpired, OSError) as exc: + print_warning(f"Failed to wait for {self} completion " + f"(timeout={format_duration(JOIN_TIMEOUT)}): " + f"{exc!r}") + + def wait_stopped(self, start_time: float) -> None: + # bpo-38207: RunWorkers.stop_workers() called self.stop() + # which killed the process. Sometimes, killing the process from the + # main thread does not interrupt popen.communicate() in + # WorkerThread thread. This loop with a timeout is a workaround + # for that. + # + # Moreover, if this method fails to join the thread, it is likely + # that Python will hang at exit while calling threading._shutdown() + # which tries again to join the blocked thread. Regrtest.main() + # uses EXIT_TIMEOUT to workaround this second bug. + while True: + # Write a message every second + self.join(1.0) + if not self.is_alive(): + break + dt = time.monotonic() - start_time + self.log(f"Waiting for {self} thread for {format_duration(dt)}") + if dt > JOIN_TIMEOUT: + print_warning(f"Failed to join {self} in {format_duration(dt)}") + break + + +def get_running(workers: list[WorkerThread]) -> str | None: + running: list[str] = [] + for worker in workers: + test_name = worker.test_name + if not test_name: + continue + dt = time.monotonic() - worker.start_time + if dt >= PROGRESS_MIN_TIME: + text = f'{test_name} ({format_duration(dt)})' + running.append(text) + if not running: + return None + return f"running ({len(running)}): {', '.join(running)}" + + +class RunWorkers: + def __init__(self, num_workers: int, runtests: RunTests, + logger: Logger, results: TestResults) -> None: + self.num_workers = num_workers + self.runtests = runtests + self.log = logger.log + self.display_progress = logger.display_progress + self.results: TestResults = results + + self.output: queue.Queue[QueueOutput] = queue.Queue() + tests_iter = runtests.iter_tests() + self.pending = MultiprocessIterator(tests_iter) + self.timeout = runtests.timeout + if self.timeout is not None: + # Rely on faulthandler to kill a worker process. This timouet is + # when faulthandler fails to kill a worker process. Give a maximum + # of 5 minutes to faulthandler to kill the worker. + self.worker_timeout: float | None = min(self.timeout * 1.5, self.timeout + 5 * 60) + else: + self.worker_timeout = None + self.workers: list[WorkerThread] | None = None + + jobs = self.runtests.get_jobs() + if jobs is not None: + # Don't spawn more threads than the number of jobs: + # these worker threads would never get anything to do. + self.num_workers = min(self.num_workers, jobs) + + def start_workers(self) -> None: + self.workers = [WorkerThread(index, self) + for index in range(1, self.num_workers + 1)] + jobs = self.runtests.get_jobs() + if jobs is not None: + tests = count(jobs, 'test') + else: + tests = 'tests' + nworkers = len(self.workers) + processes = plural(nworkers, "process", "processes") + msg = (f"Run {tests} in parallel using " + f"{nworkers} worker {processes}") + if self.timeout: + msg += (" (timeout: %s, worker timeout: %s)" + % (format_duration(self.timeout), + format_duration(self.worker_timeout))) + self.log(msg) + for worker in self.workers: + worker.start() + + def stop_workers(self) -> None: + start_time = time.monotonic() + for worker in self.workers: + worker.stop() + for worker in self.workers: + worker.wait_stopped(start_time) + + def _get_result(self) -> QueueOutput | None: + pgo = self.runtests.pgo + use_faulthandler = (self.timeout is not None) + + # bpo-46205: check the status of workers every iteration to avoid + # waiting forever on an empty queue. + while any(worker.is_alive() for worker in self.workers): + if use_faulthandler: + faulthandler.dump_traceback_later(MAIN_PROCESS_TIMEOUT, + exit=True) + + # wait for a thread + try: + return self.output.get(timeout=PROGRESS_UPDATE) + except queue.Empty: + pass + + if not pgo: + # display progress + running = get_running(self.workers) + if running: + self.log(running) + + # all worker threads are done: consume pending results + try: + return self.output.get(timeout=0) + except queue.Empty: + return None + + def display_result(self, mp_result: MultiprocessResult) -> None: + result = mp_result.result + pgo = self.runtests.pgo + + text = str(result) + if mp_result.err_msg: + # MULTIPROCESSING_ERROR + text += ' (%s)' % mp_result.err_msg + elif (result.duration >= PROGRESS_MIN_TIME and not pgo): + text += ' (%s)' % format_duration(result.duration) + if not pgo: + running = get_running(self.workers) + if running: + text += f' -- {running}' + self.display_progress(self.test_index, text) + + def _process_result(self, item: QueueOutput) -> TestResult: + """Returns True if test runner must stop.""" + if item[0]: + # Thread got an exception + format_exc = item[1] + print_warning(f"regrtest worker thread failed: {format_exc}") + result = TestResult("", state=State.MULTIPROCESSING_ERROR) + self.results.accumulate_result(result, self.runtests) + return result + + self.test_index += 1 + mp_result = item[1] + result = mp_result.result + self.results.accumulate_result(result, self.runtests) + self.display_result(mp_result) + + if mp_result.worker_stdout: + print(mp_result.worker_stdout, flush=True) + + return result + + def run(self) -> None: + fail_fast = self.runtests.fail_fast + fail_env_changed = self.runtests.fail_env_changed + + self.start_workers() + + self.test_index = 0 + try: + while True: + item = self._get_result() + if item is None: + break + + result = self._process_result(item) + if result.must_stop(fail_fast, fail_env_changed): + break + except KeyboardInterrupt: + print() + self.results.interrupted = True + finally: + if self.timeout is not None: + faulthandler.cancel_dump_traceback_later() + + # Always ensure that all worker processes are no longer + # worker when we exit this function + self.pending.stop() + self.stop_workers() diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py deleted file mode 100644 index fd49927679bdea..00000000000000 --- a/Lib/test/libregrtest/runtest.py +++ /dev/null @@ -1,446 +0,0 @@ -import faulthandler -import functools -import gc -import importlib -import io -import os -import sys -import time -import traceback -import unittest - -from test import support -from test.support import os_helper -from test.support import threading_helper -from test.libregrtest.cmdline import Namespace -from test.libregrtest.save_env import saved_test_environment -from test.libregrtest.utils import clear_caches, format_duration, print_warning - - -class TestResult: - def __init__( - self, - name: str, - duration_sec: float = 0.0, - xml_data: list[str] | None = None, - ) -> None: - self.name = name - self.duration_sec = duration_sec - self.xml_data = xml_data - - def __str__(self) -> str: - return f"{self.name} finished" - - -class Passed(TestResult): - def __str__(self) -> str: - return f"{self.name} passed" - - -class Failed(TestResult): - def __init__( - self, - name: str, - duration_sec: float = 0.0, - xml_data: list[str] | None = None, - errors: list[tuple[str, str]] | None = None, - failures: list[tuple[str, str]] | None = None, - ) -> None: - super().__init__(name, duration_sec=duration_sec, xml_data=xml_data) - self.errors = errors - self.failures = failures - - def __str__(self) -> str: - if self.errors and self.failures: - le = len(self.errors) - lf = len(self.failures) - error_s = "error" + ("s" if le > 1 else "") - failure_s = "failure" + ("s" if lf > 1 else "") - return f"{self.name} failed ({le} {error_s}, {lf} {failure_s})" - - if self.errors: - le = len(self.errors) - error_s = "error" + ("s" if le > 1 else "") - return f"{self.name} failed ({le} {error_s})" - - if self.failures: - lf = len(self.failures) - failure_s = "failure" + ("s" if lf > 1 else "") - return f"{self.name} failed ({lf} {failure_s})" - - return f"{self.name} failed" - - -class UncaughtException(Failed): - def __str__(self) -> str: - return f"{self.name} failed (uncaught exception)" - - -class EnvChanged(Failed): - def __str__(self) -> str: - return f"{self.name} failed (env changed)" - - # Convert Passed to EnvChanged - @staticmethod - def from_passed(other): - return EnvChanged(other.name, other.duration_sec, other.xml_data) - - -class RefLeak(Failed): - def __str__(self) -> str: - return f"{self.name} failed (reference leak)" - - -class Skipped(TestResult): - def __str__(self) -> str: - return f"{self.name} skipped" - - -class ResourceDenied(Skipped): - def __str__(self) -> str: - return f"{self.name} skipped (resource denied)" - - -class Interrupted(TestResult): - def __str__(self) -> str: - return f"{self.name} interrupted" - - -class ChildError(Failed): - def __str__(self) -> str: - return f"{self.name} crashed" - - -class DidNotRun(TestResult): - def __str__(self) -> str: - return f"{self.name} ran no tests" - - -class Timeout(Failed): - def __str__(self) -> str: - return f"{self.name} timed out ({format_duration(self.duration_sec)})" - - -# Minimum duration of a test to display its duration or to mention that -# the test is running in background -PROGRESS_MIN_TIME = 30.0 # seconds - -#If these test directories are encountered recurse into them and treat each -# test_ .py or dir as a separate test module. This can increase parallelism. -# Beware this can't generally be done for any directory with sub-tests as the -# __init__.py may do things which alter what tests are to be run. - -SPLITTESTDIRS = { - "test_asyncio", - "test_concurrent_futures", - "test_multiprocessing_fork", - "test_multiprocessing_forkserver", - "test_multiprocessing_spawn", -} - -# Storage of uncollectable objects -FOUND_GARBAGE = [] - - -def is_failed(result: TestResult, ns: Namespace) -> bool: - if isinstance(result, EnvChanged): - return ns.fail_env_changed - return isinstance(result, Failed) - - -def findtestdir(path=None): - return path or os.path.dirname(os.path.dirname(__file__)) or os.curdir - - -def findtests(*, testdir=None, exclude=(), - split_test_dirs=SPLITTESTDIRS, base_mod=""): - """Return a list of all applicable test modules.""" - testdir = findtestdir(testdir) - tests = [] - for name in os.listdir(testdir): - mod, ext = os.path.splitext(name) - if (not mod.startswith("test_")) or (mod in exclude): - continue - if mod in split_test_dirs: - subdir = os.path.join(testdir, mod) - mod = f"{base_mod or 'test'}.{mod}" - tests.extend(findtests(testdir=subdir, exclude=exclude, - split_test_dirs=split_test_dirs, base_mod=mod)) - elif ext in (".py", ""): - tests.append(f"{base_mod}.{mod}" if base_mod else mod) - return sorted(tests) - - -def split_test_packages(tests, *, testdir=None, exclude=(), - split_test_dirs=SPLITTESTDIRS): - testdir = findtestdir(testdir) - splitted = [] - for name in tests: - if name in split_test_dirs: - subdir = os.path.join(testdir, name) - splitted.extend(findtests(testdir=subdir, exclude=exclude, - split_test_dirs=split_test_dirs, - base_mod=name)) - else: - splitted.append(name) - return splitted - - -def get_abs_module(ns: Namespace, test_name: str) -> str: - if test_name.startswith('test.') or ns.testdir: - return test_name - else: - # Import it from the test package - return 'test.' + test_name - - -def _runtest(ns: Namespace, test_name: str) -> TestResult: - # Handle faulthandler timeout, capture stdout+stderr, XML serialization - # and measure time. - - output_on_failure = ns.verbose3 - - use_timeout = ( - ns.timeout is not None and threading_helper.can_start_thread - ) - if use_timeout: - faulthandler.dump_traceback_later(ns.timeout, exit=True) - - start_time = time.perf_counter() - try: - support.set_match_tests(ns.match_tests, ns.ignore_tests) - support.junit_xml_list = xml_list = [] if ns.xmlpath else None - if ns.failfast: - support.failfast = True - - if output_on_failure: - support.verbose = True - - stream = io.StringIO() - orig_stdout = sys.stdout - orig_stderr = sys.stderr - print_warning = support.print_warning - orig_print_warnings_stderr = print_warning.orig_stderr - - output = None - try: - sys.stdout = stream - sys.stderr = stream - # print_warning() writes into the temporary stream to preserve - # messages order. If support.environment_altered becomes true, - # warnings will be written to sys.stderr below. - print_warning.orig_stderr = stream - - result = _runtest_inner(ns, test_name, - display_failure=False) - if not isinstance(result, Passed): - output = stream.getvalue() - finally: - sys.stdout = orig_stdout - sys.stderr = orig_stderr - print_warning.orig_stderr = orig_print_warnings_stderr - - if output is not None: - sys.stderr.write(output) - sys.stderr.flush() - else: - # Tell tests to be moderately quiet - support.verbose = ns.verbose - - result = _runtest_inner(ns, test_name, - display_failure=not ns.verbose) - - if xml_list: - import xml.etree.ElementTree as ET - result.xml_data = [ - ET.tostring(x).decode('us-ascii') - for x in xml_list - ] - - result.duration_sec = time.perf_counter() - start_time - return result - finally: - if use_timeout: - faulthandler.cancel_dump_traceback_later() - support.junit_xml_list = None - - -def runtest(ns: Namespace, test_name: str) -> TestResult: - """Run a single test. - - ns -- regrtest namespace of options - test_name -- the name of the test - - Returns a TestResult sub-class depending on the kind of result received. - - If ns.xmlpath is not None, xml_data is a list containing each - generated testsuite element. - """ - try: - return _runtest(ns, test_name) - except: - if not ns.pgo: - msg = traceback.format_exc() - print(f"test {test_name} crashed -- {msg}", - file=sys.stderr, flush=True) - return Failed(test_name) - - -def _test_module(the_module): - loader = unittest.TestLoader() - tests = loader.loadTestsFromModule(the_module) - for error in loader.errors: - print(error, file=sys.stderr) - if loader.errors: - raise Exception("errors while loading tests") - support.run_unittest(tests) - - -def save_env(ns: Namespace, test_name: str): - return saved_test_environment(test_name, ns.verbose, ns.quiet, pgo=ns.pgo) - - -def _runtest_inner2(ns: Namespace, test_name: str) -> bool: - # Load the test function, run the test function, handle huntrleaks - # to detect leaks. - - abstest = get_abs_module(ns, test_name) - - # remove the module from sys.module to reload it if it was already imported - try: - del sys.modules[abstest] - except KeyError: - pass - - the_module = importlib.import_module(abstest) - - if ns.huntrleaks: - from test.libregrtest.refleak import dash_R - - # If the test has a test_main, that will run the appropriate - # tests. If not, use normal unittest test loading. - test_runner = getattr(the_module, "test_main", None) - if test_runner is None: - test_runner = functools.partial(_test_module, the_module) - - try: - with save_env(ns, test_name): - if ns.huntrleaks: - # Return True if the test leaked references - refleak = dash_R(ns, test_name, test_runner) - else: - test_runner() - refleak = False - finally: - # First kill any dangling references to open files etc. - # This can also issue some ResourceWarnings which would otherwise get - # triggered during the following test run, and possibly produce - # failures. - support.gc_collect() - - cleanup_test_droppings(test_name, ns.verbose) - - if gc.garbage: - support.environment_altered = True - print_warning(f"{test_name} created {len(gc.garbage)} " - f"uncollectable object(s).") - - # move the uncollectable objects somewhere, - # so we don't see them again - FOUND_GARBAGE.extend(gc.garbage) - gc.garbage.clear() - - support.reap_children() - - return refleak - - -def _runtest_inner( - ns: Namespace, test_name: str, display_failure: bool = True -) -> TestResult: - # Detect environment changes, handle exceptions. - - # Reset the environment_altered flag to detect if a test altered - # the environment - support.environment_altered = False - - if ns.pgo: - display_failure = False - - try: - clear_caches() - support.gc_collect() - - with save_env(ns, test_name): - refleak = _runtest_inner2(ns, test_name) - except support.ResourceDenied as msg: - if not ns.quiet and not ns.pgo: - print(f"{test_name} skipped -- {msg}", flush=True) - return ResourceDenied(test_name) - except unittest.SkipTest as msg: - if not ns.quiet and not ns.pgo: - print(f"{test_name} skipped -- {msg}", flush=True) - return Skipped(test_name) - except support.TestFailedWithDetails as exc: - msg = f"test {test_name} failed" - if display_failure: - msg = f"{msg} -- {exc}" - print(msg, file=sys.stderr, flush=True) - return Failed(test_name, errors=exc.errors, failures=exc.failures) - except support.TestFailed as exc: - msg = f"test {test_name} failed" - if display_failure: - msg = f"{msg} -- {exc}" - print(msg, file=sys.stderr, flush=True) - return Failed(test_name) - except support.TestDidNotRun: - return DidNotRun(test_name) - except KeyboardInterrupt: - print() - return Interrupted(test_name) - except: - if not ns.pgo: - msg = traceback.format_exc() - print(f"test {test_name} crashed -- {msg}", - file=sys.stderr, flush=True) - return UncaughtException(test_name) - - if refleak: - return RefLeak(test_name) - if support.environment_altered: - return EnvChanged(test_name) - return Passed(test_name) - - -def cleanup_test_droppings(test_name: str, verbose: int) -> None: - # Try to clean up junk commonly left behind. While tests shouldn't leave - # any files or directories behind, when a test fails that can be tedious - # for it to arrange. The consequences can be especially nasty on Windows, - # since if a test leaves a file open, it cannot be deleted by name (while - # there's nothing we can do about that here either, we can display the - # name of the offending test, which is a real help). - for name in (os_helper.TESTFN,): - if not os.path.exists(name): - continue - - if os.path.isdir(name): - import shutil - kind, nuker = "directory", shutil.rmtree - elif os.path.isfile(name): - kind, nuker = "file", os.unlink - else: - raise RuntimeError(f"os.path says {name!r} exists but is neither " - f"directory nor file") - - if verbose: - print_warning(f"{test_name} left behind {kind} {name!r}") - support.environment_altered = True - - try: - import stat - # fix possible permissions problems that might prevent cleanup - os.chmod(name, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) - nuker(name) - except Exception as exc: - print_warning(f"{test_name} left behind {kind} {name!r} " - f"and it couldn't be removed: {exc}") diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py deleted file mode 100644 index 62e6c6df36518c..00000000000000 --- a/Lib/test/libregrtest/runtest_mp.py +++ /dev/null @@ -1,572 +0,0 @@ -import faulthandler -import json -import os.path -import queue -import signal -import subprocess -import sys -import tempfile -import threading -import time -import traceback -from typing import NamedTuple, NoReturn, Literal, Any, TextIO - -from test import support -from test.support import os_helper - -from test.libregrtest.cmdline import Namespace -from test.libregrtest.main import Regrtest -from test.libregrtest.runtest import ( - runtest, is_failed, TestResult, Interrupted, Timeout, ChildError, - PROGRESS_MIN_TIME, Passed, EnvChanged) -from test.libregrtest.setup import setup_tests -from test.libregrtest.utils import format_duration, print_warning - -if sys.platform == 'win32': - import locale - - -# Display the running tests if nothing happened last N seconds -PROGRESS_UPDATE = 30.0 # seconds -assert PROGRESS_UPDATE >= PROGRESS_MIN_TIME - -# Kill the main process after 5 minutes. It is supposed to write an update -# every PROGRESS_UPDATE seconds. Tolerate 5 minutes for Python slowest -# buildbot workers. -MAIN_PROCESS_TIMEOUT = 5 * 60.0 -assert MAIN_PROCESS_TIMEOUT >= PROGRESS_UPDATE - -# Time to wait until a worker completes: should be immediate -JOIN_TIMEOUT = 30.0 # seconds - -USE_PROCESS_GROUP = (hasattr(os, "setsid") and hasattr(os, "killpg")) - - -def must_stop(result: TestResult, ns: Namespace) -> bool: - if isinstance(result, Interrupted): - return True - if ns.failfast and is_failed(result, ns): - return True - return False - - -def parse_worker_args(worker_args) -> tuple[Namespace, str]: - ns_dict, test_name = json.loads(worker_args) - ns = Namespace(**ns_dict) - return (ns, test_name) - - -def run_test_in_subprocess(testname: str, ns: Namespace, tmp_dir: str, stdout_fh: TextIO) -> subprocess.Popen: - ns_dict = vars(ns) - worker_args = (ns_dict, testname) - worker_args = json.dumps(worker_args) - if ns.python is not None: - executable = ns.python - else: - executable = [sys.executable] - cmd = [*executable, *support.args_from_interpreter_flags(), - '-u', # Unbuffered stdout and stderr - '-m', 'test.regrtest', - '--worker-args', worker_args] - - env = dict(os.environ) - if tmp_dir is not None: - env['TMPDIR'] = tmp_dir - env['TEMP'] = tmp_dir - env['TMP'] = tmp_dir - - # Running the child from the same working directory as regrtest's original - # invocation ensures that TEMPDIR for the child is the same when - # sysconfig.is_python_build() is true. See issue 15300. - kw = dict( - env=env, - stdout=stdout_fh, - # bpo-45410: Write stderr into stdout to keep messages order - stderr=stdout_fh, - text=True, - close_fds=(os.name != 'nt'), - cwd=os_helper.SAVEDCWD, - ) - if USE_PROCESS_GROUP: - kw['start_new_session'] = True - return subprocess.Popen(cmd, **kw) - - -def run_tests_worker(ns: Namespace, test_name: str) -> NoReturn: - setup_tests(ns) - - result = runtest(ns, test_name) - - print() # Force a newline (just in case) - - # Serialize TestResult as dict in JSON - print(json.dumps(result, cls=EncodeTestResult), flush=True) - sys.exit(0) - - -# We do not use a generator so multiple threads can call next(). -class MultiprocessIterator: - - """A thread-safe iterator over tests for multiprocess mode.""" - - def __init__(self, tests_iter): - self.lock = threading.Lock() - self.tests_iter = tests_iter - - def __iter__(self): - return self - - def __next__(self): - with self.lock: - if self.tests_iter is None: - raise StopIteration - return next(self.tests_iter) - - def stop(self): - with self.lock: - self.tests_iter = None - - -class MultiprocessResult(NamedTuple): - result: TestResult - # bpo-45410: stderr is written into stdout to keep messages order - stdout: str - error_msg: str - - -ExcStr = str -QueueOutput = tuple[Literal[False], MultiprocessResult] | tuple[Literal[True], ExcStr] - - -class ExitThread(Exception): - pass - - -class TestWorkerProcess(threading.Thread): - def __init__(self, worker_id: int, runner: "MultiprocessTestRunner") -> None: - super().__init__() - self.worker_id = worker_id - self.pending = runner.pending - self.output = runner.output - self.ns = runner.ns - self.timeout = runner.worker_timeout - self.regrtest = runner.regrtest - self.current_test_name = None - self.start_time = None - self._popen = None - self._killed = False - self._stopped = False - - def __repr__(self) -> str: - info = [f'TestWorkerProcess #{self.worker_id}'] - if self.is_alive(): - info.append("running") - else: - info.append('stopped') - test = self.current_test_name - if test: - info.append(f'test={test}') - popen = self._popen - if popen is not None: - dt = time.monotonic() - self.start_time - info.extend((f'pid={self._popen.pid}', - f'time={format_duration(dt)}')) - return '<%s>' % ' '.join(info) - - def _kill(self) -> None: - popen = self._popen - if popen is None: - return - - if self._killed: - return - self._killed = True - - if USE_PROCESS_GROUP: - what = f"{self} process group" - else: - what = f"{self}" - - print(f"Kill {what}", file=sys.stderr, flush=True) - try: - if USE_PROCESS_GROUP: - os.killpg(popen.pid, signal.SIGKILL) - else: - popen.kill() - except ProcessLookupError: - # popen.kill(): the process completed, the TestWorkerProcess thread - # read its exit status, but Popen.send_signal() read the returncode - # just before Popen.wait() set returncode. - pass - except OSError as exc: - print_warning(f"Failed to kill {what}: {exc!r}") - - def stop(self) -> None: - # Method called from a different thread to stop this thread - self._stopped = True - self._kill() - - def mp_result_error( - self, - test_result: TestResult, - stdout: str = '', - err_msg=None - ) -> MultiprocessResult: - test_result.duration_sec = time.monotonic() - self.start_time - return MultiprocessResult(test_result, stdout, err_msg) - - def _run_process(self, test_name: str, tmp_dir: str, stdout_fh: TextIO) -> int: - self.start_time = time.monotonic() - - self.current_test_name = test_name - try: - popen = run_test_in_subprocess(test_name, self.ns, tmp_dir, stdout_fh) - - self._killed = False - self._popen = popen - except: - self.current_test_name = None - raise - - try: - if self._stopped: - # If kill() has been called before self._popen is set, - # self._popen is still running. Call again kill() - # to ensure that the process is killed. - self._kill() - raise ExitThread - - try: - # gh-94026: stdout+stderr are written to tempfile - retcode = popen.wait(timeout=self.timeout) - assert retcode is not None - return retcode - except subprocess.TimeoutExpired: - if self._stopped: - # kill() has been called: communicate() fails on reading - # closed stdout - raise ExitThread - - # On timeout, kill the process - self._kill() - - # None means TIMEOUT for the caller - retcode = None - # bpo-38207: Don't attempt to call communicate() again: on it - # can hang until all child processes using stdout - # pipes completes. - except OSError: - if self._stopped: - # kill() has been called: communicate() fails - # on reading closed stdout - raise ExitThread - raise - except: - self._kill() - raise - finally: - self._wait_completed() - self._popen = None - self.current_test_name = None - - def _runtest(self, test_name: str) -> MultiprocessResult: - if sys.platform == 'win32': - # gh-95027: When stdout is not a TTY, Python uses the ANSI code - # page for the sys.stdout encoding. If the main process runs in a - # terminal, sys.stdout uses WindowsConsoleIO with UTF-8 encoding. - encoding = locale.getencoding() - else: - encoding = sys.stdout.encoding - - # gh-94026: Write stdout+stderr to a tempfile as workaround for - # non-blocking pipes on Emscripten with NodeJS. - with tempfile.TemporaryFile('w+', encoding=encoding) as stdout_fh: - # gh-93353: Check for leaked temporary files in the parent process, - # since the deletion of temporary files can happen late during - # Python finalization: too late for libregrtest. - if not support.is_wasi: - # Don't check for leaked temporary files and directories if Python is - # run on WASI. WASI don't pass environment variables like TMPDIR to - # worker processes. - tmp_dir = tempfile.mkdtemp(prefix="test_python_") - tmp_dir = os.path.abspath(tmp_dir) - try: - retcode = self._run_process(test_name, tmp_dir, stdout_fh) - finally: - tmp_files = os.listdir(tmp_dir) - os_helper.rmtree(tmp_dir) - else: - retcode = self._run_process(test_name, None, stdout_fh) - tmp_files = () - stdout_fh.seek(0) - - try: - stdout = stdout_fh.read().strip() - except Exception as exc: - # gh-101634: Catch UnicodeDecodeError if stdout cannot be - # decoded from encoding - err_msg = f"Cannot read process stdout: {exc}" - return self.mp_result_error(ChildError(test_name), '', err_msg) - - if retcode is None: - return self.mp_result_error(Timeout(test_name), stdout) - - err_msg = None - if retcode != 0: - err_msg = "Exit code %s" % retcode - else: - stdout, _, result = stdout.rpartition("\n") - stdout = stdout.rstrip() - if not result: - err_msg = "Failed to parse worker stdout" - else: - try: - # deserialize run_tests_worker() output - result = json.loads(result, object_hook=decode_test_result) - except Exception as exc: - err_msg = "Failed to parse worker JSON: %s" % exc - - if err_msg is not None: - return self.mp_result_error(ChildError(test_name), stdout, err_msg) - - if tmp_files: - msg = (f'\n\n' - f'Warning -- {test_name} leaked temporary files ' - f'({len(tmp_files)}): {", ".join(sorted(tmp_files))}') - stdout += msg - if isinstance(result, Passed): - result = EnvChanged.from_passed(result) - - return MultiprocessResult(result, stdout, err_msg) - - def run(self) -> None: - while not self._stopped: - try: - try: - test_name = next(self.pending) - except StopIteration: - break - - mp_result = self._runtest(test_name) - self.output.put((False, mp_result)) - - if must_stop(mp_result.result, self.ns): - break - except ExitThread: - break - except BaseException: - self.output.put((True, traceback.format_exc())) - break - - def _wait_completed(self) -> None: - popen = self._popen - - try: - popen.wait(JOIN_TIMEOUT) - except (subprocess.TimeoutExpired, OSError) as exc: - print_warning(f"Failed to wait for {self} completion " - f"(timeout={format_duration(JOIN_TIMEOUT)}): " - f"{exc!r}") - - def wait_stopped(self, start_time: float) -> None: - # bpo-38207: MultiprocessTestRunner.stop_workers() called self.stop() - # which killed the process. Sometimes, killing the process from the - # main thread does not interrupt popen.communicate() in - # TestWorkerProcess thread. This loop with a timeout is a workaround - # for that. - # - # Moreover, if this method fails to join the thread, it is likely - # that Python will hang at exit while calling threading._shutdown() - # which tries again to join the blocked thread. Regrtest.main() - # uses EXIT_TIMEOUT to workaround this second bug. - while True: - # Write a message every second - self.join(1.0) - if not self.is_alive(): - break - dt = time.monotonic() - start_time - self.regrtest.log(f"Waiting for {self} thread " - f"for {format_duration(dt)}") - if dt > JOIN_TIMEOUT: - print_warning(f"Failed to join {self} in {format_duration(dt)}") - break - - -def get_running(workers: list[TestWorkerProcess]) -> list[TestWorkerProcess]: - running = [] - for worker in workers: - current_test_name = worker.current_test_name - if not current_test_name: - continue - dt = time.monotonic() - worker.start_time - if dt >= PROGRESS_MIN_TIME: - text = '%s (%s)' % (current_test_name, format_duration(dt)) - running.append(text) - return running - - -class MultiprocessTestRunner: - def __init__(self, regrtest: Regrtest) -> None: - self.regrtest = regrtest - self.log = self.regrtest.log - self.ns = regrtest.ns - self.output: queue.Queue[QueueOutput] = queue.Queue() - self.pending = MultiprocessIterator(self.regrtest.tests) - if self.ns.timeout is not None: - # Rely on faulthandler to kill a worker process. This timouet is - # when faulthandler fails to kill a worker process. Give a maximum - # of 5 minutes to faulthandler to kill the worker. - self.worker_timeout = min(self.ns.timeout * 1.5, - self.ns.timeout + 5 * 60) - else: - self.worker_timeout = None - self.workers = None - - def start_workers(self) -> None: - self.workers = [TestWorkerProcess(index, self) - for index in range(1, self.ns.use_mp + 1)] - msg = f"Run tests in parallel using {len(self.workers)} child processes" - if self.ns.timeout: - msg += (" (timeout: %s, worker timeout: %s)" - % (format_duration(self.ns.timeout), - format_duration(self.worker_timeout))) - self.log(msg) - for worker in self.workers: - worker.start() - - def stop_workers(self) -> None: - start_time = time.monotonic() - for worker in self.workers: - worker.stop() - for worker in self.workers: - worker.wait_stopped(start_time) - - def _get_result(self) -> QueueOutput | None: - use_faulthandler = (self.ns.timeout is not None) - timeout = PROGRESS_UPDATE - - # bpo-46205: check the status of workers every iteration to avoid - # waiting forever on an empty queue. - while any(worker.is_alive() for worker in self.workers): - if use_faulthandler: - faulthandler.dump_traceback_later(MAIN_PROCESS_TIMEOUT, - exit=True) - - # wait for a thread - try: - return self.output.get(timeout=timeout) - except queue.Empty: - pass - - # display progress - running = get_running(self.workers) - if running and not self.ns.pgo: - self.log('running: %s' % ', '.join(running)) - - # all worker threads are done: consume pending results - try: - return self.output.get(timeout=0) - except queue.Empty: - return None - - def display_result(self, mp_result: MultiprocessResult) -> None: - result = mp_result.result - - text = str(result) - if mp_result.error_msg is not None: - # CHILD_ERROR - text += ' (%s)' % mp_result.error_msg - elif (result.duration_sec >= PROGRESS_MIN_TIME and not self.ns.pgo): - text += ' (%s)' % format_duration(result.duration_sec) - running = get_running(self.workers) - if running and not self.ns.pgo: - text += ' -- running: %s' % ', '.join(running) - self.regrtest.display_progress(self.test_index, text) - - def _process_result(self, item: QueueOutput) -> bool: - """Returns True if test runner must stop.""" - if item[0]: - # Thread got an exception - format_exc = item[1] - print_warning(f"regrtest worker thread failed: {format_exc}") - result = ChildError("") - self.regrtest.accumulate_result(result) - return True - - self.test_index += 1 - mp_result = item[1] - self.regrtest.accumulate_result(mp_result.result) - self.display_result(mp_result) - - if mp_result.stdout: - print(mp_result.stdout, flush=True) - - if must_stop(mp_result.result, self.ns): - return True - - return False - - def run_tests(self) -> None: - self.start_workers() - - self.test_index = 0 - try: - while True: - item = self._get_result() - if item is None: - break - - stop = self._process_result(item) - if stop: - break - except KeyboardInterrupt: - print() - self.regrtest.interrupted = True - finally: - if self.ns.timeout is not None: - faulthandler.cancel_dump_traceback_later() - - # Always ensure that all worker processes are no longer - # worker when we exit this function - self.pending.stop() - self.stop_workers() - - -def run_tests_multiprocess(regrtest: Regrtest) -> None: - MultiprocessTestRunner(regrtest).run_tests() - - -class EncodeTestResult(json.JSONEncoder): - """Encode a TestResult (sub)class object into a JSON dict.""" - - def default(self, o: Any) -> dict[str, Any]: - if isinstance(o, TestResult): - result = vars(o) - result["__test_result__"] = o.__class__.__name__ - return result - - return super().default(o) - - -def decode_test_result(d: dict[str, Any]) -> TestResult | dict[str, Any]: - """Decode a TestResult (sub)class object from a JSON dict.""" - - if "__test_result__" not in d: - return d - - cls_name = d.pop("__test_result__") - for cls in get_all_test_result_classes(): - if cls.__name__ == cls_name: - return cls(**d) - - -def get_all_test_result_classes() -> set[type[TestResult]]: - prev_count = 0 - classes = {TestResult} - while len(classes) > prev_count: - prev_count = len(classes) - to_add = [] - for cls in classes: - to_add.extend(cls.__subclasses__()) - classes.update(to_add) - return classes diff --git a/Lib/test/libregrtest/runtests.py b/Lib/test/libregrtest/runtests.py new file mode 100644 index 00000000000000..4da312db4cb02e --- /dev/null +++ b/Lib/test/libregrtest/runtests.py @@ -0,0 +1,162 @@ +import contextlib +import dataclasses +import json +import os +import subprocess +from typing import Any + +from test import support + +from .utils import ( + StrPath, StrJSON, TestTuple, FilterTuple, FilterDict) + + +class JsonFileType: + UNIX_FD = "UNIX_FD" + WINDOWS_HANDLE = "WINDOWS_HANDLE" + STDOUT = "STDOUT" + + +@dataclasses.dataclass(slots=True, frozen=True) +class JsonFile: + # file type depends on file_type: + # - UNIX_FD: file descriptor (int) + # - WINDOWS_HANDLE: handle (int) + # - STDOUT: use process stdout (None) + file: int | None + file_type: str + + def configure_subprocess(self, popen_kwargs: dict) -> None: + match self.file_type: + case JsonFileType.UNIX_FD: + # Unix file descriptor + popen_kwargs['pass_fds'] = [self.file] + case JsonFileType.WINDOWS_HANDLE: + # Windows handle + startupinfo = subprocess.STARTUPINFO() + startupinfo.lpAttributeList = {"handle_list": [self.file]} + popen_kwargs['startupinfo'] = startupinfo + + @contextlib.contextmanager + def inherit_subprocess(self): + if self.file_type == JsonFileType.WINDOWS_HANDLE: + os.set_handle_inheritable(self.file, True) + try: + yield + finally: + os.set_handle_inheritable(self.file, False) + else: + yield + + def open(self, mode='r', *, encoding): + if self.file_type == JsonFileType.STDOUT: + raise ValueError("for STDOUT file type, just use sys.stdout") + + file = self.file + if self.file_type == JsonFileType.WINDOWS_HANDLE: + import msvcrt + # Create a file descriptor from the handle + file = msvcrt.open_osfhandle(file, os.O_WRONLY) + return open(file, mode, encoding=encoding) + + +@dataclasses.dataclass(slots=True, frozen=True) +class HuntRefleak: + warmups: int + runs: int + filename: StrPath + + +@dataclasses.dataclass(slots=True, frozen=True) +class RunTests: + tests: TestTuple + fail_fast: bool + fail_env_changed: bool + match_tests: FilterTuple | None + ignore_tests: FilterTuple | None + match_tests_dict: FilterDict | None + rerun: bool + forever: bool + pgo: bool + pgo_extended: bool + output_on_failure: bool + timeout: float | None + verbose: int + quiet: bool + hunt_refleak: HuntRefleak | None + test_dir: StrPath | None + use_junit: bool + memory_limit: str | None + gc_threshold: int | None + use_resources: tuple[str, ...] + python_cmd: tuple[str, ...] | None + randomize: bool + random_seed: int | None + json_file: JsonFile | None + + def copy(self, **override): + state = dataclasses.asdict(self) + state.update(override) + return RunTests(**state) + + def get_match_tests(self, test_name) -> FilterTuple | None: + if self.match_tests_dict is not None: + return self.match_tests_dict.get(test_name, None) + else: + return None + + def get_jobs(self): + # Number of run_single_test() calls needed to run all tests. + # None means that there is not bound limit (--forever option). + if self.forever: + return None + return len(self.tests) + + def iter_tests(self): + if self.forever: + while True: + yield from self.tests + else: + yield from self.tests + + def as_json(self) -> StrJSON: + return json.dumps(self, cls=_EncodeRunTests) + + @staticmethod + def from_json(worker_json: StrJSON) -> 'RunTests': + return json.loads(worker_json, object_hook=_decode_runtests) + + def json_file_use_stdout(self) -> bool: + # Use STDOUT in two cases: + # + # - If --python command line option is used; + # - On Emscripten and WASI. + # + # On other platforms, UNIX_FD or WINDOWS_HANDLE can be used. + return ( + bool(self.python_cmd) + or support.is_emscripten + or support.is_wasi + ) + + +class _EncodeRunTests(json.JSONEncoder): + def default(self, o: Any) -> dict[str, Any]: + if isinstance(o, RunTests): + result = dataclasses.asdict(o) + result["__runtests__"] = True + return result + else: + return super().default(o) + + +def _decode_runtests(data: dict[str, Any]) -> RunTests | dict[str, Any]: + if "__runtests__" in data: + data.pop('__runtests__') + if data['hunt_refleak']: + data['hunt_refleak'] = HuntRefleak(**data['hunt_refleak']) + if data['json_file']: + data['json_file'] = JsonFile(**data['json_file']) + return RunTests(**data) + else: + return data diff --git a/Lib/test/libregrtest/save_env.py b/Lib/test/libregrtest/save_env.py index c7801b767c590c..b2cc381344b2ef 100644 --- a/Lib/test/libregrtest/save_env.py +++ b/Lib/test/libregrtest/save_env.py @@ -3,9 +3,11 @@ import os import sys import threading + from test import support from test.support import os_helper -from test.libregrtest.utils import print_warning + +from .utils import print_warning class SkipTestEnvironment(Exception): @@ -23,7 +25,7 @@ class SkipTestEnvironment(Exception): class saved_test_environment: """Save bits of the test environment and restore them at block exit. - with saved_test_environment(testname, verbose, quiet): + with saved_test_environment(test_name, verbose, quiet): #stuff Unless quiet is True, a warning is printed to stderr if any of @@ -34,8 +36,8 @@ class saved_test_environment: items is also printed. """ - def __init__(self, testname, verbose=0, quiet=False, *, pgo=False): - self.testname = testname + def __init__(self, test_name, verbose, quiet, *, pgo): + self.test_name = test_name self.verbose = verbose self.quiet = quiet self.pgo = pgo @@ -323,7 +325,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): restore(original) if not self.quiet and not self.pgo: print_warning( - f"{name} was modified by {self.testname}\n" + f"{name} was modified by {self.test_name}\n" f" Before: {original}\n" f" After: {current} ") return False diff --git a/Lib/test/libregrtest/setup.py b/Lib/test/libregrtest/setup.py index b76bece7ca08b5..204f10fe839792 100644 --- a/Lib/test/libregrtest/setup.py +++ b/Lib/test/libregrtest/setup.py @@ -1,24 +1,32 @@ -import atexit import faulthandler +import gc import os +import random import signal import sys import unittest from test import support from test.support.os_helper import TESTFN_UNDECODABLE, FS_NONASCII -try: - import gc -except ImportError: - gc = None -from test.libregrtest.utils import (setup_unraisable_hook, - setup_threading_excepthook) +from .runtests import RunTests +from .utils import ( + setup_unraisable_hook, setup_threading_excepthook, fix_umask, + replace_stdout, adjust_rlimit_nofile) UNICODE_GUARD_ENV = "PYTHONREGRTEST_UNICODE_GUARD" -def setup_tests(ns): +def setup_test_dir(testdir: str | None) -> None: + if testdir: + # Prepend test directory to sys.path, so runtest() will be able + # to locate tests + sys.path.insert(0, os.path.abspath(testdir)) + + +def setup_process(): + fix_umask() + try: stderr_fd = sys.__stderr__.fileno() except (ValueError, AttributeError): @@ -40,15 +48,10 @@ def setup_tests(ns): for signum in signals: faulthandler.register(signum, chain=True, file=stderr_fd) - _adjust_resource_limits() + adjust_rlimit_nofile() replace_stdout() support.record_original_stdout(sys.stdout) - if ns.testdir: - # Prepend test directory to sys.path, so runtest() will be able - # to locate tests - sys.path.insert(0, os.path.abspath(ns.testdir)) - # Some times __path__ and __file__ are not absolute (e.g. while running from # Lib/) and, if we change the CWD to run the tests in a temporary dir, some # imports might fail. This affects only the modules imported before os.chdir(). @@ -66,19 +69,6 @@ def setup_tests(ns): if getattr(module, '__file__', None): module.__file__ = os.path.abspath(module.__file__) - if ns.huntrleaks: - unittest.BaseTestSuite._cleanup = False - - if ns.memlimit is not None: - support.set_memlimit(ns.memlimit) - - if ns.threshold is not None: - gc.set_threshold(ns.threshold) - - support.suppress_msvcrt_asserts(ns.verbose and ns.verbose >= 2) - - support.use_resources = ns.use_resources - if hasattr(sys, 'addaudithook'): # Add an auditing hook for all tests to ensure PySys_Audit is tested def _test_audit_hook(name, args): @@ -88,21 +78,6 @@ def _test_audit_hook(name, args): setup_unraisable_hook() setup_threading_excepthook() - if ns.timeout is not None: - # For a slow buildbot worker, increase SHORT_TIMEOUT and LONG_TIMEOUT - support.SHORT_TIMEOUT = max(support.SHORT_TIMEOUT, ns.timeout / 40) - support.LONG_TIMEOUT = max(support.LONG_TIMEOUT, ns.timeout / 4) - - # If --timeout is short: reduce timeouts - support.LOOPBACK_TIMEOUT = min(support.LOOPBACK_TIMEOUT, ns.timeout) - support.INTERNET_TIMEOUT = min(support.INTERNET_TIMEOUT, ns.timeout) - support.SHORT_TIMEOUT = min(support.SHORT_TIMEOUT, ns.timeout) - support.LONG_TIMEOUT = min(support.LONG_TIMEOUT, ns.timeout) - - if ns.xmlpath: - from test.support.testresult import RegressionTestResult - RegressionTestResult.USE_XML = True - # Ensure there's a non-ASCII character in env vars at all times to force # tests consider this case. See BPO-44647 for details. if TESTFN_UNDECODABLE and os.supports_bytes_environ: @@ -111,49 +86,45 @@ def _test_audit_hook(name, args): os.environ.setdefault(UNICODE_GUARD_ENV, FS_NONASCII) -def replace_stdout(): - """Set stdout encoder error handler to backslashreplace (as stderr error - handler) to avoid UnicodeEncodeError when printing a traceback""" - stdout = sys.stdout - try: - fd = stdout.fileno() - except ValueError: - # On IDLE, sys.stdout has no file descriptor and is not a TextIOWrapper - # object. Leaving sys.stdout unchanged. - # - # Catch ValueError to catch io.UnsupportedOperation on TextIOBase - # and ValueError on a closed stream. - return +def setup_tests(runtests: RunTests): + support.verbose = runtests.verbose + support.failfast = runtests.fail_fast + support.PGO = runtests.pgo + support.PGO_EXTENDED = runtests.pgo_extended - sys.stdout = open(fd, 'w', - encoding=stdout.encoding, - errors="backslashreplace", - closefd=False, - newline='\n') + support.set_match_tests(runtests.match_tests, runtests.ignore_tests) - def restore_stdout(): - sys.stdout.close() - sys.stdout = stdout - atexit.register(restore_stdout) + if runtests.use_junit: + support.junit_xml_list = [] + from test.support.testresult import RegressionTestResult + RegressionTestResult.USE_XML = True + else: + support.junit_xml_list = None + if runtests.memory_limit is not None: + support.set_memlimit(runtests.memory_limit) -def _adjust_resource_limits(): - """Adjust the system resource limits (ulimit) if needed.""" - try: - import resource - from resource import RLIMIT_NOFILE - except ImportError: - return - fd_limit, max_fds = resource.getrlimit(RLIMIT_NOFILE) - # On macOS the default fd limit is sometimes too low (256) for our - # test suite to succeed. Raise it to something more reasonable. - # 1024 is a common Linux default. - desired_fds = 1024 - if fd_limit < desired_fds and fd_limit < max_fds: - new_fd_limit = min(desired_fds, max_fds) - try: - resource.setrlimit(RLIMIT_NOFILE, (new_fd_limit, max_fds)) - print(f"Raised RLIMIT_NOFILE: {fd_limit} -> {new_fd_limit}") - except (ValueError, OSError) as err: - print(f"Unable to raise RLIMIT_NOFILE from {fd_limit} to " - f"{new_fd_limit}: {err}.") + support.suppress_msvcrt_asserts(runtests.verbose >= 2) + + support.use_resources = runtests.use_resources + + timeout = runtests.timeout + if timeout is not None: + # For a slow buildbot worker, increase SHORT_TIMEOUT and LONG_TIMEOUT + support.SHORT_TIMEOUT = max(support.SHORT_TIMEOUT, timeout / 40) + support.LONG_TIMEOUT = max(support.LONG_TIMEOUT, timeout / 4) + + # If --timeout is short: reduce timeouts + support.LOOPBACK_TIMEOUT = min(support.LOOPBACK_TIMEOUT, timeout) + support.INTERNET_TIMEOUT = min(support.INTERNET_TIMEOUT, timeout) + support.SHORT_TIMEOUT = min(support.SHORT_TIMEOUT, timeout) + support.LONG_TIMEOUT = min(support.LONG_TIMEOUT, timeout) + + if runtests.hunt_refleak: + unittest.BaseTestSuite._cleanup = False + + if runtests.gc_threshold is not None: + gc.set_threshold(runtests.gc_threshold) + + if runtests.randomize: + random.seed(runtests.random_seed) diff --git a/Lib/test/libregrtest/single.py b/Lib/test/libregrtest/single.py new file mode 100644 index 00000000000000..0304f858edf42c --- /dev/null +++ b/Lib/test/libregrtest/single.py @@ -0,0 +1,278 @@ +import doctest +import faulthandler +import gc +import importlib +import io +import sys +import time +import traceback +import unittest + +from test import support +from test.support import TestStats +from test.support import threading_helper + +from .result import State, TestResult +from .runtests import RunTests +from .save_env import saved_test_environment +from .setup import setup_tests +from .utils import ( + TestName, + clear_caches, remove_testfn, abs_module_name, print_warning) + + +# Minimum duration of a test to display its duration or to mention that +# the test is running in background +PROGRESS_MIN_TIME = 30.0 # seconds + + +def run_unittest(test_mod): + loader = unittest.TestLoader() + tests = loader.loadTestsFromModule(test_mod) + for error in loader.errors: + print(error, file=sys.stderr) + if loader.errors: + raise Exception("errors while loading tests") + return support.run_unittest(tests) + + +def regrtest_runner(result: TestResult, test_func, runtests: RunTests) -> None: + # Run test_func(), collect statistics, and detect reference and memory + # leaks. + if runtests.hunt_refleak: + from .refleak import runtest_refleak + refleak, test_result = runtest_refleak(result.test_name, test_func, + runtests.hunt_refleak, + runtests.quiet) + else: + test_result = test_func() + refleak = False + + if refleak: + result.state = State.REFLEAK + + stats: TestStats | None + + match test_result: + case TestStats(): + stats = test_result + case unittest.TestResult(): + stats = TestStats.from_unittest(test_result) + case doctest.TestResults(): + stats = TestStats.from_doctest(test_result) + case None: + print_warning(f"{result.test_name} test runner returned None: {test_func}") + stats = None + case _: + print_warning(f"Unknown test result type: {type(test_result)}") + stats = None + + result.stats = stats + + +# Storage of uncollectable GC objects (gc.garbage) +GC_GARBAGE = [] + + +def _load_run_test(result: TestResult, runtests: RunTests) -> None: + # Load the test module and run the tests. + test_name = result.test_name + module_name = abs_module_name(test_name, runtests.test_dir) + + # Remove the module from sys.module to reload it if it was already imported + sys.modules.pop(module_name, None) + + test_mod = importlib.import_module(module_name) + + if hasattr(test_mod, "test_main"): + # https://github.com/python/cpython/issues/89392 + raise Exception(f"Module {test_name} defines test_main() which " + f"is no longer supported by regrtest") + def test_func(): + return run_unittest(test_mod) + + try: + regrtest_runner(result, test_func, runtests) + finally: + # First kill any dangling references to open files etc. + # This can also issue some ResourceWarnings which would otherwise get + # triggered during the following test run, and possibly produce + # failures. + support.gc_collect() + + remove_testfn(test_name, runtests.verbose) + + if gc.garbage: + support.environment_altered = True + print_warning(f"{test_name} created {len(gc.garbage)} " + f"uncollectable object(s)") + + # move the uncollectable objects somewhere, + # so we don't see them again + GC_GARBAGE.extend(gc.garbage) + gc.garbage.clear() + + support.reap_children() + + +def _runtest_env_changed_exc(result: TestResult, runtests: RunTests, + display_failure: bool = True) -> None: + # Handle exceptions, detect environment changes. + + # Reset the environment_altered flag to detect if a test altered + # the environment + support.environment_altered = False + + pgo = runtests.pgo + if pgo: + display_failure = False + quiet = runtests.quiet + + test_name = result.test_name + try: + clear_caches() + support.gc_collect() + + with saved_test_environment(test_name, + runtests.verbose, quiet, pgo=pgo): + _load_run_test(result, runtests) + except support.ResourceDenied as exc: + if not quiet and not pgo: + print(f"{test_name} skipped -- {exc}", flush=True) + result.state = State.RESOURCE_DENIED + return + except unittest.SkipTest as exc: + if not quiet and not pgo: + print(f"{test_name} skipped -- {exc}", flush=True) + result.state = State.SKIPPED + return + except support.TestFailedWithDetails as exc: + msg = f"test {test_name} failed" + if display_failure: + msg = f"{msg} -- {exc}" + print(msg, file=sys.stderr, flush=True) + result.state = State.FAILED + result.errors = exc.errors + result.failures = exc.failures + result.stats = exc.stats + return + except support.TestFailed as exc: + msg = f"test {test_name} failed" + if display_failure: + msg = f"{msg} -- {exc}" + print(msg, file=sys.stderr, flush=True) + result.state = State.FAILED + result.stats = exc.stats + return + except support.TestDidNotRun: + result.state = State.DID_NOT_RUN + return + except KeyboardInterrupt: + print() + result.state = State.INTERRUPTED + return + except: + if not pgo: + msg = traceback.format_exc() + print(f"test {test_name} crashed -- {msg}", + file=sys.stderr, flush=True) + result.state = State.UNCAUGHT_EXC + return + + if support.environment_altered: + result.set_env_changed() + # Don't override the state if it was already set (REFLEAK or ENV_CHANGED) + if result.state is None: + result.state = State.PASSED + + +def _runtest(result: TestResult, runtests: RunTests) -> None: + # Capture stdout and stderr, set faulthandler timeout, + # and create JUnit XML report. + verbose = runtests.verbose + output_on_failure = runtests.output_on_failure + timeout = runtests.timeout + + use_timeout = ( + timeout is not None and threading_helper.can_start_thread + ) + if use_timeout: + faulthandler.dump_traceback_later(timeout, exit=True) + + try: + setup_tests(runtests) + + if output_on_failure: + support.verbose = True + + stream = io.StringIO() + orig_stdout = sys.stdout + orig_stderr = sys.stderr + print_warning = support.print_warning + orig_print_warnings_stderr = print_warning.orig_stderr + + output = None + try: + sys.stdout = stream + sys.stderr = stream + # print_warning() writes into the temporary stream to preserve + # messages order. If support.environment_altered becomes true, + # warnings will be written to sys.stderr below. + print_warning.orig_stderr = stream + + _runtest_env_changed_exc(result, runtests, display_failure=False) + # Ignore output if the test passed successfully + if result.state != State.PASSED: + output = stream.getvalue() + finally: + sys.stdout = orig_stdout + sys.stderr = orig_stderr + print_warning.orig_stderr = orig_print_warnings_stderr + + if output is not None: + sys.stderr.write(output) + sys.stderr.flush() + else: + # Tell tests to be moderately quiet + support.verbose = verbose + _runtest_env_changed_exc(result, runtests, + display_failure=not verbose) + + xml_list = support.junit_xml_list + if xml_list: + import xml.etree.ElementTree as ET + result.xml_data = [ET.tostring(x).decode('us-ascii') + for x in xml_list] + finally: + if use_timeout: + faulthandler.cancel_dump_traceback_later() + support.junit_xml_list = None + + +def run_single_test(test_name: TestName, runtests: RunTests) -> TestResult: + """Run a single test. + + test_name -- the name of the test + + Returns a TestResult. + + If runtests.use_junit, xml_data is a list containing each generated + testsuite element. + """ + start_time = time.perf_counter() + result = TestResult(test_name) + pgo = runtests.pgo + try: + _runtest(result, runtests) + except: + if not pgo: + msg = traceback.format_exc() + print(f"test {test_name} crashed -- {msg}", + file=sys.stderr, flush=True) + result.state = State.UNCAUGHT_EXC + + sys.stdout.flush() + sys.stderr.flush() + + result.duration = time.perf_counter() - start_time + return result diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index 89a149ec5d6b36..6af949cea9c926 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -1,9 +1,46 @@ +import atexit +import contextlib +import faulthandler +import locale import math import os.path +import platform +import random import sys import sysconfig +import tempfile import textwrap +from collections.abc import Callable + from test import support +from test.support import os_helper +from test.support import threading_helper + + +MS_WINDOWS = (sys.platform == 'win32') + +# All temporary files and temporary directories created by libregrtest should +# use TMP_PREFIX so cleanup_temp_dir() can remove them all. +TMP_PREFIX = 'test_python_' +WORK_DIR_PREFIX = TMP_PREFIX +WORKER_WORK_DIR_PREFIX = WORK_DIR_PREFIX + 'worker_' + +# bpo-38203: Maximum delay in seconds to exit Python (call Py_Finalize()). +# Used to protect against threading._shutdown() hang. +# Must be smaller than buildbot "1200 seconds without output" limit. +EXIT_TIMEOUT = 120.0 + + +# Types for types hints +StrPath = str +TestName = str +StrJSON = str +TestTuple = tuple[TestName, ...] +TestList = list[TestName] +# --match and --ignore options: list of patterns +# ('*' joker character can be used) +FilterTuple = tuple[TestName, ...] +FilterDict = dict[TestName, FilterTuple] def format_duration(seconds): @@ -31,7 +68,7 @@ def format_duration(seconds): return ' '.join(parts) -def removepy(names): +def strip_py_suffix(names: list[str] | None) -> None: if not names: return for idx, name in enumerate(names): @@ -40,11 +77,20 @@ def removepy(names): names[idx] = basename +def plural(n, singular, plural=None): + if n == 1: + return singular + elif plural is not None: + return plural + else: + return singular + 's' + + def count(n, word): if n == 1: - return "%d %s" % (n, word) + return f"{n} {word}" else: - return "%d %ss" % (n, word) + return f"{n} {word}s" def printlist(x, width=70, indent=4, file=None): @@ -264,16 +310,8 @@ def get_build_info(): elif '-flto' in ldflags_nodist: optimizations.append('LTO') - # --enable-optimizations - pgo_options = ( - # GCC - '-fprofile-use', - # clang: -fprofile-instr-use=code.profclangd - '-fprofile-instr-use', - # ICC - "-prof-use", - ) - if any(option in cflags_nodist for option in pgo_options): + if support.check_cflags_pgo(): + # PGO (--enable-optimizations) optimizations.append('PGO') if optimizations: build.append('+'.join(optimizations)) @@ -305,3 +343,267 @@ def get_build_info(): build.append("dtrace") return build + + +def get_temp_dir(tmp_dir: StrPath | None = None) -> StrPath: + if tmp_dir: + tmp_dir = os.path.expanduser(tmp_dir) + else: + # When tests are run from the Python build directory, it is best practice + # to keep the test files in a subfolder. This eases the cleanup of leftover + # files using the "make distclean" command. + if sysconfig.is_python_build(): + if not support.is_wasi: + tmp_dir = sysconfig.get_config_var('abs_builddir') + if tmp_dir is None: + # bpo-30284: On Windows, only srcdir is available. Using + # abs_builddir mostly matters on UNIX when building Python + # out of the source tree, especially when the source tree + # is read only. + tmp_dir = sysconfig.get_config_var('srcdir') + tmp_dir = os.path.join(tmp_dir, 'build') + else: + # WASI platform + tmp_dir = sysconfig.get_config_var('projectbase') + tmp_dir = os.path.join(tmp_dir, 'build') + + # When get_temp_dir() is called in a worker process, + # get_temp_dir() path is different than in the parent process + # which is not a WASI process. So the parent does not create + # the same "tmp_dir" than the test worker process. + os.makedirs(tmp_dir, exist_ok=True) + else: + tmp_dir = tempfile.gettempdir() + + return os.path.abspath(tmp_dir) + + +def fix_umask(): + if support.is_emscripten: + # Emscripten has default umask 0o777, which breaks some tests. + # see https://github.com/emscripten-core/emscripten/issues/17269 + old_mask = os.umask(0) + if old_mask == 0o777: + os.umask(0o027) + else: + os.umask(old_mask) + + +def get_work_dir(parent_dir: StrPath, worker: bool = False) -> StrPath: + # Define a writable temp dir that will be used as cwd while running + # the tests. The name of the dir includes the pid to allow parallel + # testing (see the -j option). + # Emscripten and WASI have stubbed getpid(), Emscripten has only + # milisecond clock resolution. Use randint() instead. + if support.is_emscripten or support.is_wasi: + nounce = random.randint(0, 1_000_000) + else: + nounce = os.getpid() + + if worker: + work_dir = WORK_DIR_PREFIX + str(nounce) + else: + work_dir = WORKER_WORK_DIR_PREFIX + str(nounce) + work_dir += os_helper.FS_NONASCII + work_dir = os.path.join(parent_dir, work_dir) + return work_dir + + +@contextlib.contextmanager +def exit_timeout(): + try: + yield + except SystemExit as exc: + # bpo-38203: Python can hang at exit in Py_Finalize(), especially + # on threading._shutdown() call: put a timeout + if threading_helper.can_start_thread: + faulthandler.dump_traceback_later(EXIT_TIMEOUT, exit=True) + sys.exit(exc.code) + + +def remove_testfn(test_name: TestName, verbose: int) -> None: + # Try to clean up os_helper.TESTFN if left behind. + # + # While tests shouldn't leave any files or directories behind, when a test + # fails that can be tedious for it to arrange. The consequences can be + # especially nasty on Windows, since if a test leaves a file open, it + # cannot be deleted by name (while there's nothing we can do about that + # here either, we can display the name of the offending test, which is a + # real help). + name = os_helper.TESTFN + if not os.path.exists(name): + return + + nuker: Callable[[str], None] + if os.path.isdir(name): + import shutil + kind, nuker = "directory", shutil.rmtree + elif os.path.isfile(name): + kind, nuker = "file", os.unlink + else: + raise RuntimeError(f"os.path says {name!r} exists but is neither " + f"directory nor file") + + if verbose: + print_warning(f"{test_name} left behind {kind} {name!r}") + support.environment_altered = True + + try: + import stat + # fix possible permissions problems that might prevent cleanup + os.chmod(name, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) + nuker(name) + except Exception as exc: + print_warning(f"{test_name} left behind {kind} {name!r} " + f"and it couldn't be removed: {exc}") + + +def abs_module_name(test_name: TestName, test_dir: StrPath | None) -> TestName: + if test_name.startswith('test.') or test_dir: + return test_name + else: + # Import it from the test package + return 'test.' + test_name + + +# gh-90681: When rerunning tests, we might need to rerun the whole +# class or module suite if some its life-cycle hooks fail. +# Test level hooks are not affected. +_TEST_LIFECYCLE_HOOKS = frozenset(( + 'setUpClass', 'tearDownClass', + 'setUpModule', 'tearDownModule', +)) + +def normalize_test_name(test_full_name, *, is_error=False): + short_name = test_full_name.split(" ")[0] + if is_error and short_name in _TEST_LIFECYCLE_HOOKS: + if test_full_name.startswith(('setUpModule (', 'tearDownModule (')): + # if setUpModule() or tearDownModule() failed, don't filter + # tests with the test file name, don't use use filters. + return None + + # This means that we have a failure in a life-cycle hook, + # we need to rerun the whole module or class suite. + # Basically the error looks like this: + # ERROR: setUpClass (test.test_reg_ex.RegTest) + # or + # ERROR: setUpModule (test.test_reg_ex) + # So, we need to parse the class / module name. + lpar = test_full_name.index('(') + rpar = test_full_name.index(')') + return test_full_name[lpar + 1: rpar].split('.')[-1] + return short_name + + +def replace_stdout(): + """Set stdout encoder error handler to backslashreplace (as stderr error + handler) to avoid UnicodeEncodeError when printing a traceback""" + stdout = sys.stdout + try: + fd = stdout.fileno() + except ValueError: + # On IDLE, sys.stdout has no file descriptor and is not a TextIOWrapper + # object. Leaving sys.stdout unchanged. + # + # Catch ValueError to catch io.UnsupportedOperation on TextIOBase + # and ValueError on a closed stream. + return + + sys.stdout = open(fd, 'w', + encoding=stdout.encoding, + errors="backslashreplace", + closefd=False, + newline='\n') + + def restore_stdout(): + sys.stdout.close() + sys.stdout = stdout + atexit.register(restore_stdout) + + +def adjust_rlimit_nofile(): + """ + On macOS the default fd limit (RLIMIT_NOFILE) is sometimes too low (256) + for our test suite to succeed. Raise it to something more reasonable. 1024 + is a common Linux default. + """ + try: + import resource + except ImportError: + return + + fd_limit, max_fds = resource.getrlimit(resource.RLIMIT_NOFILE) + + desired_fds = 1024 + + if fd_limit < desired_fds and fd_limit < max_fds: + new_fd_limit = min(desired_fds, max_fds) + try: + resource.setrlimit(resource.RLIMIT_NOFILE, + (new_fd_limit, max_fds)) + print(f"Raised RLIMIT_NOFILE: {fd_limit} -> {new_fd_limit}") + except (ValueError, OSError) as err: + print_warning(f"Unable to raise RLIMIT_NOFILE from {fd_limit} to " + f"{new_fd_limit}: {err}.") + + +def display_header(): + encoding = sys.stdout.encoding + + # Print basic platform information + print("==", platform.python_implementation(), *sys.version.split()) + print("==", platform.platform(aliased=True), + "%s-endian" % sys.byteorder) + print("== Python build:", ' '.join(get_build_info())) + + cwd = os.getcwd() + # gh-109508: support.os_helper.FS_NONASCII, used by get_work_dir(), cannot + # be encoded to the filesystem encoding on purpose, escape non-encodable + # characters with backslashreplace error handler. + formatted_cwd = cwd.encode(encoding, "backslashreplace").decode(encoding) + print("== cwd:", formatted_cwd) + + cpu_count = os.cpu_count() + if cpu_count: + print("== CPU count:", cpu_count) + print("== encodings: locale=%s, FS=%s" + % (locale.getencoding(), sys.getfilesystemencoding())) + + # This makes it easier to remember what to set in your local + # environment when trying to reproduce a sanitizer failure. + asan = support.check_sanitizer(address=True) + msan = support.check_sanitizer(memory=True) + ubsan = support.check_sanitizer(ub=True) + sanitizers = [] + if asan: + sanitizers.append("address") + if msan: + sanitizers.append("memory") + if ubsan: + sanitizers.append("undefined behavior") + if not sanitizers: + return + + print(f"== sanitizers: {', '.join(sanitizers)}") + for sanitizer, env_var in ( + (asan, "ASAN_OPTIONS"), + (msan, "MSAN_OPTIONS"), + (ubsan, "UBSAN_OPTIONS"), + ): + options= os.environ.get(env_var) + if sanitizer and options is not None: + print(f"== {env_var}={options!r}") + + +def cleanup_temp_dir(tmp_dir: StrPath): + import glob + + path = os.path.join(glob.escape(tmp_dir), TMP_PREFIX + '*') + print("Cleanup %s directory" % tmp_dir) + for name in glob.glob(path): + if os.path.isdir(name): + print("Remove directory: %s" % name) + os_helper.rmtree(name) + else: + print("Remove file: %s" % name) + os_helper.unlink(name) diff --git a/Lib/test/libregrtest/worker.py b/Lib/test/libregrtest/worker.py new file mode 100644 index 00000000000000..610e0a8437839d --- /dev/null +++ b/Lib/test/libregrtest/worker.py @@ -0,0 +1,109 @@ +import subprocess +import sys +import os +from typing import Any, NoReturn + +from test import support +from test.support import os_helper + +from .setup import setup_process, setup_test_dir +from .runtests import RunTests, JsonFile, JsonFileType +from .single import run_single_test +from .utils import ( + StrPath, StrJSON, FilterTuple, + get_temp_dir, get_work_dir, exit_timeout) + + +USE_PROCESS_GROUP = (hasattr(os, "setsid") and hasattr(os, "killpg")) + + +def create_worker_process(runtests: RunTests, output_fd: int, + tmp_dir: StrPath | None = None) -> subprocess.Popen: + python_cmd = runtests.python_cmd + worker_json = runtests.as_json() + + if python_cmd is not None: + executable = python_cmd + else: + executable = (sys.executable,) + cmd = [*executable, *support.args_from_interpreter_flags(), + '-u', # Unbuffered stdout and stderr + '-m', 'test.libregrtest.worker', + worker_json] + + env = dict(os.environ) + if tmp_dir is not None: + env['TMPDIR'] = tmp_dir + env['TEMP'] = tmp_dir + env['TMP'] = tmp_dir + + # Emscripten and WASI Python must start in the Python source code directory + # to get 'python.js' or 'python.wasm' file. Then worker_process() changes + # to a temporary directory created to run tests. + work_dir = os_helper.SAVEDCWD + + # Running the child from the same working directory as regrtest's original + # invocation ensures that TEMPDIR for the child is the same when + # sysconfig.is_python_build() is true. See issue 15300. + kwargs: dict[str, Any] = dict( + env=env, + stdout=output_fd, + # bpo-45410: Write stderr into stdout to keep messages order + stderr=output_fd, + text=True, + close_fds=True, + cwd=work_dir, + ) + + # Pass json_file to the worker process + json_file = runtests.json_file + json_file.configure_subprocess(kwargs) + + with json_file.inherit_subprocess(): + return subprocess.Popen(cmd, **kwargs) + + +def worker_process(worker_json: StrJSON) -> NoReturn: + runtests = RunTests.from_json(worker_json) + test_name = runtests.tests[0] + match_tests: FilterTuple | None = runtests.match_tests + json_file: JsonFile = runtests.json_file + + setup_test_dir(runtests.test_dir) + setup_process() + + if runtests.rerun: + if match_tests: + matching = "matching: " + ", ".join(match_tests) + print(f"Re-running {test_name} in verbose mode ({matching})", flush=True) + else: + print(f"Re-running {test_name} in verbose mode", flush=True) + + result = run_single_test(test_name, runtests) + + if json_file.file_type == JsonFileType.STDOUT: + print() + result.write_json_into(sys.stdout) + else: + with json_file.open('w', encoding='utf-8') as json_fp: + result.write_json_into(json_fp) + + sys.exit(0) + + +def main(): + if len(sys.argv) != 2: + print("usage: python -m test.libregrtest.worker JSON") + sys.exit(1) + worker_json = sys.argv[1] + + tmp_dir = get_temp_dir() + work_dir = get_work_dir(tmp_dir, worker=True) + + with exit_timeout(): + with os_helper.temp_cwd(work_dir, quiet=True): + worker_process(worker_json) + + +if __name__ == "__main__": + main() diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py index b1ef332522d2ce..d9ab21d4941cdb 100644 --- a/Lib/test/list_tests.py +++ b/Lib/test/list_tests.py @@ -6,7 +6,7 @@ from functools import cmp_to_key from test import seq_tests -from test.support import ALWAYS_EQ, NEVER_EQ, C_RECURSION_LIMIT +from test.support import ALWAYS_EQ, NEVER_EQ, Py_C_RECURSION_LIMIT class CommonTest(seq_tests.CommonTest): @@ -61,7 +61,7 @@ def test_repr(self): def test_repr_deep(self): a = self.type2test([]) - for i in range(C_RECURSION_LIMIT + 1): + for i in range(Py_C_RECURSION_LIMIT + 1): a = self.type2test([a]) self.assertRaises(RecursionError, repr, a) diff --git a/Lib/test/mapping_tests.py b/Lib/test/mapping_tests.py index 5492bbf86d1f87..b4cfce19a7174e 100644 --- a/Lib/test/mapping_tests.py +++ b/Lib/test/mapping_tests.py @@ -1,8 +1,7 @@ # tests common to dict and UserDict import unittest import collections -import sys -from test.support import C_RECURSION_LIMIT +from test.support import Py_C_RECURSION_LIMIT class BasicTestMappingProtocol(unittest.TestCase): @@ -625,7 +624,7 @@ def __repr__(self): def test_repr_deep(self): d = self._empty_mapping() - for i in range(C_RECURSION_LIMIT + 1): + for i in range(Py_C_RECURSION_LIMIT + 1): d0 = d d = self._empty_mapping() d[1] = d0 diff --git a/Lib/test/cmath_testcases.txt b/Lib/test/mathdata/cmath_testcases.txt similarity index 100% rename from Lib/test/cmath_testcases.txt rename to Lib/test/mathdata/cmath_testcases.txt diff --git a/Lib/test/floating_points.txt b/Lib/test/mathdata/floating_points.txt similarity index 100% rename from Lib/test/floating_points.txt rename to Lib/test/mathdata/floating_points.txt diff --git a/Lib/test/formatfloat_testcases.txt b/Lib/test/mathdata/formatfloat_testcases.txt similarity index 100% rename from Lib/test/formatfloat_testcases.txt rename to Lib/test/mathdata/formatfloat_testcases.txt diff --git a/Lib/test/ieee754.txt b/Lib/test/mathdata/ieee754.txt similarity index 100% rename from Lib/test/ieee754.txt rename to Lib/test/mathdata/ieee754.txt diff --git a/Lib/test/math_testcases.txt b/Lib/test/mathdata/math_testcases.txt similarity index 100% rename from Lib/test/math_testcases.txt rename to Lib/test/mathdata/math_testcases.txt diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py index a687fe0629080a..ddb180ef5ef825 100644 --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -2408,6 +2408,22 @@ def test_reduce_calls_base(self): y = self.loads(s) self.assertEqual(y._reduce_called, 1) + def test_reduce_ex_None(self): + c = REX_None() + with self.assertRaises(TypeError): + self.dumps(c) + + def test_reduce_None(self): + c = R_None() + with self.assertRaises(TypeError): + self.dumps(c) + + def test_pickle_setstate_None(self): + c = C_None_setstate() + p = self.dumps(c) + with self.assertRaises(TypeError): + self.loads(p) + @no_tracing def test_bad_getattr(self): # Issue #3514: crash when there is an infinite loop in __getattr__ @@ -3349,6 +3365,21 @@ def __setstate__(self, state): def __reduce__(self): return type(self), (), self.state +class REX_None: + """ Setting __reduce_ex__ to None should fail """ + __reduce_ex__ = None + +class R_None: + """ Setting __reduce__ to None should fail """ + __reduce__ = None + +class C_None_setstate: + """ Setting __setstate__ to None should fail """ + def __getstate__(self): + return 1 + + __setstate__ = None + # Test classes for newobj @@ -3752,6 +3783,25 @@ def test_unpickling_buffering_readline(self): unpickler = self.unpickler_class(f) self.assertEqual(unpickler.load(), data) + def test_pickle_invalid_reducer_override(self): + # gh-103035 + obj = object() + + f = io.BytesIO() + class MyPickler(self.pickler_class): + pass + pickler = MyPickler(f) + pickler.dump(obj) + + pickler.clear_memo() + pickler.reducer_override = None + with self.assertRaises(TypeError): + pickler.dump(obj) + + pickler.clear_memo() + pickler.reducer_override = 10 + with self.assertRaises(TypeError): + pickler.dump(obj) # Tests for dispatch_table attribute @@ -3914,6 +3964,15 @@ def dumps(obj, protocol=None): self._test_dispatch_table(dumps, dt) + def test_dispatch_table_None_item(self): + # gh-93627 + obj = object() + f = io.BytesIO() + pickler = self.pickler_class(f) + pickler.dispatch_table = {type(obj): None} + with self.assertRaises(TypeError): + pickler.dump(obj) + def _test_dispatch_table(self, dumps, dispatch_table): def custom_load_dump(obj): return pickle.loads(dumps(obj, 0)) diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py index 53af21db0755b1..c372efaedd313b 100644 --- a/Lib/test/pythoninfo.py +++ b/Lib/test/pythoninfo.py @@ -1,18 +1,13 @@ """ Collect various information about Python to help debugging test failures. """ -from __future__ import print_function import errno import re import sys import traceback -import unittest import warnings -MS_WINDOWS = (sys.platform == 'win32') - - def normalize_text(text): if text is None: return None @@ -112,6 +107,7 @@ def collect_sys(info_add): call_func(info_add, 'sys.androidapilevel', sys, 'getandroidapilevel') call_func(info_add, 'sys.windowsversion', sys, 'getwindowsversion') + call_func(info_add, 'sys.getrecursionlimit', sys, 'getrecursionlimit') encoding = sys.getfilesystemencoding() if hasattr(sys, 'getfilesystemencodeerrors'): @@ -163,6 +159,26 @@ def collect_platform(info_add): if libc_ver: info_add('platform.libc_ver', libc_ver) + try: + os_release = platform.freedesktop_os_release() + except OSError: + pass + else: + for key in ( + 'ID', + 'NAME', + 'PRETTY_NAME' + 'VARIANT', + 'VARIANT_ID', + 'VERSION', + 'VERSION_CODENAME', + 'VERSION_ID', + ): + if key not in os_release: + continue + info_add(f'platform.freedesktop_os_release[{key}]', + os_release[key]) + def collect_locale(info_add): import locale @@ -252,6 +268,7 @@ def format_groups(groups): "ARCHFLAGS", "ARFLAGS", "AUDIODEV", + "BUILDPYTHON", "CC", "CFLAGS", "COLUMNS", @@ -304,6 +321,7 @@ def format_groups(groups): "VIRTUAL_ENV", "WAYLAND_DISPLAY", "WINDIR", + "_PYTHON_HOSTRUNNER", "_PYTHON_HOST_PLATFORM", "_PYTHON_PROJECT_BASE", "_PYTHON_SYSCONFIGDATA_NAME", @@ -319,7 +337,8 @@ def format_groups(groups): for name, value in os.environ.items(): uname = name.upper() if (uname in ENV_VARS - # Copy PYTHON* and LC_* variables + # Copy PYTHON* variables like PYTHONPATH + # Copy LC_* variables like LC_ALL or uname.startswith(("PYTHON", "LC_")) # Visual Studio: VS140COMNTOOLS or (uname.startswith("VS") and uname.endswith("COMNTOOLS"))): @@ -472,13 +491,10 @@ def collect_datetime(info_add): def collect_sysconfig(info_add): - # On Windows, sysconfig is not reliable to get macros used - # to build Python - if MS_WINDOWS: - return - import sysconfig + info_add('sysconfig.is_python_build', sysconfig.is_python_build()) + for name in ( 'ABIFLAGS', 'ANDROID_API_LEVEL', @@ -487,6 +503,7 @@ def collect_sysconfig(info_add): 'CFLAGS', 'CFLAGSFORSHARED', 'CONFIG_ARGS', + 'HOSTRUNNER', 'HOST_GNU_TYPE', 'MACHDEP', 'MULTIARCH', @@ -502,7 +519,9 @@ def collect_sysconfig(info_add): 'Py_NOGIL', 'SHELL', 'SOABI', + 'abs_builddir', 'prefix', + 'srcdir', ): value = sysconfig.get_config_var(name) if name == 'ANDROID_API_LEVEL' and not value: @@ -644,6 +663,22 @@ def collect_decimal(info_add): def collect_testcapi(info_add): + try: + import _testcapi + except ImportError: + return + + for name in ( + 'LONG_MAX', # always 32-bit on Windows, 64-bit on 64-bit Unix + 'PY_SSIZE_T_MAX', + 'Py_C_RECURSION_LIMIT', + 'SIZEOF_TIME_T', # 32-bit or 64-bit depending on the platform + 'SIZEOF_WCHAR_T', # 16-bit or 32-bit depending on the platform + ): + copy_attr(info_add, f'_testcapi.{name}', _testcapi, name) + + +def collect_testinternalcapi(info_add): try: import _testinternalcapi except ImportError: @@ -651,6 +686,12 @@ def collect_testcapi(info_add): call_func(info_add, 'pymem.allocator', _testinternalcapi, 'pymem_getallocatorsname') + for name in ( + 'SIZEOF_PYGC_HEAD', + 'SIZEOF_PYOBJECT', + ): + copy_attr(info_add, f'_testinternalcapi.{name}', _testinternalcapi, name) + def collect_resource(info_add): try: @@ -668,6 +709,7 @@ def collect_resource(info_add): def collect_test_socket(info_add): + import unittest try: from test import test_socket except (ImportError, unittest.SkipTest): @@ -679,26 +721,82 @@ def collect_test_socket(info_add): copy_attributes(info_add, test_socket, 'test_socket.%s', attributes) -def collect_test_support(info_add): +def collect_support(info_add): try: from test import support except ImportError: return - attributes = ('IPV6_ENABLED',) - copy_attributes(info_add, support, 'test_support.%s', attributes) + attributes = ( + 'has_fork_support', + 'has_socket_support', + 'has_strftime_extensions', + 'has_subprocess_support', + 'is_android', + 'is_emscripten', + 'is_jython', + 'is_wasi', + ) + copy_attributes(info_add, support, 'support.%s', attributes) - call_func(info_add, 'test_support._is_gui_available', support, '_is_gui_available') - call_func(info_add, 'test_support.python_is_optimized', support, 'python_is_optimized') + call_func(info_add, 'support._is_gui_available', support, '_is_gui_available') + call_func(info_add, 'support.python_is_optimized', support, 'python_is_optimized') - info_add('test_support.check_sanitizer(address=True)', + info_add('support.check_sanitizer(address=True)', support.check_sanitizer(address=True)) - info_add('test_support.check_sanitizer(memory=True)', + info_add('support.check_sanitizer(memory=True)', support.check_sanitizer(memory=True)) - info_add('test_support.check_sanitizer(ub=True)', + info_add('support.check_sanitizer(ub=True)', support.check_sanitizer(ub=True)) +def collect_support_os_helper(info_add): + try: + from test.support import os_helper + except ImportError: + return + + for name in ( + 'can_symlink', + 'can_xattr', + 'can_chmod', + 'can_dac_override', + ): + func = getattr(os_helper, name) + info_add(f'support_os_helper.{name}', func()) + + +def collect_support_socket_helper(info_add): + try: + from test.support import socket_helper + except ImportError: + return + + attributes = ( + 'IPV6_ENABLED', + 'has_gethostname', + ) + copy_attributes(info_add, socket_helper, 'support_socket_helper.%s', attributes) + + for name in ( + 'tcp_blackhole', + ): + func = getattr(socket_helper, name) + info_add(f'support_socket_helper.{name}', func()) + + +def collect_support_threading_helper(info_add): + try: + from test.support import threading_helper + except ImportError: + return + + attributes = ( + 'can_start_thread', + ) + copy_attributes(info_add, threading_helper, 'support_threading_helper.%s', attributes) + + def collect_cc(info_add): import subprocess import sysconfig @@ -853,6 +951,21 @@ def collect_fips(info_add): pass +def collect_tempfile(info_add): + import tempfile + + info_add('tempfile.gettempdir', tempfile.gettempdir()) + + +def collect_libregrtest_utils(info_add): + try: + from test.libregrtest import utils + except ImportError: + return + + info_add('libregrtests.build_info', ' '.join(utils.get_build_info())) + + def collect_info(info): error = False info_add = info.add @@ -886,14 +999,20 @@ def collect_info(info): collect_sys, collect_sysconfig, collect_testcapi, + collect_testinternalcapi, + collect_tempfile, collect_time, collect_tkinter, collect_windows, collect_zlib, + collect_libregrtest_utils, # Collecting from tests should be last as they have side effects. collect_test_socket, - collect_test_support, + collect_support, + collect_support_os_helper, + collect_support_socket_helper, + collect_support_threading_helper, ): try: collect_func(info_add) @@ -919,7 +1038,6 @@ def dump_info(info, file=None): for key, value in infos: value = value.replace("\n", " ") print("%s: %s" % (key, value)) - print() def main(): @@ -928,6 +1046,7 @@ def main(): dump_info(info) if error: + print() print("Collection failed: exit with error", file=sys.stderr) sys.exit(1) diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 0ffb3ed454eda0..46a74fe276f553 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -8,7 +8,7 @@ import os import sys -from test.libregrtest import main +from test.libregrtest.main import main # Alias for backward compatibility (just in case) diff --git a/Lib/test/ssl_servers.py b/Lib/test/ssl_servers.py index a4bd7455d47e76..15b071e04dda1f 100644 --- a/Lib/test/ssl_servers.py +++ b/Lib/test/ssl_servers.py @@ -14,7 +14,7 @@ here = os.path.dirname(__file__) HOST = socket_helper.HOST -CERTFILE = os.path.join(here, 'keycert.pem') +CERTFILE = os.path.join(here, 'certdata', 'keycert.pem') # This one's based on HTTPServer, which is based on socketserver diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 16a5056a33aa12..8a4555ce16fbb6 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -4,6 +4,7 @@ raise ImportError('support must be imported from the test package') import contextlib +import dataclasses import functools import getpass import _opcode @@ -59,8 +60,9 @@ "run_with_tz", "PGO", "missing_compiler_executable", "ALWAYS_EQ", "NEVER_EQ", "LARGEST", "SMALLEST", "LOOPBACK_TIMEOUT", "INTERNET_TIMEOUT", "SHORT_TIMEOUT", "LONG_TIMEOUT", - "Py_DEBUG", "EXCEEDS_RECURSION_LIMIT", "C_RECURSION_LIMIT", + "Py_DEBUG", "EXCEEDS_RECURSION_LIMIT", "Py_C_RECURSION_LIMIT", "skip_on_s390x", + "without_optimizer", ] @@ -118,17 +120,20 @@ class Error(Exception): class TestFailed(Error): """Test failed.""" + def __init__(self, msg, *args, stats=None): + self.msg = msg + self.stats = stats + super().__init__(msg, *args) + + def __str__(self): + return self.msg class TestFailedWithDetails(TestFailed): """Test failed.""" - def __init__(self, msg, errors, failures): - self.msg = msg + def __init__(self, msg, errors, failures, stats): self.errors = errors self.failures = failures - super().__init__(msg, errors, failures) - - def __str__(self): - return self.msg + super().__init__(msg, errors, failures, stats=stats) class TestDidNotRun(Error): """Test did not run any subtests.""" @@ -502,15 +507,6 @@ def has_no_debug_ranges(): def requires_debug_ranges(reason='requires co_positions / debug_ranges'): return unittest.skipIf(has_no_debug_ranges(), reason) -def requires_legacy_unicode_capi(): - try: - from _testcapi import unicode_legacy_string - except ImportError: - unicode_legacy_string = None - - return unittest.skipUnless(unicode_legacy_string, - 'requires legacy Unicode C API') - # Is not actually used in tests, but is kept for compatibility. is_jython = sys.platform.startswith('java') @@ -777,6 +773,21 @@ def python_is_optimized(): return final_opt not in ('', '-O0', '-Og') +def check_cflags_pgo(): + # Check if Python was built with ./configure --enable-optimizations: + # with Profile Guided Optimization (PGO). + cflags_nodist = sysconfig.get_config_var('PY_CFLAGS_NODIST') or '' + pgo_options = ( + # GCC + '-fprofile-use', + # clang: -fprofile-instr-use=code.profclangd + '-fprofile-instr-use', + # ICC + "-prof-use", + ) + return any(option in cflags_nodist for option in pgo_options) + + _header = 'nP' _align = '0n' _vheader = _header + 'n' @@ -883,27 +894,31 @@ def inner(*args, **kwds): MAX_Py_ssize_t = sys.maxsize -def set_memlimit(limit): - global max_memuse - global real_max_memuse +def _parse_memlimit(limit: str) -> int: sizes = { 'k': 1024, 'm': _1M, 'g': _1G, 't': 1024*_1G, } - m = re.match(r'(\d+(\.\d+)?) (K|M|G|T)b?$', limit, + m = re.match(r'(\d+(?:\.\d+)?) (K|M|G|T)b?$', limit, re.IGNORECASE | re.VERBOSE) if m is None: - raise ValueError('Invalid memory limit %r' % (limit,)) - memlimit = int(float(m.group(1)) * sizes[m.group(3).lower()]) - real_max_memuse = memlimit - if memlimit > MAX_Py_ssize_t: - memlimit = MAX_Py_ssize_t + raise ValueError(f'Invalid memory limit: {limit!r}') + return int(float(m.group(1)) * sizes[m.group(2).lower()]) + +def set_memlimit(limit: str) -> None: + global max_memuse + global real_max_memuse + memlimit = _parse_memlimit(limit) if memlimit < _2G - 1: - raise ValueError('Memory limit %r too low to be useful' % (limit,)) + raise ValueError('Memory limit {limit!r} too low to be useful') + + real_max_memuse = memlimit + memlimit = min(memlimit, MAX_Py_ssize_t) max_memuse = memlimit + class _MemoryWatchdog: """An object which periodically watches the process' memory consumption and prints it out. @@ -1086,8 +1101,7 @@ def requires_limited_api(test): import _testcapi except ImportError: return unittest.skip('needs _testcapi module')(test) - return unittest.skipUnless( - _testcapi.LIMITED_API_AVAILABLE, 'needs Limited API support')(test) + return test def requires_specialization(test): return unittest.skipUnless( @@ -1105,6 +1119,30 @@ def _filter_suite(suite, pred): newtests.append(test) suite._tests = newtests +@dataclasses.dataclass(slots=True) +class TestStats: + tests_run: int = 0 + failures: int = 0 + skipped: int = 0 + + @staticmethod + def from_unittest(result): + return TestStats(result.testsRun, + len(result.failures), + len(result.skipped)) + + @staticmethod + def from_doctest(results): + return TestStats(results.attempted, + results.failed, + results.skipped) + + def accumulate(self, stats): + self.tests_run += stats.tests_run + self.failures += stats.failures + self.skipped += stats.skipped + + def _run_suite(suite): """Run tests from a unittest.TestSuite-derived class.""" runner = get_test_runner(sys.stdout, @@ -1119,6 +1157,7 @@ def _run_suite(suite): if not result.testsRun and not result.skipped and not result.errors: raise TestDidNotRun if not result.wasSuccessful(): + stats = TestStats.from_unittest(result) if len(result.errors) == 1 and not result.failures: err = result.errors[0][1] elif len(result.failures) == 1 and not result.errors: @@ -1128,7 +1167,8 @@ def _run_suite(suite): if not verbose: err += "; run in verbose mode for details" errors = [(str(tc), exc_str) for tc, exc_str in result.errors] failures = [(str(tc), exc_str) for tc, exc_str in result.failures] - raise TestFailedWithDetails(err, errors, failures) + raise TestFailedWithDetails(err, errors, failures, stats=stats) + return result # By default, don't filter tests @@ -1159,7 +1199,6 @@ def _is_full_match_test(pattern): def set_match_tests(accept_patterns=None, ignore_patterns=None): global _match_test_func, _accept_test_patterns, _ignore_test_patterns - if accept_patterns is None: accept_patterns = () if ignore_patterns is None: @@ -1237,7 +1276,7 @@ def run_unittest(*classes): else: suite.addTest(loader.loadTestsFromTestCase(cls)) _filter_suite(suite, match_test) - _run_suite(suite) + return _run_suite(suite) #======================================================================= # Check for the presence of docstrings. @@ -1277,13 +1316,18 @@ def run_doctest(module, verbosity=None, optionflags=0): else: verbosity = None - f, t = doctest.testmod(module, verbose=verbosity, optionflags=optionflags) - if f: - raise TestFailed("%d of %d doctests failed" % (f, t)) + results = doctest.testmod(module, + verbose=verbosity, + optionflags=optionflags) + if results.failed: + stats = TestStats.from_doctest(results) + raise TestFailed(f"{results.failed} of {results.attempted} " + f"doctests failed", + stats=stats) if verbose: print('doctest (%s) ... %d tests with zero failures' % - (module.__name__, t)) - return f, t + (module.__name__, results.attempted)) + return results #======================================================================= @@ -2207,6 +2251,39 @@ def check_disallow_instantiation(testcase, tp, *args, **kwds): msg = f"cannot create '{re.escape(qualname)}' instances" testcase.assertRaisesRegex(TypeError, msg, tp, *args, **kwds) +def get_recursion_depth(): + """Get the recursion depth of the caller function. + + In the __main__ module, at the module level, it should be 1. + """ + try: + import _testinternalcapi + depth = _testinternalcapi.get_recursion_depth() + except (ImportError, RecursionError) as exc: + # sys._getframe() + frame.f_back implementation. + try: + depth = 0 + frame = sys._getframe() + while frame is not None: + depth += 1 + frame = frame.f_back + finally: + # Break any reference cycles. + frame = None + + # Ignore get_recursion_depth() frame. + return max(depth - 1, 1) + +def get_recursion_available(): + """Get the number of available frames before RecursionError. + + It depends on the current recursion depth of the caller function and + sys.getrecursionlimit(). + """ + limit = sys.getrecursionlimit() + depth = get_recursion_depth() + return limit - depth + @contextlib.contextmanager def set_recursion_limit(limit): """Temporarily change the recursion limit.""" @@ -2217,14 +2294,18 @@ def set_recursion_limit(limit): finally: sys.setrecursionlimit(original_limit) -def infinite_recursion(max_depth=75): +def infinite_recursion(max_depth=100): """Set a lower limit for tests that interact with infinite recursions (e.g test_ast.ASTHelpers_Test.test_recursion_direct) since on some debug windows builds, due to not enough functions being inlined the stack size might not handle the default recursion limit (1000). See bpo-11105 for details.""" - return set_recursion_limit(max_depth) - + if max_depth < 3: + raise ValueError("max_depth must be at least 3, got {max_depth}") + depth = get_recursion_depth() + depth = max(depth - 1, 1) # Ignore infinite_recursion() frame. + limit = depth + max_depth + return set_recursion_limit(limit) def ignore_deprecations_from(module: str, *, like: str) -> object: token = object() @@ -2461,10 +2542,26 @@ def adjust_int_max_str_digits(max_digits): EXCEEDS_RECURSION_LIMIT = 5000 # The default C recursion limit (from Include/cpython/pystate.h). -C_RECURSION_LIMIT = 1500 +Py_C_RECURSION_LIMIT = 1500 #Windows doesn't have os.uname() but it doesn't support s390x. skip_on_s390x = unittest.skipIf(hasattr(os, 'uname') and os.uname().machine == 's390x', 'skipped on s390x') Py_TRACE_REFS = hasattr(sys, 'getobjects') + +# Decorator to disable optimizer while a function run +def without_optimizer(func): + try: + import _testinternalcapi + except ImportError: + return func + @functools.wraps(func) + def wrapper(*args, **kwargs): + save_opt = _testinternalcapi.get_optimizer() + try: + _testinternalcapi.set_optimizer(None) + return func(*args, **kwargs) + finally: + _testinternalcapi.set_optimizer(save_opt) + return wrapper diff --git a/Lib/test/support/hypothesis_helper.py b/Lib/test/support/hypothesis_helper.py index da16eb50c25958..db93eea5e912e0 100644 --- a/Lib/test/support/hypothesis_helper.py +++ b/Lib/test/support/hypothesis_helper.py @@ -10,7 +10,10 @@ hypothesis.settings.register_profile( "slow-is-ok", deadline=None, - suppress_health_check=[hypothesis.HealthCheck.too_slow], + suppress_health_check=[ + hypothesis.HealthCheck.too_slow, + hypothesis.HealthCheck.differing_executors, + ], ) hypothesis.settings.load_profile("slow-is-ok") diff --git a/Lib/test/support/import_helper.py b/Lib/test/support/import_helper.py index 67f18e530edc4b..3d804f2b590108 100644 --- a/Lib/test/support/import_helper.py +++ b/Lib/test/support/import_helper.py @@ -8,7 +8,7 @@ import unittest import warnings -from .os_helper import unlink +from .os_helper import unlink, temp_dir @contextlib.contextmanager @@ -274,3 +274,26 @@ def mock_register_at_fork(func): # memory. from unittest import mock return mock.patch('os.register_at_fork', create=True)(func) + + +@contextlib.contextmanager +def ready_to_import(name=None, source=""): + from test.support import script_helper + + # 1. Sets up a temporary directory and removes it afterwards + # 2. Creates the module file + # 3. Temporarily clears the module from sys.modules (if any) + # 4. Reverts or removes the module when cleaning up + name = name or "spam" + with temp_dir() as tempdir: + path = script_helper.make_script(tempdir, name, source) + old_module = sys.modules.pop(name, None) + try: + sys.path.insert(0, tempdir) + yield name, path + sys.path.remove(tempdir) + finally: + if old_module is not None: + sys.modules[name] = old_module + else: + sys.modules.pop(name, None) diff --git a/Lib/test/support/interpreters.py b/Lib/test/support/interpreters.py index 5c484d1170d1d9..eeff3abe0324e5 100644 --- a/Lib/test/support/interpreters.py +++ b/Lib/test/support/interpreters.py @@ -5,7 +5,7 @@ import _xxinterpchannels as _channels # aliases: -from _xxsubinterpreters import is_shareable, RunFailedError +from _xxsubinterpreters import is_shareable from _xxinterpchannels import ( ChannelError, ChannelNotFoundError, ChannelEmptyError, ) diff --git a/Lib/test/support/socket_helper.py b/Lib/test/support/socket_helper.py index 45f6d65c355dd4..87941ee1791b4e 100644 --- a/Lib/test/support/socket_helper.py +++ b/Lib/test/support/socket_helper.py @@ -3,6 +3,7 @@ import os.path import socket import sys +import subprocess import tempfile import unittest @@ -277,3 +278,62 @@ def create_unix_domain_name(): """ return tempfile.mktemp(prefix="test_python_", suffix='.sock', dir=os.path.curdir) + + +# consider that sysctl values should not change while tests are running +_sysctl_cache = {} + +def _get_sysctl(name): + """Get a sysctl value as an integer.""" + try: + return _sysctl_cache[name] + except KeyError: + pass + + # At least Linux and FreeBSD support the "-n" option + cmd = ['sysctl', '-n', name] + proc = subprocess.run(cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True) + if proc.returncode: + support.print_warning(f'{' '.join(cmd)!r} command failed with ' + f'exit code {proc.returncode}') + # cache the error to only log the warning once + _sysctl_cache[name] = None + return None + output = proc.stdout + + # Parse '0\n' to get '0' + try: + value = int(output.strip()) + except Exception as exc: + support.print_warning(f'Failed to parse {' '.join(cmd)!r} ' + f'command output {output!r}: {exc!r}') + # cache the error to only log the warning once + _sysctl_cache[name] = None + return None + + _sysctl_cache[name] = value + return value + + +def tcp_blackhole(): + if not sys.platform.startswith('freebsd'): + return False + + # gh-109015: test if FreeBSD TCP blackhole is enabled + value = _get_sysctl('net.inet.tcp.blackhole') + if value is None: + # don't skip if we fail to get the sysctl value + return False + return (value != 0) + + +def skip_if_tcp_blackhole(test): + """Decorator skipping test if TCP blackhole is enabled.""" + skip_if = unittest.skipIf( + tcp_blackhole(), + "TCP blackhole is enabled (sysctl net.inet.tcp.blackhole)" + ) + return skip_if(test) diff --git a/Lib/test/support/testresult.py b/Lib/test/support/testresult.py index 14474be222dc4b..de23fdd59ded95 100644 --- a/Lib/test/support/testresult.py +++ b/Lib/test/support/testresult.py @@ -8,6 +8,7 @@ import time import traceback import unittest +from test import support class RegressionTestResult(unittest.TextTestResult): USE_XML = False @@ -112,6 +113,8 @@ def addExpectedFailure(self, test, err): def addFailure(self, test, err): self._add_result(test, True, failure=self.__makeErrorDict(*err)) super().addFailure(test, err) + if support.failfast: + self.stop() def addSkip(self, test, reason): self._add_result(test, skipped=reason) diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py index 4f00558770dafd..a49630112af510 100644 --- a/Lib/test/test_asyncgen.py +++ b/Lib/test/test_asyncgen.py @@ -1058,8 +1058,7 @@ async def gen(): while True: yield 1 finally: - await asyncio.sleep(0.01) - await asyncio.sleep(0.01) + await asyncio.sleep(0) DONE = 1 async def run(): @@ -1069,7 +1068,10 @@ async def run(): del g gc_collect() # For PyPy or other GCs. - await asyncio.sleep(0.1) + # Starts running the aclose task + await asyncio.sleep(0) + # For asyncio.sleep(0) in finally block + await asyncio.sleep(0) self.loop.run_until_complete(run()) self.assertEqual(DONE, 1) diff --git a/Lib/test/test_asyncio/test_eager_task_factory.py b/Lib/test/test_asyncio/test_eager_task_factory.py index fc9ad8eb43bb1b..0f8212dbec47be 100644 --- a/Lib/test/test_asyncio/test_eager_task_factory.py +++ b/Lib/test/test_asyncio/test_eager_task_factory.py @@ -7,7 +7,6 @@ from unittest import mock from asyncio import tasks from test.test_asyncio import utils as test_utils -import test.support from test.support.script_helper import assert_python_ok MOCK_ANY = mock.ANY diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index b9069056c3a436..f22cb5e58bba62 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -1,6 +1,5 @@ """Tests for events.py.""" -import collections.abc import concurrent.futures import functools import io @@ -31,6 +30,7 @@ from asyncio import coroutines from asyncio import events from asyncio import selector_events +from multiprocessing.util import _cleanup_tests as multiprocessing_cleanup_tests from test.test_asyncio import utils as test_utils from test import support from test.support import socket_helper @@ -671,6 +671,7 @@ def test_create_connection_local_addr(self): self.assertEqual(port, expected) tr.close() + @socket_helper.skip_if_tcp_blackhole def test_create_connection_local_addr_skip_different_family(self): # See https://github.com/python/cpython/issues/86508 port1 = socket_helper.find_unused_port() @@ -692,6 +693,7 @@ async def getaddrinfo(host, port, *args, **kwargs): with self.assertRaises(OSError): self.loop.run_until_complete(f) + @socket_helper.skip_if_tcp_blackhole def test_create_connection_local_addr_nomatch_family(self): # See https://github.com/python/cpython/issues/86508 port1 = socket_helper.find_unused_port() @@ -1271,6 +1273,7 @@ def connection_made(self, transport): server.close() + @socket_helper.skip_if_tcp_blackhole def test_server_close(self): f = self.loop.create_server(MyProto, '0.0.0.0', 0) server = self.loop.run_until_complete(f) @@ -2331,8 +2334,6 @@ def check_source_traceback(h): h = loop.call_later(0, noop) check_source_traceback(h) - @unittest.skipUnless(hasattr(collections.abc, 'Coroutine'), - 'No collections.abc.Coroutine') def test_coroutine_like_object_debug_formatting(self): # Test that asyncio can format coroutines that are instances of # collections.abc.Coroutine, but lack cr_core or gi_code attributes @@ -2762,6 +2763,8 @@ def test_get_event_loop_new_process(self): # multiprocessing.synchronize module cannot be imported. support.skip_if_broken_multiprocessing_synchronize() + self.addCleanup(multiprocessing_cleanup_tests) + async def main(): if multiprocessing.get_start_method() == 'fork': # Avoid 'fork' DeprecationWarning. diff --git a/Lib/test/test_asyncio/test_sock_lowlevel.py b/Lib/test/test_asyncio/test_sock_lowlevel.py index b829fd4cc69fff..075113cbe8e4a6 100644 --- a/Lib/test/test_asyncio/test_sock_lowlevel.py +++ b/Lib/test/test_asyncio/test_sock_lowlevel.py @@ -10,6 +10,10 @@ from test import support from test.support import socket_helper +if socket_helper.tcp_blackhole(): + raise unittest.SkipTest('Not relevant to ProactorEventLoop') + + def tearDownModule(): asyncio.set_event_loop_policy(None) diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py index 52a45f1c7c6e96..37d015339761c6 100644 --- a/Lib/test/test_asyncio/test_sslproto.py +++ b/Lib/test/test_asyncio/test_sslproto.py @@ -5,6 +5,7 @@ import unittest import weakref from test import support +from test.support import socket_helper from unittest import mock try: import ssl @@ -350,6 +351,7 @@ async def client(addr): support.gc_collect() self.assertIsNone(client_context()) + @socket_helper.skip_if_tcp_blackhole def test_start_tls_client_buf_proto_1(self): HELLO_MSG = b'1' * self.PAYLOAD_SIZE @@ -502,6 +504,7 @@ async def client(addr): asyncio.wait_for(client(srv.addr), timeout=support.SHORT_TIMEOUT)) + @socket_helper.skip_if_tcp_blackhole def test_start_tls_server_1(self): HELLO_MSG = b'1' * self.PAYLOAD_SIZE ANSWER = b'answer' diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py index eeeca40c15cd28..dc5a48d500e8d5 100644 --- a/Lib/test/test_asyncio/test_subprocess.py +++ b/Lib/test/test_asyncio/test_subprocess.py @@ -1,6 +1,7 @@ import os import signal import sys +import textwrap import unittest import warnings from unittest import mock @@ -12,9 +13,14 @@ from test import support from test.support import os_helper -if sys.platform != 'win32': + +MS_WINDOWS = (sys.platform == 'win32') +if MS_WINDOWS: + import msvcrt +else: from asyncio import unix_events + if support.check_sanitizer(address=True): raise unittest.SkipTest("Exposes ASAN flakiness in GitHub CI") @@ -270,26 +276,43 @@ async def send_signal(proc): finally: signal.signal(signal.SIGHUP, old_handler) - def prepare_broken_pipe_test(self): + def test_stdin_broken_pipe(self): # buffer large enough to feed the whole pipe buffer large_data = b'x' * support.PIPE_MAX_SIZE + rfd, wfd = os.pipe() + self.addCleanup(os.close, rfd) + self.addCleanup(os.close, wfd) + if MS_WINDOWS: + handle = msvcrt.get_osfhandle(rfd) + os.set_handle_inheritable(handle, True) + code = textwrap.dedent(f''' + import os, msvcrt + handle = {handle} + fd = msvcrt.open_osfhandle(handle, os.O_RDONLY) + os.read(fd, 1) + ''') + from subprocess import STARTUPINFO + startupinfo = STARTUPINFO() + startupinfo.lpAttributeList = {"handle_list": [handle]} + kwargs = dict(startupinfo=startupinfo) + else: + code = f'import os; fd = {rfd}; os.read(fd, 1)' + kwargs = dict(pass_fds=(rfd,)) + # the program ends before the stdin can be fed proc = self.loop.run_until_complete( asyncio.create_subprocess_exec( - sys.executable, '-c', 'pass', + sys.executable, '-c', code, stdin=subprocess.PIPE, + **kwargs ) ) - return (proc, large_data) - - def test_stdin_broken_pipe(self): - proc, large_data = self.prepare_broken_pipe_test() - async def write_stdin(proc, data): - await asyncio.sleep(0.5) proc.stdin.write(data) + # Only exit the child process once the write buffer is filled + os.write(wfd, b'go') await proc.stdin.drain() coro = write_stdin(proc, large_data) @@ -300,7 +323,16 @@ async def write_stdin(proc, data): self.loop.run_until_complete(proc.wait()) def test_communicate_ignore_broken_pipe(self): - proc, large_data = self.prepare_broken_pipe_test() + # buffer large enough to feed the whole pipe buffer + large_data = b'x' * support.PIPE_MAX_SIZE + + # the program ends before the stdin can be fed + proc = self.loop.run_until_complete( + asyncio.create_subprocess_exec( + sys.executable, '-c', 'pass', + stdin=subprocess.PIPE, + ) + ) # communicate() must ignore BrokenPipeError when feeding stdin self.loop.set_exception_handler(lambda loop, msg: None) @@ -753,21 +785,44 @@ async def main() -> None: self.loop.run_until_complete(main()) - def test_subprocess_consistent_callbacks(self): + def test_subprocess_protocol_events(self): + # gh-108973: Test that all subprocess protocol methods are called. + # The protocol methods are not called in a determistic order. + # The order depends on the event loop and the operating system. events = [] + fds = [1, 2] + expected = [ + ('pipe_data_received', 1, b'stdout'), + ('pipe_data_received', 2, b'stderr'), + ('pipe_connection_lost', 1), + ('pipe_connection_lost', 2), + 'process_exited', + ] + per_fd_expected = [ + 'pipe_data_received', + 'pipe_connection_lost', + ] + class MyProtocol(asyncio.SubprocessProtocol): def __init__(self, exit_future: asyncio.Future) -> None: self.exit_future = exit_future def pipe_data_received(self, fd, data) -> None: events.append(('pipe_data_received', fd, data)) + self.exit_maybe() def pipe_connection_lost(self, fd, exc) -> None: - events.append('pipe_connection_lost') + events.append(('pipe_connection_lost', fd)) + self.exit_maybe() def process_exited(self) -> None: events.append('process_exited') - self.exit_future.set_result(True) + self.exit_maybe() + + def exit_maybe(self): + # Only exit when we got all expected events + if len(events) >= len(expected): + self.exit_future.set_result(True) async def main() -> None: loop = asyncio.get_running_loop() @@ -777,15 +832,24 @@ async def main() -> None: sys.executable, '-c', code, stdin=None) await exit_future transport.close() - self.assertEqual(events, [ - ('pipe_data_received', 1, b'stdout'), - ('pipe_data_received', 2, b'stderr'), - 'pipe_connection_lost', - 'pipe_connection_lost', - 'process_exited', - ]) - self.loop.run_until_complete(main()) + return events + + events = self.loop.run_until_complete(main()) + + # First, make sure that we received all events + self.assertSetEqual(set(events), set(expected)) + + # Second, check order of pipe events per file descriptor + per_fd_events = {fd: [] for fd in fds} + for event in events: + if event == 'process_exited': + continue + name, fd = event[:2] + per_fd_events[fd].append(name) + + for fd in fds: + self.assertEqual(per_fd_events[fd], per_fd_expected, (fd, events)) def test_subprocess_communicate_stdout(self): # See https://github.com/python/cpython/issues/100133 diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py index cdf3eaac68af15..7322be597ae2d2 100644 --- a/Lib/test/test_asyncio/test_unix_events.py +++ b/Lib/test/test_asyncio/test_unix_events.py @@ -11,9 +11,11 @@ import stat import sys import threading +import time import unittest from unittest import mock import warnings +from test import support from test.support import os_helper from test.support import socket_helper from test.support import wait_process @@ -1911,8 +1913,14 @@ def test_fork_signal_handling(self): parent_handled = manager.Event() def child_main(): - signal.signal(signal.SIGTERM, lambda *args: child_handled.set()) + def on_sigterm(*args): + child_handled.set() + sys.exit() + + signal.signal(signal.SIGTERM, on_sigterm) child_started.set() + while True: + time.sleep(1) async def main(): loop = asyncio.get_running_loop() @@ -1922,7 +1930,7 @@ async def main(): process.start() child_started.wait() os.kill(process.pid, signal.SIGTERM) - process.join() + process.join(timeout=support.SHORT_TIMEOUT) async def func(): await asyncio.sleep(0.1) @@ -1933,6 +1941,7 @@ async def func(): asyncio.run(main()) + child_handled.wait(timeout=support.SHORT_TIMEOUT) self.assertFalse(parent_handled.is_set()) self.assertTrue(child_handled.is_set()) diff --git a/Lib/test/test_asyncio/utils.py b/Lib/test/test_asyncio/utils.py index 6dee5bb33b2560..1e5ab6eb935ef1 100644 --- a/Lib/test/test_asyncio/utils.py +++ b/Lib/test/test_asyncio/utils.py @@ -36,21 +36,20 @@ from test.support import threading_helper -def data_file(filename): - if hasattr(support, 'TEST_HOME_DIR'): - fullname = os.path.join(support.TEST_HOME_DIR, filename) - if os.path.isfile(fullname): - return fullname - fullname = os.path.join(os.path.dirname(__file__), '..', filename) +def data_file(*filename): + fullname = os.path.join(support.TEST_HOME_DIR, *filename) if os.path.isfile(fullname): return fullname - raise FileNotFoundError(filename) + fullname = os.path.join(os.path.dirname(__file__), '..', *filename) + if os.path.isfile(fullname): + return fullname + raise FileNotFoundError(os.path.join(filename)) -ONLYCERT = data_file('ssl_cert.pem') -ONLYKEY = data_file('ssl_key.pem') -SIGNED_CERTFILE = data_file('keycert3.pem') -SIGNING_CA = data_file('pycacert.pem') +ONLYCERT = data_file('certdata', 'ssl_cert.pem') +ONLYKEY = data_file('certdata', 'ssl_key.pem') +SIGNED_CERTFILE = data_file('certdata', 'keycert3.pem') +SIGNING_CA = data_file('certdata', 'pycacert.pem') PEERCERT = { 'OCSP': ('http://testca.pythontest.net/testca/ocsp/',), 'caIssuers': ('http://testca.pythontest.net/testca/pycacert.cer',), diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py index 3a15835917cc32..47e5832d311bd1 100644 --- a/Lib/test/test_audit.py +++ b/Lib/test/test_audit.py @@ -19,7 +19,7 @@ class AuditTest(unittest.TestCase): maxDiff = None @support.requires_subprocess() - def do_test(self, *args): + def run_test_in_subprocess(self, *args): with subprocess.Popen( [sys.executable, "-X utf8", AUDIT_TESTS_PY, *args], encoding="utf-8", @@ -27,27 +27,26 @@ def do_test(self, *args): stderr=subprocess.PIPE, ) as p: p.wait() - sys.stdout.writelines(p.stdout) - sys.stderr.writelines(p.stderr) - if p.returncode: - self.fail("".join(p.stderr)) + return p, p.stdout.read(), p.stderr.read() - @support.requires_subprocess() - def run_python(self, *args): + def do_test(self, *args): + proc, stdout, stderr = self.run_test_in_subprocess(*args) + + sys.stdout.write(stdout) + sys.stderr.write(stderr) + if proc.returncode: + self.fail(stderr) + + def run_python(self, *args, expect_stderr=False): events = [] - with subprocess.Popen( - [sys.executable, "-X utf8", AUDIT_TESTS_PY, *args], - encoding="utf-8", - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) as p: - p.wait() - sys.stderr.writelines(p.stderr) - return ( - p.returncode, - [line.strip().partition(" ") for line in p.stdout], - "".join(p.stderr), - ) + proc, stdout, stderr = self.run_test_in_subprocess(*args) + if not expect_stderr or support.verbose: + sys.stderr.write(stderr) + return ( + proc.returncode, + [line.strip().partition(" ") for line in stdout.splitlines()], + stderr, + ) def test_basic(self): self.do_test("test_basic") @@ -257,7 +256,7 @@ def test_not_in_gc(self): self.fail(stderr) def test_time(self): - returncode, events, stderr = self.run_python("test_time") + returncode, events, stderr = self.run_python("test_time", "print") if returncode: self.fail(stderr) @@ -271,6 +270,11 @@ def test_time(self): self.assertEqual(actual, expected) + def test_time_fail(self): + returncode, events, stderr = self.run_python("test_time", "fail", + expect_stderr=True) + self.assertNotEqual(returncode, 0) + self.assertIn('hook failed', stderr.splitlines()[-1]) def test_sys_monitoring_register_callback(self): returncode, events, stderr = self.run_python("test_sys_monitoring_register_callback") diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py index eb831b1a06fcb8..ef744f6b97259c 100644 --- a/Lib/test/test_binascii.py +++ b/Lib/test/test_binascii.py @@ -230,10 +230,10 @@ def test_uu(self): binascii.b2a_uu(b"", True) @hypothesis.given( - binary=hypothesis.strategies.binary(), + binary=hypothesis.strategies.binary(max_size=45), backtick=hypothesis.strategies.booleans(), ) - def test_hex_roundtrip(self, binary, backtick): + def test_b2a_roundtrip(self, binary, backtick): converted = binascii.b2a_uu(self.type2test(binary), backtick=backtick) restored = binascii.a2b_uu(self.type2test(converted)) self.assertConversion(binary, converted, restored, backtick=backtick) diff --git a/Lib/test/test_capi/test_abstract.py b/Lib/test/test_capi/test_abstract.py index 3f51e5b28104d9..eeaef60a8b47b5 100644 --- a/Lib/test/test_capi/test_abstract.py +++ b/Lib/test/test_capi/test_abstract.py @@ -1,8 +1,5 @@ import unittest -import sys from collections import OrderedDict -from test import support -from test.support import import_helper import _testcapi @@ -129,6 +126,34 @@ def test_object_hasattrstring(self): # CRASHES hasattrstring(obj, NULL) # CRASHES hasattrstring(NULL, b'a') + def test_object_hasattrwitherror(self): + xhasattr = _testcapi.object_hasattrwitherror + obj = TestObject() + obj.a = 1 + setattr(obj, '\U0001f40d', 2) + self.assertTrue(xhasattr(obj, 'a')) + self.assertFalse(xhasattr(obj, 'b')) + self.assertTrue(xhasattr(obj, '\U0001f40d')) + + self.assertRaises(RuntimeError, xhasattr, obj, 'evil') + self.assertRaises(TypeError, xhasattr, obj, 1) + # CRASHES xhasattr(obj, NULL) + # CRASHES xhasattr(NULL, 'a') + + def test_object_hasattrstringwitherror(self): + hasattrstring = _testcapi.object_hasattrstringwitherror + obj = TestObject() + obj.a = 1 + setattr(obj, '\U0001f40d', 2) + self.assertTrue(hasattrstring(obj, b'a')) + self.assertFalse(hasattrstring(obj, b'b')) + self.assertTrue(hasattrstring(obj, '\U0001f40d'.encode())) + + self.assertRaises(RuntimeError, hasattrstring, obj, b'evil') + self.assertRaises(UnicodeDecodeError, hasattrstring, obj, b'\xff') + # CRASHES hasattrstring(obj, NULL) + # CRASHES hasattrstring(NULL, b'a') + def test_object_setattr(self): xsetattr = _testcapi.object_setattr obj = TestObject() @@ -265,6 +290,43 @@ def test_mapping_getitemstring(self): self.assertRaises(TypeError, getitemstring, [], b'a') self.assertRaises(SystemError, getitemstring, NULL, b'a') + def test_mapping_getoptionalitem(self): + getitem = _testcapi.mapping_getoptionalitem + dct = {'a': 1, '\U0001f40d': 2} + self.assertEqual(getitem(dct, 'a'), 1) + self.assertEqual(getitem(dct, 'b'), KeyError) + self.assertEqual(getitem(dct, '\U0001f40d'), 2) + + dct2 = ProxyGetItem(dct) + self.assertEqual(getitem(dct2, 'a'), 1) + self.assertEqual(getitem(dct2, 'b'), KeyError) + + self.assertEqual(getitem(['a', 'b', 'c'], 1), 'b') + + self.assertRaises(TypeError, getitem, 42, 'a') + self.assertRaises(TypeError, getitem, {}, []) # unhashable + self.assertRaises(IndexError, getitem, [], 1) + self.assertRaises(TypeError, getitem, [], 'a') + # CRASHES getitem({}, NULL) + # CRASHES getitem(NULL, 'a') + + def test_mapping_getoptionalitemstring(self): + getitemstring = _testcapi.mapping_getoptionalitemstring + dct = {'a': 1, '\U0001f40d': 2} + self.assertEqual(getitemstring(dct, b'a'), 1) + self.assertEqual(getitemstring(dct, b'b'), KeyError) + self.assertEqual(getitemstring(dct, '\U0001f40d'.encode()), 2) + + dct2 = ProxyGetItem(dct) + self.assertEqual(getitemstring(dct2, b'a'), 1) + self.assertEqual(getitemstring(dct2, b'b'), KeyError) + + self.assertRaises(TypeError, getitemstring, 42, b'a') + self.assertRaises(UnicodeDecodeError, getitemstring, {}, b'\xff') + self.assertRaises(SystemError, getitemstring, {}, NULL) + self.assertRaises(TypeError, getitemstring, [], b'a') + # CRASHES getitemstring(NULL, b'a') + def test_mapping_haskey(self): haskey = _testcapi.mapping_haskey dct = {'a': 1, '\U0001f40d': 2} @@ -302,6 +364,44 @@ def test_mapping_haskeystring(self): self.assertFalse(haskeystring([], b'a')) self.assertFalse(haskeystring(NULL, b'a')) + def test_mapping_haskeywitherror(self): + haskey = _testcapi.mapping_haskeywitherror + dct = {'a': 1, '\U0001f40d': 2} + self.assertTrue(haskey(dct, 'a')) + self.assertFalse(haskey(dct, 'b')) + self.assertTrue(haskey(dct, '\U0001f40d')) + + dct2 = ProxyGetItem(dct) + self.assertTrue(haskey(dct2, 'a')) + self.assertFalse(haskey(dct2, 'b')) + + self.assertTrue(haskey(['a', 'b', 'c'], 1)) + + self.assertRaises(TypeError, haskey, 42, 'a') + self.assertRaises(TypeError, haskey, {}, []) # unhashable + self.assertRaises(IndexError, haskey, [], 1) + self.assertRaises(TypeError, haskey, [], 'a') + + # CRASHES haskey({}, NULL)) + # CRASHES haskey(NULL, 'a')) + + def test_mapping_haskeystringwitherror(self): + haskeystring = _testcapi.mapping_haskeystringwitherror + dct = {'a': 1, '\U0001f40d': 2} + self.assertTrue(haskeystring(dct, b'a')) + self.assertFalse(haskeystring(dct, b'b')) + self.assertTrue(haskeystring(dct, '\U0001f40d'.encode())) + + dct2 = ProxyGetItem(dct) + self.assertTrue(haskeystring(dct2, b'a')) + self.assertFalse(haskeystring(dct2, b'b')) + + self.assertRaises(TypeError, haskeystring, 42, b'a') + self.assertRaises(UnicodeDecodeError, haskeystring, {}, b'\xff') + self.assertRaises(SystemError, haskeystring, {}, NULL) + self.assertRaises(TypeError, haskeystring, [], b'a') + # CRASHES haskeystring(NULL, b'a') + def test_object_setitem(self): setitem = _testcapi.object_setitem dct = {} diff --git a/Lib/test/test_capi/test_dict.py b/Lib/test/test_capi/test_dict.py index b22fa20e14dfea..11b2ca910707df 100644 --- a/Lib/test/test_capi/test_dict.py +++ b/Lib/test/test_capi/test_dict.py @@ -1,9 +1,6 @@ import unittest -import sys from collections import OrderedDict, UserDict from types import MappingProxyType -from test import support -from test.support import import_helper import _testcapi diff --git a/Lib/test/test_capi/test_getargs.py b/Lib/test/test_capi/test_getargs.py index 246206af86101c..e10f679eeb71c8 100644 --- a/Lib/test/test_capi/test_getargs.py +++ b/Lib/test/test_capi/test_getargs.py @@ -1004,70 +1004,6 @@ def test_et_hash(self): buf = bytearray() self.assertRaises(ValueError, getargs_et_hash, 'abc\xe9', 'latin1', buf) - @support.requires_legacy_unicode_capi() - def test_u(self): - from _testcapi import getargs_u - with self.assertWarns(DeprecationWarning): - self.assertEqual(getargs_u('abc\xe9'), 'abc\xe9') - with self.assertWarns(DeprecationWarning): - self.assertRaises(ValueError, getargs_u, 'nul:\0') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u, b'bytes') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u, bytearray(b'bytearray')) - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u, memoryview(b'memoryview')) - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u, None) - - @support.requires_legacy_unicode_capi() - def test_u_hash(self): - from _testcapi import getargs_u_hash - with self.assertWarns(DeprecationWarning): - self.assertEqual(getargs_u_hash('abc\xe9'), 'abc\xe9') - with self.assertWarns(DeprecationWarning): - self.assertEqual(getargs_u_hash('nul:\0'), 'nul:\0') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u_hash, b'bytes') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u_hash, bytearray(b'bytearray')) - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u_hash, memoryview(b'memoryview')) - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_u_hash, None) - - @support.requires_legacy_unicode_capi() - def test_Z(self): - from _testcapi import getargs_Z - with self.assertWarns(DeprecationWarning): - self.assertEqual(getargs_Z('abc\xe9'), 'abc\xe9') - with self.assertWarns(DeprecationWarning): - self.assertRaises(ValueError, getargs_Z, 'nul:\0') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_Z, b'bytes') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_Z, bytearray(b'bytearray')) - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_Z, memoryview(b'memoryview')) - with self.assertWarns(DeprecationWarning): - self.assertIsNone(getargs_Z(None)) - - @support.requires_legacy_unicode_capi() - def test_Z_hash(self): - from _testcapi import getargs_Z_hash - with self.assertWarns(DeprecationWarning): - self.assertEqual(getargs_Z_hash('abc\xe9'), 'abc\xe9') - with self.assertWarns(DeprecationWarning): - self.assertEqual(getargs_Z_hash('nul:\0'), 'nul:\0') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_Z_hash, b'bytes') - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_Z_hash, bytearray(b'bytearray')) - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, getargs_Z_hash, memoryview(b'memoryview')) - with self.assertWarns(DeprecationWarning): - self.assertIsNone(getargs_Z_hash(None)) - def test_gh_99240_clear_args(self): from _testcapi import gh_99240_clear_args self.assertRaises(TypeError, gh_99240_clear_args, 'a', '\0b') diff --git a/Lib/test/test_capi/test_misc.py b/Lib/test/test_capi/test_misc.py index 004ce397696556..5ece213e7b2363 100644 --- a/Lib/test/test_capi/test_misc.py +++ b/Lib/test/test_capi/test_misc.py @@ -2,7 +2,7 @@ # these are all functions _testcapi exports whose name begins with 'test_'. import _thread -from collections import OrderedDict, deque +from collections import deque import contextlib import importlib.machinery import importlib.util @@ -301,24 +301,42 @@ def test_getitem_with_error(self): def test_buildvalue_N(self): _testcapi.test_buildvalue_N() - @unittest.skipUnless(hasattr(_testcapi, 'negative_refcount'), - 'need _testcapi.negative_refcount') - def test_negative_refcount(self): + def check_negative_refcount(self, code): # bpo-35059: Check that Py_DECREF() reports the correct filename # when calling _Py_NegativeRefcount() to abort Python. - code = textwrap.dedent(""" - import _testcapi - from test import support - - with support.SuppressCrashReport(): - _testcapi.negative_refcount() - """) + code = textwrap.dedent(code) rc, out, err = assert_python_failure('-c', code) self.assertRegex(err, br'_testcapimodule\.c:[0-9]+: ' br'_Py_NegativeRefcount: Assertion failed: ' br'object has negative ref count') + @unittest.skipUnless(hasattr(_testcapi, 'negative_refcount'), + 'need _testcapi.negative_refcount()') + def test_negative_refcount(self): + code = """ + import _testcapi + from test import support + + with support.SuppressCrashReport(): + _testcapi.negative_refcount() + """ + self.check_negative_refcount(code) + + @unittest.skipUnless(hasattr(_testcapi, 'decref_freed_object'), + 'need _testcapi.decref_freed_object()') + @support.skip_if_sanitizer("use after free on purpose", + address=True, memory=True, ub=True) + def test_decref_freed_object(self): + code = """ + import _testcapi + from test import support + + with support.SuppressCrashReport(): + _testcapi.decref_freed_object() + """ + self.check_negative_refcount(code) + def test_trashcan_subclass(self): # bpo-35983: Check that the trashcan mechanism for "list" is NOT # activated when its tp_dealloc is being called by a subclass @@ -2067,7 +2085,15 @@ def test_version_api_data(self): class Test_testinternalcapi(unittest.TestCase): locals().update((name, getattr(_testinternalcapi, name)) for name in dir(_testinternalcapi) - if name.startswith('test_')) + if name.startswith('test_') + and not name.startswith('test_lock_')) + + +@threading_helper.requires_working_threading() +class Test_PyLock(unittest.TestCase): + locals().update((name, getattr(_testinternalcapi, name)) + for name in dir(_testinternalcapi) + if name.startswith('test_lock_')) @unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module") @@ -2390,7 +2416,7 @@ def testfunc(x): ex = get_first_executor(testfunc) self.assertIsNotNone(ex) uops = {opname for opname, _, _ in ex} - self.assertIn("SAVE_IP", uops) + self.assertIn("_SET_IP", uops) self.assertIn("LOAD_FAST", uops) def test_extended_arg(self): @@ -2455,7 +2481,7 @@ def testfunc(x): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(10) + testfunc(20) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2470,7 +2496,7 @@ def testfunc(n): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(10) + testfunc(20) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2485,7 +2511,7 @@ def testfunc(a): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(range(10)) + testfunc(range(20)) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2495,12 +2521,13 @@ def testfunc(a): def test_pop_jump_if_not_none(self): def testfunc(a): for x in a: + x = None if x is not None: x = 0 opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(range(10)) + testfunc(range(20)) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2515,7 +2542,7 @@ def testfunc(n): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(10) + testfunc(20) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2530,12 +2557,12 @@ def testfunc(n): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(10) + testfunc(20) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) uops = {opname for opname, _, _ in ex} - self.assertIn("JUMP_TO_TOP", uops) + self.assertIn("_JUMP_TO_TOP", uops) def test_jump_forward(self): def testfunc(n): @@ -2550,7 +2577,7 @@ def testfunc(n): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(10) + testfunc(20) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2568,8 +2595,8 @@ def testfunc(n): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - total = testfunc(10) - self.assertEqual(total, 45) + total = testfunc(20) + self.assertEqual(total, 190) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2589,9 +2616,9 @@ def testfunc(a): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - a = list(range(10)) + a = list(range(20)) total = testfunc(a) - self.assertEqual(total, 45) + self.assertEqual(total, 190) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2611,9 +2638,9 @@ def testfunc(a): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - a = tuple(range(10)) + a = tuple(range(20)) total = testfunc(a) - self.assertEqual(total, 45) + self.assertEqual(total, 190) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2647,7 +2674,7 @@ def dummy(x): opt = _testinternalcapi.get_uop_optimizer() with temporary_optimizer(opt): - testfunc(10) + testfunc(20) ex = get_first_executor(testfunc) self.assertIsNotNone(ex) @@ -2655,6 +2682,22 @@ def dummy(x): self.assertIn("_PUSH_FRAME", uops) self.assertIn("_BINARY_OP_ADD_INT", uops) + def test_branch_taken(self): + def testfunc(n): + for i in range(n): + if i < 0: + i = 0 + else: + i = 1 + + opt = _testinternalcapi.get_uop_optimizer() + with temporary_optimizer(opt): + testfunc(20) + + ex = get_first_executor(testfunc) + self.assertIsNotNone(ex) + uops = {opname for opname, _, _ in ex} + self.assertIn("_POP_JUMP_IF_TRUE", uops) if __name__ == "__main__": diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index e88b7c8572d9e8..f4754dbf735a1d 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -799,6 +799,7 @@ def check_pythonmalloc(self, env_var, name): self.assertEqual(proc.stdout.rstrip(), name) self.assertEqual(proc.returncode, 0) + @support.cpython_only def test_pythonmalloc(self): # Test the PYTHONMALLOC environment variable pymalloc = support.with_pymalloc() diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index e056c16466e8c4..a961ddbe17a3d3 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -125,6 +125,7 @@ """ +import copy import inspect import sys import threading @@ -280,11 +281,17 @@ def func2(): with self.subTest(attr=attr, value=value): new_code = code.replace(**{attr: value}) self.assertEqual(getattr(new_code, attr), value) + new_code = copy.replace(code, **{attr: value}) + self.assertEqual(getattr(new_code, attr), value) new_code = code.replace(co_varnames=code2.co_varnames, co_nlocals=code2.co_nlocals) self.assertEqual(new_code.co_varnames, code2.co_varnames) self.assertEqual(new_code.co_nlocals, code2.co_nlocals) + new_code = copy.replace(code, co_varnames=code2.co_varnames, + co_nlocals=code2.co_nlocals) + self.assertEqual(new_code.co_varnames, code2.co_varnames) + self.assertEqual(new_code.co_nlocals, code2.co_nlocals) def test_nlocals_mismatch(self): def func(): @@ -498,6 +505,25 @@ def test_code_hash_uses_bytecode(self): self.assertNotEqual(c, c1) self.assertNotEqual(hash(c), hash(c1)) + @cpython_only + def test_code_equal_with_instrumentation(self): + """ GH-109052 + + Make sure the instrumentation doesn't affect the code equality + The validity of this test relies on the fact that "x is x" and + "x in x" have only one different instruction and the instructions + have the same argument. + + """ + code1 = compile("x is x", "example.py", "eval") + code2 = compile("x in x", "example.py", "eval") + sys._getframe().f_trace_opcodes = True + sys.settrace(lambda *args: None) + exec(code1, {'x': []}) + exec(code2, {'x': []}) + self.assertNotEqual(code1, code2) + sys.settrace(None) + def isinterned(s): return s is sys.intern(('_' + s + '_')[1:-1]) diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 91d7eaf997ae20..b5e9271ac0c3cd 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -1,7 +1,9 @@ import codecs import contextlib +import copy import io import locale +import pickle import sys import unittest import encodings @@ -1771,6 +1773,61 @@ def test_readlines(self): f = self.reader(self.stream) self.assertEqual(f.readlines(), ['\ud55c\n', '\uae00']) + def test_copy(self): + f = self.reader(Queue(b'\xed\x95\x9c\n\xea\xb8\x80')) + with self.assertRaisesRegex(TypeError, 'StreamReader'): + copy.copy(f) + with self.assertRaisesRegex(TypeError, 'StreamReader'): + copy.deepcopy(f) + + def test_pickle(self): + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(protocol=proto): + f = self.reader(Queue(b'\xed\x95\x9c\n\xea\xb8\x80')) + with self.assertRaisesRegex(TypeError, 'StreamReader'): + pickle.dumps(f, proto) + + +class StreamWriterTest(unittest.TestCase): + + def setUp(self): + self.writer = codecs.getwriter('utf-8') + + def test_copy(self): + f = self.writer(Queue(b'')) + with self.assertRaisesRegex(TypeError, 'StreamWriter'): + copy.copy(f) + with self.assertRaisesRegex(TypeError, 'StreamWriter'): + copy.deepcopy(f) + + def test_pickle(self): + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(protocol=proto): + f = self.writer(Queue(b'')) + with self.assertRaisesRegex(TypeError, 'StreamWriter'): + pickle.dumps(f, proto) + + +class StreamReaderWriterTest(unittest.TestCase): + + def setUp(self): + self.reader = codecs.getreader('latin1') + self.writer = codecs.getwriter('utf-8') + + def test_copy(self): + f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): + copy.copy(f) + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): + copy.deepcopy(f) + + def test_pickle(self): + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(protocol=proto): + f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) + with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): + pickle.dumps(f, proto) + class EncodedFileTest(unittest.TestCase): @@ -3346,6 +3403,28 @@ def test_seeking_write(self): self.assertEqual(sr.readline(), b'abc\n') self.assertEqual(sr.readline(), b'789\n') + def test_copy(self): + bio = io.BytesIO() + codec = codecs.lookup('ascii') + sr = codecs.StreamRecoder(bio, codec.encode, codec.decode, + encodings.ascii.StreamReader, encodings.ascii.StreamWriter) + + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): + copy.copy(sr) + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): + copy.deepcopy(sr) + + def test_pickle(self): + q = Queue(b'') + codec = codecs.lookup('ascii') + sr = codecs.StreamRecoder(q, codec.encode, codec.decode, + encodings.ascii.StreamReader, encodings.ascii.StreamWriter) + + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(protocol=proto): + with self.assertRaisesRegex(TypeError, 'StreamRecoder'): + pickle.dumps(sr, proto) + @unittest.skipIf(_testinternalcapi is None, 'need _testinternalcapi module') class LocaleCodecTest(unittest.TestCase): diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index de513daf825d81..d3a5517963c540 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -11,7 +11,7 @@ import warnings from test import support from test.support import (script_helper, requires_debug_ranges, - requires_specialization, C_RECURSION_LIMIT) + requires_specialization, Py_C_RECURSION_LIMIT) from test.support.os_helper import FakePath class TestSpecifics(unittest.TestCase): @@ -111,7 +111,7 @@ def __getitem__(self, key): @unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI") def test_extended_arg(self): - repeat = int(C_RECURSION_LIMIT * 0.9) + repeat = int(Py_C_RECURSION_LIMIT * 0.9) longexpr = 'x = x or ' + '-x' * repeat g = {} code = textwrap.dedent(''' @@ -443,6 +443,33 @@ def f(): self.assertIn("_A__mangled_mod", A.f.__code__.co_varnames) self.assertIn("__package__", A.f.__code__.co_varnames) + def test_compile_invalid_namedexpr(self): + # gh-109351 + m = ast.Module( + body=[ + ast.Expr( + value=ast.ListComp( + elt=ast.NamedExpr( + target=ast.Constant(value=1), + value=ast.Constant(value=3), + ), + generators=[ + ast.comprehension( + target=ast.Name(id="x", ctx=ast.Store()), + iter=ast.Name(id="y", ctx=ast.Load()), + ifs=[], + is_async=0, + ) + ], + ) + ) + ], + type_ignores=[], + ) + + with self.assertRaisesRegex(TypeError, "NamedExpr target must be a Name"): + compile(ast.fix_missing_locations(m), "", "exec") + def test_compile_ast(self): fname = __file__ if fname.lower().endswith('pyc'): @@ -478,6 +505,26 @@ def test_compile_ast(self): ast.body = [_ast.BoolOp()] self.assertRaises(TypeError, compile, ast, '', 'exec') + def test_compile_invalid_typealias(self): + # gh-109341 + m = ast.Module( + body=[ + ast.TypeAlias( + name=ast.Subscript( + value=ast.Name(id="foo", ctx=ast.Load()), + slice=ast.Constant(value="x"), + ctx=ast.Store(), + ), + type_params=[], + value=ast.Name(id="Callable", ctx=ast.Load()), + ) + ], + type_ignores=[], + ) + + with self.assertRaisesRegex(TypeError, "TypeAlias with non-Name name"): + compile(ast.fix_missing_locations(m), "", "exec") + def test_dict_evaluation_order(self): i = 0 @@ -557,12 +604,12 @@ def test_yet_more_evil_still_undecodable(self): @support.cpython_only @unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI") def test_compiler_recursion_limit(self): - # Expected limit is C_RECURSION_LIMIT * 2 + # Expected limit is Py_C_RECURSION_LIMIT * 2 # Duplicating the limit here is a little ugly. # Perhaps it should be exposed somewhere... - fail_depth = C_RECURSION_LIMIT * 2 + 1 - crash_depth = C_RECURSION_LIMIT * 100 - success_depth = int(C_RECURSION_LIMIT * 1.8) + fail_depth = Py_C_RECURSION_LIMIT * 2 + 1 + crash_depth = Py_C_RECURSION_LIMIT * 100 + success_depth = int(Py_C_RECURSION_LIMIT * 1.8) def check_limit(prefix, repeated, mode="single"): expect_ok = prefix + repeated * success_depth @@ -1205,6 +1252,26 @@ def f(): return a, b self.assertEqual(f(), (54, 96)) + def test_duplicated_small_exit_block(self): + # See gh-109627 + def f(): + while element and something: + try: + return something + except: + pass + + def test_cold_block_moved_to_end(self): + # See gh-109719 + def f(): + while name: + try: + break + except: + pass + else: + 1 if 1 else 1 + @requires_debug_ranges() class TestSourcePositions(unittest.TestCase): @@ -1751,6 +1818,13 @@ def test_column_offset_deduplication(self): list(code.co_consts[1].co_positions()), ) + def test_load_super_attr(self): + source = "class C:\n def __init__(self):\n super().__init__()" + code = compile(source, "", "exec").co_consts[0].co_consts[1] + self.assertOpcodeSourcePositionIs( + code, "LOAD_GLOBAL", line=3, end_line=3, column=4, end_column=9 + ) + class TestExpressionStackSize(unittest.TestCase): # These tests check that the computed stack size for a code object diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py index df7c5122b3b1f5..9cd92ad365c5a9 100644 --- a/Lib/test/test_compileall.py +++ b/Lib/test/test_compileall.py @@ -18,6 +18,7 @@ try: # compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists # and it can function. + from multiprocessing.util import _cleanup_tests as multiprocessing_cleanup_tests from concurrent.futures import ProcessPoolExecutor from concurrent.futures.process import _check_system_limits _check_system_limits() @@ -54,6 +55,8 @@ class CompileallTestsBase: def setUp(self): self.directory = tempfile.mkdtemp() + self.addCleanup(shutil.rmtree, self.directory) + self.source_path = os.path.join(self.directory, '_test.py') self.bc_path = importlib.util.cache_from_source(self.source_path) with open(self.source_path, 'w', encoding="utf-8") as file: @@ -66,9 +69,6 @@ def setUp(self): self.source_path3 = os.path.join(self.subdirectory, '_test3.py') shutil.copyfile(self.source_path, self.source_path3) - def tearDown(self): - shutil.rmtree(self.directory) - def add_bad_source_file(self): self.bad_source_path = os.path.join(self.directory, '_test_bad.py') with open(self.bad_source_path, 'w', encoding="utf-8") as file: @@ -307,9 +307,13 @@ def _test_ddir_only(self, *, ddir, parallel=True): script_helper.make_script(path, "__init__", "") mods.append(script_helper.make_script(path, "mod", "def fn(): 1/0\nfn()\n")) + + if parallel: + self.addCleanup(multiprocessing_cleanup_tests) compileall.compile_dir( self.directory, quiet=True, ddir=ddir, workers=2 if parallel else 1) + self.assertTrue(mods) for mod in mods: self.assertTrue(mod.startswith(self.directory), mod) diff --git a/Lib/test/test_concurrent_futures/executor.py b/Lib/test/test_concurrent_futures/executor.py index 36278bdd501971..1e7d4344740943 100644 --- a/Lib/test/test_concurrent_futures/executor.py +++ b/Lib/test/test_concurrent_futures/executor.py @@ -53,6 +53,7 @@ def test_map_exception(self): self.assertEqual(i.__next__(), (0, 1)) self.assertRaises(ZeroDivisionError, i.__next__) + @support.requires_resource('walltime') def test_map_timeout(self): results = [] try: diff --git a/Lib/test/test_concurrent_futures/test_deadlock.py b/Lib/test/test_concurrent_futures/test_deadlock.py index 6b78b360d15627..a76e075c3be180 100644 --- a/Lib/test/test_concurrent_futures/test_deadlock.py +++ b/Lib/test/test_concurrent_futures/test_deadlock.py @@ -1,10 +1,13 @@ import contextlib +import queue +import signal import sys import time import unittest +import unittest.mock from pickle import PicklingError from concurrent import futures -from concurrent.futures.process import BrokenProcessPool +from concurrent.futures.process import BrokenProcessPool, _ThreadWakeup from test import support @@ -88,7 +91,7 @@ def __reduce__(self): class ExecutorDeadlockTest: - TIMEOUT = support.SHORT_TIMEOUT + TIMEOUT = support.LONG_TIMEOUT def _fail_on_deadlock(self, executor): # If we did not recover before TIMEOUT seconds, consider that the @@ -239,6 +242,75 @@ def test_crash_big_data(self): with self.assertRaises(BrokenProcessPool): list(executor.map(_crash_with_data, [data] * 10)) + executor.shutdown(wait=True) + + def test_gh105829_should_not_deadlock_if_wakeup_pipe_full(self): + # Issue #105829: The _ExecutorManagerThread wakeup pipe could + # fill up and block. See: https://github.com/python/cpython/issues/105829 + + # Lots of cargo culting while writing this test, apologies if + # something is really stupid... + + self.executor.shutdown(wait=True) + + if not hasattr(signal, 'alarm'): + raise unittest.SkipTest( + "Tested platform does not support the alarm signal") + + def timeout(_signum, _frame): + import faulthandler + faulthandler.dump_traceback() + + raise RuntimeError("timed out while submitting jobs?") + + thread_run = futures.process._ExecutorManagerThread.run + def mock_run(self): + # Delay thread startup so the wakeup pipe can fill up and block + time.sleep(3) + thread_run(self) + + class MockWakeup(_ThreadWakeup): + """Mock wakeup object to force the wakeup to block""" + def __init__(self): + super().__init__() + self._dummy_queue = queue.Queue(maxsize=1) + + def wakeup(self): + self._dummy_queue.put(None, block=True) + super().wakeup() + + def clear(self): + try: + while True: + self._dummy_queue.get_nowait() + except queue.Empty: + super().clear() + + with (unittest.mock.patch.object(futures.process._ExecutorManagerThread, + 'run', mock_run), + unittest.mock.patch('concurrent.futures.process._ThreadWakeup', + MockWakeup)): + with self.executor_type(max_workers=2, + mp_context=self.get_context()) as executor: + self.executor = executor # Allow clean up in fail_on_deadlock + + job_num = 100 + job_data = range(job_num) + + # Need to use sigalarm for timeout detection because + # Executor.submit is not guarded by any timeout (both + # self._work_ids.put(self._queue_count) and + # self._executor_manager_thread_wakeup.wakeup() might + # timeout, maybe more?). In this specific case it was + # the wakeup call that deadlocked on a blocking pipe. + old_handler = signal.signal(signal.SIGALRM, timeout) + try: + signal.alarm(int(self.TIMEOUT)) + self.assertEqual(job_num, len(list(executor.map(int, job_data)))) + finally: + signal.alarm(0) + signal.signal(signal.SIGALRM, old_handler) + create_executor_tests(globals(), ExecutorDeadlockTest, executor_mixins=(ProcessPoolForkMixin, diff --git a/Lib/test/test_concurrent_futures/test_wait.py b/Lib/test/test_concurrent_futures/test_wait.py index e4bea8b05aced6..3f64ca173c02f6 100644 --- a/Lib/test/test_concurrent_futures/test_wait.py +++ b/Lib/test/test_concurrent_futures/test_wait.py @@ -3,6 +3,7 @@ import time import unittest from concurrent import futures +from test import support from .util import ( CANCELLED_FUTURE, CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, @@ -53,6 +54,7 @@ def test_first_completed_some_already_completed(self): finished) self.assertEqual(set([future1]), pending) + @support.requires_resource('walltime') def test_first_exception(self): future1 = self.executor.submit(mul, 2, 21) future2 = self.executor.submit(sleep_and_raise, 1.5) @@ -110,6 +112,7 @@ def test_all_completed(self): future2]), finished) self.assertEqual(set(), pending) + @support.requires_resource('walltime') def test_timeout(self): future1 = self.executor.submit(mul, 6, 7) future2 = self.executor.submit(time.sleep, 6) diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py index 826e46824e004c..c66c6eeb00811e 100644 --- a/Lib/test/test_copy.py +++ b/Lib/test/test_copy.py @@ -4,7 +4,7 @@ import copyreg import weakref import abc -from operator import le, lt, ge, gt, eq, ne +from operator import le, lt, ge, gt, eq, ne, attrgetter import unittest from test import support @@ -899,7 +899,71 @@ def m(self): g.b() +class TestReplace(unittest.TestCase): + + def test_unsupported(self): + self.assertRaises(TypeError, copy.replace, 1) + self.assertRaises(TypeError, copy.replace, []) + self.assertRaises(TypeError, copy.replace, {}) + def f(): pass + self.assertRaises(TypeError, copy.replace, f) + class A: pass + self.assertRaises(TypeError, copy.replace, A) + self.assertRaises(TypeError, copy.replace, A()) + + def test_replace_method(self): + class A: + def __new__(cls, x, y=0): + self = object.__new__(cls) + self.x = x + self.y = y + return self + + def __init__(self, *args, **kwargs): + self.z = self.x + self.y + + def __replace__(self, **changes): + x = changes.get('x', self.x) + y = changes.get('y', self.y) + return type(self)(x, y) + + attrs = attrgetter('x', 'y', 'z') + a = A(11, 22) + self.assertEqual(attrs(copy.replace(a)), (11, 22, 33)) + self.assertEqual(attrs(copy.replace(a, x=1)), (1, 22, 23)) + self.assertEqual(attrs(copy.replace(a, y=2)), (11, 2, 13)) + self.assertEqual(attrs(copy.replace(a, x=1, y=2)), (1, 2, 3)) + + def test_namedtuple(self): + from collections import namedtuple + Point = namedtuple('Point', 'x y', defaults=(0,)) + p = Point(11, 22) + self.assertEqual(copy.replace(p), (11, 22)) + self.assertEqual(copy.replace(p, x=1), (1, 22)) + self.assertEqual(copy.replace(p, y=2), (11, 2)) + self.assertEqual(copy.replace(p, x=1, y=2), (1, 2)) + with self.assertRaisesRegex(ValueError, 'unexpected field name'): + copy.replace(p, x=1, error=2) + + def test_dataclass(self): + from dataclasses import dataclass + @dataclass + class C: + x: int + y: int = 0 + + attrs = attrgetter('x', 'y') + c = C(11, 22) + self.assertEqual(attrs(copy.replace(c)), (11, 22)) + self.assertEqual(attrs(copy.replace(c, x=1)), (1, 22)) + self.assertEqual(attrs(copy.replace(c, y=2)), (11, 2)) + self.assertEqual(attrs(copy.replace(c, x=1, y=2)), (1, 2)) + with self.assertRaisesRegex(TypeError, 'unexpected keyword argument'): + copy.replace(c, x=1, error=2) + + def global_foo(x, y): return x+y + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index bc6879176cd85e..97b9bba24bcbca 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -10,7 +10,7 @@ import gc import pickle from test import support -from test.support import warnings_helper, import_helper, check_disallow_instantiation +from test.support import import_helper, check_disallow_instantiation from itertools import permutations from textwrap import dedent from collections import OrderedDict @@ -281,18 +281,6 @@ def test_writerows_errors(self): self.assertRaises(TypeError, writer.writerows, None) self.assertRaises(OSError, writer.writerows, BadIterable()) - @support.cpython_only - @support.requires_legacy_unicode_capi() - @warnings_helper.ignore_warnings(category=DeprecationWarning) - def test_writerows_legacy_strings(self): - import _testcapi - c = _testcapi.unicode_legacy_string('a') - with TemporaryFile("w+", encoding="utf-8", newline='') as fileobj: - writer = csv.writer(fileobj) - writer.writerows([[c]]) - fileobj.seek(0) - self.assertEqual(fileobj.read(), "a\r\n") - def _read_test(self, input, expect, **kwargs): reader = csv.reader(input, **kwargs) result = list(reader) diff --git a/Lib/test/test_ctypes/test_keeprefs.py b/Lib/test/test_ctypes/test_keeprefs.py index c6fe1de62eae7c..23b03b64b4a716 100644 --- a/Lib/test/test_ctypes/test_keeprefs.py +++ b/Lib/test/test_ctypes/test_keeprefs.py @@ -98,33 +98,6 @@ def test_p_cint(self): x = pointer(i) self.assertEqual(x._objects, {'1': i}) - def test_pp_ownership(self): - d = c_int(123) - n = c_int(456) - - p = pointer(d) - pp = pointer(p) - - self.assertIs(pp._objects['1'], p) - self.assertIs(pp._objects['0']['1'], d) - - pp.contents.contents = n - - self.assertIs(pp._objects['1'], p) - self.assertIs(pp._objects['0']['1'], n) - - self.assertIs(p._objects['1'], n) - self.assertEqual(len(p._objects), 1) - - del d - del p - - self.assertIs(pp._objects['0']['1'], n) - self.assertEqual(len(pp._objects), 2) - - del n - - self.assertEqual(len(pp._objects), 2) class PointerToStructure(unittest.TestCase): def test(self): diff --git a/Lib/test/test_ctypes/test_objects.py b/Lib/test/test_ctypes/test_objects.py index 23c92b01a11107..fb01421b955951 100644 --- a/Lib/test/test_ctypes/test_objects.py +++ b/Lib/test/test_ctypes/test_objects.py @@ -55,14 +55,12 @@ import doctest import unittest -import test.test_ctypes.test_objects -class TestCase(unittest.TestCase): - def test(self): - failures, tests = doctest.testmod(test.test_ctypes.test_objects) - self.assertFalse(failures, 'doctests failed, see output above') +def load_tests(loader, tests, pattern): + tests.addTest(doctest.DocTestSuite()) + return tests if __name__ == '__main__': - doctest.testmod(test.test_ctypes.test_objects) + unittest.main() diff --git a/Lib/test/test_ctypes/test_values.py b/Lib/test/test_ctypes/test_values.py index 9f8b69409cb880..d0b4803dff8529 100644 --- a/Lib/test/test_ctypes/test_values.py +++ b/Lib/test/test_ctypes/test_values.py @@ -58,7 +58,6 @@ class struct_frozen(Structure): ("code", POINTER(c_ubyte)), ("size", c_int), ("is_package", c_int), - ("get_code", POINTER(c_ubyte)), # Function ptr ] FrozenTable = POINTER(struct_frozen) diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses/__init__.py similarity index 99% rename from Lib/test/test_dataclasses.py rename to Lib/test/test_dataclasses/__init__.py index bd8d82438414e6..7c07dfc77de208 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses/__init__.py @@ -3684,10 +3684,10 @@ class C: self.assertEqual(C(10).x, 10) def test_classvar_module_level_import(self): - from test import dataclass_module_1 - from test import dataclass_module_1_str - from test import dataclass_module_2 - from test import dataclass_module_2_str + from test.test_dataclasses import dataclass_module_1 + from test.test_dataclasses import dataclass_module_1_str + from test.test_dataclasses import dataclass_module_2 + from test.test_dataclasses import dataclass_module_2_str for m in (dataclass_module_1, dataclass_module_1_str, dataclass_module_2, dataclass_module_2_str, @@ -3725,7 +3725,7 @@ def test_classvar_module_level_import(self): self.assertNotIn('not_iv4', c.__dict__) def test_text_annotations(self): - from test import dataclass_textanno + from test.test_dataclasses import dataclass_textanno self.assertEqual( get_type_hints(dataclass_textanno.Bar), diff --git a/Lib/test/dataclass_module_1.py b/Lib/test/test_dataclasses/dataclass_module_1.py similarity index 100% rename from Lib/test/dataclass_module_1.py rename to Lib/test/test_dataclasses/dataclass_module_1.py diff --git a/Lib/test/dataclass_module_1_str.py b/Lib/test/test_dataclasses/dataclass_module_1_str.py similarity index 100% rename from Lib/test/dataclass_module_1_str.py rename to Lib/test/test_dataclasses/dataclass_module_1_str.py diff --git a/Lib/test/dataclass_module_2.py b/Lib/test/test_dataclasses/dataclass_module_2.py similarity index 100% rename from Lib/test/dataclass_module_2.py rename to Lib/test/test_dataclasses/dataclass_module_2.py diff --git a/Lib/test/dataclass_module_2_str.py b/Lib/test/test_dataclasses/dataclass_module_2_str.py similarity index 100% rename from Lib/test/dataclass_module_2_str.py rename to Lib/test/test_dataclasses/dataclass_module_2_str.py diff --git a/Lib/test/dataclass_textanno.py b/Lib/test/test_dataclasses/dataclass_textanno.py similarity index 100% rename from Lib/test/dataclass_textanno.py rename to Lib/test/test_dataclasses/dataclass_textanno.py diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index abfd71c868d009..bd299483e7b0bd 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -34,14 +34,13 @@ import locale from test.support import (is_resource_enabled, requires_IEEE_754, requires_docstrings, - requires_legacy_unicode_capi, check_sanitizer, + check_sanitizer, check_disallow_instantiation) from test.support import (TestFailed, run_with_locale, cpython_only, darwin_malloc_err_warning, is_emscripten) from test.support.import_helper import import_fresh_module from test.support import threading_helper -from test.support import warnings_helper import random import inspect import threading @@ -587,18 +586,6 @@ def test_explicit_from_string(self): # underscores don't prevent errors self.assertRaises(InvalidOperation, Decimal, "1_2_\u00003") - @cpython_only - @requires_legacy_unicode_capi() - @warnings_helper.ignore_warnings(category=DeprecationWarning) - def test_from_legacy_strings(self): - import _testcapi - Decimal = self.decimal.Decimal - context = self.decimal.Context() - - s = _testcapi.unicode_legacy_string('9.999999') - self.assertEqual(str(Decimal(s)), '9.999999') - self.assertEqual(str(context.create_decimal(s)), '9.999999') - def test_explicit_from_tuples(self): Decimal = self.decimal.Decimal @@ -2919,23 +2906,6 @@ def test_none_args(self): assert_signals(self, c, 'traps', [InvalidOperation, DivisionByZero, Overflow]) - @cpython_only - @requires_legacy_unicode_capi() - @warnings_helper.ignore_warnings(category=DeprecationWarning) - def test_from_legacy_strings(self): - import _testcapi - c = self.decimal.Context() - - for rnd in RoundingModes: - c.rounding = _testcapi.unicode_legacy_string(rnd) - self.assertEqual(c.rounding, rnd) - - s = _testcapi.unicode_legacy_string('') - self.assertRaises(TypeError, setattr, c, 'rounding', s) - - s = _testcapi.unicode_legacy_string('ROUND_\x00UP') - self.assertRaises(TypeError, setattr, c, 'rounding', s) - def test_pickle(self): for proto in range(pickle.HIGHEST_PROTOCOL + 1): diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index f6bd9094e8fece..4a3db80ca43c27 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1989,7 +1989,7 @@ def __getattr__(self, attr): ns = {} exec(code, ns) number_attrs = ns["number_attrs"] - # Warm up the the function for quickening (PEP 659) + # Warm up the function for quickening (PEP 659) for _ in range(30): self.assertEqual(number_attrs(Numbers()), list(range(280))) @@ -4757,24 +4757,24 @@ class Thing: thing = Thing() for i in range(20): with self.assertRaises(TypeError): - # PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS + # CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS list.sort(thing) for i in range(20): with self.assertRaises(TypeError): - # PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS + # CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS str.split(thing) for i in range(20): with self.assertRaises(TypeError): - # PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS + # CALL_METHOD_DESCRIPTOR_NOARGS str.upper(thing) for i in range(20): with self.assertRaises(TypeError): - # PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST + # CALL_METHOD_DESCRIPTOR_FAST str.strip(thing) from collections import deque for i in range(20): with self.assertRaises(TypeError): - # PRECALL_NO_KW_METHOD_DESCRIPTOR_O + # CALL_METHOD_DESCRIPTOR_O deque.append(thing, thing) def test_repr_as_str(self): diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index eab64b4f9106c1..620d0ca4f4c2da 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -8,7 +8,7 @@ import unittest import weakref from test import support -from test.support import import_helper, C_RECURSION_LIMIT +from test.support import import_helper, Py_C_RECURSION_LIMIT class DictTest(unittest.TestCase): @@ -596,7 +596,7 @@ def __repr__(self): def test_repr_deep(self): d = {} - for i in range(C_RECURSION_LIMIT + 1): + for i in range(Py_C_RECURSION_LIMIT + 1): d = {1: d} self.assertRaises(RecursionError, repr, d) diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py index 2bd9d6eef8cfc6..cad568b6ac4c2d 100644 --- a/Lib/test/test_dictviews.py +++ b/Lib/test/test_dictviews.py @@ -1,9 +1,8 @@ import collections.abc import copy import pickle -import sys import unittest -from test.support import C_RECURSION_LIMIT +from test.support import Py_C_RECURSION_LIMIT class DictSetTest(unittest.TestCase): @@ -280,7 +279,7 @@ def test_recursive_repr(self): def test_deeply_nested_repr(self): d = {} - for i in range(C_RECURSION_LIMIT//2 + 100): + for i in range(Py_C_RECURSION_LIMIT//2 + 100): d = {42: d.values()} self.assertRaises(RecursionError, repr, d) diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index dacd6f6da2c5a9..d104e5dd904999 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -240,8 +240,8 @@ def wrap_func_w_kwargs(): LOAD_CONST 1 (1) LOAD_CONST 2 (2) LOAD_CONST 3 (5) - KW_NAMES 4 (('c',)) - CALL 3 + LOAD_CONST 4 (('c',)) + CALL_KW 3 POP_TOP RETURN_CONST 0 (None) """ % (wrap_func_w_kwargs.__code__.co_firstlineno, @@ -404,7 +404,7 @@ def wrap_func_w_kwargs(): %4d LOAD_GLOBAL 0 (Exception) CHECK_EXC_MATCH - POP_JUMP_IF_FALSE 23 (to 80) + POP_JUMP_IF_FALSE 23 (to 82) STORE_FAST 0 (e) %4d LOAD_FAST 0 (e) @@ -492,7 +492,7 @@ def _with(c): %4d >> PUSH_EXC_INFO WITH_EXCEPT_START TO_BOOL - POP_JUMP_IF_TRUE 1 (to 50) + POP_JUMP_IF_TRUE 1 (to 52) RERAISE 2 >> POP_TOP POP_EXCEPT @@ -579,7 +579,7 @@ async def _asyncwith(c): >> CLEANUP_THROW >> END_SEND TO_BOOL - POP_JUMP_IF_TRUE 1 (to 116) + POP_JUMP_IF_TRUE 1 (to 118) RERAISE 2 >> POP_TOP POP_EXCEPT @@ -642,7 +642,8 @@ def _tryfinallyconst(b): CALL 0 POP_TOP RERAISE 0 - >> COPY 3 + +None >> COPY 3 POP_EXCEPT RERAISE 1 ExceptionTable: @@ -674,7 +675,8 @@ def _tryfinallyconst(b): CALL 0 POP_TOP RERAISE 0 - >> COPY 3 + +None >> COPY 3 POP_EXCEPT RERAISE 1 ExceptionTable: @@ -788,7 +790,7 @@ def load_test(x, y=0): return a, b dis_load_test_quickened_code = """\ -%3d 0 RESUME 0 +%3d 0 RESUME_CHECK 0 %3d 2 LOAD_FAST_LOAD_FAST 1 (x, y) 4 STORE_FAST_STORE_FAST 50 (b, a) @@ -805,7 +807,7 @@ def loop_test(): load_test(i) dis_loop_test_quickened_code = """\ -%3d RESUME 0 +%3d RESUME_CHECK 0 %3d BUILD_LIST 0 LOAD_CONST 1 ((1, 2, 3)) @@ -1003,7 +1005,7 @@ def test_bug_46724(self): self.do_disassembly_test(bug46724, dis_bug46724) def test_kw_names(self): - # Test that value is displayed for KW_NAMES + # Test that value is displayed for keyword argument names: self.do_disassembly_test(wrap_func_w_kwargs, dis_kw_names) def test_intrinsic_1(self): @@ -1197,7 +1199,7 @@ def test_super_instructions(self): @requires_specialization def test_binary_specialize(self): binary_op_quicken = """\ - 0 0 RESUME 0 + 0 0 RESUME_CHECK 0 1 2 LOAD_NAME 0 (a) 4 LOAD_NAME 1 (b) @@ -1215,7 +1217,7 @@ def test_binary_specialize(self): self.do_disassembly_compare(got, binary_op_quicken % "BINARY_OP_ADD_UNICODE 0 (+)", True) binary_subscr_quicken = """\ - 0 0 RESUME 0 + 0 0 RESUME_CHECK 0 1 2 LOAD_NAME 0 (a) 4 LOAD_CONST 0 (0) @@ -1236,7 +1238,7 @@ def test_binary_specialize(self): @requires_specialization def test_load_attr_specialize(self): load_attr_quicken = """\ - 0 0 RESUME 0 + 0 0 RESUME_CHECK 0 1 2 LOAD_CONST 0 ('a') 4 LOAD_ATTR_SLOT 0 (__class__) @@ -1251,12 +1253,12 @@ def test_load_attr_specialize(self): @requires_specialization def test_call_specialize(self): call_quicken = """\ - 0 RESUME 0 + 0 RESUME_CHECK 0 1 LOAD_NAME 0 (str) PUSH_NULL LOAD_CONST 0 (1) - CALL_NO_KW_STR_1 1 + CALL_STR_1 1 RETURN_VALUE """ co = compile("str(1)", "", "eval") @@ -1273,7 +1275,8 @@ def test_loop_quicken(self): got = self.get_disassembly(loop_test, adaptive=True) expected = dis_loop_test_quickened_code if _testinternalcapi.get_optimizer(): - expected = expected.replace("JUMP_BACKWARD ", "ENTER_EXECUTOR") + # We *may* see ENTER_EXECUTOR in the disassembly + got = got.replace("ENTER_EXECUTOR", "JUMP_BACKWARD ") self.do_disassembly_compare(got, expected) @cpython_only @@ -1635,202 +1638,202 @@ def _prepare_test_cases(): result = result.replace(repr(code_object_inner), "code_object_inner") print(result) -# _prepare_test_cases() +# from test.test_dis import _prepare_test_cases; _prepare_test_cases() Instruction = dis.Instruction expected_opinfo_outer = [ - Instruction(opname='MAKE_CELL', opcode=157, arg=0, argval='a', argrepr='a', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='MAKE_CELL', opcode=157, arg=1, argval='b', argrepr='b', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='RESUME', opcode=166, arg=0, argval=0, argrepr='', offset=4, start_offset=4, starts_line=True, line_number=1, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=5, argval=(3, 4), argrepr='(3, 4)', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='a', argrepr='a', offset=8, start_offset=8, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=1, argval='b', argrepr='b', offset=10, start_offset=10, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='BUILD_TUPLE', opcode=74, arg=2, argval=2, argrepr='', offset=12, start_offset=12, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=1, argval=code_object_f, argrepr=repr(code_object_f), offset=14, start_offset=14, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='MAKE_FUNCTION', opcode=38, arg=None, argval=None, argrepr='', offset=16, start_offset=16, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=171, arg=8, argval=8, argrepr='closure', offset=18, start_offset=18, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=171, arg=1, argval=1, argrepr='defaults', offset=20, start_offset=20, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='STORE_FAST', opcode=176, arg=2, argval='f', argrepr='f', offset=22, start_offset=22, starts_line=False, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=1, argval='print', argrepr='print + NULL', offset=24, start_offset=24, starts_line=True, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=0, argval='a', argrepr='a', offset=34, start_offset=34, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=1, argval='b', argrepr='b', offset=36, start_offset=36, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=2, argval='', argrepr="''", offset=38, start_offset=38, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=3, argval=1, argrepr='1', offset=40, start_offset=40, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='BUILD_LIST', opcode=69, arg=0, argval=0, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='BUILD_MAP', opcode=70, arg=0, argval=0, argrepr='', offset=44, start_offset=44, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=4, argval='Hello world!', argrepr="'Hello world!'", offset=46, start_offset=46, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=7, argval=7, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=2, argval='f', argrepr='f', offset=58, start_offset=58, starts_line=True, line_number=8, is_jump_target=False, positions=None), - Instruction(opname='RETURN_VALUE', opcode=48, arg=None, argval=None, argrepr='', offset=60, start_offset=60, starts_line=False, line_number=8, is_jump_target=False, positions=None), + Instruction(opname='MAKE_CELL', opcode=94, arg=0, argval='a', argrepr='a', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='MAKE_CELL', opcode=94, arg=1, argval='b', argrepr='b', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=4, start_offset=4, starts_line=True, line_number=1, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=(3, 4), argrepr='(3, 4)', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='a', argrepr='a', offset=8, start_offset=8, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=1, argval='b', argrepr='b', offset=10, start_offset=10, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='BUILD_TUPLE', opcode=52, arg=2, argval=2, argrepr='', offset=12, start_offset=12, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=code_object_f, argrepr=repr(code_object_f), offset=14, start_offset=14, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='MAKE_FUNCTION', opcode=26, arg=None, argval=None, argrepr='', offset=16, start_offset=16, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=8, argval=8, argrepr='closure', offset=18, start_offset=18, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=1, argval=1, argrepr='defaults', offset=20, start_offset=20, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='STORE_FAST', opcode=110, arg=2, argval='f', argrepr='f', offset=22, start_offset=22, starts_line=False, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='print', argrepr='print + NULL', offset=24, start_offset=24, starts_line=True, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=0, argval='a', argrepr='a', offset=34, start_offset=34, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=1, argval='b', argrepr='b', offset=36, start_offset=36, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval='', argrepr="''", offset=38, start_offset=38, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=1, argrepr='1', offset=40, start_offset=40, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='BUILD_LIST', opcode=47, arg=0, argval=0, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='BUILD_MAP', opcode=48, arg=0, argval=0, argrepr='', offset=44, start_offset=44, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=4, argval='Hello world!', argrepr="'Hello world!'", offset=46, start_offset=46, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=7, argval=7, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=2, argval='f', argrepr='f', offset=58, start_offset=58, starts_line=True, line_number=8, is_jump_target=False, positions=None), + Instruction(opname='RETURN_VALUE', opcode=36, arg=None, argval=None, argrepr='', offset=60, start_offset=60, starts_line=False, line_number=8, is_jump_target=False, positions=None), ] expected_opinfo_f = [ - Instruction(opname='COPY_FREE_VARS', opcode=104, arg=2, argval=2, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='MAKE_CELL', opcode=157, arg=0, argval='c', argrepr='c', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='MAKE_CELL', opcode=157, arg=1, argval='d', argrepr='d', offset=4, start_offset=4, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='RESUME', opcode=166, arg=0, argval=0, argrepr='', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=2, argval=(5, 6), argrepr='(5, 6)', offset=8, start_offset=8, starts_line=True, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=3, argval='a', argrepr='a', offset=10, start_offset=10, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=4, argval='b', argrepr='b', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='c', argrepr='c', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=1, argval='d', argrepr='d', offset=16, start_offset=16, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='BUILD_TUPLE', opcode=74, arg=4, argval=4, argrepr='', offset=18, start_offset=18, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=1, argval=code_object_inner, argrepr=repr(code_object_inner), offset=20, start_offset=20, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='MAKE_FUNCTION', opcode=38, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=171, arg=8, argval=8, argrepr='closure', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=171, arg=1, argval=1, argrepr='defaults', offset=26, start_offset=26, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='STORE_FAST', opcode=176, arg=2, argval='inner', argrepr='inner', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=1, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=3, argval='a', argrepr='a', offset=40, start_offset=40, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=4, argval='b', argrepr='b', offset=42, start_offset=42, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=0, argval='c', argrepr='c', offset=44, start_offset=44, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=1, argval='d', argrepr='d', offset=46, start_offset=46, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=4, argval=4, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=2, argval='inner', argrepr='inner', offset=58, start_offset=58, starts_line=True, line_number=6, is_jump_target=False, positions=None), - Instruction(opname='RETURN_VALUE', opcode=48, arg=None, argval=None, argrepr='', offset=60, start_offset=60, starts_line=False, line_number=6, is_jump_target=False, positions=None), + Instruction(opname='COPY_FREE_VARS', opcode=62, arg=2, argval=2, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='MAKE_CELL', opcode=94, arg=0, argval='c', argrepr='c', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='MAKE_CELL', opcode=94, arg=1, argval='d', argrepr='d', offset=4, start_offset=4, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=(5, 6), argrepr='(5, 6)', offset=8, start_offset=8, starts_line=True, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=3, argval='a', argrepr='a', offset=10, start_offset=10, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=4, argval='b', argrepr='b', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='c', argrepr='c', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=1, argval='d', argrepr='d', offset=16, start_offset=16, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='BUILD_TUPLE', opcode=52, arg=4, argval=4, argrepr='', offset=18, start_offset=18, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=code_object_inner, argrepr=repr(code_object_inner), offset=20, start_offset=20, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='MAKE_FUNCTION', opcode=26, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=8, argval=8, argrepr='closure', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=1, argval=1, argrepr='defaults', offset=26, start_offset=26, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='STORE_FAST', opcode=110, arg=2, argval='inner', argrepr='inner', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=3, argval='a', argrepr='a', offset=40, start_offset=40, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=4, argval='b', argrepr='b', offset=42, start_offset=42, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=0, argval='c', argrepr='c', offset=44, start_offset=44, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=1, argval='d', argrepr='d', offset=46, start_offset=46, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=4, argval=4, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=2, argval='inner', argrepr='inner', offset=58, start_offset=58, starts_line=True, line_number=6, is_jump_target=False, positions=None), + Instruction(opname='RETURN_VALUE', opcode=36, arg=None, argval=None, argrepr='', offset=60, start_offset=60, starts_line=False, line_number=6, is_jump_target=False, positions=None), ] expected_opinfo_inner = [ - Instruction(opname='COPY_FREE_VARS', opcode=104, arg=4, argval=4, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='RESUME', opcode=166, arg=0, argval=0, argrepr='', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=1, argval='print', argrepr='print + NULL', offset=4, start_offset=4, starts_line=True, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=2, argval='a', argrepr='a', offset=14, start_offset=14, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=3, argval='b', argrepr='b', offset=16, start_offset=16, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=4, argval='c', argrepr='c', offset=18, start_offset=18, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_DEREF', opcode=143, arg=5, argval='d', argrepr='d', offset=20, start_offset=20, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST_LOAD_FAST', opcode=147, arg=1, argval=('e', 'f'), argrepr='e, f', offset=22, start_offset=22, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=6, argval=6, argrepr='', offset=24, start_offset=24, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=32, start_offset=32, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='RETURN_CONST', opcode=167, arg=0, argval=None, argrepr='None', offset=34, start_offset=34, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='COPY_FREE_VARS', opcode=62, arg=4, argval=4, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='print', argrepr='print + NULL', offset=4, start_offset=4, starts_line=True, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=2, argval='a', argrepr='a', offset=14, start_offset=14, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=3, argval='b', argrepr='b', offset=16, start_offset=16, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=4, argval='c', argrepr='c', offset=18, start_offset=18, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_DEREF', opcode=84, arg=5, argval='d', argrepr='d', offset=20, start_offset=20, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST_LOAD_FAST', opcode=88, arg=1, argval=('e', 'f'), argrepr='e, f', offset=22, start_offset=22, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=6, argval=6, argrepr='', offset=24, start_offset=24, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=32, start_offset=32, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=34, start_offset=34, starts_line=False, line_number=4, is_jump_target=False, positions=None), ] expected_opinfo_jumpy = [ - Instruction(opname='RESUME', opcode=166, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=1, argval='range', argrepr='range + NULL', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=1, argval=10, argrepr='10', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='GET_ITER', opcode=31, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='FOR_ITER', opcode=114, arg=28, argval=84, argrepr='to 84', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=True, positions=None), - Instruction(opname='STORE_FAST', opcode=176, arg=0, argval='i', argrepr='i', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=40, start_offset=40, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=50, start_offset=50, starts_line=False, line_number=4, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=52, start_offset=52, starts_line=True, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=2, argval=4, argrepr='4', offset=54, start_offset=54, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='COMPARE_OP', opcode=97, arg=18, argval='<', argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=160, arg=2, argval=66, argrepr='to 66', offset=60, start_offset=60, starts_line=False, line_number=5, is_jump_target=False, positions=None), - Instruction(opname='JUMP_BACKWARD', opcode=123, arg=21, argval=24, argrepr='to 24', offset=62, start_offset=62, starts_line=True, line_number=6, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=66, start_offset=66, starts_line=True, line_number=7, is_jump_target=True, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=3, argval=6, argrepr='6', offset=68, start_offset=68, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='COMPARE_OP', opcode=97, arg=148, argval='>', argrepr='bool(>)', offset=70, start_offset=70, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_TRUE', opcode=163, arg=2, argval=80, argrepr='to 80', offset=74, start_offset=74, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='JUMP_BACKWARD', opcode=123, arg=28, argval=24, argrepr='to 24', offset=76, start_offset=76, starts_line=False, line_number=7, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=80, start_offset=80, starts_line=True, line_number=8, is_jump_target=True, positions=None), - Instruction(opname='JUMP_FORWARD', opcode=125, arg=12, argval=108, argrepr='to 108', offset=82, start_offset=82, starts_line=False, line_number=8, is_jump_target=False, positions=None), - Instruction(opname='END_FOR', opcode=24, arg=None, argval=None, argrepr='', offset=84, start_offset=84, starts_line=True, line_number=3, is_jump_target=True, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=86, start_offset=86, starts_line=True, line_number=10, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=4, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=96, start_offset=96, starts_line=False, line_number=10, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=98, start_offset=98, starts_line=False, line_number=10, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=106, start_offset=106, starts_line=False, line_number=10, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST_CHECK', opcode=146, arg=0, argval='i', argrepr='i', offset=108, start_offset=108, starts_line=True, line_number=11, is_jump_target=True, positions=None), - Instruction(opname='TO_BOOL', opcode=56, arg=None, argval=None, argrepr='', offset=110, start_offset=110, starts_line=False, line_number=11, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=160, arg=37, argval=194, argrepr='to 194', offset=118, start_offset=118, starts_line=False, line_number=11, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=120, start_offset=120, starts_line=True, line_number=12, is_jump_target=True, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=130, start_offset=130, starts_line=False, line_number=12, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=132, start_offset=132, starts_line=False, line_number=12, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=140, start_offset=140, starts_line=False, line_number=12, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=142, start_offset=142, starts_line=True, line_number=13, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=5, argval=1, argrepr='1', offset=144, start_offset=144, starts_line=False, line_number=13, is_jump_target=False, positions=None), - Instruction(opname='BINARY_OP', opcode=67, arg=23, argval=23, argrepr='-=', offset=146, start_offset=146, starts_line=False, line_number=13, is_jump_target=False, positions=None), - Instruction(opname='STORE_FAST', opcode=176, arg=0, argval='i', argrepr='i', offset=150, start_offset=150, starts_line=False, line_number=13, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=152, start_offset=152, starts_line=True, line_number=14, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=3, argval=6, argrepr='6', offset=154, start_offset=154, starts_line=False, line_number=14, is_jump_target=False, positions=None), - Instruction(opname='COMPARE_OP', opcode=97, arg=148, argval='>', argrepr='bool(>)', offset=156, start_offset=156, starts_line=False, line_number=14, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=160, arg=2, argval=166, argrepr='to 166', offset=160, start_offset=160, starts_line=False, line_number=14, is_jump_target=False, positions=None), - Instruction(opname='JUMP_BACKWARD', opcode=123, arg=29, argval=108, argrepr='to 108', offset=162, start_offset=162, starts_line=True, line_number=15, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=166, start_offset=166, starts_line=True, line_number=16, is_jump_target=True, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=2, argval=4, argrepr='4', offset=168, start_offset=168, starts_line=False, line_number=16, is_jump_target=False, positions=None), - Instruction(opname='COMPARE_OP', opcode=97, arg=18, argval='<', argrepr='bool(<)', offset=170, start_offset=170, starts_line=False, line_number=16, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=160, arg=1, argval=178, argrepr='to 178', offset=174, start_offset=174, starts_line=False, line_number=16, is_jump_target=False, positions=None), - Instruction(opname='JUMP_FORWARD', opcode=125, arg=19, argval=216, argrepr='to 216', offset=176, start_offset=176, starts_line=True, line_number=17, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=178, start_offset=178, starts_line=True, line_number=11, is_jump_target=True, positions=None), - Instruction(opname='TO_BOOL', opcode=56, arg=None, argval=None, argrepr='', offset=180, start_offset=180, starts_line=False, line_number=11, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=160, arg=2, argval=194, argrepr='to 194', offset=188, start_offset=188, starts_line=False, line_number=11, is_jump_target=False, positions=None), - Instruction(opname='JUMP_BACKWARD', opcode=123, arg=37, argval=120, argrepr='to 120', offset=190, start_offset=190, starts_line=False, line_number=11, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=194, start_offset=194, starts_line=True, line_number=19, is_jump_target=True, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=204, start_offset=204, starts_line=False, line_number=19, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=206, start_offset=206, starts_line=False, line_number=19, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=214, start_offset=214, starts_line=False, line_number=19, is_jump_target=False, positions=None), - Instruction(opname='NOP', opcode=42, arg=None, argval=None, argrepr='', offset=216, start_offset=216, starts_line=True, line_number=20, is_jump_target=True, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=5, argval=1, argrepr='1', offset=218, start_offset=218, starts_line=True, line_number=21, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=7, argval=0, argrepr='0', offset=220, start_offset=220, starts_line=False, line_number=21, is_jump_target=False, positions=None), - Instruction(opname='BINARY_OP', opcode=67, arg=11, argval=11, argrepr='/', offset=222, start_offset=222, starts_line=False, line_number=21, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=226, start_offset=226, starts_line=False, line_number=21, is_jump_target=False, positions=None), - Instruction(opname='LOAD_FAST', opcode=144, arg=0, argval='i', argrepr='i', offset=228, start_offset=228, starts_line=True, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='BEFORE_WITH', opcode=2, arg=None, argval=None, argrepr='', offset=230, start_offset=230, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='STORE_FAST', opcode=176, arg=1, argval='dodgy', argrepr='dodgy', offset=232, start_offset=232, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=234, start_offset=234, starts_line=True, line_number=26, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=8, argval='Never reach this', argrepr="'Never reach this'", offset=244, start_offset=244, starts_line=False, line_number=26, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=246, start_offset=246, starts_line=False, line_number=26, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=254, start_offset=254, starts_line=False, line_number=26, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=0, argval=None, argrepr='None', offset=256, start_offset=256, starts_line=True, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=0, argval=None, argrepr='None', offset=258, start_offset=258, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=0, argval=None, argrepr='None', offset=260, start_offset=260, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=2, argval=2, argrepr='', offset=262, start_offset=262, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=270, start_offset=270, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=272, start_offset=272, starts_line=True, line_number=28, is_jump_target=True, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=282, start_offset=282, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=284, start_offset=284, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=292, start_offset=292, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='RETURN_CONST', opcode=167, arg=0, argval=None, argrepr='None', offset=294, start_offset=294, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='PUSH_EXC_INFO', opcode=45, arg=None, argval=None, argrepr='', offset=296, start_offset=296, starts_line=True, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='WITH_EXCEPT_START', opcode=66, arg=None, argval=None, argrepr='', offset=298, start_offset=298, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='TO_BOOL', opcode=56, arg=None, argval=None, argrepr='', offset=300, start_offset=300, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_TRUE', opcode=163, arg=1, argval=312, argrepr='to 312', offset=308, start_offset=308, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='RERAISE', opcode=165, arg=2, argval=2, argrepr='', offset=310, start_offset=310, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=312, start_offset=312, starts_line=False, line_number=25, is_jump_target=True, positions=None), - Instruction(opname='POP_EXCEPT', opcode=43, arg=None, argval=None, argrepr='', offset=314, start_offset=314, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=316, start_offset=316, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=318, start_offset=318, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='JUMP_BACKWARD', opcode=123, arg=26, argval=272, argrepr='to 272', offset=320, start_offset=320, starts_line=False, line_number=25, is_jump_target=False, positions=None), - Instruction(opname='COPY', opcode=103, arg=3, argval=3, argrepr='', offset=324, start_offset=324, starts_line=True, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='POP_EXCEPT', opcode=43, arg=None, argval=None, argrepr='', offset=326, start_offset=326, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='RERAISE', opcode=165, arg=1, argval=1, argrepr='', offset=328, start_offset=328, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='PUSH_EXC_INFO', opcode=45, arg=None, argval=None, argrepr='', offset=330, start_offset=330, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=332, start_offset=332, starts_line=True, line_number=22, is_jump_target=False, positions=None), - Instruction(opname='CHECK_EXC_MATCH', opcode=20, arg=None, argval=None, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=22, is_jump_target=False, positions=None), - Instruction(opname='POP_JUMP_IF_FALSE', opcode=160, arg=15, argval=376, argrepr='to 376', offset=344, start_offset=344, starts_line=False, line_number=22, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=346, start_offset=346, starts_line=False, line_number=22, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=348, start_offset=348, starts_line=True, line_number=23, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=9, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=358, start_offset=358, starts_line=False, line_number=23, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=360, start_offset=360, starts_line=False, line_number=23, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=368, start_offset=368, starts_line=False, line_number=23, is_jump_target=False, positions=None), - Instruction(opname='POP_EXCEPT', opcode=43, arg=None, argval=None, argrepr='', offset=370, start_offset=370, starts_line=False, line_number=23, is_jump_target=False, positions=None), - Instruction(opname='JUMP_BACKWARD', opcode=123, arg=52, argval=272, argrepr='to 272', offset=372, start_offset=372, starts_line=False, line_number=23, is_jump_target=False, positions=None), - Instruction(opname='RERAISE', opcode=165, arg=0, argval=0, argrepr='', offset=376, start_offset=376, starts_line=True, line_number=22, is_jump_target=True, positions=None), - Instruction(opname='COPY', opcode=103, arg=3, argval=3, argrepr='', offset=378, start_offset=378, starts_line=True, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='POP_EXCEPT', opcode=43, arg=None, argval=None, argrepr='', offset=380, start_offset=380, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='RERAISE', opcode=165, arg=1, argval=1, argrepr='', offset=382, start_offset=382, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='PUSH_EXC_INFO', opcode=45, arg=None, argval=None, argrepr='', offset=384, start_offset=384, starts_line=False, line_number=None, is_jump_target=False, positions=None), - Instruction(opname='LOAD_GLOBAL', opcode=150, arg=3, argval='print', argrepr='print + NULL', offset=386, start_offset=386, starts_line=True, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='LOAD_CONST', opcode=142, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=396, start_offset=396, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='CALL', opcode=75, arg=1, argval=1, argrepr='', offset=398, start_offset=398, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='POP_TOP', opcode=44, arg=None, argval=None, argrepr='', offset=406, start_offset=406, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='RERAISE', opcode=165, arg=0, argval=0, argrepr='', offset=408, start_offset=408, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='COPY', opcode=103, arg=3, argval=3, argrepr='', offset=410, start_offset=410, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='POP_EXCEPT', opcode=43, arg=None, argval=None, argrepr='', offset=412, start_offset=412, starts_line=False, line_number=28, is_jump_target=False, positions=None), - Instruction(opname='RERAISE', opcode=165, arg=1, argval=1, argrepr='', offset=414, start_offset=414, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='range', argrepr='range + NULL', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=10, argrepr='10', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='GET_ITER', opcode=19, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='FOR_ITER', opcode=72, arg=30, argval=88, argrepr='to 88', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=True, positions=None), + Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=40, start_offset=40, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=50, start_offset=50, starts_line=False, line_number=4, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=52, start_offset=52, starts_line=True, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=54, start_offset=54, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=68, argrepr='to 68', offset=60, start_offset=60, starts_line=False, line_number=5, is_jump_target=False, positions=None), + Instruction(opname='JUMP_BACKWARD', opcode=77, arg=22, argval=24, argrepr='to 24', offset=64, start_offset=64, starts_line=True, line_number=6, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=68, start_offset=68, starts_line=True, line_number=7, is_jump_target=True, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=70, start_offset=70, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=72, start_offset=72, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=2, argval=84, argrepr='to 84', offset=76, start_offset=76, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='JUMP_BACKWARD', opcode=77, arg=30, argval=24, argrepr='to 24', offset=80, start_offset=80, starts_line=False, line_number=7, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=84, start_offset=84, starts_line=True, line_number=8, is_jump_target=True, positions=None), + Instruction(opname='JUMP_FORWARD', opcode=79, arg=12, argval=112, argrepr='to 112', offset=86, start_offset=86, starts_line=False, line_number=8, is_jump_target=False, positions=None), + Instruction(opname='END_FOR', opcode=11, arg=None, argval=None, argrepr='', offset=88, start_offset=88, starts_line=True, line_number=3, is_jump_target=True, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=90, start_offset=90, starts_line=True, line_number=10, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=4, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=100, start_offset=100, starts_line=False, line_number=10, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=102, start_offset=102, starts_line=False, line_number=10, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=110, start_offset=110, starts_line=False, line_number=10, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST_CHECK', opcode=87, arg=0, argval='i', argrepr='i', offset=112, start_offset=112, starts_line=True, line_number=11, is_jump_target=True, positions=None), + Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=114, start_offset=114, starts_line=False, line_number=11, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=40, argval=206, argrepr='to 206', offset=122, start_offset=122, starts_line=False, line_number=11, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=126, start_offset=126, starts_line=True, line_number=12, is_jump_target=True, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=136, start_offset=136, starts_line=False, line_number=12, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=138, start_offset=138, starts_line=False, line_number=12, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=146, start_offset=146, starts_line=False, line_number=12, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=148, start_offset=148, starts_line=True, line_number=13, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=150, start_offset=150, starts_line=False, line_number=13, is_jump_target=False, positions=None), + Instruction(opname='BINARY_OP', opcode=45, arg=23, argval=23, argrepr='-=', offset=152, start_offset=152, starts_line=False, line_number=13, is_jump_target=False, positions=None), + Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=156, start_offset=156, starts_line=False, line_number=13, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=158, start_offset=158, starts_line=True, line_number=14, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=160, start_offset=160, starts_line=False, line_number=14, is_jump_target=False, positions=None), + Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=162, start_offset=162, starts_line=False, line_number=14, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=174, argrepr='to 174', offset=166, start_offset=166, starts_line=False, line_number=14, is_jump_target=False, positions=None), + Instruction(opname='JUMP_BACKWARD', opcode=77, arg=31, argval=112, argrepr='to 112', offset=170, start_offset=170, starts_line=True, line_number=15, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=174, start_offset=174, starts_line=True, line_number=16, is_jump_target=True, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=176, start_offset=176, starts_line=False, line_number=16, is_jump_target=False, positions=None), + Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=178, start_offset=178, starts_line=False, line_number=16, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=1, argval=188, argrepr='to 188', offset=182, start_offset=182, starts_line=False, line_number=16, is_jump_target=False, positions=None), + Instruction(opname='JUMP_FORWARD', opcode=79, arg=20, argval=228, argrepr='to 228', offset=186, start_offset=186, starts_line=True, line_number=17, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=188, start_offset=188, starts_line=True, line_number=11, is_jump_target=True, positions=None), + Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=190, start_offset=190, starts_line=False, line_number=11, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=206, argrepr='to 206', offset=198, start_offset=198, starts_line=False, line_number=11, is_jump_target=False, positions=None), + Instruction(opname='JUMP_BACKWARD', opcode=77, arg=40, argval=126, argrepr='to 126', offset=202, start_offset=202, starts_line=False, line_number=11, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=206, start_offset=206, starts_line=True, line_number=19, is_jump_target=True, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=216, start_offset=216, starts_line=False, line_number=19, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=218, start_offset=218, starts_line=False, line_number=19, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=226, start_offset=226, starts_line=False, line_number=19, is_jump_target=False, positions=None), + Instruction(opname='NOP', opcode=30, arg=None, argval=None, argrepr='', offset=228, start_offset=228, starts_line=True, line_number=20, is_jump_target=True, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=230, start_offset=230, starts_line=True, line_number=21, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=7, argval=0, argrepr='0', offset=232, start_offset=232, starts_line=False, line_number=21, is_jump_target=False, positions=None), + Instruction(opname='BINARY_OP', opcode=45, arg=11, argval=11, argrepr='/', offset=234, start_offset=234, starts_line=False, line_number=21, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=238, start_offset=238, starts_line=False, line_number=21, is_jump_target=False, positions=None), + Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=240, start_offset=240, starts_line=True, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='BEFORE_WITH', opcode=2, arg=None, argval=None, argrepr='', offset=242, start_offset=242, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='STORE_FAST', opcode=110, arg=1, argval='dodgy', argrepr='dodgy', offset=244, start_offset=244, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=246, start_offset=246, starts_line=True, line_number=26, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=8, argval='Never reach this', argrepr="'Never reach this'", offset=256, start_offset=256, starts_line=False, line_number=26, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=258, start_offset=258, starts_line=False, line_number=26, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=266, start_offset=266, starts_line=False, line_number=26, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=268, start_offset=268, starts_line=True, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=270, start_offset=270, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=272, start_offset=272, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=2, argval=2, argrepr='', offset=274, start_offset=274, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=282, start_offset=282, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=284, start_offset=284, starts_line=True, line_number=28, is_jump_target=True, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=294, start_offset=294, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=296, start_offset=296, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=304, start_offset=304, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=306, start_offset=306, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=308, start_offset=308, starts_line=True, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='WITH_EXCEPT_START', opcode=44, arg=None, argval=None, argrepr='', offset=310, start_offset=310, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=312, start_offset=312, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=1, argval=326, argrepr='to 326', offset=320, start_offset=320, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='RERAISE', opcode=102, arg=2, argval=2, argrepr='', offset=324, start_offset=324, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=326, start_offset=326, starts_line=False, line_number=25, is_jump_target=True, positions=None), + Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=328, start_offset=328, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=330, start_offset=330, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=332, start_offset=332, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='JUMP_BACKWARD', opcode=77, arg=27, argval=284, argrepr='to 284', offset=334, start_offset=334, starts_line=False, line_number=25, is_jump_target=False, positions=None), + Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=338, start_offset=338, starts_line=True, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=340, start_offset=340, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=344, start_offset=344, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=346, start_offset=346, starts_line=True, line_number=22, is_jump_target=False, positions=None), + Instruction(opname='CHECK_EXC_MATCH', opcode=7, arg=None, argval=None, argrepr='', offset=356, start_offset=356, starts_line=False, line_number=22, is_jump_target=False, positions=None), + Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=15, argval=392, argrepr='to 392', offset=358, start_offset=358, starts_line=False, line_number=22, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=362, start_offset=362, starts_line=False, line_number=22, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=364, start_offset=364, starts_line=True, line_number=23, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=9, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=374, start_offset=374, starts_line=False, line_number=23, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=376, start_offset=376, starts_line=False, line_number=23, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=384, start_offset=384, starts_line=False, line_number=23, is_jump_target=False, positions=None), + Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=386, start_offset=386, starts_line=False, line_number=23, is_jump_target=False, positions=None), + Instruction(opname='JUMP_BACKWARD', opcode=77, arg=54, argval=284, argrepr='to 284', offset=388, start_offset=388, starts_line=False, line_number=23, is_jump_target=False, positions=None), + Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=392, start_offset=392, starts_line=True, line_number=22, is_jump_target=True, positions=None), + Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=394, start_offset=394, starts_line=True, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=396, start_offset=396, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=398, start_offset=398, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=400, start_offset=400, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=402, start_offset=402, starts_line=True, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=412, start_offset=412, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=414, start_offset=414, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=422, start_offset=422, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=424, start_offset=424, starts_line=False, line_number=28, is_jump_target=False, positions=None), + Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=426, start_offset=426, starts_line=True, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=428, start_offset=428, starts_line=False, line_number=None, is_jump_target=False, positions=None), + Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=430, start_offset=430, starts_line=False, line_number=None, is_jump_target=False, positions=None), ] # One last piece of inspect fodder to check the default line number handling def simple(): pass expected_opinfo_simple = [ - Instruction(opname='RESUME', opcode=166, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=simple.__code__.co_firstlineno, is_jump_target=False, positions=None), - Instruction(opname='RETURN_CONST', opcode=167, arg=0, argval=None, argrepr='None', offset=2, start_offset=2, starts_line=False, line_number=simple.__code__.co_firstlineno, is_jump_target=False), + Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=simple.__code__.co_firstlineno, is_jump_target=False, positions=None), + Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=2, start_offset=2, starts_line=False, line_number=simple.__code__.co_firstlineno, is_jump_target=False), ] @@ -2026,6 +2029,7 @@ def test_start_offset(self): opcode.opmap["EXTENDED_ARG"], 0x01, opcode.opmap["EXTENDED_ARG"], 0x01, opcode.opmap["POP_JUMP_IF_TRUE"], 0xFF, + opcode.opmap["CACHE"], 0x00, ]) jump = list(dis._get_instructions_bytes(code))[-1] self.assertEqual(8, jump.offset) @@ -2035,18 +2039,20 @@ def test_start_offset(self): opcode.opmap["LOAD_FAST"], 0x00, opcode.opmap["EXTENDED_ARG"], 0x01, opcode.opmap["POP_JUMP_IF_TRUE"], 0xFF, + opcode.opmap["CACHE"], 0x00, opcode.opmap["EXTENDED_ARG"], 0x01, opcode.opmap["EXTENDED_ARG"], 0x01, opcode.opmap["EXTENDED_ARG"], 0x01, opcode.opmap["POP_JUMP_IF_TRUE"], 0xFF, + opcode.opmap["CACHE"], 0x00, ]) instructions = list(dis._get_instructions_bytes(code)) # 1st jump self.assertEqual(4, instructions[2].offset) self.assertEqual(2, instructions[2].start_offset) # 2nd jump - self.assertEqual(12, instructions[6].offset) - self.assertEqual(6, instructions[6].start_offset) + self.assertEqual(14, instructions[6].offset) + self.assertEqual(8, instructions[6].start_offset) def test_cache_offset_and_end_offset(self): code = bytes([ diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 9cc460c8b913f6..6e12e82a7a0084 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -784,15 +784,13 @@ class TestDocTestFinder(unittest.TestCase): def test_issue35753(self): # This import of `call` should trigger issue35753 when - # `support.run_doctest` is called due to unwrap failing, + # DocTestFinder.find() is called due to inspect.unwrap() failing, # however with a patched doctest this should succeed. from unittest.mock import call dummy_module = types.ModuleType("dummy") dummy_module.__dict__['inject_call'] = call - try: - support.run_doctest(dummy_module, verbosity=True) - except ValueError as e: - raise support.TestFailed("Doctest unwrap failed") from e + finder = doctest.DocTestFinder() + self.assertEqual(finder.find(dummy_module), []) def test_empty_namespace_package(self): pkg_name = 'doctest_empty_pkg' diff --git a/Lib/test/test_dynamic.py b/Lib/test/test_dynamic.py index 7e12d428e0fde2..0aa3be6a1bde6a 100644 --- a/Lib/test/test_dynamic.py +++ b/Lib/test/test_dynamic.py @@ -145,7 +145,7 @@ def __missing__(self, key): code = "lambda: " + "+".join(f"_number_{i}" for i in range(variables)) sum_func = eval(code, MyGlobals()) expected = sum(range(variables)) - # Warm up the the function for quickening (PEP 659) + # Warm up the function for quickening (PEP 659) for _ in range(30): self.assertEqual(sum_func(), expected) diff --git a/Lib/test/test_eintr.py b/Lib/test/test_eintr.py index 528147802ba47e..49b15f1a2dba92 100644 --- a/Lib/test/test_eintr.py +++ b/Lib/test/test_eintr.py @@ -9,6 +9,7 @@ class EINTRTests(unittest.TestCase): @unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()") + @support.requires_resource('walltime') def test_all(self): # Run the tester in a sub-process, to make sure there is only one # thread (for reliable signal delivery). diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py index 2a237095b9080c..512464f87162cd 100644 --- a/Lib/test/test_email/test_email.py +++ b/Lib/test/test_email/test_email.py @@ -2236,7 +2236,7 @@ def test_multipart_valid_cte_no_defect(self): "\nContent-Transfer-Encoding: {}".format(cte))) self.assertEqual(len(msg.defects), 0) - # test_headerregistry.TestContentTyopeHeader invalid_1 and invalid_2. + # test_headerregistry.TestContentTypeHeader invalid_1 and invalid_2. def test_invalid_content_type(self): eq = self.assertEqual neq = self.ndiffAssertEqual diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 50c9f61017e022..7f1a4e665f3b5d 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -26,6 +26,7 @@ PYMEM_ALLOCATOR_NOT_SET = 0 PYMEM_ALLOCATOR_DEBUG = 2 PYMEM_ALLOCATOR_MALLOC = 3 +Py_STATS = hasattr(sys, '_stats_on') # _PyCoreConfig_InitCompatConfig() API_COMPAT = 1 @@ -512,6 +513,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): 'safe_path': 0, '_is_python_build': IGNORE_CONFIG, } + if Py_STATS: + CONFIG_COMPAT['_pystats'] = 0 if MS_WINDOWS: CONFIG_COMPAT.update({ 'legacy_windows_stdio': 0, @@ -895,6 +898,8 @@ def test_init_from_config(self): 'check_hash_pycs_mode': 'always', 'pathconfig_warnings': 0, } + if Py_STATS: + config['_pystats'] = 1 self.check_all_configs("test_init_from_config", config, preconfig, api=API_COMPAT) @@ -927,6 +932,8 @@ def test_init_compat_env(self): 'safe_path': 1, 'int_max_str_digits': 4567, } + if Py_STATS: + config['_pystats'] = 1 self.check_all_configs("test_init_compat_env", config, preconfig, api=API_COMPAT) @@ -960,6 +967,8 @@ def test_init_python_env(self): 'safe_path': 1, 'int_max_str_digits': 4567, } + if Py_STATS: + config['_pystats'] = 1 self.check_all_configs("test_init_python_env", config, preconfig, api=API_PYTHON) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 11a5b425efff9a..8c1f285f7b3bc2 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -316,6 +316,7 @@ def __str__(self): return self.name.title() def __format__(self, spec): return ''.join(reversed(self.name)) + self.NewBaseEnum = NewBaseEnum class NewSubEnum(NewBaseEnum): first = auto() self.NewSubEnum = NewSubEnum @@ -382,10 +383,8 @@ def __str__(self): return self.name.title() def __format__(self, spec): return ''.join(reversed(self.name)) - NewBaseEnum = self.enum_type('NewBaseEnum', dict(__format__=__format__, __str__=__str__)) - class NewSubEnum(NewBaseEnum): - first = auto() - self.NewSubEnum = NewBaseEnum('NewSubEnum', 'first') + self.NewBaseEnum = self.enum_type('NewBaseEnum', dict(__format__=__format__, __str__=__str__)) + self.NewSubEnum = self.NewBaseEnum('NewSubEnum', 'first') # def _generate_next_value_(name, start, last, values): pass @@ -601,6 +600,10 @@ class SubEnum(SuperEnum): self.assertTrue('description' not in dir(SubEnum)) self.assertTrue('description' in dir(SubEnum.sample), dir(SubEnum.sample)) + def test_empty_enum_has_no_values(self): + with self.assertRaisesRegex(TypeError, "<.... 'NewBaseEnum'> has no members"): + self.NewBaseEnum(7) + def test_enum_in_enum_out(self): Main = self.MainEnum self.assertIs(Main(Main.first), Main.first) @@ -4688,8 +4691,6 @@ def _generate_next_value_(name, start, count, last): self.assertEqual(Huh.TWO.value, (2, 2)) self.assertEqual(Huh.THREE.value, (3, 3, 3)) -class TestEnumTypeSubclassing(unittest.TestCase): - pass expected_help_output_with_docs = """\ Help on class Color in module %s: diff --git a/Lib/test/test_exception_group.py b/Lib/test/test_exception_group.py index a02d54da35e948..20122679223843 100644 --- a/Lib/test/test_exception_group.py +++ b/Lib/test/test_exception_group.py @@ -1,7 +1,7 @@ import collections.abc import types import unittest -from test.support import C_RECURSION_LIMIT +from test.support import Py_C_RECURSION_LIMIT class TestExceptionGroupTypeHierarchy(unittest.TestCase): def test_exception_group_types(self): @@ -460,7 +460,7 @@ def test_basics_split_by_predicate__match(self): class DeepRecursionInSplitAndSubgroup(unittest.TestCase): def make_deep_eg(self): e = TypeError(1) - for i in range(C_RECURSION_LIMIT + 1): + for i in range(Py_C_RECURSION_LIMIT + 1): e = ExceptionGroup('eg', [e]) return e diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 907c2cda86cbae..3c1e8c150ae711 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -683,6 +683,7 @@ def test_dump_traceback_later_fd(self): with tempfile.TemporaryFile('wb+') as fp: self.check_dump_traceback_later(fd=fp.fileno()) + @support.requires_resource('walltime') def test_dump_traceback_later_twice(self): self.check_dump_traceback_later(loops=2) diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index c4ee1e08251d63..b6daae7e9280ff 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -25,7 +25,7 @@ #locate file with float format test values test_dir = os.path.dirname(__file__) or os.curdir -format_testfile = os.path.join(test_dir, 'formatfloat_testcases.txt') +format_testfile = os.path.join(test_dir, 'mathdata', 'formatfloat_testcases.txt') class FloatSubclass(float): pass @@ -733,8 +733,13 @@ def test_format_testfile(self): lhs, rhs = map(str.strip, line.split('->')) fmt, arg = lhs.split() - self.assertEqual(fmt % float(arg), rhs) - self.assertEqual(fmt % -float(arg), '-' + rhs) + f = float(arg) + self.assertEqual(fmt % f, rhs) + self.assertEqual(fmt % -f, '-' + rhs) + if fmt != '%r': + fmt2 = fmt[1:] + self.assertEqual(format(f, fmt2), rhs) + self.assertEqual(format(-f, fmt2), '-' + rhs) def test_issue5864(self): self.assertEqual(format(123.456, '.4'), '123.5') @@ -763,6 +768,7 @@ def test_issue35560(self): class ReprTestCase(unittest.TestCase): def test_repr(self): with open(os.path.join(os.path.split(__file__)[0], + 'mathdata', 'floating_points.txt'), encoding="utf-8") as floats_file: for line in floats_file: line = line.strip() diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index e112f49d2e7944..499e3b6e656faa 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -7,6 +7,7 @@ import operator import fractions import functools +import os import sys import typing import unittest @@ -15,6 +16,9 @@ from pickle import dumps, loads F = fractions.Fraction +#locate file with float format test values +test_dir = os.path.dirname(__file__) or os.curdir +format_testfile = os.path.join(test_dir, 'mathdata', 'formatfloat_testcases.txt') class DummyFloat(object): """Dummy float class for testing comparisons with Fractions""" @@ -1220,6 +1224,30 @@ def test_invalid_formats(self): with self.assertRaises(ValueError): format(fraction, spec) + @requires_IEEE_754 + def test_float_format_testfile(self): + with open(format_testfile, encoding="utf-8") as testfile: + for line in testfile: + if line.startswith('--'): + continue + line = line.strip() + if not line: + continue + + lhs, rhs = map(str.strip, line.split('->')) + fmt, arg = lhs.split() + if fmt == '%r': + continue + fmt2 = fmt[1:] + with self.subTest(fmt=fmt, arg=arg): + f = F(float(arg)) + self.assertEqual(format(f, fmt2), rhs) + if f: # skip negative zero + self.assertEqual(format(-f, fmt2), '-' + rhs) + f = F(arg) + self.assertEqual(float(format(f, fmt2)), float(rhs)) + self.assertEqual(float(format(-f, fmt2)), float('-' + rhs)) + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py index 6bb0144e9b1ed7..9491c7facdf077 100644 --- a/Lib/test/test_frame.py +++ b/Lib/test/test_frame.py @@ -322,7 +322,7 @@ def f(): sneaky_frame_object = None gc.enable() next(g) - # g.gi_frame should be the the frame object from the callback (the + # g.gi_frame should be the frame object from the callback (the # one that was *requested* second, but *created* first): self.assertIs(g.gi_frame, sneaky_frame_object) finally: diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py index 16f01973f99f3e..4f05a149a901b2 100644 --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -1027,6 +1027,10 @@ def test_lambda(self): "f'{lambda x:}'", "f'{lambda :}'", ]) + # Ensure the detection of invalid lambdas doesn't trigger detection + # for valid lambdas in the second error pass + with self.assertRaisesRegex(SyntaxError, "invalid syntax"): + compile("lambda name_3=f'{name_4}': {name_3}\n1 $ 1", "", "exec") # but don't emit the paren warning in general cases with self.assertRaisesRegex(SyntaxError, "f-string: expecting a valid expression after '{'"): diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py index 544228e3bab47b..bebd1bbb9e2703 100644 --- a/Lib/test/test_ftplib.py +++ b/Lib/test/test_ftplib.py @@ -325,8 +325,8 @@ def handle_error(self): if ssl is not None: - CERTFILE = os.path.join(os.path.dirname(__file__), "keycert3.pem") - CAFILE = os.path.join(os.path.dirname(__file__), "pycacert.pem") + CERTFILE = os.path.join(os.path.dirname(__file__), "certdata", "keycert3.pem") + CAFILE = os.path.join(os.path.dirname(__file__), "certdata", "pycacert.pem") class SSLConnection(asyncore.dispatcher): """An asyncore.dispatcher subclass supporting TLS/SSL.""" diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 5ba7f51c91f3b5..e4de2c5ede15f1 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -26,10 +26,16 @@ py_functools = import_helper.import_fresh_module('functools', blocked=['_functools']) -c_functools = import_helper.import_fresh_module('functools') +c_functools = import_helper.import_fresh_module('functools', + fresh=['_functools']) decimal = import_helper.import_fresh_module('decimal', fresh=['_decimal']) +_partial_types = [py_functools.partial] +if c_functools: + _partial_types.append(c_functools.partial) + + @contextlib.contextmanager def replaced_module(name, replacement): original_module = sys.modules[name] @@ -201,7 +207,7 @@ def test_repr(self): kwargs = {'a': object(), 'b': object()} kwargs_reprs = ['a={a!r}, b={b!r}'.format_map(kwargs), 'b={b!r}, a={a!r}'.format_map(kwargs)] - if self.partial in (c_functools.partial, py_functools.partial): + if self.partial in _partial_types: name = 'functools.partial' else: name = self.partial.__name__ @@ -223,7 +229,7 @@ def test_repr(self): for kwargs_repr in kwargs_reprs]) def test_recursive_repr(self): - if self.partial in (c_functools.partial, py_functools.partial): + if self.partial in _partial_types: name = 'functools.partial' else: name = self.partial.__name__ @@ -250,7 +256,7 @@ def test_recursive_repr(self): f.__setstate__((capture, (), {}, {})) def test_pickle(self): - with self.AllowPickle(): + with replaced_module('functools', self.module): f = self.partial(signature, ['asdf'], bar=[True]) f.attr = [] for proto in range(pickle.HIGHEST_PROTOCOL + 1): @@ -333,7 +339,7 @@ def test_setstate_subclasses(self): self.assertIs(type(r[0]), tuple) def test_recursive_pickle(self): - with self.AllowPickle(): + with replaced_module('functools', self.module): f = self.partial(capture) f.__setstate__((f, (), {}, {})) try: @@ -387,14 +393,9 @@ def __getitem__(self, key): @unittest.skipUnless(c_functools, 'requires the C _functools module') class TestPartialC(TestPartial, unittest.TestCase): if c_functools: + module = c_functools partial = c_functools.partial - class AllowPickle: - def __enter__(self): - return self - def __exit__(self, type, value, tb): - return False - def test_attributes_unwritable(self): # attributes should not be writable p = self.partial(capture, 1, 2, a=10, b=20) @@ -437,15 +438,9 @@ def __str__(self): class TestPartialPy(TestPartial, unittest.TestCase): + module = py_functools partial = py_functools.partial - class AllowPickle: - def __init__(self): - self._cm = replaced_module("functools", py_functools) - def __enter__(self): - return self._cm.__enter__() - def __exit__(self, type, value, tb): - return self._cm.__exit__(type, value, tb) if c_functools: class CPartialSubclass(c_functools.partial): @@ -1872,9 +1867,10 @@ def orig(): ... def py_cached_func(x, y): return 3 * x + y -@c_functools.lru_cache() -def c_cached_func(x, y): - return 3 * x + y +if c_functools: + @c_functools.lru_cache() + def c_cached_func(x, y): + return 3 * x + y class TestLRUPy(TestLRU, unittest.TestCase): @@ -1891,18 +1887,20 @@ def cached_staticmeth(x, y): return 3 * x + y +@unittest.skipUnless(c_functools, 'requires the C _functools module') class TestLRUC(TestLRU, unittest.TestCase): - module = c_functools - cached_func = c_cached_func, + if c_functools: + module = c_functools + cached_func = c_cached_func, - @module.lru_cache() - def cached_meth(self, x, y): - return 3 * x + y + @module.lru_cache() + def cached_meth(self, x, y): + return 3 * x + y - @staticmethod - @module.lru_cache() - def cached_staticmeth(x, y): - return 3 * x + y + @staticmethod + @module.lru_cache() + def cached_staticmeth(x, y): + return 3 * x + y class TestSingleDispatch(unittest.TestCase): diff --git a/Lib/test/test_future_stmt/__init__.py b/Lib/test/test_future_stmt/__init__.py new file mode 100644 index 00000000000000..f2a39a3fe29c7f --- /dev/null +++ b/Lib/test/test_future_stmt/__init__.py @@ -0,0 +1,6 @@ +import os +from test import support + + +def load_tests(*args): + return support.load_package_tests(os.path.dirname(__file__), *args) diff --git a/Lib/test/badsyntax_future10.py b/Lib/test/test_future_stmt/badsyntax_future.py similarity index 100% rename from Lib/test/badsyntax_future10.py rename to Lib/test/test_future_stmt/badsyntax_future.py diff --git a/Lib/test/future_test1.py b/Lib/test/test_future_stmt/import_nested_scope_twice.py similarity index 100% rename from Lib/test/future_test1.py rename to Lib/test/test_future_stmt/import_nested_scope_twice.py diff --git a/Lib/test/future_test2.py b/Lib/test/test_future_stmt/nested_scope.py similarity index 100% rename from Lib/test/future_test2.py rename to Lib/test/test_future_stmt/nested_scope.py diff --git a/Lib/test/test_future.py b/Lib/test/test_future_stmt/test_future.py similarity index 74% rename from Lib/test/test_future.py rename to Lib/test/test_future_stmt/test_future.py index 4730bfafbd9cfe..2c8ceb664cb362 100644 --- a/Lib/test/test_future.py +++ b/Lib/test/test_future_stmt/test_future.py @@ -10,6 +10,8 @@ import re import sys +TOP_LEVEL_MSG = 'from __future__ imports must occur at the beginning of the file' + rx = re.compile(r'\((\S+).py, line (\d+)') def get_error_location(msg): @@ -18,65 +20,141 @@ def get_error_location(msg): class FutureTest(unittest.TestCase): - def check_syntax_error(self, err, basename, lineno, offset=1): - self.assertIn('%s.py, line %d' % (basename, lineno), str(err)) - self.assertEqual(os.path.basename(err.filename), basename + '.py') + def check_syntax_error(self, err, basename, + *, + lineno, + message=TOP_LEVEL_MSG, offset=1): + if basename != '': + basename += '.py' + + self.assertEqual(f'{message} ({basename}, line {lineno})', str(err)) + self.assertEqual(os.path.basename(err.filename), basename) self.assertEqual(err.lineno, lineno) self.assertEqual(err.offset, offset) - def test_future1(self): - with import_helper.CleanImport('future_test1'): - from test import future_test1 - self.assertEqual(future_test1.result, 6) + def assertSyntaxError(self, code, + *, + lineno=1, + message=TOP_LEVEL_MSG, offset=1, + parametrize_docstring=True): + code = dedent(code.lstrip('\n')) + for add_docstring in ([False, True] if parametrize_docstring else [False]): + with self.subTest(code=code, add_docstring=add_docstring): + if add_docstring: + code = '"""Docstring"""\n' + code + lineno += 1 + with self.assertRaises(SyntaxError) as cm: + exec(code) + self.check_syntax_error(cm.exception, "", + lineno=lineno, + message=message, + offset=offset) + + def test_import_nested_scope_twice(self): + # Import the name nested_scopes twice to trigger SF bug #407394 + with import_helper.CleanImport( + 'test.test_future_stmt.import_nested_scope_twice', + ): + from test.test_future_stmt import import_nested_scope_twice + self.assertEqual(import_nested_scope_twice.result, 6) + + def test_nested_scope(self): + with import_helper.CleanImport('test.test_future_stmt.nested_scope'): + from test.test_future_stmt import nested_scope + self.assertEqual(nested_scope.result, 6) + + def test_future_single_import(self): + with import_helper.CleanImport( + 'test.test_future_stmt.test_future_single_import', + ): + from test.test_future_stmt import test_future_single_import + + def test_future_multiple_imports(self): + with import_helper.CleanImport( + 'test.test_future_stmt.test_future_multiple_imports', + ): + from test.test_future_stmt import test_future_multiple_imports + + def test_future_multiple_features(self): + with import_helper.CleanImport( + "test.test_future_stmt.test_future_multiple_features", + ): + from test.test_future_stmt import test_future_multiple_features + + def test_unknown_future_flag(self): + code = """ + from __future__ import nested_scopes + from __future__ import rested_snopes # typo error here: nested => rested + """ + self.assertSyntaxError( + code, lineno=2, + message='future feature rested_snopes is not defined', + ) - def test_future2(self): - with import_helper.CleanImport('future_test2'): - from test import future_test2 - self.assertEqual(future_test2.result, 6) + def test_future_import_not_on_top(self): + code = """ + import some_module + from __future__ import annotations + """ + self.assertSyntaxError(code, lineno=2) - def test_future3(self): - with import_helper.CleanImport('test_future3'): - from test import test_future3 + code = """ + import __future__ + from __future__ import annotations + """ + self.assertSyntaxError(code, lineno=2) - def test_badfuture3(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future3 - self.check_syntax_error(cm.exception, "badsyntax_future3", 3) + code = """ + from __future__ import absolute_import + "spam, bar, blah" + from __future__ import print_function + """ + self.assertSyntaxError(code, lineno=3) - def test_badfuture4(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future4 - self.check_syntax_error(cm.exception, "badsyntax_future4", 3) + def test_future_import_with_extra_string(self): + code = """ + '''Docstring''' + "this isn't a doc string" + from __future__ import nested_scopes + """ + self.assertSyntaxError(code, lineno=3, parametrize_docstring=False) - def test_badfuture5(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future5 - self.check_syntax_error(cm.exception, "badsyntax_future5", 4) + def test_multiple_import_statements_on_same_line(self): + # With `\`: + code = """ + from __future__ import nested_scopes; import string; from __future__ import \ + nested_scopes + """ + self.assertSyntaxError(code, offset=54) - def test_badfuture6(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future6 - self.check_syntax_error(cm.exception, "badsyntax_future6", 3) + # Without `\`: + code = """ + from __future__ import nested_scopes; import string; from __future__ import nested_scopes + """ + self.assertSyntaxError(code, offset=54) - def test_badfuture7(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future7 - self.check_syntax_error(cm.exception, "badsyntax_future7", 3, 54) + def test_future_import_star(self): + code = """ + from __future__ import * + """ + self.assertSyntaxError(code, message='future feature * is not defined') - def test_badfuture8(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future8 - self.check_syntax_error(cm.exception, "badsyntax_future8", 3) + def test_future_import_braces(self): + code = """ + from __future__ import braces + """ + # Congrats, you found an easter egg! + self.assertSyntaxError(code, message='not a chance') - def test_badfuture9(self): - with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future9 - self.check_syntax_error(cm.exception, "badsyntax_future9", 3) + code = """ + from __future__ import nested_scopes, braces + """ + self.assertSyntaxError(code, message='not a chance') - def test_badfuture10(self): + def test_module_with_future_import_not_on_top(self): with self.assertRaises(SyntaxError) as cm: - from test import badsyntax_future10 - self.check_syntax_error(cm.exception, "badsyntax_future10", 3) + from test.test_future_stmt import badsyntax_future + self.check_syntax_error(cm.exception, "badsyntax_future", lineno=3) def test_ensure_flags_dont_clash(self): # bpo-39562: test that future flags and compiler flags doesn't clash @@ -113,10 +191,6 @@ def test_parserhack(self): else: self.fail("syntax error didn't occur") - def test_multiple_features(self): - with import_helper.CleanImport("test.test_future5"): - from test import test_future5 - def test_unicode_literals_exec(self): scope = {} exec("from __future__ import unicode_literals; x = ''", {}, scope) diff --git a/Lib/test/test___future__.py b/Lib/test/test_future_stmt/test_future_flags.py similarity index 100% rename from Lib/test/test___future__.py rename to Lib/test/test_future_stmt/test_future_flags.py diff --git a/Lib/test/test_future5.py b/Lib/test/test_future_stmt/test_future_multiple_features.py similarity index 100% rename from Lib/test/test_future5.py rename to Lib/test/test_future_stmt/test_future_multiple_features.py diff --git a/Lib/test/test_future4.py b/Lib/test/test_future_stmt/test_future_multiple_imports.py similarity index 100% rename from Lib/test/test_future4.py rename to Lib/test/test_future_stmt/test_future_multiple_imports.py diff --git a/Lib/test/test_future3.py b/Lib/test/test_future_stmt/test_future_single_import.py similarity index 100% rename from Lib/test/test_future3.py rename to Lib/test/test_future_stmt/test_future_single_import.py diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py index c05a2d387c429c..5a4394a0993c8d 100644 --- a/Lib/test/test_gdb.py +++ b/Lib/test/test_gdb.py @@ -4,7 +4,6 @@ # Lib/test/test_jit_gdb.py import os -import platform import re import subprocess import sys @@ -55,10 +54,6 @@ def get_gdb_version(): if not sysconfig.is_python_build(): raise unittest.SkipTest("test_gdb only works on source builds at the moment.") -if 'Clang' in platform.python_compiler() and sys.platform == 'darwin': - raise unittest.SkipTest("test_gdb doesn't work correctly when python is" - " built with LLVM clang") - if ((sysconfig.get_config_var('PGO_PROF_USE_FLAG') or 'xxx') in (sysconfig.get_config_var('PY_CORE_CFLAGS') or '')): raise unittest.SkipTest("test_gdb is not reliable on PGO builds") @@ -247,6 +242,17 @@ def get_stack_trace(self, source=None, script=None, for pattern in ( '(frame information optimized out)', 'Unable to read information on python frame', + # gh-91960: On Python built with "clang -Og", gdb gets + # "frame=" for _PyEval_EvalFrameDefault() parameter + '(unable to read python frame information)', + # gh-104736: On Python built with "clang -Og" on ppc64le, + # "py-bt" displays a truncated or not traceback, but "where" + # logs this error message: + 'Backtrace stopped: frame did not save the PC', + # gh-104736: When "bt" command displays something like: + # "#1 0x0000000000000000 in ?? ()", the traceback is likely + # truncated or wrong. + ' ?? ()', ): if pattern in out: raise unittest.SkipTest(f"{pattern!r} found in gdb output") diff --git a/Lib/test/test_generated_cases.py b/Lib/test/test_generated_cases.py index 54378fced54699..b5eaf824aee706 100644 --- a/Lib/test/test_generated_cases.py +++ b/Lib/test/test_generated_cases.py @@ -1,9 +1,31 @@ +import contextlib +import os +import sys import tempfile import unittest -import os +from test import support from test import test_tools + +def skip_if_different_mount_drives(): + if sys.platform != 'win32': + return + ROOT = os.path.dirname(os.path.dirname(__file__)) + root_drive = os.path.splitroot(ROOT)[0] + cwd_drive = os.path.splitroot(os.getcwd())[0] + if root_drive != cwd_drive: + # generate_cases.py uses relpath() which raises ValueError if ROOT + # and the current working different have different mount drives + # (on Windows). + raise unittest.SkipTest( + f"the current working directory and the Python source code " + f"directory have different mount drives " + f"({cwd_drive} and {root_drive})" + ) +skip_if_different_mount_drives() + + test_tools.skip_if_missing('cases_generator') with test_tools.imports_under_tool('cases_generator'): import generate_cases @@ -12,6 +34,12 @@ from parsing import StackEffect +def handle_stderr(): + if support.verbose > 1: + return contextlib.nullcontext() + else: + return support.captured_stderr() + class TestEffects(unittest.TestCase): def test_effect_sizes(self): input_effects = [ @@ -81,11 +109,12 @@ def run_cases_test(self, input: str, expected: str): temp_input.flush() a = generate_cases.Generator([self.temp_input_filename]) - a.parse() - a.analyze() - if a.errors: - raise RuntimeError(f"Found {a.errors} errors") - a.write_instructions(self.temp_output_filename, False) + with handle_stderr(): + a.parse() + a.analyze() + if a.errors: + raise RuntimeError(f"Found {a.errors} errors") + a.write_instructions(self.temp_output_filename, False) with open(self.temp_output_filename) as temp_output: lines = temp_output.readlines() @@ -532,6 +561,36 @@ def test_macro_cond_effect(self): """ self.run_cases_test(input, output) + def test_macro_push_push(self): + input = """ + op(A, (-- val1)) { + val1 = spam(); + } + op(B, (-- val2)) { + val2 = spam(); + } + macro(M) = A + B; + """ + output = """ + TARGET(M) { + PyObject *val1; + PyObject *val2; + // A + { + val1 = spam(); + } + // B + { + val2 = spam(); + } + STACK_GROW(2); + stack_pointer[-2] = val1; + stack_pointer[-1] = val2; + DISPATCH(); + } + """ + self.run_cases_test(input, output) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_getopt.py b/Lib/test/test_getopt.py index c96a33b77fe272..c8b3442de4aa77 100644 --- a/Lib/test/test_getopt.py +++ b/Lib/test/test_getopt.py @@ -1,8 +1,8 @@ # test_getopt.py # David Goodger 2000-08-19 -from test.support import verbose, run_doctest from test.support.os_helper import EnvironmentVarGuard +import doctest import unittest import getopt @@ -134,48 +134,49 @@ def test_gnu_getopt(self): self.assertEqual(opts, [('-a', '')]) self.assertEqual(args, ['arg1', '-b', '1', '--alpha', '--beta=2']) - def test_libref_examples(self): - s = """ - Examples from the Library Reference: Doc/lib/libgetopt.tex + def test_issue4629(self): + longopts, shortopts = getopt.getopt(['--help='], '', ['help=']) + self.assertEqual(longopts, [('--help', '')]) + longopts, shortopts = getopt.getopt(['--help=x'], '', ['help=']) + self.assertEqual(longopts, [('--help', 'x')]) + self.assertRaises(getopt.GetoptError, getopt.getopt, ['--help='], '', ['help']) - An example using only Unix style options: +def test_libref_examples(): + """ + Examples from the Library Reference: Doc/lib/libgetopt.tex + An example using only Unix style options: - >>> import getopt - >>> args = '-a -b -cfoo -d bar a1 a2'.split() - >>> args - ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] - >>> optlist, args = getopt.getopt(args, 'abc:d:') - >>> optlist - [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] - >>> args - ['a1', 'a2'] - Using long option names is equally easy: + >>> import getopt + >>> args = '-a -b -cfoo -d bar a1 a2'.split() + >>> args + ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2'] + >>> optlist, args = getopt.getopt(args, 'abc:d:') + >>> optlist + [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')] + >>> args + ['a1', 'a2'] + Using long option names is equally easy: - >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' - >>> args = s.split() - >>> args - ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] - >>> optlist, args = getopt.getopt(args, 'x', [ - ... 'condition=', 'output-file=', 'testing']) - >>> optlist - [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')] - >>> args - ['a1', 'a2'] - """ - import types - m = types.ModuleType("libreftest", s) - run_doctest(m, verbose) + >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2' + >>> args = s.split() + >>> args + ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2'] + >>> optlist, args = getopt.getopt(args, 'x', [ + ... 'condition=', 'output-file=', 'testing']) + >>> optlist + [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')] + >>> args + ['a1', 'a2'] + """ + +def load_tests(loader, tests, pattern): + tests.addTest(doctest.DocTestSuite()) + return tests - def test_issue4629(self): - longopts, shortopts = getopt.getopt(['--help='], '', ['help=']) - self.assertEqual(longopts, [('--help', '')]) - longopts, shortopts = getopt.getopt(['--help=x'], '', ['help=']) - self.assertEqual(longopts, [('--help', 'x')]) - self.assertRaises(getopt.GetoptError, getopt.getopt, ['--help='], '', ['help']) if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index 8507a07e498532..8501006b799262 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -236,6 +236,10 @@ def check(test, error=False): check(f"[{num}for x in ()]") check(f"{num}spam", error=True) + # gh-88943: Invalid non-ASCII character following a numerical literal. + with self.assertRaisesRegex(SyntaxError, r"invalid character '⁄' \(U\+2044\)"): + compile(f"{num}⁄7", "", "eval") + with self.assertWarnsRegex(SyntaxWarning, r'invalid \w+ literal'): compile(f"{num}is x", "", "eval") with warnings.catch_warnings(): @@ -350,6 +354,11 @@ def test_var_annot_syntax_errors(self): check_syntax_error(self, "x: int: str") check_syntax_error(self, "def f():\n" " nonlocal x: int\n") + check_syntax_error(self, "def f():\n" + " global x: int\n") + check_syntax_error(self, "x: int = y = 1") + check_syntax_error(self, "z = w: int = 1") + check_syntax_error(self, "x: int = y: int = 1") # AST pass check_syntax_error(self, "[x, 0]: int\n") check_syntax_error(self, "f(): int\n") @@ -363,6 +372,12 @@ def test_var_annot_syntax_errors(self): check_syntax_error(self, "def f():\n" " global x\n" " x: int\n") + check_syntax_error(self, "def f():\n" + " x: int\n" + " nonlocal x\n") + check_syntax_error(self, "def f():\n" + " nonlocal x\n" + " x: int\n") def test_var_annot_basic_semantics(self): # execution order diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index fe8105ee2bb3fa..5d5832b62b2f94 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -21,11 +21,13 @@ here = os.path.dirname(__file__) # Self-signed cert file for 'localhost' -CERT_localhost = os.path.join(here, 'keycert.pem') +CERT_localhost = os.path.join(here, 'certdata', 'keycert.pem') # Self-signed cert file for 'fakehostname' -CERT_fakehostname = os.path.join(here, 'keycert2.pem') +CERT_fakehostname = os.path.join(here, 'certdata', 'keycert2.pem') # Self-signed cert file for self-signed.pythontest.net -CERT_selfsigned_pythontestdotnet = os.path.join(here, 'selfsigned_pythontestdotnet.pem') +CERT_selfsigned_pythontestdotnet = os.path.join( + here, 'certdata', 'selfsigned_pythontestdotnet.pem', +) # constants for testing chunked encoding chunked_start = ( @@ -1954,6 +1956,7 @@ def test_networked_good_cert(self): h.close() self.assertIn('nginx', server_string) + @support.requires_resource('walltime') def test_networked_bad_cert(self): # We feed a "CA" cert that is unrelated to the server's cert import ssl diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index cfd8a101dcc1c1..9fa6ecf9c08e27 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -699,11 +699,20 @@ def test_html_escape_filename(self): "This test can't be run reliably as root (issue #13308).") class CGIHTTPServerTestCase(BaseTestCase): class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler): - pass + _test_case_self = None # populated by each setUp() method call. + + def __init__(self, *args, **kwargs): + with self._test_case_self.assertWarnsRegex( + DeprecationWarning, + r'http\.server\.CGIHTTPRequestHandler'): + # This context also happens to catch and silence the + # threading DeprecationWarning from os.fork(). + super().__init__(*args, **kwargs) linesep = os.linesep.encode('ascii') def setUp(self): + self.request_handler._test_case_self = self # practical, but yuck. BaseTestCase.setUp(self) self.cwd = os.getcwd() self.parent_dir = tempfile.mkdtemp() @@ -780,6 +789,7 @@ def setUp(self): os.chdir(self.parent_dir) def tearDown(self): + self.request_handler._test_case_self = None try: os.chdir(self.cwd) if self._pythonexe_symlink: diff --git a/Lib/test/test_imaplib.py b/Lib/test/test_imaplib.py index 2b2f1f76d26db3..b97474acca370f 100644 --- a/Lib/test/test_imaplib.py +++ b/Lib/test/test_imaplib.py @@ -10,7 +10,7 @@ import threading import socket -from test.support import verbose, run_with_tz, run_with_locale, cpython_only +from test.support import verbose, run_with_tz, run_with_locale, cpython_only, requires_resource from test.support import hashlib_helper from test.support import threading_helper import unittest @@ -23,8 +23,8 @@ support.requires_working_socket(module=True) -CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "keycert3.pem") -CAFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "pycacert.pem") +CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "certdata", "keycert3.pem") +CAFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "certdata", "pycacert.pem") class TestImaplib(unittest.TestCase): @@ -74,6 +74,7 @@ def test_that_Time2Internaldate_returns_a_result(self): for t in self.timevalues(): imaplib.Time2Internaldate(t) + @socket_helper.skip_if_tcp_blackhole def test_imap4_host_default_value(self): # Check whether the IMAP4_PORT is truly unavailable. with socket.socket() as s: @@ -456,6 +457,7 @@ def test_simple_with_statement(self): with self.imap_class(*server.server_address): pass + @requires_resource('walltime') def test_imaplib_timeout_test(self): _, server = self._setup(SimpleIMAPHandler) addr = server.server_address[1] @@ -549,6 +551,7 @@ class NewIMAPSSLTests(NewIMAPTestsMixin, unittest.TestCase): imap_class = IMAP4_SSL server_class = SecureTCPServer + @requires_resource('walltime') def test_ssl_raises(self): ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) self.assertEqual(ssl_context.verify_mode, ssl.CERT_REQUIRED) @@ -563,6 +566,7 @@ def test_ssl_raises(self): ssl_context=ssl_context) client.shutdown() + @requires_resource('walltime') def test_ssl_verified(self): ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) ssl_context.load_verify_locations(CAFILE) diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index 33bce779f6cc01..48553f9d48b010 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -22,7 +22,6 @@ import types import unittest from unittest import mock -import _testinternalcapi import _imp from test.support import os_helper @@ -30,9 +29,10 @@ STDLIB_DIR, swap_attr, swap_item, cpython_only, is_emscripten, is_wasi, run_in_subinterp, run_in_subinterp_with_config, Py_TRACE_REFS) from test.support.import_helper import ( - forget, make_legacy_pyc, unlink, unload, DirsOnSysPath, CleanImport) + forget, make_legacy_pyc, unlink, unload, ready_to_import, + DirsOnSysPath, CleanImport) from test.support.os_helper import ( - TESTFN, rmtree, temp_umask, TESTFN_UNENCODABLE, temp_dir) + TESTFN, rmtree, temp_umask, TESTFN_UNENCODABLE) from test.support import script_helper from test.support import threading_helper from test.test_importlib.util import uncache @@ -49,6 +49,10 @@ import _xxsubinterpreters as _interpreters except ModuleNotFoundError: _interpreters = None +try: + import _testinternalcapi +except ImportError: + _testinternalcapi = None skip_if_dont_write_bytecode = unittest.skipIf( @@ -125,27 +129,6 @@ def wrapper(self): return deco -@contextlib.contextmanager -def _ready_to_import(name=None, source=""): - # sets up a temporary directory and removes it - # creates the module file - # temporarily clears the module from sys.modules (if any) - # reverts or removes the module when cleaning up - name = name or "spam" - with temp_dir() as tempdir: - path = script_helper.make_script(tempdir, name, source) - old_module = sys.modules.pop(name, None) - try: - sys.path.insert(0, tempdir) - yield name, path - sys.path.remove(tempdir) - finally: - if old_module is not None: - sys.modules[name] = old_module - elif name in sys.modules: - del sys.modules[name] - - if _testsinglephase is not None: def restore__testsinglephase(*, _orig=_testsinglephase): # We started with the module imported and want to restore @@ -401,7 +384,7 @@ def test_from_import_missing_attr_path_is_canonical(self): def test_from_import_star_invalid_type(self): import re - with _ready_to_import() as (name, path): + with ready_to_import() as (name, path): with open(path, 'w', encoding='utf-8') as f: f.write("__all__ = [b'invalid_type']") globals = {} @@ -410,7 +393,7 @@ def test_from_import_star_invalid_type(self): ): exec(f"from {name} import *", globals) self.assertNotIn(b"invalid_type", globals) - with _ready_to_import() as (name, path): + with ready_to_import() as (name, path): with open(path, 'w', encoding='utf-8') as f: f.write("globals()[b'invalid_type'] = object()") globals = {} @@ -818,7 +801,7 @@ class FilePermissionTests(unittest.TestCase): ) def test_creation_mode(self): mask = 0o022 - with temp_umask(mask), _ready_to_import() as (name, path): + with temp_umask(mask), ready_to_import() as (name, path): cached_path = importlib.util.cache_from_source(path) module = __import__(name) if not os.path.exists(cached_path): @@ -837,7 +820,7 @@ def test_creation_mode(self): def test_cached_mode_issue_2051(self): # permissions of .pyc should match those of .py, regardless of mask mode = 0o600 - with temp_umask(0o022), _ready_to_import() as (name, path): + with temp_umask(0o022), ready_to_import() as (name, path): cached_path = importlib.util.cache_from_source(path) os.chmod(path, mode) __import__(name) @@ -853,7 +836,7 @@ def test_cached_mode_issue_2051(self): @os_helper.skip_unless_working_chmod def test_cached_readonly(self): mode = 0o400 - with temp_umask(0o022), _ready_to_import() as (name, path): + with temp_umask(0o022), ready_to_import() as (name, path): cached_path = importlib.util.cache_from_source(path) os.chmod(path, mode) __import__(name) @@ -868,7 +851,7 @@ def test_cached_readonly(self): def test_pyc_always_writable(self): # Initially read-only .pyc files on Windows used to cause problems # with later updates, see issue #6074 for details - with _ready_to_import() as (name, path): + with ready_to_import() as (name, path): # Write a Python file, make it read-only and import it with open(path, 'w', encoding='utf-8') as f: f.write("x = 'original'\n") diff --git a/Lib/test/test_importlib/import_/test_packages.py b/Lib/test/test_importlib/import_/test_packages.py index eb0831f7d6d54b..0c29d6083265fa 100644 --- a/Lib/test/test_importlib/import_/test_packages.py +++ b/Lib/test/test_importlib/import_/test_packages.py @@ -1,7 +1,6 @@ from test.test_importlib import util import sys import unittest -from test import support from test.support import import_helper diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 78ef817906b2aa..f9bd632a01ed2e 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -1,6 +1,7 @@ import asyncio import builtins import collections +import copy import datetime import functools import importlib @@ -32,7 +33,7 @@ from test.support import cpython_only from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ -from test.support.import_helper import DirsOnSysPath +from test.support.import_helper import DirsOnSysPath, ready_to_import from test.support.os_helper import TESTFN from test.support.script_helper import assert_python_ok, assert_python_failure from test import inspect_fodder as mod @@ -42,8 +43,6 @@ from test import inspect_stringized_annotations from test import inspect_stringized_annotations_2 -from test.test_import import _ready_to_import - # Functions tested in this suite: # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, @@ -3830,6 +3829,28 @@ def test(a_po, /, *, b, **kwargs): P('bar', P.VAR_POSITIONAL)])), '(foo, /, *bar)') + def test_signature_replace_parameters(self): + def test(a, b) -> 42: + pass + + sig = inspect.signature(test) + parameters = sig.parameters + sig = sig.replace(parameters=list(parameters.values())[1:]) + self.assertEqual(list(sig.parameters), ['b']) + self.assertEqual(sig.parameters['b'], parameters['b']) + self.assertEqual(sig.return_annotation, 42) + sig = sig.replace(parameters=()) + self.assertEqual(dict(sig.parameters), {}) + + sig = inspect.signature(test) + parameters = sig.parameters + sig = copy.replace(sig, parameters=list(parameters.values())[1:]) + self.assertEqual(list(sig.parameters), ['b']) + self.assertEqual(sig.parameters['b'], parameters['b']) + self.assertEqual(sig.return_annotation, 42) + sig = copy.replace(sig, parameters=()) + self.assertEqual(dict(sig.parameters), {}) + def test_signature_replace_anno(self): def test() -> 42: pass @@ -3843,6 +3864,15 @@ def test() -> 42: self.assertEqual(sig.return_annotation, 42) self.assertEqual(sig, inspect.signature(test)) + sig = inspect.signature(test) + sig = copy.replace(sig, return_annotation=None) + self.assertIs(sig.return_annotation, None) + sig = copy.replace(sig, return_annotation=sig.empty) + self.assertIs(sig.return_annotation, sig.empty) + sig = copy.replace(sig, return_annotation=42) + self.assertEqual(sig.return_annotation, 42) + self.assertEqual(sig, inspect.signature(test)) + def test_signature_replaced(self): def test(): pass @@ -4187,41 +4217,66 @@ def test_signature_parameter_replace(self): p = inspect.Parameter('foo', default=42, kind=inspect.Parameter.KEYWORD_ONLY) - self.assertIsNot(p, p.replace()) - self.assertEqual(p, p.replace()) + self.assertIsNot(p.replace(), p) + self.assertEqual(p.replace(), p) + self.assertIsNot(copy.replace(p), p) + self.assertEqual(copy.replace(p), p) p2 = p.replace(annotation=1) self.assertEqual(p2.annotation, 1) p2 = p2.replace(annotation=p2.empty) - self.assertEqual(p, p2) + self.assertEqual(p2, p) + p3 = copy.replace(p, annotation=1) + self.assertEqual(p3.annotation, 1) + p3 = copy.replace(p3, annotation=p3.empty) + self.assertEqual(p3, p) p2 = p2.replace(name='bar') self.assertEqual(p2.name, 'bar') self.assertNotEqual(p2, p) + p3 = copy.replace(p3, name='bar') + self.assertEqual(p3.name, 'bar') + self.assertNotEqual(p3, p) with self.assertRaisesRegex(ValueError, 'name is a required attribute'): p2 = p2.replace(name=p2.empty) + with self.assertRaisesRegex(ValueError, + 'name is a required attribute'): + p3 = copy.replace(p3, name=p3.empty) p2 = p2.replace(name='foo', default=None) self.assertIs(p2.default, None) self.assertNotEqual(p2, p) + p3 = copy.replace(p3, name='foo', default=None) + self.assertIs(p3.default, None) + self.assertNotEqual(p3, p) p2 = p2.replace(name='foo', default=p2.empty) self.assertIs(p2.default, p2.empty) - + p3 = copy.replace(p3, name='foo', default=p3.empty) + self.assertIs(p3.default, p3.empty) p2 = p2.replace(default=42, kind=p2.POSITIONAL_OR_KEYWORD) self.assertEqual(p2.kind, p2.POSITIONAL_OR_KEYWORD) self.assertNotEqual(p2, p) + p3 = copy.replace(p3, default=42, kind=p3.POSITIONAL_OR_KEYWORD) + self.assertEqual(p3.kind, p3.POSITIONAL_OR_KEYWORD) + self.assertNotEqual(p3, p) with self.assertRaisesRegex(ValueError, "value " "is not a valid Parameter.kind"): p2 = p2.replace(kind=p2.empty) + with self.assertRaisesRegex(ValueError, + "value " + "is not a valid Parameter.kind"): + p3 = copy.replace(p3, kind=p3.empty) p2 = p2.replace(kind=p2.KEYWORD_ONLY) self.assertEqual(p2, p) + p3 = copy.replace(p3, kind=p3.KEYWORD_ONLY) + self.assertEqual(p3, p) def test_signature_parameter_positional_only(self): with self.assertRaisesRegex(TypeError, 'name must be a str'): @@ -4897,7 +4952,7 @@ def assertInspectEqual(self, path, source): def test_getsource_reload(self): # see issue 1218234 - with _ready_to_import('reload_bug', self.src_before) as (name, path): + with ready_to_import('reload_bug', self.src_before) as (name, path): module = importlib.import_module(name) self.assertInspectEqual(path, module) with open(path, 'w', encoding='utf-8') as src: diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 26ae40d93c84eb..022cf21a4709a2 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -1541,8 +1541,8 @@ def test_read_all(self): self.assertEqual(b"abcdefg", bufio.read()) - @support.requires_resource('cpu') @threading_helper.requires_working_threading() + @support.requires_resource('cpu') def test_threads(self): try: # Write out many bytes with exactly the same number of 0's, @@ -1930,8 +1930,8 @@ def test_truncate_after_write(self): f.truncate() self.assertEqual(f.tell(), buffer_size + 2) - @support.requires_resource('cpu') @threading_helper.requires_working_threading() + @support.requires_resource('cpu') def test_threads(self): try: # Write out many bytes from many threads and test they were @@ -4468,10 +4468,12 @@ def run(): self.assertFalse(err.strip('.!')) @threading_helper.requires_working_threading() + @support.requires_resource('walltime') def test_daemon_threads_shutdown_stdout_deadlock(self): self.check_daemon_threads_shutdown_deadlock('stdout') @threading_helper.requires_working_threading() + @support.requires_resource('walltime') def test_daemon_threads_shutdown_stderr_deadlock(self): self.check_daemon_threads_shutdown_deadlock('stderr') @@ -4645,11 +4647,13 @@ def alarm_handler(sig, frame): os.close(r) @requires_alarm + @support.requires_resource('walltime') def test_interrupted_read_retry_buffered(self): self.check_interrupted_read_retry(lambda x: x.decode('latin1'), mode="rb") @requires_alarm + @support.requires_resource('walltime') def test_interrupted_read_retry_text(self): self.check_interrupted_read_retry(lambda x: x, mode="r", encoding="latin1") @@ -4723,10 +4727,12 @@ def alarm2(sig, frame): raise @requires_alarm + @support.requires_resource('walltime') def test_interrupted_write_retry_buffered(self): self.check_interrupted_write_retry(b"x", mode="wb") @requires_alarm + @support.requires_resource('walltime') def test_interrupted_write_retry_text(self): self.check_interrupted_write_retry("x", mode="w", encoding="latin1") diff --git a/Lib/test/test_listcomps.py b/Lib/test/test_listcomps.py index bedd99b4a44fcb..12f7bbd123b30c 100644 --- a/Lib/test/test_listcomps.py +++ b/Lib/test/test_listcomps.py @@ -125,7 +125,7 @@ def get_output(moddict, name): self.assertIs(type(e), raises) else: for k, v in (outputs or {}).items(): - self.assertEqual(get_output(newns, k), v) + self.assertEqual(get_output(newns, k), v, k) def test_lambdas_with_iteration_var_as_default(self): code = """ @@ -563,28 +563,38 @@ def test_iter_var_available_in_locals(self): def test_comp_in_try_except(self): template = """ - value = ["a"] + value = ["ab"] + result = snapshot = None try: - [{func}(value) for value in value] + result = [{func}(value) for value in value] except: - pass + snapshot = value + raise """ - for func in ["str", "int"]: - code = template.format(func=func) - raises = func != "str" - with self.subTest(raises=raises): - self._check_in_scopes(code, {"value": ["a"]}) + # No exception. + code = template.format(func='len') + self._check_in_scopes(code, {"value": ["ab"], "result": [2], "snapshot": None}) + # Handles exception. + code = template.format(func='int') + self._check_in_scopes(code, {"value": ["ab"], "result": None, "snapshot": ["ab"]}, + raises=ValueError) def test_comp_in_try_finally(self): - code = """ - def f(value): - try: - [{func}(value) for value in value] - finally: - return value - ret = f(["a"]) - """ - self._check_in_scopes(code, {"ret": ["a"]}) + template = """ + value = ["ab"] + result = snapshot = None + try: + result = [{func}(value) for value in value] + finally: + snapshot = value + """ + # No exception. + code = template.format(func='len') + self._check_in_scopes(code, {"value": ["ab"], "result": [2], "snapshot": ["ab"]}) + # Handles exception. + code = template.format(func='int') + self._check_in_scopes(code, {"value": ["ab"], "result": None, "snapshot": ["ab"]}, + raises=ValueError) def test_exception_in_post_comp_call(self): code = """ @@ -596,6 +606,13 @@ def test_exception_in_post_comp_call(self): """ self._check_in_scopes(code, {"value": [1, None]}) + def test_frame_locals(self): + code = """ + val = [sys._getframe().f_locals for a in [0]][0]["a"] + """ + import sys + self._check_in_scopes(code, {"val": 0}, ns={"sys": sys}) + __test__ = {'doctests' : doctests} diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index c2e8ff5d463607..375f65f9d16182 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -680,6 +680,7 @@ def test_path_objects(self): support.is_emscripten, "Emscripten cannot fstat unlinked files." ) @threading_helper.requires_working_threading() + @support.requires_resource('walltime') def test_race(self): # Issue #14632 refers. def remove_loop(fname, tries): @@ -2169,7 +2170,7 @@ def test_output(self): sslctx = None else: here = os.path.dirname(__file__) - localhost_cert = os.path.join(here, "keycert.pem") + localhost_cert = os.path.join(here, "certdata", "keycert.pem") sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) sslctx.load_cert_chain(localhost_cert) diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 2bda61012164d1..d5d2197c36b254 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -33,8 +33,8 @@ else: file = __file__ test_dir = os.path.dirname(file) or os.curdir -math_testcases = os.path.join(test_dir, 'math_testcases.txt') -test_file = os.path.join(test_dir, 'cmath_testcases.txt') +math_testcases = os.path.join(test_dir, 'mathdata', 'math_testcases.txt') +test_file = os.path.join(test_dir, 'mathdata', 'cmath_testcases.txt') def to_ulps(x): @@ -235,6 +235,10 @@ def __init__(self, value): def __index__(self): return self.value +class BadDescr: + def __get__(self, obj, objtype=None): + raise ValueError + class MathTests(unittest.TestCase): def ftest(self, name, got, expected, ulp_tol=5, abs_tol=0.0): @@ -324,6 +328,7 @@ def testAtan2(self): self.ftest('atan2(0, 1)', math.atan2(0, 1), 0) self.ftest('atan2(1, 1)', math.atan2(1, 1), math.pi/4) self.ftest('atan2(1, 0)', math.atan2(1, 0), math.pi/2) + self.ftest('atan2(1, -1)', math.atan2(1, -1), 3*math.pi/4) # math.atan2(0, x) self.ftest('atan2(0., -inf)', math.atan2(0., NINF), math.pi) @@ -417,16 +422,22 @@ def __ceil__(self): return 42 class TestNoCeil: pass + class TestBadCeil: + __ceil__ = BadDescr() self.assertEqual(math.ceil(TestCeil()), 42) self.assertEqual(math.ceil(FloatCeil()), 42) self.assertEqual(math.ceil(FloatLike(42.5)), 43) self.assertRaises(TypeError, math.ceil, TestNoCeil()) + self.assertRaises(ValueError, math.ceil, TestBadCeil()) t = TestNoCeil() t.__ceil__ = lambda *args: args self.assertRaises(TypeError, math.ceil, t) self.assertRaises(TypeError, math.ceil, t, 0) + self.assertEqual(math.ceil(FloatLike(+1.0)), +1.0) + self.assertEqual(math.ceil(FloatLike(-1.0)), -1.0) + @requires_IEEE_754 def testCopysign(self): self.assertEqual(math.copysign(1, 42), 1.0) @@ -567,16 +578,22 @@ def __floor__(self): return 42 class TestNoFloor: pass + class TestBadFloor: + __floor__ = BadDescr() self.assertEqual(math.floor(TestFloor()), 42) self.assertEqual(math.floor(FloatFloor()), 42) self.assertEqual(math.floor(FloatLike(41.9)), 41) self.assertRaises(TypeError, math.floor, TestNoFloor()) + self.assertRaises(ValueError, math.floor, TestBadFloor()) t = TestNoFloor() t.__floor__ = lambda *args: args self.assertRaises(TypeError, math.floor, t) self.assertRaises(TypeError, math.floor, t, 0) + self.assertEqual(math.floor(FloatLike(+1.0)), +1.0) + self.assertEqual(math.floor(FloatLike(-1.0)), -1.0) + def testFmod(self): self.assertRaises(TypeError, math.fmod) self.ftest('fmod(10, 1)', math.fmod(10, 1), 0.0) @@ -598,6 +615,7 @@ def testFmod(self): self.assertEqual(math.fmod(-3.0, NINF), -3.0) self.assertEqual(math.fmod(0.0, 3.0), 0.0) self.assertEqual(math.fmod(0.0, NINF), 0.0) + self.assertRaises(ValueError, math.fmod, INF, INF) def testFrexp(self): self.assertRaises(TypeError, math.frexp) @@ -714,6 +732,11 @@ def msum(iterable): s = msum(vals) self.assertEqual(msum(vals), math.fsum(vals)) + self.assertEqual(math.fsum([1.0, math.inf]), math.inf) + self.assertRaises(OverflowError, math.fsum, [1e+308, 1e+308]) + self.assertRaises(ValueError, math.fsum, [math.inf, -math.inf]) + self.assertRaises(TypeError, math.fsum, ['spam']) + def testGcd(self): gcd = math.gcd self.assertEqual(gcd(0, 0), 0) @@ -831,6 +854,8 @@ def testHypot(self): scale = FLOAT_MIN / 2.0 ** exp self.assertEqual(math.hypot(4*scale, 3*scale), 5*scale) + self.assertRaises(TypeError, math.hypot, *([1.0]*18), 'spam') + @requires_IEEE_754 @unittest.skipIf(HAVE_DOUBLE_ROUNDING, "hypot() loses accuracy on machines with double rounding") @@ -966,6 +991,8 @@ class T(tuple): dist((1, 2, 3, 4), (5, 6, 7)) with self.assertRaises(ValueError): # Check dimension agree dist((1, 2, 3), (4, 5, 6, 7)) + with self.assertRaises(TypeError): + dist((1,)*17 + ("spam",), (1,)*18) with self.assertRaises(TypeError): # Rejects invalid types dist("abc", "xyz") int_too_big_for_float = 10 ** (sys.float_info.max_10_exp + 5) @@ -973,6 +1000,10 @@ class T(tuple): dist((1, int_too_big_for_float), (2, 3)) with self.assertRaises((ValueError, OverflowError)): dist((2, 3), (1, int_too_big_for_float)) + with self.assertRaises(TypeError): + dist((1,), 2) + with self.assertRaises(TypeError): + dist([1], 2) # Verify that the one dimensional case is equivalent to abs() for i in range(20): @@ -1111,6 +1142,7 @@ def test_lcm(self): def testLdexp(self): self.assertRaises(TypeError, math.ldexp) + self.assertRaises(TypeError, math.ldexp, 2.0, 1.1) self.ftest('ldexp(0,1)', math.ldexp(0,1), 0) self.ftest('ldexp(1,1)', math.ldexp(1,1), 2) self.ftest('ldexp(1,-1)', math.ldexp(1,-1), 0.5) @@ -1153,6 +1185,7 @@ def testLog(self): 2302.5850929940457) self.assertRaises(ValueError, math.log, -1.5) self.assertRaises(ValueError, math.log, -10**1000) + self.assertRaises(ValueError, math.log, 10, -10) self.assertRaises(ValueError, math.log, NINF) self.assertEqual(math.log(INF), INF) self.assertTrue(math.isnan(math.log(NAN))) @@ -2378,6 +2411,14 @@ def __float__(self): # argument to a float. self.assertFalse(getattr(y, "converted", False)) + def test_input_exceptions(self): + self.assertRaises(TypeError, math.exp, "spam") + self.assertRaises(TypeError, math.erf, "spam") + self.assertRaises(TypeError, math.atan2, "spam", 1.0) + self.assertRaises(TypeError, math.atan2, 1.0, "spam") + self.assertRaises(TypeError, math.atan2, 1.0) + self.assertRaises(TypeError, math.atan2, 1.0, 2.0, 3.0) + # Custom assertions. def assertIsNaN(self, value): @@ -2518,7 +2559,7 @@ def test_fractions(self): def load_tests(loader, tests, pattern): from doctest import DocFileSuite - tests.addTest(DocFileSuite("ieee754.txt")) + tests.addTest(DocFileSuite(os.path.join("mathdata", "ieee754.txt"))) return tests if __name__ == '__main__': diff --git a/Lib/test/test_monitoring.py b/Lib/test/test_monitoring.py index 845185be737eb2..2100d998ff0808 100644 --- a/Lib/test/test_monitoring.py +++ b/Lib/test/test_monitoring.py @@ -501,6 +501,22 @@ def test_two_with_disable(self): self.assertEqual(sys.monitoring._all_events(), {}) sys.monitoring.restart_events() + def test_with_instruction_event(self): + """Test that the second tool can set events with instruction events set by the first tool.""" + def f(): + pass + code = f.__code__ + + try: + self.assertEqual(sys.monitoring._all_events(), {}) + sys.monitoring.set_local_events(TEST_TOOL, code, E.INSTRUCTION | E.LINE) + sys.monitoring.set_local_events(TEST_TOOL2, code, E.LINE) + finally: + sys.monitoring.set_events(TEST_TOOL, 0) + sys.monitoring.set_events(TEST_TOOL2, 0) + self.assertEqual(sys.monitoring._all_events(), {}) + + class LineMonitoringTest(MonitoringTestBase, unittest.TestCase): def test_lines_single(self): @@ -1152,6 +1168,23 @@ def func1(): ('instruction', 'func1', 14), ('line', 'get_events', 11)]) + def test_turn_off_only_instruction(self): + """ + LINE events should be recorded after INSTRUCTION event is turned off + """ + events = [] + def line(*args): + events.append("line") + sys.monitoring.set_events(TEST_TOOL, 0) + sys.monitoring.register_callback(TEST_TOOL, E.LINE, line) + sys.monitoring.register_callback(TEST_TOOL, E.INSTRUCTION, lambda *args: None) + sys.monitoring.set_events(TEST_TOOL, E.LINE | E.INSTRUCTION) + sys.monitoring.set_events(TEST_TOOL, E.LINE) + events = [] + a = 0 + sys.monitoring.set_events(TEST_TOOL, 0) + self.assertGreater(len(events), 0) + class TestInstallIncrementallly(MonitoringTestBase, unittest.TestCase): def check_events(self, func, must_include, tool=TEST_TOOL, recorders=(ExceptionRecorder,)): @@ -1218,9 +1251,11 @@ def test_instruction_then_line(self): self.check_events(self.func2, recorders = recorders, must_include = self.MUST_INCLUDE_CI) +LOCAL_RECORDERS = CallRecorder, LineRecorder, CReturnRecorder, CRaiseRecorder + class TestLocalEvents(MonitoringTestBase, unittest.TestCase): - def check_events(self, func, expected, tool=TEST_TOOL, recorders=(ExceptionRecorder,)): + def check_events(self, func, expected, tool=TEST_TOOL, recorders=()): try: self.assertEqual(sys.monitoring._all_events(), {}) event_list = [] @@ -1248,7 +1283,7 @@ def func1(): line2 = 2 line3 = 3 - self.check_events(func1, recorders = MANY_RECORDERS, expected = [ + self.check_events(func1, recorders = LOCAL_RECORDERS, expected = [ ('line', 'func1', 1), ('line', 'func1', 2), ('line', 'func1', 3)]) @@ -1260,7 +1295,7 @@ def func2(): [].append(2) line3 = 3 - self.check_events(func2, recorders = MANY_RECORDERS, expected = [ + self.check_events(func2, recorders = LOCAL_RECORDERS, expected = [ ('line', 'func2', 1), ('line', 'func2', 2), ('call', 'append', [2]), @@ -1277,15 +1312,17 @@ def func3(): line = 5 line = 6 - self.check_events(func3, recorders = MANY_RECORDERS, expected = [ + self.check_events(func3, recorders = LOCAL_RECORDERS, expected = [ ('line', 'func3', 1), ('line', 'func3', 2), ('line', 'func3', 3), - ('raise', KeyError), ('line', 'func3', 4), ('line', 'func3', 5), ('line', 'func3', 6)]) + def test_set_non_local_event(self): + with self.assertRaises(ValueError): + sys.monitoring.set_local_events(TEST_TOOL, just_call.__code__, E.RAISE) def line_from_offset(code, offset): for start, end, line in code.co_lines(): @@ -1344,10 +1381,10 @@ def func(): self.check_events(func, recorders = JUMP_AND_BRANCH_RECORDERS, expected = [ ('branch', 'func', 2, 2), - ('branch', 'func', 3, 6), + ('branch', 'func', 3, 4), ('jump', 'func', 6, 2), ('branch', 'func', 2, 2), - ('branch', 'func', 3, 4), + ('branch', 'func', 3, 3), ('jump', 'func', 4, 2), ('branch', 'func', 2, 2)]) @@ -1357,13 +1394,13 @@ def func(): ('line', 'func', 2), ('branch', 'func', 2, 2), ('line', 'func', 3), - ('branch', 'func', 3, 6), + ('branch', 'func', 3, 4), ('line', 'func', 6), ('jump', 'func', 6, 2), ('line', 'func', 2), ('branch', 'func', 2, 2), ('line', 'func', 3), - ('branch', 'func', 3, 4), + ('branch', 'func', 3, 3), ('line', 'func', 4), ('jump', 'func', 4, 2), ('line', 'func', 2), @@ -1396,8 +1433,8 @@ def func(): ('line', 'func', 5), ('line', 'meth', 1), ('jump', 'func', 5, 5), - ('jump', 'func', 5, '[offset=112]'), - ('branch', 'func', '[offset=118]', '[offset=120]'), + ('jump', 'func', 5, '[offset=114]'), + ('branch', 'func', '[offset=120]', '[offset=122]'), ('line', 'get_events', 11)]) self.check_events(func, recorders = FLOW_AND_LINE_RECORDERS, expected = [ @@ -1412,8 +1449,8 @@ def func(): ('line', 'meth', 1), ('return', None), ('jump', 'func', 5, 5), - ('jump', 'func', 5, '[offset=112]'), - ('branch', 'func', '[offset=118]', '[offset=120]'), + ('jump', 'func', 5, '[offset=114]'), + ('branch', 'func', '[offset=120]', '[offset=122]'), ('return', None), ('line', 'get_events', 11)]) @@ -1698,3 +1735,56 @@ def run(): self.assertEqual(caught, "inner") finally: sys.monitoring.set_events(TEST_TOOL, 0) + + def test_108390(self): + + class Foo: + def __init__(self, set_event): + if set_event: + sys.monitoring.set_events(TEST_TOOL, E.PY_RESUME) + + def make_foo_optimized_then_set_event(): + for i in range(100): + Foo(i == 99) + + try: + make_foo_optimized_then_set_event() + finally: + sys.monitoring.set_events(TEST_TOOL, 0) + + def test_gh108976(self): + sys.monitoring.use_tool_id(0, "test") + self.addCleanup(sys.monitoring.free_tool_id, 0) + sys.monitoring.set_events(0, 0) + sys.monitoring.register_callback(0, E.LINE, lambda *args: sys.monitoring.set_events(0, 0)) + sys.monitoring.register_callback(0, E.INSTRUCTION, lambda *args: 0) + sys.monitoring.set_events(0, E.LINE | E.INSTRUCTION) + sys.monitoring.set_events(0, 0) + + +class TestOptimizer(MonitoringTestBase, unittest.TestCase): + + def setUp(self): + import _testinternalcapi + self.old_opt = _testinternalcapi.get_optimizer() + opt = _testinternalcapi.get_counter_optimizer() + _testinternalcapi.set_optimizer(opt) + super(TestOptimizer, self).setUp() + + def tearDown(self): + import _testinternalcapi + super(TestOptimizer, self).tearDown() + _testinternalcapi.set_optimizer(self.old_opt) + + def test_for_loop(self): + def test_func(x): + i = 0 + while i < x: + i += 1 + + code = test_func.__code__ + sys.monitoring.set_local_events(TEST_TOOL, code, E.PY_START) + self.assertEqual(sys.monitoring.get_local_events(TEST_TOOL, code), E.PY_START) + test_func(1000) + sys.monitoring.set_local_events(TEST_TOOL, code, 0) + self.assertEqual(sys.monitoring.get_local_events(TEST_TOOL, code), 0) diff --git a/Lib/test/test_msvcrt.py b/Lib/test/test_msvcrt.py new file mode 100644 index 00000000000000..81ec13026014e6 --- /dev/null +++ b/Lib/test/test_msvcrt.py @@ -0,0 +1,109 @@ +import os +import sys +import unittest + +from test.support import os_helper +from test.support.os_helper import TESTFN, TESTFN_ASCII + +if sys.platform != "win32": + raise unittest.SkipTest("windows related tests") + +import _winapi +import msvcrt; + +from _testconsole import write_input, flush_console_input_buffer + + +class TestFileOperations(unittest.TestCase): + def test_locking(self): + with open(TESTFN, "w") as f: + self.addCleanup(os_helper.unlink, TESTFN) + + msvcrt.locking(f.fileno(), msvcrt.LK_LOCK, 1) + self.assertRaises(OSError, msvcrt.locking, f.fileno(), msvcrt.LK_NBLCK, 1) + + def test_unlockfile(self): + with open(TESTFN, "w") as f: + self.addCleanup(os_helper.unlink, TESTFN) + + msvcrt.locking(f.fileno(), msvcrt.LK_LOCK, 1) + msvcrt.locking(f.fileno(), msvcrt.LK_UNLCK, 1) + msvcrt.locking(f.fileno(), msvcrt.LK_LOCK, 1) + + def test_setmode(self): + with open(TESTFN, "w") as f: + self.addCleanup(os_helper.unlink, TESTFN) + + msvcrt.setmode(f.fileno(), os.O_BINARY) + msvcrt.setmode(f.fileno(), os.O_TEXT) + + def test_open_osfhandle(self): + h = _winapi.CreateFile(TESTFN_ASCII, _winapi.GENERIC_WRITE, 0, 0, 1, 128, 0) + self.addCleanup(os_helper.unlink, TESTFN_ASCII) + + try: + fd = msvcrt.open_osfhandle(h, os.O_RDONLY) + h = None + os.close(fd) + finally: + if h: + _winapi.CloseHandle(h) + + def test_get_osfhandle(self): + with open(TESTFN, "w") as f: + self.addCleanup(os_helper.unlink, TESTFN) + + msvcrt.get_osfhandle(f.fileno()) + + +c = '\u5b57' # unicode CJK char (meaning 'character') for 'wide-char' tests +c_encoded = b'\x57\x5b' # utf-16-le (which windows internally used) encoded char for this CJK char + + +class TestConsoleIO(unittest.TestCase): + def test_kbhit(self): + h = msvcrt.get_osfhandle(sys.stdin.fileno()) + flush_console_input_buffer(h) + self.assertEqual(msvcrt.kbhit(), 0) + + def test_getch(self): + msvcrt.ungetch(b'c') + self.assertEqual(msvcrt.getch(), b'c') + + def test_getwch(self): + with open('CONIN$', 'rb', buffering=0) as stdin: + h = msvcrt.get_osfhandle(stdin.fileno()) + flush_console_input_buffer(h) + + write_input(stdin, c_encoded) + self.assertEqual(msvcrt.getwch(), c) + + def test_getche(self): + msvcrt.ungetch(b'c') + self.assertEqual(msvcrt.getche(), b'c') + + def test_getwche(self): + with open('CONIN$', 'rb', buffering=0) as stdin: + h = msvcrt.get_osfhandle(stdin.fileno()) + flush_console_input_buffer(h) + + write_input(stdin, c_encoded) + self.assertEqual(msvcrt.getwche(), c) + + def test_putch(self): + msvcrt.putch(b'c') + + def test_putwch(self): + msvcrt.putwch(c) + + +class TestOther(unittest.TestCase): + def test_heap_min(self): + try: + msvcrt.heapmin() + except OSError: + pass + + +if __name__ == "__main__": + unittest.main() diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py index 573d636de956d1..81e11a293cc4c8 100644 --- a/Lib/test/test_netrc.py +++ b/Lib/test/test_netrc.py @@ -1,5 +1,5 @@ import netrc, os, unittest, sys, textwrap -from test.support import os_helper, run_unittest +from test.support import os_helper try: import pwd @@ -308,8 +308,6 @@ def test_security(self): self.assertEqual(nrc.hosts['foo.domain.com'], ('anonymous', '', 'pass')) -def test_main(): - run_unittest(NetrcTestCase) if __name__ == "__main__": - test_main() + unittest.main() diff --git a/Lib/test/test_opcache.py b/Lib/test/test_opcache.py index 692e03fbb5e084..2b2783d57be8f4 100644 --- a/Lib/test/test_opcache.py +++ b/Lib/test/test_opcache.py @@ -4,13 +4,17 @@ import threading import types import unittest -from test.support import threading_helper +from test.support import threading_helper, check_impl_detail + +# Skip this module on other interpreters, it is cpython specific: +if check_impl_detail(cpython=False): + raise unittest.SkipTest('implementation detail specific to cpython') + import _testinternalcapi def disabling_optimizer(func): def wrapper(*args, **kwargs): - import _testinternalcapi old_opt = _testinternalcapi.get_optimizer() _testinternalcapi.set_optimizer(None) try: diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 99e9ed213e5615..66aece2c4b3eb9 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -737,7 +737,7 @@ def test_access_denied(self): # denied. See issue 28075. # os.environ['TEMP'] should be located on a volume that # supports file ACLs. - fname = os.path.join(os.environ['TEMP'], self.fname) + fname = os.path.join(os.environ['TEMP'], self.fname + "_access") self.addCleanup(os_helper.unlink, fname) create_file(fname, b'ABC') # Deny the right to [S]YNCHRONIZE on the file to @@ -913,6 +913,13 @@ def set_time(filename): os.utime(self.fname, None) self._test_utime_current(set_time) + def test_utime_nonexistent(self): + now = time.time() + filename = 'nonexistent' + with self.assertRaises(FileNotFoundError) as cm: + os.utime(filename, (now, now)) + self.assertEqual(cm.exception.filename, filename) + def get_file_system(self, path): if sys.platform == 'win32': root = os.path.splitdrive(os.path.abspath(path))[0] + '\\' diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 734b5c83cdff7d..8fed1d0f7162fd 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -664,8 +664,10 @@ def test_pdb_alias_command(): ... o.method() >>> with PdbTestInput([ # doctest: +ELLIPSIS + ... 'alias pi', ... 'alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")', ... 'alias ps pi self', + ... 'alias ps', ... 'pi o', ... 's', ... 'ps', @@ -674,8 +676,12 @@ def test_pdb_alias_command(): ... test_function() > (4)test_function() -> o.method() + (Pdb) alias pi + *** Unknown alias 'pi' (Pdb) alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}") (Pdb) alias ps pi self + (Pdb) alias ps + ps = pi self (Pdb) pi o o.attr1 = 10 o.attr2 = str @@ -848,9 +854,7 @@ def test_post_mortem_chained(): ... try: ... test_function_reraise() ... except Exception as e: - ... # same as pdb.post_mortem(e), but with custom pdb instance. - ... instance.reset() - ... instance.interaction(None, e) + ... pdb._post_mortem(e, instance) >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... 'exceptions', @@ -907,11 +911,18 @@ def test_post_mortem_chained(): def test_post_mortem_cause_no_context(): """Test post mortem traceback debugging of chained exception + >>> def make_exc_with_stack(type_, *content, from_=None): + ... try: + ... raise type_(*content) from from_ + ... except Exception as out: + ... return out + ... + >>> def main(): ... try: ... raise ValueError('Context Not Shown') ... except Exception as e1: - ... raise ValueError("With Cause") from TypeError('The Cause') + ... raise ValueError("With Cause") from make_exc_with_stack(TypeError,'The Cause') >>> def test_function(): ... import pdb; @@ -919,12 +930,11 @@ def test_post_mortem_cause_no_context(): ... try: ... main() ... except Exception as e: - ... # same as pdb.post_mortem(e), but with custom pdb instance. - ... instance.reset() - ... instance.interaction(None, e) + ... pdb._post_mortem(e, instance) >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... 'exceptions', + ... 'exceptions 0', ... 'exceptions 1', ... 'up', ... 'down', @@ -934,20 +944,23 @@ def test_post_mortem_cause_no_context(): ... test_function() ... except ValueError: ... print('Ok.') - > (5)main() - -> raise ValueError("With Cause") from TypeError('The Cause') + > (5)main() + -> raise ValueError("With Cause") from make_exc_with_stack(TypeError,'The Cause') (Pdb) exceptions - 0 TypeError('The Cause') - > 1 ValueError('With Cause') + 0 TypeError('The Cause') + > 1 ValueError('With Cause') + (Pdb) exceptions 0 + > (3)make_exc_with_stack() + -> raise type_(*content) from from_ (Pdb) exceptions 1 - > (5)main() - -> raise ValueError("With Cause") from TypeError('The Cause') + > (5)main() + -> raise ValueError("With Cause") from make_exc_with_stack(TypeError,'The Cause') (Pdb) up - > (5)test_function() + > (5)test_function() -> main() (Pdb) down - > (5)main() - -> raise ValueError("With Cause") from TypeError('The Cause') + > (5)main() + -> raise ValueError("With Cause") from make_exc_with_stack(TypeError,'The Cause') (Pdb) exit""" @@ -971,9 +984,7 @@ def test_post_mortem_context_of_the_cause(): ... try: ... main() ... except Exception as e: - ... # same as pdb.post_mortem(e), but with custom pdb instance. - ... instance.reset() - ... instance.interaction(None, e) + ... pdb._post_mortem(e, instance) >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... 'exceptions', @@ -1046,9 +1057,7 @@ def test_post_mortem_from_none(): ... try: ... main() ... except Exception as e: - ... # same as pdb.post_mortem(e), but with custom pdb instance. - ... instance.reset() - ... instance.interaction(None, e) + ... pdb._post_mortem(e, instance) >>> with PdbTestInput([ # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... 'exceptions', @@ -1066,6 +1075,64 @@ def test_post_mortem_from_none(): """ +def test_post_mortem_from_no_stack(): + """Test post mortem traceback debugging of chained exception + + especially when one exception has no stack. + + >>> def main(): + ... raise Exception() from Exception() + + + >>> def test_function(): + ... import pdb; + ... instance = pdb.Pdb(nosigint=True, readrc=False) + ... try: + ... main() + ... except Exception as e: + ... pdb._post_mortem(e, instance) + + >>> with PdbTestInput( # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + ... ["exceptions", + ... "exceptions 0", + ... "exit"], + ... ): + ... try: + ... test_function() + ... except ValueError: + ... print('Correctly reraised.') + > (2)main() + -> raise Exception() from Exception() + (Pdb) exceptions + - Exception() + > 1 Exception() + (Pdb) exceptions 0 + *** This exception does not have a traceback, cannot jump to it + (Pdb) exit + """ + + +def test_post_mortem_single_no_stack(): + """Test post mortem called when origin exception has no stack + + + >>> def test_function(): + ... import pdb; + ... instance = pdb.Pdb(nosigint=True, readrc=False) + ... import sys + ... sys.last_exc = Exception() + ... pdb._post_mortem(sys.last_exc, instance) + + >>> with PdbTestInput( # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE + ... [] + ... ): + ... try: + ... test_function() + ... except ValueError as e: + ... print(e) + A valid traceback must be passed if no exception is being handled + """ + def test_post_mortem_complex(): """Test post mortem traceback debugging of chained exception @@ -1130,9 +1197,7 @@ def test_post_mortem_complex(): ... try: ... main() ... except Exception as e: - ... # same as pdb.post_mortem(e), but with custom pdb instance. - ... instance.reset() - ... instance.interaction(None, e) + ... pdb._post_mortem(e, instance) >>> with PdbTestInput( # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE ... ["exceptions", @@ -1957,6 +2022,46 @@ def test_pdb_multiline_statement(): (Pdb) c """ +def test_pdb_show_attribute_and_item(): + """Test for multiline statement + + >>> def test_function(): + ... n = lambda x: x + ... c = {"a": 1} + ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + ... pass + + >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE + ... 'c["a"]', + ... 'c.get("a")', + ... 'n(1)', + ... 'j=1', + ... 'j+1', + ... 'r"a"', + ... 'next(iter([1]))', + ... 'list((0, 1))', + ... 'c' + ... ]): + ... test_function() + > (5)test_function() + -> pass + (Pdb) c["a"] + 1 + (Pdb) c.get("a") + 1 + (Pdb) n(1) + 1 + (Pdb) j=1 + (Pdb) j+1 + 2 + (Pdb) r"a" + 'a' + (Pdb) next(iter([1])) + 1 + (Pdb) list((0, 1)) + [0, 1] + (Pdb) c + """ def test_pdb_issue_20766(): """Test for reference leaks when the SIGINT handler is set. @@ -2198,6 +2303,24 @@ def test_pdb_issue_gh_101517(): (Pdb) continue """ +def test_pdb_issue_gh_108976(): + """See GH-108976 + Make sure setting f_trace_opcodes = True won't crash pdb + >>> def test_function(): + ... import sys + ... sys._getframe().f_trace_opcodes = True + ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace() + ... a = 1 + >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE + ... 'continue' + ... ]): + ... test_function() + bdb.Bdb.dispatch: unknown debugging event: 'opcode' + > (5)test_function() + -> a = 1 + (Pdb) continue + """ + def test_pdb_ambiguous_statements(): """See GH-104301 diff --git a/Lib/test/test_peg_generator/__init__.py b/Lib/test/test_peg_generator/__init__.py index c23542e254c99f..b32db4426f251d 100644 --- a/Lib/test/test_peg_generator/__init__.py +++ b/Lib/test/test_peg_generator/__init__.py @@ -1,5 +1,4 @@ import os.path -import unittest from test import support from test.support import load_package_tests diff --git a/Lib/test/test_peg_generator/test_pegen.py b/Lib/test/test_peg_generator/test_pegen.py index 3af2c0cf47d20a..86db767b99a228 100644 --- a/Lib/test/test_peg_generator/test_pegen.py +++ b/Lib/test/test_peg_generator/test_pegen.py @@ -42,6 +42,15 @@ def test_parse_grammar(self) -> None: ) self.assertEqual(repr(rules["term"]), expected_repr) + def test_repeated_rules(self) -> None: + grammar_source = """ + start: the_rule NEWLINE + the_rule: 'b' NEWLINE + the_rule: 'a' NEWLINE + """ + with self.assertRaisesRegex(GrammarError, "Repeated rule 'the_rule'"): + parse_string(grammar_source, GrammarParser) + def test_long_rule_str(self) -> None: grammar_source = """ start: zero | one | one zero | one one | one zero zero | one zero one | one one zero | one one one diff --git a/Lib/test/test_pep646_syntax.py b/Lib/test/test_pep646_syntax.py index 3ffa82dc55fa23..aac089b190bc11 100644 --- a/Lib/test/test_pep646_syntax.py +++ b/Lib/test/test_pep646_syntax.py @@ -1,3 +1,6 @@ +import doctest +import unittest + doctests = """ Setup @@ -317,10 +320,10 @@ __test__ = {'doctests' : doctests} -def test_main(verbose=False): - from test import support - from test import test_pep646_syntax - support.run_doctest(test_pep646_syntax, verbose) +def load_tests(loader, tests, pattern): + tests.addTest(doctest.DocTestSuite()) + return tests + if __name__ == "__main__": - test_main(verbose=True) + unittest.main() diff --git a/Lib/test/test_perf_profiler.py b/Lib/test/test_perf_profiler.py index 5418f9f35485f8..fe8707a156e9dc 100644 --- a/Lib/test/test_perf_profiler.py +++ b/Lib/test/test_perf_profiler.py @@ -17,6 +17,11 @@ if not support.has_subprocess_support: raise unittest.SkipTest("test module requires subprocess") +if support.check_sanitizer(address=True, memory=True, ub=True): + # gh-109580: Skip the test because it does crash randomly if Python is + # built with ASAN. + raise unittest.SkipTest("test crash randomly on ASAN/MSAN/UBSAN build") + def supports_trampoline_profiling(): perf_trampoline = sysconfig.get_config_var("PY_HAVE_PERF_TRAMPOLINE") @@ -287,7 +292,6 @@ def run_perf(cwd, *args, **env_vars): @unittest.skipUnless(perf_command_works(), "perf command doesn't work") @unittest.skipUnless(is_unwinding_reliable(), "Unwinding is unreliable") -@support.skip_if_sanitizer(address=True, memory=True, ub=True) class TestPerfProfiler(unittest.TestCase): def setUp(self): super().setUp() diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py index 02165a0244ddf4..1847ae95db9292 100644 --- a/Lib/test/test_poll.py +++ b/Lib/test/test_poll.py @@ -8,7 +8,7 @@ import time import unittest from test.support import ( - cpython_only, requires_subprocess, requires_working_socket + cpython_only, requires_subprocess, requires_working_socket, requires_resource ) from test.support import threading_helper from test.support.os_helper import TESTFN @@ -124,6 +124,7 @@ def fileno(self): # select(), modified to use poll() instead. @requires_subprocess() + @requires_resource('walltime') def test_poll2(self): cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py index fa41ba0b6e4637..869f9431b928bb 100644 --- a/Lib/test/test_poplib.py +++ b/Lib/test/test_poplib.py @@ -29,8 +29,8 @@ import ssl SUPPORTS_SSL = True - CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "keycert3.pem") - CAFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "pycacert.pem") + CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "certdata", "keycert3.pem") + CAFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "certdata", "pycacert.pem") requires_ssl = skipUnless(SUPPORTS_SSL, 'SSL not supported') diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py index 5e0a44ad9691ec..c4e6551f605782 100644 --- a/Lib/test/test_py_compile.py +++ b/Lib/test/test_py_compile.py @@ -132,7 +132,9 @@ def test_exceptions_propagate(self): os.chmod(self.directory, mode.st_mode) def test_bad_coding(self): - bad_coding = os.path.join(os.path.dirname(__file__), 'bad_coding2.py') + bad_coding = os.path.join(os.path.dirname(__file__), + 'tokenizedata', + 'bad_coding2.py') with support.captured_stderr(): self.assertIsNone(py_compile.compile(bad_coding, doraise=False)) self.assertFalse(os.path.exists( @@ -195,7 +197,9 @@ def test_invalidation_mode(self): self.assertEqual(flags, 0b1) def test_quiet(self): - bad_coding = os.path.join(os.path.dirname(__file__), 'bad_coding2.py') + bad_coding = os.path.join(os.path.dirname(__file__), + 'tokenizedata', + 'bad_coding2.py') with support.captured_stderr() as stderr: self.assertIsNone(py_compile.compile(bad_coding, doraise=False, quiet=2)) self.assertIsNone(py_compile.compile(bad_coding, doraise=True, quiet=2)) @@ -260,14 +264,18 @@ def test_with_files(self): self.assertTrue(os.path.exists(self.cache_path)) def test_bad_syntax(self): - bad_syntax = os.path.join(os.path.dirname(__file__), 'badsyntax_3131.py') + bad_syntax = os.path.join(os.path.dirname(__file__), + 'tokenizedata', + 'badsyntax_3131.py') rc, stdout, stderr = self.pycompilecmd_failure(bad_syntax) self.assertEqual(rc, 1) self.assertEqual(stdout, b'') self.assertIn(b'SyntaxError', stderr) def test_bad_syntax_with_quiet(self): - bad_syntax = os.path.join(os.path.dirname(__file__), 'badsyntax_3131.py') + bad_syntax = os.path.join(os.path.dirname(__file__), + 'tokenizedata', + 'badsyntax_3131.py') rc, stdout, stderr = self.pycompilecmd_failure('-q', bad_syntax) self.assertEqual(rc, 1) self.assertEqual(stdout, b'') diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 499eeb98ad6138..70c5ebd694ca88 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -24,6 +24,7 @@ from io import StringIO from collections import namedtuple from urllib.request import urlopen, urlcleanup +from test import support from test.support import import_helper from test.support import os_helper from test.support.script_helper import (assert_python_ok, @@ -1236,22 +1237,56 @@ def test_bound_builtin_classmethod_o(self): self.assertEqual(self._get_summary_line(dict.__class_getitem__), "__class_getitem__(object, /) method of builtins.type instance") + @support.cpython_only def test_module_level_callable_unrepresentable_default(self): - self.assertEqual(self._get_summary_line(getattr), - "getattr(...)") + import _testcapi + builtin = _testcapi.func_with_unrepresentable_signature + self.assertEqual(self._get_summary_line(builtin), + "func_with_unrepresentable_signature(a, b=)") + @support.cpython_only def test_builtin_staticmethod_unrepresentable_default(self): self.assertEqual(self._get_summary_line(str.maketrans), "maketrans(x, y=, z=, /)") + import _testcapi + cls = _testcapi.DocStringUnrepresentableSignatureTest + self.assertEqual(self._get_summary_line(cls.staticmeth), + "staticmeth(a, b=)") + @support.cpython_only def test_unbound_builtin_method_unrepresentable_default(self): self.assertEqual(self._get_summary_line(dict.pop), "pop(self, key, default=, /)") + import _testcapi + cls = _testcapi.DocStringUnrepresentableSignatureTest + self.assertEqual(self._get_summary_line(cls.meth), + "meth(self, /, a, b=)") + @support.cpython_only def test_bound_builtin_method_unrepresentable_default(self): self.assertEqual(self._get_summary_line({}.pop), "pop(key, default=, /) " "method of builtins.dict instance") + import _testcapi + obj = _testcapi.DocStringUnrepresentableSignatureTest() + self.assertEqual(self._get_summary_line(obj.meth), + "meth(a, b=) " + "method of _testcapi.DocStringUnrepresentableSignatureTest instance") + + @support.cpython_only + def test_unbound_builtin_classmethod_unrepresentable_default(self): + import _testcapi + cls = _testcapi.DocStringUnrepresentableSignatureTest + descr = cls.__dict__['classmeth'] + self.assertEqual(self._get_summary_line(descr), + "classmeth(type, /, a, b=)") + + @support.cpython_only + def test_bound_builtin_classmethod_unrepresentable_default(self): + import _testcapi + cls = _testcapi.DocStringUnrepresentableSignatureTest + self.assertEqual(self._get_summary_line(cls.classmeth), + "classmeth(a, b=) method of builtins.type instance") def test_overridden_text_signature(self): class C: diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py index abe1ad517d2246..a542abaf1f35aa 100644 --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -1,18 +1,19 @@ # XXX TypeErrors on calling handlers, or on bad return values from a # handler, are obscure and unhelpful. -from io import BytesIO import os -import platform import sys import sysconfig import unittest import traceback +from io import BytesIO +from test import support +from test.support import os_helper from xml.parsers import expat from xml.parsers.expat import errors -from test.support import sortdict, is_emscripten, is_wasi +from test.support import sortdict class SetAttributeTest(unittest.TestCase): @@ -439,37 +440,59 @@ def test7(self): # Test handling of exception from callback: class HandlerExceptionTest(unittest.TestCase): def StartElementHandler(self, name, attrs): - raise RuntimeError(name) + raise RuntimeError(f'StartElementHandler: <{name}>') def check_traceback_entry(self, entry, filename, funcname): - self.assertEqual(os.path.basename(entry[0]), filename) - self.assertEqual(entry[2], funcname) + self.assertEqual(os.path.basename(entry.filename), filename) + self.assertEqual(entry.name, funcname) + @support.cpython_only def test_exception(self): + # gh-66652: test _PyTraceback_Add() used by pyexpat.c to inject frames + + # Change the current directory to the Python source code directory + # if it is available. + src_dir = sysconfig.get_config_var('abs_builddir') + if src_dir: + have_source = os.path.isdir(src_dir) + else: + have_source = False + if have_source: + with os_helper.change_cwd(src_dir): + self._test_exception(have_source) + else: + self._test_exception(have_source) + + def _test_exception(self, have_source): + # Use path relative to the current directory which should be the Python + # source code directory (if it is available). + PYEXPAT_C = os.path.join('Modules', 'pyexpat.c') + parser = expat.ParserCreate() parser.StartElementHandler = self.StartElementHandler try: parser.Parse(b"", True) - self.fail() - except RuntimeError as e: - self.assertEqual(e.args[0], 'a', - "Expected RuntimeError for element 'a', but" + \ - " found %r" % e.args[0]) - # Check that the traceback contains the relevant line in pyexpat.c - entries = traceback.extract_tb(e.__traceback__) - self.assertEqual(len(entries), 3) - self.check_traceback_entry(entries[0], - "test_pyexpat.py", "test_exception") - self.check_traceback_entry(entries[1], - "pyexpat.c", "StartElement") - self.check_traceback_entry(entries[2], - "test_pyexpat.py", "StartElementHandler") - if (sysconfig.is_python_build() - and not (sys.platform == 'win32' and platform.machine() == 'ARM') - and not is_emscripten - and not is_wasi - ): - self.assertIn('call_with_frame("StartElement"', entries[1][3]) + + self.fail("the parser did not raise RuntimeError") + except RuntimeError as exc: + self.assertEqual(exc.args[0], 'StartElementHandler: ', exc) + entries = traceback.extract_tb(exc.__traceback__) + + self.assertEqual(len(entries), 3, entries) + self.check_traceback_entry(entries[0], + "test_pyexpat.py", "_test_exception") + self.check_traceback_entry(entries[1], + os.path.basename(PYEXPAT_C), + "StartElement") + self.check_traceback_entry(entries[2], + "test_pyexpat.py", "StartElementHandler") + + # Check that the traceback contains the relevant line in + # Modules/pyexpat.c. Skip the test if Modules/pyexpat.c is not + # available. + if have_source and os.path.exists(PYEXPAT_C): + self.assertIn('call_with_frame("StartElement"', + entries[1].line) # Test Current* members: diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 0c1400c8105037..408e667fffa0f0 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -5,22 +5,27 @@ """ import contextlib +import dataclasses import glob import io import locale import os.path import platform +import random import re +import shlex import subprocess import sys import sysconfig import tempfile import textwrap import unittest -from test import libregrtest from test import support -from test.support import os_helper -from test.libregrtest import utils, setup +from test.support import os_helper, TestStats, without_optimizer +from test.libregrtest import cmdline +from test.libregrtest import utils +from test.libregrtest import setup +from test.libregrtest.utils import normalize_test_name if not support.has_subprocess_support: raise unittest.SkipTest("test module requires subprocess") @@ -32,6 +37,7 @@ EXITCODE_BAD_TEST = 2 EXITCODE_ENV_CHANGED = 3 EXITCODE_NO_TESTS_RAN = 4 +EXITCODE_RERUN_FAIL = 5 EXITCODE_INTERRUPTED = 130 TEST_INTERRUPTED = textwrap.dedent(""" @@ -49,9 +55,13 @@ class ParseArgsTestCase(unittest.TestCase): Test regrtest's argument parsing, function _parse_args(). """ + @staticmethod + def parse_args(args): + return cmdline._parse_args(args) + def checkError(self, args, msg): with support.captured_stderr() as err, self.assertRaises(SystemExit): - libregrtest._parse_args(args) + self.parse_args(args) self.assertIn(msg, err.getvalue()) def test_help(self): @@ -59,83 +69,78 @@ def test_help(self): with self.subTest(opt=opt): with support.captured_stdout() as out, \ self.assertRaises(SystemExit): - libregrtest._parse_args([opt]) + self.parse_args([opt]) self.assertIn('Run Python regression tests.', out.getvalue()) def test_timeout(self): - ns = libregrtest._parse_args(['--timeout', '4.2']) + ns = self.parse_args(['--timeout', '4.2']) self.assertEqual(ns.timeout, 4.2) self.checkError(['--timeout'], 'expected one argument') self.checkError(['--timeout', 'foo'], 'invalid float value') def test_wait(self): - ns = libregrtest._parse_args(['--wait']) + ns = self.parse_args(['--wait']) self.assertTrue(ns.wait) - def test_worker_args(self): - ns = libregrtest._parse_args(['--worker-args', '[[], {}]']) - self.assertEqual(ns.worker_args, '[[], {}]') - self.checkError(['--worker-args'], 'expected one argument') - def test_start(self): for opt in '-S', '--start': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, 'foo']) + ns = self.parse_args([opt, 'foo']) self.assertEqual(ns.start, 'foo') self.checkError([opt], 'expected one argument') def test_verbose(self): - ns = libregrtest._parse_args(['-v']) + ns = self.parse_args(['-v']) self.assertEqual(ns.verbose, 1) - ns = libregrtest._parse_args(['-vvv']) + ns = self.parse_args(['-vvv']) self.assertEqual(ns.verbose, 3) - ns = libregrtest._parse_args(['--verbose']) + ns = self.parse_args(['--verbose']) self.assertEqual(ns.verbose, 1) - ns = libregrtest._parse_args(['--verbose'] * 3) + ns = self.parse_args(['--verbose'] * 3) self.assertEqual(ns.verbose, 3) - ns = libregrtest._parse_args([]) + ns = self.parse_args([]) self.assertEqual(ns.verbose, 0) - def test_verbose2(self): - for opt in '-w', '--verbose2': + def test_rerun(self): + for opt in '-w', '--rerun', '--verbose2': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) - self.assertTrue(ns.verbose2) + ns = self.parse_args([opt]) + self.assertTrue(ns.rerun) def test_verbose3(self): for opt in '-W', '--verbose3': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.verbose3) def test_quiet(self): for opt in '-q', '--quiet': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.quiet) self.assertEqual(ns.verbose, 0) def test_slowest(self): for opt in '-o', '--slowest': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.print_slow) def test_header(self): - ns = libregrtest._parse_args(['--header']) + ns = self.parse_args(['--header']) self.assertTrue(ns.header) - ns = libregrtest._parse_args(['--verbose']) + ns = self.parse_args(['--verbose']) self.assertTrue(ns.header) def test_randomize(self): for opt in '-r', '--randomize': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.randomize) def test_randseed(self): - ns = libregrtest._parse_args(['--randseed', '12345']) + ns = self.parse_args(['--randseed', '12345']) self.assertEqual(ns.random_seed, 12345) self.assertTrue(ns.randomize) self.checkError(['--randseed'], 'expected one argument') @@ -144,7 +149,7 @@ def test_randseed(self): def test_fromfile(self): for opt in '-f', '--fromfile': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, 'foo']) + ns = self.parse_args([opt, 'foo']) self.assertEqual(ns.fromfile, 'foo') self.checkError([opt], 'expected one argument') self.checkError([opt, 'foo', '-s'], "don't go together") @@ -152,20 +157,20 @@ def test_fromfile(self): def test_exclude(self): for opt in '-x', '--exclude': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.exclude) def test_single(self): for opt in '-s', '--single': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.single) self.checkError([opt, '-f', 'foo'], "don't go together") def test_ignore(self): for opt in '-i', '--ignore': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, 'pattern']) + ns = self.parse_args([opt, 'pattern']) self.assertEqual(ns.ignore_tests, ['pattern']) self.checkError([opt], 'expected one argument') @@ -175,7 +180,7 @@ def test_ignore(self): print('matchfile2', file=fp) filename = os.path.abspath(os_helper.TESTFN) - ns = libregrtest._parse_args(['-m', 'match', + ns = self.parse_args(['-m', 'match', '--ignorefile', filename]) self.assertEqual(ns.ignore_tests, ['matchfile1', 'matchfile2']) @@ -183,11 +188,11 @@ def test_ignore(self): def test_match(self): for opt in '-m', '--match': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, 'pattern']) + ns = self.parse_args([opt, 'pattern']) self.assertEqual(ns.match_tests, ['pattern']) self.checkError([opt], 'expected one argument') - ns = libregrtest._parse_args(['-m', 'pattern1', + ns = self.parse_args(['-m', 'pattern1', '-m', 'pattern2']) self.assertEqual(ns.match_tests, ['pattern1', 'pattern2']) @@ -197,7 +202,7 @@ def test_match(self): print('matchfile2', file=fp) filename = os.path.abspath(os_helper.TESTFN) - ns = libregrtest._parse_args(['-m', 'match', + ns = self.parse_args(['-m', 'match', '--matchfile', filename]) self.assertEqual(ns.match_tests, ['match', 'matchfile1', 'matchfile2']) @@ -205,65 +210,65 @@ def test_match(self): def test_failfast(self): for opt in '-G', '--failfast': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, '-v']) + ns = self.parse_args([opt, '-v']) self.assertTrue(ns.failfast) - ns = libregrtest._parse_args([opt, '-W']) + ns = self.parse_args([opt, '-W']) self.assertTrue(ns.failfast) self.checkError([opt], '-G/--failfast needs either -v or -W') def test_use(self): for opt in '-u', '--use': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, 'gui,network']) + ns = self.parse_args([opt, 'gui,network']) self.assertEqual(ns.use_resources, ['gui', 'network']) - ns = libregrtest._parse_args([opt, 'gui,none,network']) + ns = self.parse_args([opt, 'gui,none,network']) self.assertEqual(ns.use_resources, ['network']) - expected = list(libregrtest.ALL_RESOURCES) + expected = list(cmdline.ALL_RESOURCES) expected.remove('gui') - ns = libregrtest._parse_args([opt, 'all,-gui']) + ns = self.parse_args([opt, 'all,-gui']) self.assertEqual(ns.use_resources, expected) self.checkError([opt], 'expected one argument') self.checkError([opt, 'foo'], 'invalid resource') # all + a resource not part of "all" - ns = libregrtest._parse_args([opt, 'all,tzdata']) + ns = self.parse_args([opt, 'all,tzdata']) self.assertEqual(ns.use_resources, - list(libregrtest.ALL_RESOURCES) + ['tzdata']) + list(cmdline.ALL_RESOURCES) + ['tzdata']) # test another resource which is not part of "all" - ns = libregrtest._parse_args([opt, 'extralargefile']) + ns = self.parse_args([opt, 'extralargefile']) self.assertEqual(ns.use_resources, ['extralargefile']) def test_memlimit(self): for opt in '-M', '--memlimit': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, '4G']) + ns = self.parse_args([opt, '4G']) self.assertEqual(ns.memlimit, '4G') self.checkError([opt], 'expected one argument') def test_testdir(self): - ns = libregrtest._parse_args(['--testdir', 'foo']) + ns = self.parse_args(['--testdir', 'foo']) self.assertEqual(ns.testdir, os.path.join(os_helper.SAVEDCWD, 'foo')) self.checkError(['--testdir'], 'expected one argument') def test_runleaks(self): for opt in '-L', '--runleaks': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.runleaks) def test_huntrleaks(self): for opt in '-R', '--huntrleaks': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, ':']) + ns = self.parse_args([opt, ':']) self.assertEqual(ns.huntrleaks, (5, 4, 'reflog.txt')) - ns = libregrtest._parse_args([opt, '6:']) + ns = self.parse_args([opt, '6:']) self.assertEqual(ns.huntrleaks, (6, 4, 'reflog.txt')) - ns = libregrtest._parse_args([opt, ':3']) + ns = self.parse_args([opt, ':3']) self.assertEqual(ns.huntrleaks, (5, 3, 'reflog.txt')) - ns = libregrtest._parse_args([opt, '6:3:leaks.log']) + ns = self.parse_args([opt, '6:3:leaks.log']) self.assertEqual(ns.huntrleaks, (6, 3, 'leaks.log')) self.checkError([opt], 'expected one argument') self.checkError([opt, '6'], @@ -274,7 +279,7 @@ def test_huntrleaks(self): def test_multiprocess(self): for opt in '-j', '--multiprocess': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, '2']) + ns = self.parse_args([opt, '2']) self.assertEqual(ns.use_mp, 2) self.checkError([opt], 'expected one argument') self.checkError([opt, 'foo'], 'invalid int value') @@ -284,13 +289,13 @@ def test_multiprocess(self): def test_coverage(self): for opt in '-T', '--coverage': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.trace) def test_coverdir(self): for opt in '-D', '--coverdir': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, 'foo']) + ns = self.parse_args([opt, 'foo']) self.assertEqual(ns.coverdir, os.path.join(os_helper.SAVEDCWD, 'foo')) self.checkError([opt], 'expected one argument') @@ -298,13 +303,13 @@ def test_coverdir(self): def test_nocoverdir(self): for opt in '-N', '--nocoverdir': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertIsNone(ns.coverdir) def test_threshold(self): for opt in '-t', '--threshold': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt, '1000']) + ns = self.parse_args([opt, '1000']) self.assertEqual(ns.threshold, 1000) self.checkError([opt], 'expected one argument') self.checkError([opt, 'foo'], 'invalid int value') @@ -313,7 +318,7 @@ def test_nowindows(self): for opt in '-n', '--nowindows': with self.subTest(opt=opt): with contextlib.redirect_stderr(io.StringIO()) as stderr: - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.nowindows) err = stderr.getvalue() self.assertIn('the --nowindows (-n) option is deprecated', err) @@ -321,39 +326,39 @@ def test_nowindows(self): def test_forever(self): for opt in '-F', '--forever': with self.subTest(opt=opt): - ns = libregrtest._parse_args([opt]) + ns = self.parse_args([opt]) self.assertTrue(ns.forever) def test_unrecognized_argument(self): self.checkError(['--xxx'], 'usage:') def test_long_option__partial(self): - ns = libregrtest._parse_args(['--qui']) + ns = self.parse_args(['--qui']) self.assertTrue(ns.quiet) self.assertEqual(ns.verbose, 0) def test_two_options(self): - ns = libregrtest._parse_args(['--quiet', '--exclude']) + ns = self.parse_args(['--quiet', '--exclude']) self.assertTrue(ns.quiet) self.assertEqual(ns.verbose, 0) self.assertTrue(ns.exclude) def test_option_with_empty_string_value(self): - ns = libregrtest._parse_args(['--start', '']) + ns = self.parse_args(['--start', '']) self.assertEqual(ns.start, '') def test_arg(self): - ns = libregrtest._parse_args(['foo']) + ns = self.parse_args(['foo']) self.assertEqual(ns.args, ['foo']) def test_option_and_arg(self): - ns = libregrtest._parse_args(['--quiet', 'foo']) + ns = self.parse_args(['--quiet', 'foo']) self.assertTrue(ns.quiet) self.assertEqual(ns.verbose, 0) self.assertEqual(ns.args, ['foo']) def test_arg_option_arg(self): - ns = libregrtest._parse_args(['test_unaryop', '-v', 'test_binop']) + ns = self.parse_args(['test_unaryop', '-v', 'test_binop']) self.assertEqual(ns.verbose, 1) self.assertEqual(ns.args, ['test_unaryop', 'test_binop']) @@ -362,6 +367,13 @@ def test_unknown_option(self): 'unrecognized arguments: --unknown-option') +@dataclasses.dataclass(slots=True) +class Rerun: + name: str + match: str | None + success: bool + + class BaseTestCase(unittest.TestCase): TEST_UNIQUE_ID = 1 TESTNAME_PREFIX = 'test_regrtest_' @@ -409,8 +421,12 @@ def regex_search(self, regex, output): self.fail("%r not found in %r" % (regex, output)) return match - def check_line(self, output, regex): - regex = re.compile(r'^' + regex, re.MULTILINE) + def check_line(self, output, pattern, full=False, regex=True): + if not regex: + pattern = re.escape(pattern) + if full: + pattern += '\n' + regex = re.compile(r'^' + pattern, re.MULTILINE) self.assertRegex(output, regex) def parse_executed_tests(self, output): @@ -419,29 +435,47 @@ def parse_executed_tests(self, output): parser = re.finditer(regex, output, re.MULTILINE) return list(match.group(1) for match in parser) - def check_executed_tests(self, output, tests, skipped=(), failed=(), + def check_executed_tests(self, output, tests, *, stats, + skipped=(), failed=(), env_changed=(), omitted=(), - rerun={}, no_test_ran=(), - randomize=False, interrupted=False, - fail_env_changed=False): + rerun=None, run_no_tests=(), + resource_denied=(), + randomize=False, parallel=False, interrupted=False, + fail_env_changed=False, + forever=False, filtered=False): if isinstance(tests, str): tests = [tests] if isinstance(skipped, str): skipped = [skipped] + if isinstance(resource_denied, str): + resource_denied = [resource_denied] if isinstance(failed, str): failed = [failed] if isinstance(env_changed, str): env_changed = [env_changed] if isinstance(omitted, str): omitted = [omitted] - if isinstance(no_test_ran, str): - no_test_ran = [no_test_ran] + if isinstance(run_no_tests, str): + run_no_tests = [run_no_tests] + if isinstance(stats, int): + stats = TestStats(stats) + if parallel: + randomize = True + + rerun_failed = [] + if rerun is not None: + failed = [rerun.name] + if not rerun.success: + rerun_failed.append(rerun.name) executed = self.parse_executed_tests(output) + total_tests = list(tests) + if rerun is not None: + total_tests.append(rerun.name) if randomize: - self.assertEqual(set(executed), set(tests), output) + self.assertEqual(set(executed), set(total_tests), output) else: - self.assertEqual(executed, tests, output) + self.assertEqual(executed, total_tests, output) def plural(count): return 's' if count != 1 else '' @@ -457,6 +491,10 @@ def list_regex(line_format, tests): regex = list_regex('%s test%s skipped', skipped) self.check_line(output, regex) + if resource_denied: + regex = list_regex(r'%s test%s skipped \(resource denied\)', resource_denied) + self.check_line(output, regex) + if failed: regex = list_regex('%s test%s failed', failed) self.check_line(output, regex) @@ -470,53 +508,95 @@ def list_regex(line_format, tests): regex = list_regex('%s test%s omitted', omitted) self.check_line(output, regex) - if rerun: - regex = list_regex('%s re-run test%s', rerun.keys()) + if rerun is not None: + regex = list_regex('%s re-run test%s', [rerun.name]) self.check_line(output, regex) - regex = LOG_PREFIX + r"Re-running failed tests in verbose mode" + regex = LOG_PREFIX + r"Re-running 1 failed tests in verbose mode" + self.check_line(output, regex) + regex = fr"Re-running {rerun.name} in verbose mode" + if rerun.match: + regex = fr"{regex} \(matching: {rerun.match}\)" self.check_line(output, regex) - for name, match in rerun.items(): - regex = LOG_PREFIX + f"Re-running {name} in verbose mode \\(matching: {match}\\)" - self.check_line(output, regex) - if no_test_ran: - regex = list_regex('%s test%s run no tests', no_test_ran) + if run_no_tests: + regex = list_regex('%s test%s run no tests', run_no_tests) self.check_line(output, regex) - good = (len(tests) - len(skipped) - len(failed) - - len(omitted) - len(env_changed) - len(no_test_ran)) + good = (len(tests) - len(skipped) - len(resource_denied) - len(failed) + - len(omitted) - len(env_changed) - len(run_no_tests)) if good: - regex = r'%s test%s OK\.$' % (good, plural(good)) - if not skipped and not failed and good > 1: + regex = r'%s test%s OK\.' % (good, plural(good)) + if not skipped and not failed and (rerun is None or rerun.success) and good > 1: regex = 'All %s' % regex - self.check_line(output, regex) + self.check_line(output, regex, full=True) if interrupted: self.check_line(output, 'Test suite interrupted by signal SIGINT.') - result = [] + # Total tests + text = f'run={stats.tests_run:,}' + if filtered: + text = fr'{text} \(filtered\)' + parts = [text] + if stats.failures: + parts.append(f'failures={stats.failures:,}') + if stats.skipped: + parts.append(f'skipped={stats.skipped:,}') + line = fr'Total tests: {" ".join(parts)}' + self.check_line(output, line, full=True) + + # Total test files + run = len(total_tests) - len(resource_denied) + if rerun is not None: + total_failed = len(rerun_failed) + total_rerun = 1 + else: + total_failed = len(failed) + total_rerun = 0 + if interrupted: + run = 0 + text = f'run={run}' + if not forever: + text = f'{text}/{len(tests)}' + if filtered: + text = fr'{text} \(filtered\)' + report = [text] + for name, ntest in ( + ('failed', total_failed), + ('env_changed', len(env_changed)), + ('skipped', len(skipped)), + ('resource_denied', len(resource_denied)), + ('rerun', total_rerun), + ('run_no_tests', len(run_no_tests)), + ): + if ntest: + report.append(f'{name}={ntest}') + line = fr'Total test files: {" ".join(report)}' + self.check_line(output, line, full=True) + + # Result + state = [] if failed: - result.append('FAILURE') + state.append('FAILURE') elif fail_env_changed and env_changed: - result.append('ENV CHANGED') + state.append('ENV CHANGED') if interrupted: - result.append('INTERRUPTED') - if not any((good, result, failed, interrupted, skipped, + state.append('INTERRUPTED') + if not any((good, failed, interrupted, skipped, env_changed, fail_env_changed)): - result.append("NO TESTS RAN") - elif not result: - result.append('SUCCESS') - result = ', '.join(result) - if rerun: - self.check_line(output, 'Tests result: FAILURE') - result = 'FAILURE then %s' % result - - self.check_line(output, 'Tests result: %s' % result) + state.append("NO TESTS RAN") + elif not state: + state.append('SUCCESS') + state = ', '.join(state) + if rerun is not None: + new_state = 'SUCCESS' if rerun.success else 'FAILURE' + state = 'FAILURE then ' + new_state + self.check_line(output, f'Result: {state}', full=True) def parse_random_seed(self, output): match = self.regex_search(r'Using random seed ([0-9]+)', output) randseed = int(match.group(1)) - self.assertTrue(0 <= randseed <= 10000000, randseed) + self.assertTrue(0 <= randseed <= 100_000_000, randseed) return randseed def run_command(self, args, input=None, exitcode=0, **kw): @@ -530,13 +610,13 @@ def run_command(self, args, input=None, exitcode=0, **kw): stdout=subprocess.PIPE, **kw) if proc.returncode != exitcode: - msg = ("Command %s failed with exit code %s\n" + msg = ("Command %s failed with exit code %s, but exit code %s expected!\n" "\n" "stdout:\n" "---\n" "%s\n" "---\n" - % (str(args), proc.returncode, proc.stdout)) + % (str(args), proc.returncode, exitcode, proc.stdout)) if proc.stderr: msg += ("\n" "stderr:\n" @@ -604,7 +684,8 @@ def setUp(self): def check_output(self, output): self.parse_random_seed(output) - self.check_executed_tests(output, self.tests, randomize=True) + self.check_executed_tests(output, self.tests, + randomize=True, stats=len(self.tests)) def run_tests(self, args): output = self.run_python(args) @@ -704,6 +785,40 @@ def run_tests(self, *testargs, **kw): cmdargs = ['-m', 'test', '--testdir=%s' % self.tmptestdir, *testargs] return self.run_python(cmdargs, **kw) + def test_success(self): + code = textwrap.dedent(""" + import unittest + + class PassingTests(unittest.TestCase): + def test_test1(self): + pass + + def test_test2(self): + pass + + def test_test3(self): + pass + """) + tests = [self.create_test(f'ok{i}', code=code) for i in range(1, 6)] + + output = self.run_tests(*tests) + self.check_executed_tests(output, tests, + stats=3 * len(tests)) + + def test_skip(self): + code = textwrap.dedent(""" + import unittest + raise unittest.SkipTest("nope") + """) + test_ok = self.create_test('ok') + test_skip = self.create_test('skip', code=code) + tests = [test_ok, test_skip] + + output = self.run_tests(*tests) + self.check_executed_tests(output, tests, + skipped=[test_skip], + stats=1) + def test_failing_test(self): # test a failing test code = textwrap.dedent(""" @@ -718,7 +833,8 @@ def test_failing(self): tests = [test_ok, test_failing] output = self.run_tests(*tests, exitcode=EXITCODE_BAD_TEST) - self.check_executed_tests(output, tests, failed=test_failing) + self.check_executed_tests(output, tests, failed=test_failing, + stats=TestStats(2, 1)) def test_resources(self): # test -u command line option @@ -737,17 +853,19 @@ def test_pass(self): # -u all: 2 resources enabled output = self.run_tests('-u', 'all', *test_names) - self.check_executed_tests(output, test_names) + self.check_executed_tests(output, test_names, stats=2) # -u audio: 1 resource enabled output = self.run_tests('-uaudio', *test_names) self.check_executed_tests(output, test_names, - skipped=tests['network']) + resource_denied=tests['network'], + stats=1) # no option: 0 resources enabled - output = self.run_tests(*test_names) + output = self.run_tests(*test_names, exitcode=EXITCODE_NO_TESTS_RAN) self.check_executed_tests(output, test_names, - skipped=test_names) + resource_denied=test_names, + stats=0) def test_random(self): # test -r and --randseed command line option @@ -795,7 +913,8 @@ def test_fromfile(self): previous = name output = self.run_tests('--fromfile', filename) - self.check_executed_tests(output, tests) + stats = len(tests) + self.check_executed_tests(output, tests, stats=stats) # test format '[2/7] test_opcodes' with open(filename, "w") as fp: @@ -803,7 +922,7 @@ def test_fromfile(self): print("[%s/%s] %s" % (index, len(tests), name), file=fp) output = self.run_tests('--fromfile', filename) - self.check_executed_tests(output, tests) + self.check_executed_tests(output, tests, stats=stats) # test format 'test_opcodes' with open(filename, "w") as fp: @@ -811,7 +930,7 @@ def test_fromfile(self): print(name, file=fp) output = self.run_tests('--fromfile', filename) - self.check_executed_tests(output, tests) + self.check_executed_tests(output, tests, stats=stats) # test format 'Lib/test/test_opcodes.py' with open(filename, "w") as fp: @@ -819,20 +938,20 @@ def test_fromfile(self): print('Lib/test/%s.py' % name, file=fp) output = self.run_tests('--fromfile', filename) - self.check_executed_tests(output, tests) + self.check_executed_tests(output, tests, stats=stats) def test_interrupted(self): code = TEST_INTERRUPTED test = self.create_test('sigint', code=code) output = self.run_tests(test, exitcode=EXITCODE_INTERRUPTED) self.check_executed_tests(output, test, omitted=test, - interrupted=True) + interrupted=True, stats=0) def test_slowest(self): # test --slowest tests = [self.create_test() for index in range(3)] output = self.run_tests("--slowest", *tests) - self.check_executed_tests(output, tests) + self.check_executed_tests(output, tests, stats=len(tests)) regex = ('10 slowest tests:\n' '(?:- %s: .*\n){%s}' % (self.TESTNAME_REGEX, len(tests))) @@ -851,7 +970,8 @@ def test_slowest_interrupted(self): args = ("--slowest", test) output = self.run_tests(*args, exitcode=EXITCODE_INTERRUPTED) self.check_executed_tests(output, test, - omitted=test, interrupted=True) + omitted=test, interrupted=True, + stats=0) regex = ('10 slowest tests:\n') self.check_line(output, regex) @@ -860,7 +980,7 @@ def test_coverage(self): # test --coverage test = self.create_test('coverage') output = self.run_tests("--coverage", test) - self.check_executed_tests(output, [test]) + self.check_executed_tests(output, [test], stats=1) regex = (r'lines +cov% +module +\(path\)\n' r'(?: *[0-9]+ *[0-9]{1,2}% *[^ ]+ +\([^)]+\)+)+') self.check_line(output, regex) @@ -889,20 +1009,38 @@ def test_run(self): builtins.__dict__['RUN'] = 1 """) test = self.create_test('forever', code=code) - output = self.run_tests('--forever', test, exitcode=EXITCODE_BAD_TEST) - self.check_executed_tests(output, [test]*3, failed=test) - def check_leak(self, code, what): + # --forever + output = self.run_tests('--forever', test, exitcode=EXITCODE_BAD_TEST) + self.check_executed_tests(output, [test]*3, failed=test, + stats=TestStats(3, 1), + forever=True) + + # --forever --rerun + output = self.run_tests('--forever', '--rerun', test, exitcode=0) + self.check_executed_tests(output, [test]*3, + rerun=Rerun(test, + match='test_run', + success=True), + stats=TestStats(4, 1), + forever=True) + + @without_optimizer + def check_leak(self, code, what, *, run_workers=False): test = self.create_test('huntrleaks', code=code) filename = 'reflog.txt' self.addCleanup(os_helper.unlink, filename) - output = self.run_tests('--huntrleaks', '6:3:', test, + cmd = ['--huntrleaks', '3:3:'] + if run_workers: + cmd.append('-j1') + cmd.append(test) + output = self.run_tests(*cmd, exitcode=EXITCODE_BAD_TEST, stderr=subprocess.STDOUT) - self.check_executed_tests(output, [test], failed=test) + self.check_executed_tests(output, [test], failed=test, stats=1) - line = 'beginning 9 repetitions\n123456789\n.........\n' + line = 'beginning 6 repetitions\n123456\n......\n' self.check_line(output, re.escape(line)) line2 = '%s leaked [1, 1, 1] %s, sum=3\n' % (test, what) @@ -913,7 +1051,7 @@ def check_leak(self, code, what): self.assertIn(line2, reflog) @unittest.skipUnless(support.Py_DEBUG, 'need a debug build') - def test_huntrleaks(self): + def check_huntrleaks(self, *, run_workers: bool): # test --huntrleaks code = textwrap.dedent(""" import unittest @@ -924,7 +1062,13 @@ class RefLeakTest(unittest.TestCase): def test_leak(self): GLOBAL_LIST.append(object()) """) - self.check_leak(code, 'references') + self.check_leak(code, 'references', run_workers=run_workers) + + def test_huntrleaks(self): + self.check_huntrleaks(run_workers=False) + + def test_huntrleaks_mp(self): + self.check_huntrleaks(run_workers=True) @unittest.skipUnless(support.Py_DEBUG, 'need a debug build') def test_huntrleaks_fd_leak(self): @@ -982,7 +1126,7 @@ def test_crashed(self): tests = [crash_test] output = self.run_tests("-j2", *tests, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, tests, failed=crash_test, - randomize=True) + parallel=True, stats=0) def parse_methods(self, output): regex = re.compile("^(test[^ ]+).*ok$", flags=re.MULTILINE) @@ -1002,8 +1146,6 @@ def test_method3(self): def test_method4(self): pass """) - all_methods = ['test_method1', 'test_method2', - 'test_method3', 'test_method4'] testname = self.create_test(code=code) # only run a subset @@ -1077,13 +1219,14 @@ def test_env_changed(self): # don't fail by default output = self.run_tests(testname) - self.check_executed_tests(output, [testname], env_changed=testname) + self.check_executed_tests(output, [testname], + env_changed=testname, stats=1) # fail with --fail-env-changed output = self.run_tests("--fail-env-changed", testname, exitcode=EXITCODE_ENV_CHANGED) self.check_executed_tests(output, [testname], env_changed=testname, - fail_env_changed=True) + fail_env_changed=True, stats=1) def test_rerun_fail(self): # FAILURE then FAILURE @@ -1100,30 +1243,55 @@ def test_fail_always(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, [testname], - failed=testname, rerun={testname: "test_fail_always"}) + rerun=Rerun(testname, + "test_fail_always", + success=False), + stats=TestStats(3, 2)) def test_rerun_success(self): # FAILURE then SUCCESS - code = textwrap.dedent(""" - import builtins + marker_filename = os.path.abspath("regrtest_marker_filename") + self.addCleanup(os_helper.unlink, marker_filename) + self.assertFalse(os.path.exists(marker_filename)) + + code = textwrap.dedent(f""" + import os.path import unittest + marker_filename = {marker_filename!r} + class Tests(unittest.TestCase): def test_succeed(self): return def test_fail_once(self): - if not hasattr(builtins, '_test_failed'): - builtins._test_failed = True + if not os.path.exists(marker_filename): + open(marker_filename, "w").close() self.fail("bug") """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=0) + # FAILURE then SUCCESS => exit code 0 + output = self.run_tests("--rerun", testname, exitcode=0) + self.check_executed_tests(output, [testname], + rerun=Rerun(testname, + match="test_fail_once", + success=True), + stats=TestStats(3, 1)) + os_helper.unlink(marker_filename) + + # with --fail-rerun, exit code EXITCODE_RERUN_FAIL + # on "FAILURE then SUCCESS" state. + output = self.run_tests("--rerun", "--fail-rerun", testname, + exitcode=EXITCODE_RERUN_FAIL) self.check_executed_tests(output, [testname], - rerun={testname: "test_fail_once"}) + rerun=Rerun(testname, + match="test_fail_once", + success=True), + stats=TestStats(3, 1)) + os_helper.unlink(marker_filename) def test_rerun_setup_class_hook_failure(self): # FAILURE then FAILURE @@ -1140,10 +1308,13 @@ def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, failed=[testname], - rerun={testname: "ExampleTests"}) + rerun=Rerun(testname, + match="ExampleTests", + success=False), + stats=0) def test_rerun_teardown_class_hook_failure(self): # FAILURE then FAILURE @@ -1160,10 +1331,13 @@ def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, failed=[testname], - rerun={testname: "ExampleTests"}) + rerun=Rerun(testname, + match="ExampleTests", + success=False), + stats=2) def test_rerun_setup_module_hook_failure(self): # FAILURE then FAILURE @@ -1179,10 +1353,13 @@ def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, failed=[testname], - rerun={testname: testname}) + rerun=Rerun(testname, + match=None, + success=False), + stats=0) def test_rerun_teardown_module_hook_failure(self): # FAILURE then FAILURE @@ -1198,10 +1375,13 @@ def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) - self.check_executed_tests(output, testname, + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) + self.check_executed_tests(output, [testname], failed=[testname], - rerun={testname: testname}) + rerun=Rerun(testname, + match=None, + success=False), + stats=2) def test_rerun_setup_hook_failure(self): # FAILURE then FAILURE @@ -1217,10 +1397,13 @@ def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, failed=[testname], - rerun={testname: "test_success"}) + rerun=Rerun(testname, + match="test_success", + success=False), + stats=2) def test_rerun_teardown_hook_failure(self): # FAILURE then FAILURE @@ -1236,10 +1419,13 @@ def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, failed=[testname], - rerun={testname: "test_success"}) + rerun=Rerun(testname, + match="test_success", + success=False), + stats=2) def test_rerun_async_setup_hook_failure(self): # FAILURE then FAILURE @@ -1255,10 +1441,12 @@ async def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, - failed=[testname], - rerun={testname: "test_success"}) + rerun=Rerun(testname, + match="test_success", + success=False), + stats=2) def test_rerun_async_teardown_hook_failure(self): # FAILURE then FAILURE @@ -1274,10 +1462,13 @@ async def test_success(self): """) testname = self.create_test(code=code) - output = self.run_tests("-w", testname, exitcode=EXITCODE_BAD_TEST) + output = self.run_tests("--rerun", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, testname, failed=[testname], - rerun={testname: "test_success"}) + rerun=Rerun(testname, + match="test_success", + success=False), + stats=2) def test_no_tests_ran(self): code = textwrap.dedent(""" @@ -1291,7 +1482,9 @@ def test_bug(self): output = self.run_tests(testname, "-m", "nosuchtest", exitcode=EXITCODE_NO_TESTS_RAN) - self.check_executed_tests(output, [testname], no_test_ran=testname) + self.check_executed_tests(output, [testname], + run_no_tests=testname, + stats=0, filtered=True) def test_no_tests_ran_skip(self): code = textwrap.dedent(""" @@ -1304,7 +1497,8 @@ def test_skipped(self): testname = self.create_test(code=code) output = self.run_tests(testname) - self.check_executed_tests(output, [testname]) + self.check_executed_tests(output, [testname], + stats=TestStats(1, skipped=1)) def test_no_tests_ran_multiple_tests_nonexistent(self): code = textwrap.dedent(""" @@ -1320,7 +1514,8 @@ def test_bug(self): output = self.run_tests(testname, testname2, "-m", "nosuchtest", exitcode=EXITCODE_NO_TESTS_RAN) self.check_executed_tests(output, [testname, testname2], - no_test_ran=[testname, testname2]) + run_no_tests=[testname, testname2], + stats=0, filtered=True) def test_no_test_ran_some_test_exist_some_not(self): code = textwrap.dedent(""" @@ -1343,7 +1538,8 @@ def test_other_bug(self): output = self.run_tests(testname, testname2, "-m", "nosuchtest", "-m", "test_other_bug", exitcode=0) self.check_executed_tests(output, [testname, testname2], - no_test_ran=[testname]) + run_no_tests=[testname], + stats=1, filtered=True) @support.cpython_only def test_uncollectable(self): @@ -1370,7 +1566,8 @@ def test_garbage(self): exitcode=EXITCODE_ENV_CHANGED) self.check_executed_tests(output, [testname], env_changed=[testname], - fail_env_changed=True) + fail_env_changed=True, + stats=1) def test_multiprocessing_timeout(self): code = textwrap.dedent(r""" @@ -1396,7 +1593,7 @@ def test_sleep(self): output = self.run_tests("-j2", "--timeout=1.0", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, [testname], - failed=testname) + failed=testname, stats=0) self.assertRegex(output, re.compile('%s timed out' % testname, re.MULTILINE)) @@ -1430,7 +1627,8 @@ def test_unraisable_exc(self): exitcode=EXITCODE_ENV_CHANGED) self.check_executed_tests(output, [testname], env_changed=[testname], - fail_env_changed=True) + fail_env_changed=True, + stats=1) self.assertIn("Warning -- Unraisable exception", output) self.assertIn("Exception: weakref callback bug", output) @@ -1462,7 +1660,8 @@ def test_threading_excepthook(self): exitcode=EXITCODE_ENV_CHANGED) self.check_executed_tests(output, [testname], env_changed=[testname], - fail_env_changed=True) + fail_env_changed=True, + stats=1) self.assertIn("Warning -- Uncaught thread exception", output) self.assertIn("Exception: bug in thread", output) @@ -1503,7 +1702,8 @@ def test_print_warning(self): output = self.run_tests(*cmd, exitcode=EXITCODE_ENV_CHANGED) self.check_executed_tests(output, [testname], env_changed=[testname], - fail_env_changed=True) + fail_env_changed=True, + stats=1) self.assertRegex(output, regex) def test_unicode_guard_env(self): @@ -1550,15 +1750,15 @@ def test_leak_tmp_file(self): self.check_executed_tests(output, testnames, env_changed=testnames, fail_env_changed=True, - randomize=True) + parallel=True, + stats=len(testnames)) for testname in testnames: self.assertIn(f"Warning -- {testname} leaked temporary " f"files (1): mytmpfile", output) - def test_mp_decode_error(self): - # gh-101634: If a worker stdout cannot be decoded, report a failed test - # and a non-zero exit code. + def test_worker_decode_error(self): + # gh-109425: Use "backslashreplace" error handler to decode stdout. if sys.platform == 'win32': encoding = locale.getencoding() else: @@ -1566,30 +1766,143 @@ def test_mp_decode_error(self): if encoding is None: encoding = sys.__stdout__.encoding if encoding is None: - self.skipTest(f"cannot get regrtest worker encoding") - - nonascii = b"byte:\xa0\xa9\xff\n" + self.skipTest("cannot get regrtest worker encoding") + + nonascii = bytes(ch for ch in range(128, 256)) + corrupted_output = b"nonascii:%s\n" % (nonascii,) + # gh-108989: On Windows, assertion errors are written in UTF-16: when + # decoded each letter is follow by a NUL character. + assertion_failed = 'Assertion failed: tstate_is_alive(tstate)\n' + corrupted_output += assertion_failed.encode('utf-16-le') try: - nonascii.decode(encoding) + corrupted_output.decode(encoding) except UnicodeDecodeError: pass else: - self.skipTest(f"{encoding} can decode non-ASCII bytes {nonascii!a}") + self.skipTest(f"{encoding} can decode non-ASCII bytes") + + expected_line = corrupted_output.decode(encoding, 'backslashreplace') code = textwrap.dedent(fr""" import sys + import unittest + + class Tests(unittest.TestCase): + def test_pass(self): + pass + # bytes which cannot be decoded from UTF-8 - nonascii = {nonascii!a} - sys.stdout.buffer.write(nonascii) + corrupted_output = {corrupted_output!a} + sys.stdout.buffer.write(corrupted_output) sys.stdout.buffer.flush() """) testname = self.create_test(code=code) + output = self.run_tests("--fail-env-changed", "-v", "-j1", testname) + self.check_executed_tests(output, [testname], + parallel=True, + stats=1) + self.check_line(output, expected_line, regex=False) + + def test_doctest(self): + code = textwrap.dedent(r''' + import doctest + import sys + from test import support + + def my_function(): + """ + Pass: + + >>> 1 + 1 + 2 + + Failure: + + >>> 2 + 3 + 23 + >>> 1 + 1 + 11 + + Skipped test (ignored): + + >>> id(1.0) # doctest: +SKIP + 7948648 + """ + + def load_tests(loader, tests, pattern): + tests.addTest(doctest.DocTestSuite()) + return tests + ''') + testname = self.create_test(code=code) + output = self.run_tests("--fail-env-changed", "-v", "-j1", testname, exitcode=EXITCODE_BAD_TEST) self.check_executed_tests(output, [testname], failed=[testname], - randomize=True) + parallel=True, + stats=TestStats(1, 1, 0)) + + def _check_random_seed(self, run_workers: bool): + # gh-109276: When -r/--randomize is used, random.seed() is called + # with the same random seed before running each test file. + code = textwrap.dedent(r''' + import random + import unittest + + class RandomSeedTest(unittest.TestCase): + def test_randint(self): + numbers = [random.randint(0, 1000) for _ in range(10)] + print(f"Random numbers: {numbers}") + ''') + tests = [self.create_test(name=f'test_random{i}', code=code) + for i in range(1, 3+1)] + + random_seed = 856_656_202 + cmd = ["--randomize", f"--randseed={random_seed}"] + if run_workers: + # run as many worker processes than the number of tests + cmd.append(f'-j{len(tests)}') + cmd.extend(tests) + output = self.run_tests(*cmd) + + random.seed(random_seed) + # Make the assumption that nothing consume entropy between libregrest + # setup_tests() which calls random.seed() and RandomSeedTest calling + # random.randint(). + numbers = [random.randint(0, 1000) for _ in range(10)] + expected = f"Random numbers: {numbers}" + + regex = r'^Random numbers: .*$' + matches = re.findall(regex, output, flags=re.MULTILINE) + self.assertEqual(matches, [expected] * len(tests)) + + def test_random_seed(self): + self._check_random_seed(run_workers=False) + + def test_random_seed_workers(self): + self._check_random_seed(run_workers=True) + + def test_python_command(self): + code = textwrap.dedent(r""" + import sys + import unittest + + class WorkerTests(unittest.TestCase): + def test_dev_mode(self): + self.assertTrue(sys.flags.dev_mode) + """) + tests = [self.create_test(code=code) for _ in range(3)] + + # Custom Python command: "python -X dev" + python_cmd = [sys.executable, '-X', 'dev'] + # test.libregrtest.cmdline uses shlex.split() to parse the Python + # command line string + python_cmd = shlex.join(python_cmd) + + output = self.run_tests("--python", python_cmd, "-j0", *tests) + self.check_executed_tests(output, tests, + stats=len(tests), parallel=True) class TestUtils(unittest.TestCase): @@ -1615,6 +1928,17 @@ def test_format_duration(self): self.assertEqual(utils.format_duration(3 * 3600 + 1), '3 hour 1 sec') + def test_normalize_test_name(self): + normalize = normalize_test_name + self.assertEqual(normalize('test_access (test.test_os.FileTests.test_access)'), + 'test_access') + self.assertEqual(normalize('setUpClass (test.test_os.ChownFileTests)', is_error=True), + 'ChownFileTests') + self.assertEqual(normalize('test_success (test.test_bug.ExampleTests.test_success)', is_error=True), + 'test_success') + self.assertIsNone(normalize('setUpModule (test.test_x)', is_error=True)) + self.assertIsNone(normalize('tearDownModule (test.test_module)', is_error=True)) + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 25afd6aabe0751..2a1a1ee22f43da 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -745,6 +745,7 @@ def test_siginterrupt_on(self): interrupted = self.readpipe_interrupted(True) self.assertTrue(interrupted) + @support.requires_resource('walltime') def test_siginterrupt_off(self): # If a signal handler is installed and siginterrupt is called with # a false value for the second argument, when that signal arrives, it diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py index 9e701fd847acdf..e8ec3b35881fec 100644 --- a/Lib/test/test_site.py +++ b/Lib/test/test_site.py @@ -465,10 +465,10 @@ def test_sitecustomize_executed(self): else: self.fail("sitecustomize not imported automatically") - @test.support.requires_resource('network') - @test.support.system_must_validate_cert @unittest.skipUnless(hasattr(urllib.request, "HTTPSHandler"), 'need SSL support to download license') + @test.support.requires_resource('network') + @test.support.system_must_validate_cert def test_license_exists_at_url(self): # This test is a bit fragile since it depends on the format of the # string displayed by license in the absence of a LICENSE file. @@ -576,7 +576,7 @@ def _create_underpth_exe(self, lines, exe_pth=True): _pth_file = os.path.splitext(exe_file)[0] + '._pth' else: _pth_file = os.path.splitext(dll_file)[0] + '._pth' - with open(_pth_file, 'w') as f: + with open(_pth_file, 'w', encoding='utf8') as f: for line in lines: print(line, file=f) return exe_file @@ -613,7 +613,7 @@ def test_underpth_basic(self): os.path.dirname(exe_file), pth_lines) - output = subprocess.check_output([exe_file, '-c', + output = subprocess.check_output([exe_file, '-X', 'utf8', '-c', 'import sys; print("\\n".join(sys.path) if sys.flags.no_site else "")' ], encoding='utf-8', errors='surrogateescape') actual_sys_path = output.rstrip().split('\n') diff --git a/Lib/test/test_smtpnet.py b/Lib/test/test_smtpnet.py index 72f51cd8d81f59..2e0dc1aa276f35 100644 --- a/Lib/test/test_smtpnet.py +++ b/Lib/test/test_smtpnet.py @@ -61,6 +61,7 @@ def test_connect_default_port(self): server.ehlo() server.quit() + @support.requires_resource('walltime') def test_connect_using_sslcontext(self): context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) context.check_hostname = False diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 0eaf64257c3b81..99c4c5cbc4902d 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -5288,6 +5288,7 @@ def mocked_socket_module(self): finally: socket.socket = old_socket + @socket_helper.skip_if_tcp_blackhole def test_connect(self): port = socket_helper.find_unused_port() cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -5296,6 +5297,7 @@ def test_connect(self): cli.connect((HOST, port)) self.assertEqual(cm.exception.errno, errno.ECONNREFUSED) + @socket_helper.skip_if_tcp_blackhole def test_create_connection(self): # Issue #9792: errors raised by create_connection() should have # a proper errno attribute. @@ -6472,12 +6474,16 @@ def test_sha256(self): self.assertEqual(op.recv(512), expected) def test_hmac_sha1(self): - expected = bytes.fromhex("effcdf6ae5eb2fa2d27416d5f184df9c259a7c79") + # gh-109396: In FIPS mode, Linux 6.5 requires a key + # of at least 112 bits. Use a key of 152 bits. + key = b"Python loves AF_ALG" + data = b"what do ya want for nothing?" + expected = bytes.fromhex("193dbb43c6297b47ea6277ec0ce67119a3f3aa66") with self.create_alg('hash', 'hmac(sha1)') as algo: - algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, b"Jefe") + algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, key) op, _ = algo.accept() with op: - op.sendall(b"what do ya want for nothing?") + op.sendall(data) self.assertEqual(op.recv(512), expected) # Although it should work with 3.19 and newer the test blocks on diff --git a/Lib/test/test_source_encoding.py b/Lib/test/test_source_encoding.py index 72c2b47779e005..27871378f1c79e 100644 --- a/Lib/test/test_source_encoding.py +++ b/Lib/test/test_source_encoding.py @@ -68,6 +68,7 @@ def test_issue7820(self): def test_20731(self): sub = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), + 'tokenizedata', 'coding20731.py')], stderr=subprocess.PIPE) err = sub.communicate()[1] @@ -100,10 +101,10 @@ def test_bad_coding2(self): self.verify_bad_module(module_name) def verify_bad_module(self, module_name): - self.assertRaises(SyntaxError, __import__, 'test.' + module_name) + self.assertRaises(SyntaxError, __import__, 'test.tokenizedata.' + module_name) path = os.path.dirname(__file__) - filename = os.path.join(path, module_name + '.py') + filename = os.path.join(path, 'tokenizedata', module_name + '.py') with open(filename, "rb") as fp: bytes = fp.read() self.assertRaises(SyntaxError, compile, bytes, filename, 'exec') diff --git a/Lib/test/test_sqlite3/test_dump.py b/Lib/test/test_sqlite3/test_dump.py index 3107e1b165d950..14a18c1ad37102 100644 --- a/Lib/test/test_sqlite3/test_dump.py +++ b/Lib/test/test_sqlite3/test_dump.py @@ -1,7 +1,6 @@ # Author: Paul Kippes import unittest -import sqlite3 as sqlite from .util import memory_database from .util import MemoryDatabaseMixin diff --git a/Lib/test/test_sqlite3/test_userfunctions.py b/Lib/test/test_sqlite3/test_userfunctions.py index 09019498fd5682..c6c3db159add64 100644 --- a/Lib/test/test_sqlite3/test_userfunctions.py +++ b/Lib/test/test_sqlite3/test_userfunctions.py @@ -29,7 +29,7 @@ from test.support import bigmemtest, gc_collect from .util import cx_limit, memory_database -from .util import with_tracebacks, check_tracebacks +from .util import with_tracebacks def func_returntext(): diff --git a/Lib/test/test_sqlite3/util.py b/Lib/test/test_sqlite3/util.py index 505406c437b632..5599823838beea 100644 --- a/Lib/test/test_sqlite3/util.py +++ b/Lib/test/test_sqlite3/util.py @@ -4,7 +4,6 @@ import re import sqlite3 import test.support -import unittest # Helper for temporary memory databases diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 4e49dc5640d3f5..06304dcb4ec7b8 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -60,10 +60,10 @@ PROTOCOL_TO_TLS_VERSION[proto] = ver def data_file(*name): - return os.path.join(os.path.dirname(__file__), *name) + return os.path.join(os.path.dirname(__file__), "certdata", *name) # The custom key and certificate files used in test_ssl are generated -# using Lib/test/make_ssl_certs.py. +# using Lib/test/certdata/make_ssl_certs.py. # Other certificates are simply fetched from the internet servers they # are meant to authenticate. @@ -641,7 +641,7 @@ def test_openssl111_deprecations(self): def bad_cert_test(self, certfile): """Check that trying to use the given client certificate fails""" certfile = os.path.join(os.path.dirname(__file__) or os.curdir, - certfile) + "certdata", certfile) sock = socket.socket() self.addCleanup(sock.close) with self.assertRaises(ssl.SSLError): @@ -2182,6 +2182,7 @@ def test_timeout_connect_ex(self): self.assertIn(rc, (errno.EAGAIN, errno.EWOULDBLOCK)) @unittest.skipUnless(socket_helper.IPV6_ENABLED, 'Needs IPv6') + @support.requires_resource('walltime') def test_get_server_certificate_ipv6(self): with socket_helper.transient_internet('ipv6.google.com'): _test_get_server_certificate(self, 'ipv6.google.com', 443) @@ -2740,6 +2741,7 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success, class ThreadedTests(unittest.TestCase): + @support.requires_resource('walltime') def test_echo(self): """Basic test of an SSL client connecting to a server""" if support.verbose: @@ -3307,12 +3309,12 @@ def test_socketserver(self): # try to connect if support.verbose: sys.stdout.write('\n') - with open(CERTFILE, 'rb') as f: + # Get this test file itself: + with open(__file__, 'rb') as f: d1 = f.read() d2 = '' # now fetch the same data from the HTTPS server - url = 'https://localhost:%d/%s' % ( - server.port, os.path.split(CERTFILE)[1]) + url = f'https://localhost:{server.port}/test_ssl.py' context = ssl.create_default_context(cafile=SIGNING_CA) f = urllib.request.urlopen(url, context=context) try: diff --git a/Lib/test/test_stable_abi_ctypes.py b/Lib/test/test_stable_abi_ctypes.py index 1f3cf612c18f6d..94f817f8e1d159 100644 --- a/Lib/test/test_stable_abi_ctypes.py +++ b/Lib/test/test_stable_abi_ctypes.py @@ -405,6 +405,8 @@ def test_windows_feature_macros(self): "PyMapping_GetOptionalItemString", "PyMapping_HasKey", "PyMapping_HasKeyString", + "PyMapping_HasKeyStringWithError", + "PyMapping_HasKeyWithError", "PyMapping_Items", "PyMapping_Keys", "PyMapping_Length", @@ -542,6 +544,8 @@ def test_windows_feature_macros(self): "PyObject_GetTypeData", "PyObject_HasAttr", "PyObject_HasAttrString", + "PyObject_HasAttrStringWithError", + "PyObject_HasAttrWithError", "PyObject_Hash", "PyObject_HashNotImplemented", "PyObject_Init", diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py index 23a3973305303d..f9b0ac2ad7b116 100644 --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -698,14 +698,6 @@ def test_check_all(self): 'missing name "%s" in __all__' % name) -class DocTests(unittest.TestCase): - @unittest.skipIf(sys.flags.optimize >= 2, - "Docstrings are omitted with -OO and above") - def test_doc_tests(self): - failed, tried = doctest.testmod(statistics, optionflags=doctest.ELLIPSIS) - self.assertGreater(tried, 0) - self.assertEqual(failed, 0) - class StatisticsErrorTest(unittest.TestCase): def test_has_exception(self): errmsg = ( @@ -3145,6 +3137,7 @@ def tearDown(self): def load_tests(loader, tests, ignore): """Used for doctest/unittest integration.""" tests.addTests(doctest.DocTestSuite()) + tests.addTests(doctest.DocTestSuite(statistics)) return tests diff --git a/Lib/test/test_str.py b/Lib/test/test_str.py index 3ae2f45ef6bddc..814ef111c5bec8 100644 --- a/Lib/test/test_str.py +++ b/Lib/test/test_str.py @@ -812,16 +812,6 @@ def test_isidentifier(self): self.assertFalse("©".isidentifier()) self.assertFalse("0".isidentifier()) - @support.cpython_only - @support.requires_legacy_unicode_capi() - @unittest.skipIf(_testcapi is None, 'need _testcapi module') - def test_isidentifier_legacy(self): - u = '𝖀𝖓𝖎𝖈𝖔𝖉𝖊' - self.assertTrue(u.isidentifier()) - with warnings_helper.check_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - self.assertTrue(_testcapi.unicode_legacy_string(u).isidentifier()) - def test_isprintable(self): self.assertTrue("".isprintable()) self.assertTrue(" ".isprintable()) @@ -2489,26 +2479,6 @@ def test_getnewargs(self): self.assertEqual(args[0], text) self.assertEqual(len(args), 1) - @support.cpython_only - @support.requires_legacy_unicode_capi() - @unittest.skipIf(_testcapi is None, 'need _testcapi module') - def test_resize(self): - for length in range(1, 100, 7): - # generate a fresh string (refcount=1) - text = 'a' * length + 'b' - - # fill wstr internal field - with self.assertWarns(DeprecationWarning): - abc = _testcapi.getargs_u(text) - self.assertEqual(abc, text) - - # resize text: wstr field must be cleared and then recomputed - text += 'c' - with self.assertWarns(DeprecationWarning): - abcdef = _testcapi.getargs_u(text) - self.assertNotEqual(abc, abcdef) - self.assertEqual(abcdef, text) - def test_compare(self): # Issue #17615 N = 10 diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 0b9e9e16f55d7e..d95ef72b0da47a 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -269,6 +269,7 @@ def test_check_output_stdin_with_input_arg(self): self.assertIn('stdin', c.exception.args[0]) self.assertIn('input', c.exception.args[0]) + @support.requires_resource('walltime') def test_check_output_timeout(self): # check_output() function with timeout arg with self.assertRaises(subprocess.TimeoutExpired) as c: @@ -1643,6 +1644,7 @@ def test_check_output_stdin_with_input_arg(self): self.assertIn('stdin', c.exception.args[0]) self.assertIn('input', c.exception.args[0]) + @support.requires_resource('walltime') def test_check_output_timeout(self): with self.assertRaises(subprocess.TimeoutExpired) as c: cp = self.run_python(( diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index 86d26b7e8df4d0..5b57c5fd54a68d 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -685,6 +685,121 @@ def test_has_strftime_extensions(self): else: self.assertTrue(support.has_strftime_extensions) + def test_get_recursion_depth(self): + # test support.get_recursion_depth() + code = textwrap.dedent(""" + from test import support + import sys + + def check(cond): + if not cond: + raise AssertionError("test failed") + + # depth 1 + check(support.get_recursion_depth() == 1) + + # depth 2 + def test_func(): + check(support.get_recursion_depth() == 2) + test_func() + + def test_recursive(depth, limit): + if depth >= limit: + # cannot call get_recursion_depth() at this depth, + # it can raise RecursionError + return + get_depth = support.get_recursion_depth() + print(f"test_recursive: {depth}/{limit}: " + f"get_recursion_depth() says {get_depth}") + check(get_depth == depth) + test_recursive(depth + 1, limit) + + # depth up to 25 + with support.infinite_recursion(max_depth=25): + limit = sys.getrecursionlimit() + print(f"test with sys.getrecursionlimit()={limit}") + test_recursive(2, limit) + + # depth up to 500 + with support.infinite_recursion(max_depth=500): + limit = sys.getrecursionlimit() + print(f"test with sys.getrecursionlimit()={limit}") + test_recursive(2, limit) + """) + script_helper.assert_python_ok("-c", code) + + def test_recursion(self): + # Test infinite_recursion() and get_recursion_available() functions. + def recursive_function(depth): + if depth: + recursive_function(depth - 1) + + for max_depth in (5, 25, 250): + with support.infinite_recursion(max_depth): + available = support.get_recursion_available() + + # Recursion up to 'available' additional frames should be OK. + recursive_function(available) + + # Recursion up to 'available+1' additional frames must raise + # RecursionError. Avoid self.assertRaises(RecursionError) which + # can consume more than 3 frames and so raises RecursionError. + try: + recursive_function(available + 1) + except RecursionError: + pass + else: + self.fail("RecursionError was not raised") + + # Test the bare minimumum: max_depth=3 + with support.infinite_recursion(3): + try: + recursive_function(3) + except RecursionError: + pass + else: + self.fail("RecursionError was not raised") + + def test_parse_memlimit(self): + parse = support._parse_memlimit + KiB = 1024 + MiB = KiB * 1024 + GiB = MiB * 1024 + TiB = GiB * 1024 + self.assertEqual(parse('0k'), 0) + self.assertEqual(parse('3k'), 3 * KiB) + self.assertEqual(parse('2.4m'), int(2.4 * MiB)) + self.assertEqual(parse('4g'), int(4 * GiB)) + self.assertEqual(parse('1t'), TiB) + + for limit in ('', '3', '3.5.10k', '10x'): + with self.subTest(limit=limit): + with self.assertRaises(ValueError): + parse(limit) + + def test_set_memlimit(self): + _4GiB = 4 * 1024 ** 3 + TiB = 1024 ** 4 + old_max_memuse = support.max_memuse + old_real_max_memuse = support.real_max_memuse + try: + if sys.maxsize > 2**32: + support.set_memlimit('4g') + self.assertEqual(support.max_memuse, _4GiB) + self.assertEqual(support.real_max_memuse, _4GiB) + + big = 2**100 // TiB + support.set_memlimit(f'{big}t') + self.assertEqual(support.max_memuse, sys.maxsize) + self.assertEqual(support.real_max_memuse, big * TiB) + else: + support.set_memlimit('4g') + self.assertEqual(support.max_memuse, sys.maxsize) + self.assertEqual(support.real_max_memuse, _4GiB) + finally: + support.max_memuse = old_max_memuse + support.real_max_memuse = old_real_max_memuse + # XXX -follows a list of untested API # make_legacy_pyc # is_resource_enabled @@ -696,7 +811,6 @@ def test_has_strftime_extensions(self): # EnvironmentVarGuard # transient_internet # run_with_locale - # set_memlimit # bigmemtest # precisionbigmemtest # bigaddrspacetest diff --git a/Lib/test/test_symtable.py b/Lib/test/test_symtable.py index 25714aecda3a15..36cb7b3f242e4c 100644 --- a/Lib/test/test_symtable.py +++ b/Lib/test/test_symtable.py @@ -251,6 +251,10 @@ def test_symtable_repr(self): self.assertEqual(str(self.top), "") self.assertEqual(str(self.spam), "") + def test_symtable_entry_repr(self): + expected = f"" + self.assertEqual(repr(self.top._table), expected) + if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index d8b684c8a008f0..f4948ceec66226 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -279,20 +279,29 @@ def test_switchinterval(self): finally: sys.setswitchinterval(orig) - def test_recursionlimit(self): + def test_getrecursionlimit(self): + limit = sys.getrecursionlimit() + self.assertIsInstance(limit, int) + self.assertGreater(limit, 1) + self.assertRaises(TypeError, sys.getrecursionlimit, 42) - oldlimit = sys.getrecursionlimit() - self.assertRaises(TypeError, sys.setrecursionlimit) - self.assertRaises(ValueError, sys.setrecursionlimit, -42) - sys.setrecursionlimit(10000) - self.assertEqual(sys.getrecursionlimit(), 10000) - sys.setrecursionlimit(oldlimit) + + def test_setrecursionlimit(self): + old_limit = sys.getrecursionlimit() + try: + sys.setrecursionlimit(10_005) + self.assertEqual(sys.getrecursionlimit(), 10_005) + + self.assertRaises(TypeError, sys.setrecursionlimit) + self.assertRaises(ValueError, sys.setrecursionlimit, -42) + finally: + sys.setrecursionlimit(old_limit) def test_recursionlimit_recovery(self): if hasattr(sys, 'gettrace') and sys.gettrace(): self.skipTest('fatal error if run with a trace function') - oldlimit = sys.getrecursionlimit() + old_limit = sys.getrecursionlimit() def f(): f() try: @@ -311,35 +320,31 @@ def f(): with self.assertRaises(RecursionError): f() finally: - sys.setrecursionlimit(oldlimit) + sys.setrecursionlimit(old_limit) @test.support.cpython_only - def test_setrecursionlimit_recursion_depth(self): + def test_setrecursionlimit_to_depth(self): # Issue #25274: Setting a low recursion limit must be blocked if the # current recursion depth is already higher than limit. - from _testinternalcapi import get_recursion_depth - - def set_recursion_limit_at_depth(depth, limit): - recursion_depth = get_recursion_depth() - if recursion_depth >= depth: - with self.assertRaises(RecursionError) as cm: - sys.setrecursionlimit(limit) - self.assertRegex(str(cm.exception), - "cannot set the recursion limit to [0-9]+ " - "at the recursion depth [0-9]+: " - "the limit is too low") - else: - set_recursion_limit_at_depth(depth, limit) - - oldlimit = sys.getrecursionlimit() + old_limit = sys.getrecursionlimit() try: - sys.setrecursionlimit(1000) - - for limit in (10, 25, 50, 75, 100, 150, 200): - set_recursion_limit_at_depth(limit, limit) + depth = support.get_recursion_depth() + with self.subTest(limit=sys.getrecursionlimit(), depth=depth): + # depth + 1 is OK + sys.setrecursionlimit(depth + 1) + + # reset the limit to be able to call self.assertRaises() + # context manager + sys.setrecursionlimit(old_limit) + with self.assertRaises(RecursionError) as cm: + sys.setrecursionlimit(depth) + self.assertRegex(str(cm.exception), + "cannot set the recursion limit to [0-9]+ " + "at the recursion depth [0-9]+: " + "the limit is too low") finally: - sys.setrecursionlimit(oldlimit) + sys.setrecursionlimit(old_limit) def test_getwindowsversion(self): # Raise SkipTest if sys doesn't have getwindowsversion attribute @@ -1195,15 +1200,24 @@ class MyType: get_objects = sys.getobjects(3, MyType) self.assertEqual(len(get_objects), 3) + @unittest.skipUnless(hasattr(sys, '_stats_on'), 'need Py_STATS build') + def test_pystats(self): + # Call the functions, just check that they don't crash + # Cannot save/restore state. + sys._stats_on() + sys._stats_off() + sys._stats_clear() + sys._stats_dump() + @test.support.cpython_only class UnraisableHookTest(unittest.TestCase): def write_unraisable_exc(self, exc, err_msg, obj): - import _testcapi + import _testinternalcapi import types err_msg2 = f"Exception ignored {err_msg}" try: - _testcapi.write_unraisable_exc(exc, err_msg, obj) + _testinternalcapi.write_unraisable_exc(exc, err_msg, obj) return types.SimpleNamespace(exc_type=type(exc), exc_value=exc, exc_traceback=exc.__traceback__, diff --git a/Lib/test/test_sys_setprofile.py b/Lib/test/test_sys_setprofile.py index 49e076c77d167a..34c70d6c8de0c4 100644 --- a/Lib/test/test_sys_setprofile.py +++ b/Lib/test/test_sys_setprofile.py @@ -439,7 +439,6 @@ def __del__(self): sys.setprofile(foo) self.assertEqual(sys.getprofile(), bar) - def test_same_object(self): def foo(*args): ... @@ -448,6 +447,18 @@ def foo(*args): del foo sys.setprofile(sys.getprofile()) + def test_profile_after_trace_opcodes(self): + def f(): + ... + + sys._getframe().f_trace_opcodes = True + prev_trace = sys.gettrace() + sys.settrace(lambda *args: None) + f() + sys.settrace(prev_trace) + sys.setprofile(lambda *args: None) + f() + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 7d38addaee413e..f02169602e4925 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -8,6 +8,7 @@ from functools import wraps import asyncio from test.support import import_helper +import contextlib support.requires_working_socket(module=True) @@ -40,6 +41,20 @@ async def asynciter(iterable): for x in iterable: yield x +def clean_asynciter(test): + @wraps(test) + async def wrapper(*args, **kwargs): + cleanups = [] + def wrapped_asynciter(iterable): + it = asynciter(iterable) + cleanups.append(it.aclose) + return it + try: + return await test(*args, **kwargs, asynciter=wrapped_asynciter) + finally: + while cleanups: + await cleanups.pop()() + return wrapper # A very basic example. If this fails, we're in deep trouble. def basic(): @@ -302,6 +317,13 @@ def generator_example(): [(5, 'line'), (5, 'return')]) +def lineno_matches_lasti(frame): + last_line = None + for start, end, line in frame.f_code.co_lines(): + if start <= frame.f_lasti < end: + last_line = line + return last_line == frame.f_lineno + class Tracer: def __init__(self, trace_line_events=None, trace_opcode_events=None): self.trace_line_events = trace_line_events @@ -315,6 +337,7 @@ def _reconfigure_frame(self, frame): frame.f_trace_opcodes = self.trace_opcode_events def trace(self, frame, event, arg): + assert lineno_matches_lasti(frame) self._reconfigure_frame(frame) self.events.append((frame.f_lineno, event)) return self.trace @@ -906,6 +929,35 @@ def func(): (6, 'line'), (6, 'return')]) + def test_finally_with_conditional(self): + + # See gh-105658 + condition = True + def func(): + try: + try: + raise Exception + finally: + if condition: + result = 1 + result = 2 + except: + result = 3 + return result + + self.run_and_compare(func, + [(0, 'call'), + (1, 'line'), + (2, 'line'), + (3, 'line'), + (3, 'exception'), + (5, 'line'), + (6, 'line'), + (8, 'line'), + (9, 'line'), + (10, 'line'), + (10, 'return')]) + def test_break_to_continue1(self): def func(): @@ -1653,7 +1705,6 @@ def error_once(frame, event, arg): except Exception as ex: count = 0 tb = ex.__traceback__ - print(tb) while tb: if tb.tb_frame.f_code.co_name == "test_settrace_error": count += 1 @@ -1876,6 +1927,7 @@ def __init__(self, function, jumpFrom, jumpTo, event='line', def trace(self, frame, event, arg): if self.done: return + assert lineno_matches_lasti(frame) # frame.f_code.co_firstlineno is the first line of the decorator when # 'function' is decorated and the decorator may be written using # multiple physical lines when it is too long. Use the first line @@ -1922,6 +1974,8 @@ def no_jump_without_trace_function(): class JumpTestCase(unittest.TestCase): + unbound_locals = r"assigning None to [0-9]+ unbound local" + def setUp(self): self.addCleanup(sys.settrace, sys.gettrace()) sys.settrace(None) @@ -1933,33 +1987,47 @@ def compare_jump_output(self, expected, received): "Received: " + repr(received)) def run_test(self, func, jumpFrom, jumpTo, expected, error=None, - event='line', decorated=False): - tracer = JumpTracer(func, jumpFrom, jumpTo, event, decorated) + event='line', decorated=False, warning=None): + wrapped = func + while hasattr(wrapped, '__wrapped__'): + wrapped = wrapped.__wrapped__ + + tracer = JumpTracer(wrapped, jumpFrom, jumpTo, event, decorated) sys.settrace(tracer.trace) output = [] - if error is None: + + with contextlib.ExitStack() as stack: + if error is not None: + stack.enter_context(self.assertRaisesRegex(*error)) + if warning is not None: + stack.enter_context(self.assertWarnsRegex(*warning)) func(output) - else: - with self.assertRaisesRegex(*error): - func(output) + sys.settrace(None) self.compare_jump_output(expected, output) def run_async_test(self, func, jumpFrom, jumpTo, expected, error=None, - event='line', decorated=False): - tracer = JumpTracer(func, jumpFrom, jumpTo, event, decorated) + event='line', decorated=False, warning=None): + wrapped = func + while hasattr(wrapped, '__wrapped__'): + wrapped = wrapped.__wrapped__ + + tracer = JumpTracer(wrapped, jumpFrom, jumpTo, event, decorated) sys.settrace(tracer.trace) output = [] - if error is None: + + with contextlib.ExitStack() as stack: + if error is not None: + stack.enter_context(self.assertRaisesRegex(*error)) + if warning is not None: + stack.enter_context(self.assertWarnsRegex(*warning)) asyncio.run(func(output)) - else: - with self.assertRaisesRegex(*error): - asyncio.run(func(output)) + sys.settrace(None) asyncio.set_event_loop_policy(None) self.compare_jump_output(expected, output) - def jump_test(jumpFrom, jumpTo, expected, error=None, event='line'): + def jump_test(jumpFrom, jumpTo, expected, error=None, event='line', warning=None): """Decorator that creates a test that makes a jump from one place to another in the following code. """ @@ -1967,11 +2035,11 @@ def decorator(func): @wraps(func) def test(self): self.run_test(func, jumpFrom, jumpTo, expected, - error=error, event=event, decorated=True) + error=error, event=event, decorated=True, warning=warning) return test return decorator - def async_jump_test(jumpFrom, jumpTo, expected, error=None, event='line'): + def async_jump_test(jumpFrom, jumpTo, expected, error=None, event='line', warning=None): """Decorator that creates a test that makes a jump from one place to another in the following asynchronous code. """ @@ -1979,7 +2047,7 @@ def decorator(func): @wraps(func) def test(self): self.run_async_test(func, jumpFrom, jumpTo, expected, - error=error, event=event, decorated=True) + error=error, event=event, decorated=True, warning=warning) return test return decorator @@ -1996,7 +2064,7 @@ def test_jump_simple_backwards(output): output.append(1) output.append(2) - @jump_test(3, 5, [2, 5]) + @jump_test(3, 5, [2, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_out_of_block_forwards(output): for i in 1, 2: output.append(2) @@ -2015,7 +2083,8 @@ def test_jump_out_of_block_backwards(output): output.append(7) @async_jump_test(4, 5, [3, 5]) - async def test_jump_out_of_async_for_block_forwards(output): + @clean_asynciter + async def test_jump_out_of_async_for_block_forwards(output, asynciter): for i in [1]: async for i in asynciter([1, 2]): output.append(3) @@ -2023,7 +2092,8 @@ async def test_jump_out_of_async_for_block_forwards(output): output.append(5) @async_jump_test(5, 2, [2, 4, 2, 4, 5, 6]) - async def test_jump_out_of_async_for_block_backwards(output): + @clean_asynciter + async def test_jump_out_of_async_for_block_backwards(output, asynciter): for i in [1]: output.append(2) async for i in asynciter([1]): @@ -2082,7 +2152,7 @@ def test_jump_in_nested_finally_3(output): output.append(11) output.append(12) - @jump_test(5, 11, [2, 4], (ValueError, 'exception')) + @jump_test(5, 11, [2, 4], (ValueError, 'comes after the current code block')) def test_no_jump_over_return_try_finally_in_finally_block(output): try: output.append(2) @@ -2210,7 +2280,7 @@ def test_jump_within_except_block(output): output.append(6) output.append(7) - @jump_test(6, 1, [1, 5, 1, 5]) + @jump_test(6, 1, [1, 5, 1, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_over_try_except(output): output.append(1) try: @@ -2306,7 +2376,7 @@ def test_jump_out_of_complex_nested_blocks(output): output.append(11) output.append(12) - @jump_test(3, 5, [1, 2, 5]) + @jump_test(3, 5, [1, 2, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_out_of_with_assignment(output): output.append(1) with tracecontext(output, 2) \ @@ -2314,7 +2384,7 @@ def test_jump_out_of_with_assignment(output): output.append(4) output.append(5) - @async_jump_test(3, 5, [1, 2, 5]) + @async_jump_test(3, 5, [1, 2, 5], warning=(RuntimeWarning, unbound_locals)) async def test_jump_out_of_async_with_assignment(output): output.append(1) async with asynctracecontext(output, 2) \ @@ -2350,7 +2420,7 @@ def test_jump_over_break_in_try_finally_block(output): break output.append(13) - @jump_test(1, 7, [7, 8]) + @jump_test(1, 7, [7, 8], warning=(RuntimeWarning, unbound_locals)) def test_jump_over_for_block_before_else(output): output.append(1) if not output: # always false @@ -2361,7 +2431,7 @@ def test_jump_over_for_block_before_else(output): output.append(7) output.append(8) - @async_jump_test(1, 7, [7, 8]) + @async_jump_test(1, 7, [7, 8], warning=(RuntimeWarning, unbound_locals)) async def test_jump_over_async_for_block_before_else(output): output.append(1) if not output: # always false @@ -2436,6 +2506,7 @@ def test_no_jump_backwards_into_for_block(output): output.append(2) output.append(3) + @async_jump_test(3, 2, [2, 2], (ValueError, "can't jump into the body of a for loop")) async def test_no_jump_backwards_into_async_for_block(output): async for i in asynciter([1, 2]): @@ -2501,7 +2572,7 @@ def test_jump_backwards_into_try_except_block(output): output.append(6) # 'except' with a variable creates an implicit finally block - @jump_test(5, 7, [4, 7, 8]) + @jump_test(5, 7, [4, 7, 8], warning=(RuntimeWarning, unbound_locals)) def test_jump_between_except_blocks_2(output): try: 1/0 @@ -2664,7 +2735,7 @@ def test_large_function(self): output.append(x) # line 1007 return""" % ('\n' * 1000,), d) f = d['f'] - self.run_test(f, 2, 1007, [0]) + self.run_test(f, 2, 1007, [0], warning=(RuntimeWarning, self.unbound_locals)) def test_jump_to_firstlineno(self): # This tests that PDB can jump back to the first line in a @@ -2714,7 +2785,7 @@ def gen(): next(gen()) output.append(5) - @jump_test(2, 3, [1, 3]) + @jump_test(2, 3, [1, 3], warning=(RuntimeWarning, unbound_locals)) def test_jump_forward_over_listcomp(output): output.append(1) x = [i for i in range(10)] @@ -2722,13 +2793,13 @@ def test_jump_forward_over_listcomp(output): # checking for segfaults. # See https://github.com/python/cpython/issues/92311 - @jump_test(3, 1, []) + @jump_test(3, 1, [], warning=(RuntimeWarning, unbound_locals)) def test_jump_backward_over_listcomp(output): a = 1 x = [i for i in range(10)] c = 3 - @jump_test(8, 2, [2, 7, 2]) + @jump_test(8, 2, [2, 7, 2], warning=(RuntimeWarning, unbound_locals)) def test_jump_backward_over_listcomp_v2(output): flag = False output.append(2) @@ -2739,19 +2810,19 @@ def test_jump_backward_over_listcomp_v2(output): output.append(7) output.append(8) - @async_jump_test(2, 3, [1, 3]) + @async_jump_test(2, 3, [1, 3], warning=(RuntimeWarning, unbound_locals)) async def test_jump_forward_over_async_listcomp(output): output.append(1) x = [i async for i in asynciter(range(10))] output.append(3) - @async_jump_test(3, 1, []) + @async_jump_test(3, 1, [], warning=(RuntimeWarning, unbound_locals)) async def test_jump_backward_over_async_listcomp(output): a = 1 x = [i async for i in asynciter(range(10))] c = 3 - @async_jump_test(8, 2, [2, 7, 2]) + @async_jump_test(8, 2, [2, 7, 2], warning=(RuntimeWarning, unbound_locals)) async def test_jump_backward_over_async_listcomp_v2(output): flag = False output.append(2) @@ -2820,13 +2891,13 @@ def test_jump_with_null_on_stack_load_attr(output): ) output.append(15) - @jump_test(2, 3, [1, 3]) + @jump_test(2, 3, [1, 3], warning=(RuntimeWarning, unbound_locals)) def test_jump_extended_args_unpack_ex_simple(output): output.append(1) _, *_, _ = output.append(2) or "Spam" output.append(3) - @jump_test(3, 4, [1, 4, 4, 5]) + @jump_test(3, 4, [1, 4, 4, 5], warning=(RuntimeWarning, unbound_locals)) def test_jump_extended_args_unpack_ex_tricky(output): output.append(1) ( @@ -2848,9 +2919,9 @@ def test_jump_extended_args_for_iter(self): namespace = {} exec("\n".join(source), namespace) f = namespace["f"] - self.run_test(f, 2, 100_000, [1, 100_000]) + self.run_test(f, 2, 100_000, [1, 100_000], warning=(RuntimeWarning, self.unbound_locals)) - @jump_test(2, 3, [1, 3]) + @jump_test(2, 3, [1, 3], warning=(RuntimeWarning, unbound_locals)) def test_jump_or_pop(output): output.append(1) _ = output.append(2) and "Spam" diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 0d6ca4315cfda4..cc26da05daeafc 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -1,3 +1,4 @@ +import errno import sys import os import io @@ -2587,16 +2588,17 @@ def tarfilecmd_failure(self, *args): return script_helper.assert_python_failure('-m', 'tarfile', *args) def make_simple_tarfile(self, tar_name): - files = [support.findfile('tokenize_tests.txt'), + files = [support.findfile('tokenize_tests.txt', + subdir='tokenizedata'), support.findfile('tokenize_tests-no-coding-cookie-' - 'and-utf8-bom-sig-only.txt')] + 'and-utf8-bom-sig-only.txt', + subdir='tokenizedata')] self.addCleanup(os_helper.unlink, tar_name) with tarfile.open(tar_name, 'w') as tf: for tardata in files: tf.add(tardata, arcname=os.path.basename(tardata)) def make_evil_tarfile(self, tar_name): - files = [support.findfile('tokenize_tests.txt')] self.addCleanup(os_helper.unlink, tar_name) with tarfile.open(tar_name, 'w') as tf: benign = tarfile.TarInfo('benign') @@ -2677,9 +2679,11 @@ def test_list_command_invalid_file(self): self.assertEqual(rc, 1) def test_create_command(self): - files = [support.findfile('tokenize_tests.txt'), + files = [support.findfile('tokenize_tests.txt', + subdir='tokenizedata'), support.findfile('tokenize_tests-no-coding-cookie-' - 'and-utf8-bom-sig-only.txt')] + 'and-utf8-bom-sig-only.txt', + subdir='tokenizedata')] for opt in '-c', '--create': try: out = self.tarfilecmd(opt, tmpname, *files) @@ -2690,9 +2694,11 @@ def test_create_command(self): os_helper.unlink(tmpname) def test_create_command_verbose(self): - files = [support.findfile('tokenize_tests.txt'), + files = [support.findfile('tokenize_tests.txt', + subdir='tokenizedata'), support.findfile('tokenize_tests-no-coding-cookie-' - 'and-utf8-bom-sig-only.txt')] + 'and-utf8-bom-sig-only.txt', + subdir='tokenizedata')] for opt in '-v', '--verbose': try: out = self.tarfilecmd(opt, '-c', tmpname, *files, @@ -2704,7 +2710,7 @@ def test_create_command_verbose(self): os_helper.unlink(tmpname) def test_create_command_dotless_filename(self): - files = [support.findfile('tokenize_tests.txt')] + files = [support.findfile('tokenize_tests.txt', subdir='tokenizedata')] try: out = self.tarfilecmd('-c', dotlessname, *files) self.assertEqual(out, b'') @@ -2715,7 +2721,7 @@ def test_create_command_dotless_filename(self): def test_create_command_dot_started_filename(self): tar_name = os.path.join(TEMPDIR, ".testtar") - files = [support.findfile('tokenize_tests.txt')] + files = [support.findfile('tokenize_tests.txt', subdir='tokenizedata')] try: out = self.tarfilecmd('-c', tar_name, *files) self.assertEqual(out, b'') @@ -2725,9 +2731,11 @@ def test_create_command_dot_started_filename(self): os_helper.unlink(tar_name) def test_create_command_compressed(self): - files = [support.findfile('tokenize_tests.txt'), + files = [support.findfile('tokenize_tests.txt', + subdir='tokenizedata'), support.findfile('tokenize_tests-no-coding-cookie-' - 'and-utf8-bom-sig-only.txt')] + 'and-utf8-bom-sig-only.txt', + subdir='tokenizedata')] for filetype in (GzipTest, Bz2Test, LzmaTest): if not filetype.open: continue @@ -3808,34 +3816,55 @@ def test_modes(self): arc.add('read_group_only', mode='?---r-----') arc.add('no_bits', mode='?---------') arc.add('dir/', mode='?---rwsrwt') + arc.add('dir_all_bits/', mode='?rwsrwsrwt') - # On some systems, setting the sticky bit is a no-op. - # Check if that's the case. + # On some systems, setting the uid, gid, and/or sticky bit is a no-ops. + # Check which bits we can set, so we can compare tarfile machinery to + # a simple chmod. tmp_filename = os.path.join(TEMPDIR, "tmp.file") with open(tmp_filename, 'w'): pass - os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX) - have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX) - os.unlink(tmp_filename) + try: + new_mode = (os.stat(tmp_filename).st_mode + | stat.S_ISVTX | stat.S_ISGID | stat.S_ISUID) + try: + os.chmod(tmp_filename, new_mode) + except OSError as exc: + if exc.errno == getattr(errno, "EFTYPE", 0): + # gh-108948: On FreeBSD, regular users cannot set + # the sticky bit. + self.skipTest("chmod() failed with EFTYPE: " + "regular users cannot set sticky bit") + else: + raise + + got_mode = os.stat(tmp_filename).st_mode + _t_file = 't' if (got_mode & stat.S_ISVTX) else 'x' + _suid_file = 's' if (got_mode & stat.S_ISUID) else 'x' + _sgid_file = 's' if (got_mode & stat.S_ISGID) else 'x' + finally: + os.unlink(tmp_filename) os.mkdir(tmp_filename) - os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX) - have_sticky_dirs = (os.stat(tmp_filename).st_mode & stat.S_ISVTX) + new_mode = (os.stat(tmp_filename).st_mode + | stat.S_ISVTX | stat.S_ISGID | stat.S_ISUID) + os.chmod(tmp_filename, new_mode) + got_mode = os.stat(tmp_filename).st_mode + _t_dir = 't' if (got_mode & stat.S_ISVTX) else 'x' + _suid_dir = 's' if (got_mode & stat.S_ISUID) else 'x' + _sgid_dir = 's' if (got_mode & stat.S_ISGID) else 'x' os.rmdir(tmp_filename) with self.check_context(arc.open(), 'fully_trusted'): - if have_sticky_files: - self.expect_file('all_bits', mode='?rwsrwsrwt') - else: - self.expect_file('all_bits', mode='?rwsrwsrwx') + self.expect_file('all_bits', + mode=f'?rw{_suid_file}rw{_sgid_file}rw{_t_file}') self.expect_file('perm_bits', mode='?rwxrwxrwx') self.expect_file('exec_group_other', mode='?rw-rwxrwx') self.expect_file('read_group_only', mode='?---r-----') self.expect_file('no_bits', mode='?---------') - if have_sticky_dirs: - self.expect_file('dir/', mode='?---rwsrwt') - else: - self.expect_file('dir/', mode='?---rwsrwx') + self.expect_file('dir/', mode=f'?---rw{_sgid_dir}rw{_t_dir}') + self.expect_file('dir_all_bits/', + mode=f'?rw{_suid_dir}rw{_sgid_dir}rw{_t_dir}') with self.check_context(arc.open(), 'tar'): self.expect_file('all_bits', mode='?rwxr-xr-x') @@ -3844,6 +3873,7 @@ def test_modes(self): self.expect_file('read_group_only', mode='?---r-----') self.expect_file('no_bits', mode='?---------') self.expect_file('dir/', mode='?---r-xr-x') + self.expect_file('dir_all_bits/', mode='?rwxr-xr-x') with self.check_context(arc.open(), 'data'): normal_dir_mode = stat.filemode(stat.S_IMODE( @@ -3854,6 +3884,7 @@ def test_modes(self): self.expect_file('read_group_only', mode='?rw-r-----') self.expect_file('no_bits', mode='?rw-------') self.expect_file('dir/', mode=normal_dir_mode) + self.expect_file('dir_all_bits/', mode=normal_dir_mode) def test_pipe(self): # Test handling of a special file diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index db08fb1c7f2a42..1673507e2f7c91 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -1834,9 +1834,25 @@ def test_modes(self): d.cleanup() self.assertFalse(os.path.exists(d.name)) - @unittest.skipUnless(hasattr(os, 'chflags'), 'requires os.lchflags') + @unittest.skipUnless(hasattr(os, 'chflags'), 'requires os.chflags') def test_flags(self): flags = stat.UF_IMMUTABLE | stat.UF_NOUNLINK + + # skip the test if these flags are not supported (ex: FreeBSD 13) + filename = os_helper.TESTFN + try: + open(filename, "w").close() + try: + os.chflags(filename, flags) + except OSError as exc: + # "OSError: [Errno 45] Operation not supported" + self.skipTest(f"chflags() doesn't support " + f"UF_IMMUTABLE|UF_NOUNLINK: {exc}") + else: + os.chflags(filename, 0) + finally: + os_helper.unlink(filename) + d = self.do_create(recurse=3, dirs=2, files=2) with d: # Change files and directories flags recursively. diff --git a/Lib/test/test_timeout.py b/Lib/test/test_timeout.py index 30e843a423a777..35ff56f1a5ee09 100644 --- a/Lib/test/test_timeout.py +++ b/Lib/test/test_timeout.py @@ -148,13 +148,12 @@ def setUp(self): def tearDown(self): self.sock.close() - @unittest.skipIf(True, 'need to replace these hosts; see bpo-35518') def testConnectTimeout(self): # Testing connect timeout is tricky: we need to have IP connectivity # to a host that silently drops our packets. We can't simulate this # from Python because it's a function of the underlying TCP/IP stack. - # So, the following Snakebite host has been defined: - blackhole = resolve_address('blackhole.snakebite.net', 56666) + # So, the following port on the pythontest.net host has been defined: + blackhole = resolve_address('pythontest.net', 56666) # Blackhole has been configured to silently drop any incoming packets. # No RSTs (for TCP) or ICMP UNREACH (for UDP/ICMP) will be sent back @@ -166,7 +165,7 @@ def testConnectTimeout(self): # to firewalling or general network configuration. In order to improve # our confidence in testing the blackhole, a corresponding 'whitehole' # has also been set up using one port higher: - whitehole = resolve_address('whitehole.snakebite.net', 56667) + whitehole = resolve_address('pythontest.net', 56667) # This address has been configured to immediately drop any incoming # packets as well, but it does it respectfully with regards to the @@ -180,20 +179,15 @@ def testConnectTimeout(self): # timeframe). # For the records, the whitehole/blackhole configuration has been set - # up using the 'pf' firewall (available on BSDs), using the following: + # up using the 'iptables' firewall, using the following rules: # - # ext_if="bge0" - # - # blackhole_ip="35.8.247.6" - # whitehole_ip="35.8.247.6" - # blackhole_port="56666" - # whitehole_port="56667" - # - # block return in log quick on $ext_if proto { tcp udp } \ - # from any to $whitehole_ip port $whitehole_port - # block drop in log quick on $ext_if proto { tcp udp } \ - # from any to $blackhole_ip port $blackhole_port + # -A INPUT -p tcp --destination-port 56666 -j DROP + # -A INPUT -p udp --destination-port 56666 -j DROP + # -A INPUT -p tcp --destination-port 56667 -j REJECT + # -A INPUT -p udp --destination-port 56667 -j REJECT # + # See https://github.com/python/psf-salt/blob/main/pillar/base/firewall/snakebite.sls + # for the current configuration. skip = True sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) diff --git a/Lib/test/test_tkinter/support.py b/Lib/test/test_tkinter/support.py index 10e64bf40a4afa..a37705f0ae6feb 100644 --- a/Lib/test/test_tkinter/support.py +++ b/Lib/test/test_tkinter/support.py @@ -1,6 +1,5 @@ import functools import tkinter -import unittest class AbstractTkTest: diff --git a/Lib/test/test_tokenize.py b/Lib/test/test_tokenize.py index 7863e27fccd972..94fb6d933de114 100644 --- a/Lib/test/test_tokenize.py +++ b/Lib/test/test_tokenize.py @@ -1200,7 +1200,7 @@ class TestTokenizerAdheresToPep0263(TestCase): """ def _testFile(self, filename): - path = os.path.join(os.path.dirname(__file__), filename) + path = os.path.join(os.path.dirname(__file__), 'tokenizedata', filename) with open(path, 'rb') as f: TestRoundtrip.check_roundtrip(self, f) @@ -1794,7 +1794,7 @@ def test_roundtrip(self): self.check_roundtrip("if x == 1 : \n" " print(x)\n") - fn = support.findfile("tokenize_tests.txt") + fn = support.findfile("tokenize_tests.txt", subdir="tokenizedata") with open(fn, 'rb') as f: self.check_roundtrip(f) self.check_roundtrip("if x == 1:\n" @@ -1849,8 +1849,7 @@ def test_random_files(self): # pass the '-ucpu' option to process the full directory. import glob, random - fn = support.findfile("tokenize_tests.txt") - tempdir = os.path.dirname(fn) or os.curdir + tempdir = os.path.dirname(__file__) or os.curdir testfiles = glob.glob(os.path.join(glob.escape(tempdir), "test*.py")) # Tokenize is broken on test_pep3131.py because regular expressions are @@ -1860,7 +1859,7 @@ def test_random_files(self): testfiles.remove(os.path.join(tempdir, "test_unicode_identifiers.py")) - # TODO: Remove this once we can unparse PEP 701 syntax + # TODO: Remove this once we can untokenize PEP 701 syntax testfiles.remove(os.path.join(tempdir, "test_fstring.py")) for f in ('buffer', 'builtin', 'fileio', 'inspect', 'os', 'platform', 'sys'): diff --git a/Lib/test/test_tomllib/test_misc.py b/Lib/test/test_tomllib/test_misc.py index a477a219fd9ebd..9e677a337a2835 100644 --- a/Lib/test/test_tomllib/test_misc.py +++ b/Lib/test/test_tomllib/test_misc.py @@ -9,6 +9,7 @@ import sys import tempfile import unittest +from test import support from . import tomllib @@ -92,13 +93,23 @@ def test_deepcopy(self): self.assertEqual(obj_copy, expected_obj) def test_inline_array_recursion_limit(self): - # 465 with default recursion limit - nest_count = int(sys.getrecursionlimit() * 0.465) - recursive_array_toml = "arr = " + nest_count * "[" + nest_count * "]" - tomllib.loads(recursive_array_toml) + with support.infinite_recursion(max_depth=100): + available = support.get_recursion_available() + nest_count = (available // 2) - 2 + # Add details if the test fails + with self.subTest(limit=sys.getrecursionlimit(), + available=available, + nest_count=nest_count): + recursive_array_toml = "arr = " + nest_count * "[" + nest_count * "]" + tomllib.loads(recursive_array_toml) def test_inline_table_recursion_limit(self): - # 310 with default recursion limit - nest_count = int(sys.getrecursionlimit() * 0.31) - recursive_table_toml = nest_count * "key = {" + nest_count * "}" - tomllib.loads(recursive_table_toml) + with support.infinite_recursion(max_depth=100): + available = support.get_recursion_available() + nest_count = (available // 3) - 1 + # Add details if the test fails + with self.subTest(limit=sys.getrecursionlimit(), + available=available, + nest_count=nest_count): + recursive_table_toml = nest_count * "key = {" + nest_count * "}" + tomllib.loads(recursive_table_toml) diff --git a/Lib/test/test_tools/test_freeze.py b/Lib/test/test_tools/test_freeze.py index 922e74b441457a..671ec2961e7f8f 100644 --- a/Lib/test/test_tools/test_freeze.py +++ b/Lib/test/test_tools/test_freeze.py @@ -15,6 +15,10 @@ @support.requires_zlib() @unittest.skipIf(sys.platform.startswith('win'), 'not supported on Windows') @support.skip_if_buildbot('not all buildbots have enough space') +# gh-103053: Skip test if Python is built with Profile Guided Optimization +# (PGO), since the test is just too slow in this case. +@unittest.skipIf(support.check_cflags_pgo(), + 'test is too slow with PGO') class TestFreeze(unittest.TestCase): @support.requires_resource('cpu') # Building Python is slow diff --git a/Lib/test/test_tools/test_reindent.py b/Lib/test/test_tools/test_reindent.py index 3b0c793a38e4da..64e31c2b7703c0 100644 --- a/Lib/test/test_tools/test_reindent.py +++ b/Lib/test/test_tools/test_reindent.py @@ -25,7 +25,7 @@ def test_help(self): self.assertGreater(err, b'') def test_reindent_file_with_bad_encoding(self): - bad_coding_path = findfile('bad_coding.py') + bad_coding_path = findfile('bad_coding.py', subdir='tokenizedata') rc, out, err = assert_python_ok(self.script, '-r', bad_coding_path) self.assertEqual(out, b'') self.assertNotEqual(err, b'') diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py index d1ef005a4314ed..c1e289bcaff9e5 100644 --- a/Lib/test/test_trace.py +++ b/Lib/test/test_trace.py @@ -360,9 +360,14 @@ def tearDown(self): rmtree(TESTFN) unlink(TESTFN) - def _coverage(self, tracer, - cmd='import test.support, test.test_pprint;' - 'test.support.run_unittest(test.test_pprint.QueryTestCase)'): + DEFAULT_SCRIPT = '''if True: + import unittest + from test.test_pprint import QueryTestCase + loader = unittest.TestLoader() + tests = loader.loadTestsFromTestCase(QueryTestCase) + tests(unittest.TestResult()) + ''' + def _coverage(self, tracer, cmd=DEFAULT_SCRIPT): tracer.run(cmd) r = tracer.results() r.write_results(show_missing=True, summary=True, coverdir=TESTFN) diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index 316ade2171e94f..aa8405bd25d120 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -596,6 +596,24 @@ def f_with_binary_operator(): result_lines = self.get_exception(f_with_binary_operator) self.assertEqual(result_lines, expected_error.splitlines()) + def test_caret_for_binary_operators_with_spaces_and_parenthesis(self): + def f_with_binary_operator(): + a = 1 + b = "" + return ( a ) + b + + lineno_f = f_with_binary_operator.__code__.co_firstlineno + expected_error = ( + 'Traceback (most recent call last):\n' + f' File "{__file__}", line {self.callable_line}, in get_exception\n' + ' callable()\n' + f' File "{__file__}", line {lineno_f+3}, in f_with_binary_operator\n' + ' return ( a ) + b\n' + ' ~~~~~~~~~~^~~\n' + ) + result_lines = self.get_exception(f_with_binary_operator) + self.assertEqual(result_lines, expected_error.splitlines()) + def test_caret_for_subscript(self): def f_with_subscript(): some_dict = {'x': {'y': None}} @@ -630,6 +648,24 @@ def f_with_subscript(): result_lines = self.get_exception(f_with_subscript) self.assertEqual(result_lines, expected_error.splitlines()) + def test_caret_for_subscript_with_spaces_and_parenthesis(self): + def f_with_binary_operator(): + a = [] + b = c = 1 + return b [ a ] + c + + lineno_f = f_with_binary_operator.__code__.co_firstlineno + expected_error = ( + 'Traceback (most recent call last):\n' + f' File "{__file__}", line {self.callable_line}, in get_exception\n' + ' callable()\n' + f' File "{__file__}", line {lineno_f+3}, in f_with_binary_operator\n' + ' return b [ a ] + c\n' + ' ~~~~~~^^^^^^^^^\n' + ) + result_lines = self.get_exception(f_with_binary_operator) + self.assertEqual(result_lines, expected_error.splitlines()) + def test_traceback_specialization_with_syntax_error(self): bytecode = compile("1 / 0 / 1 / 2\n", TESTFN, "exec") @@ -1563,27 +1599,28 @@ def __repr__(self): err_msg = "b'please do not show me as numbers'" self.assertEqual(self.get_report(e), vanilla + err_msg + '\n') - def test_exception_with_note_with_multiple_notes(self): - e = ValueError(42) - vanilla = self.get_report(e) + def test_exception_with_multiple_notes(self): + for e in [ValueError(42), SyntaxError('bad syntax')]: + with self.subTest(e=e): + vanilla = self.get_report(e) - e.add_note('Note 1') - e.add_note('Note 2') - e.add_note('Note 3') + e.add_note('Note 1') + e.add_note('Note 2') + e.add_note('Note 3') - self.assertEqual( - self.get_report(e), - vanilla + 'Note 1\n' + 'Note 2\n' + 'Note 3\n') + self.assertEqual( + self.get_report(e), + vanilla + 'Note 1\n' + 'Note 2\n' + 'Note 3\n') - del e.__notes__ - e.add_note('Note 4') - del e.__notes__ - e.add_note('Note 5') - e.add_note('Note 6') + del e.__notes__ + e.add_note('Note 4') + del e.__notes__ + e.add_note('Note 5') + e.add_note('Note 6') - self.assertEqual( - self.get_report(e), - vanilla + 'Note 5\n' + 'Note 6\n') + self.assertEqual( + self.get_report(e), + vanilla + 'Note 5\n' + 'Note 6\n') def test_exception_qualname(self): class A: diff --git a/Lib/test/test_type_cache.py b/Lib/test/test_type_cache.py index 24f83cd3e172c7..72587ecc11b6f3 100644 --- a/Lib/test/test_type_cache.py +++ b/Lib/test/test_type_cache.py @@ -58,4 +58,4 @@ class C: if __name__ == "__main__": - support.run_unittest(TypeCacheTests) + unittest.main() diff --git a/Lib/test/test_type_params.py b/Lib/test/test_type_params.py index 0045057f181e1c..25ee188731f31f 100644 --- a/Lib/test/test_type_params.py +++ b/Lib/test/test_type_params.py @@ -412,6 +412,99 @@ def test_comprehension_02(self): func, = T.__bound__ self.assertEqual(func(), 1) + def test_gen_exp_in_nested_class(self): + code = """ + from test.test_type_params import make_base + + class C[T]: + T = "class" + class Inner(make_base(T for _ in (1,)), make_base(T)): + pass + """ + C = run_code(code)["C"] + T, = C.__type_params__ + base1, base2 = C.Inner.__bases__ + self.assertEqual(list(base1.__arg__), [T]) + self.assertEqual(base2.__arg__, "class") + + def test_gen_exp_in_nested_generic_class(self): + code = """ + from test.test_type_params import make_base + + class C[T]: + T = "class" + class Inner[U](make_base(T for _ in (1,)), make_base(T)): + pass + """ + with self.assertRaisesRegex(SyntaxError, + "Cannot use comprehension in annotation scope within class scope"): + run_code(code) + + def test_listcomp_in_nested_class(self): + code = """ + from test.test_type_params import make_base + + class C[T]: + T = "class" + class Inner(make_base([T for _ in (1,)]), make_base(T)): + pass + """ + C = run_code(code)["C"] + T, = C.__type_params__ + base1, base2 = C.Inner.__bases__ + self.assertEqual(base1.__arg__, [T]) + self.assertEqual(base2.__arg__, "class") + + def test_listcomp_in_nested_generic_class(self): + code = """ + from test.test_type_params import make_base + + class C[T]: + T = "class" + class Inner[U](make_base([T for _ in (1,)]), make_base(T)): + pass + """ + with self.assertRaisesRegex(SyntaxError, + "Cannot use comprehension in annotation scope within class scope"): + run_code(code) + + def test_gen_exp_in_generic_method(self): + code = """ + class C[T]: + T = "class" + def meth[U](x: (T for _ in (1,)), y: T): + pass + """ + with self.assertRaisesRegex(SyntaxError, + "Cannot use comprehension in annotation scope within class scope"): + run_code(code) + + def test_nested_scope_in_generic_alias(self): + code = """ + class C[T]: + T = "class" + {} + """ + error_cases = [ + "type Alias1[T] = lambda: T", + "type Alias2 = lambda: T", + "type Alias3[T] = (T for _ in (1,))", + "type Alias4 = (T for _ in (1,))", + "type Alias5[T] = [T for _ in (1,)]", + "type Alias6 = [T for _ in (1,)]", + ] + for case in error_cases: + with self.subTest(case=case): + with self.assertRaisesRegex(SyntaxError, + r"Cannot use [a-z]+ in annotation scope within class scope"): + run_code(code.format(case)) + + +def make_base(arg): + class Base: + __arg__ = arg + return Base + def global_generic_func[T](): pass @@ -601,6 +694,19 @@ class Cls: cls = ns["outer"]() self.assertEqual(cls.Alias.__value__, "class") + def test_nested_free(self): + ns = run_code(""" + def f(): + T = str + class C: + T = int + class D[U](T): + x = T + return C + """) + C = ns["f"]() + self.assertIn(int, C.D.__bases__) + self.assertIs(C.D.x, str) class TypeParamsManglingTest(unittest.TestCase): def test_mangling(self): @@ -956,3 +1062,43 @@ class NewStyle[T]: for case in cases: with self.subTest(case=case): weakref.ref(case) + + +class TypeParamsRuntimeTest(unittest.TestCase): + def test_name_error(self): + # gh-109118: This crashed the interpreter due to a refcounting bug + code = """ + class name_2[name_5]: + class name_4[name_5](name_0): + pass + """ + with self.assertRaises(NameError): + run_code(code) + + # Crashed with a slightly different stack trace + code = """ + class name_2[name_5]: + class name_4[name_5: name_5](name_0): + pass + """ + with self.assertRaises(NameError): + run_code(code) + + def test_broken_class_namespace(self): + code = """ + class WeirdMapping(dict): + def __missing__(self, key): + if key == "T": + raise RuntimeError + raise KeyError(key) + + class Meta(type): + def __prepare__(name, bases): + return WeirdMapping() + + class MyClass[V](metaclass=Meta): + class Inner[U](T): + pass + """ + with self.assertRaises(RuntimeError): + run_code(code) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index f2efee90dc0240..c6bff79f903828 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -1900,6 +1900,33 @@ def test_pickle(self): self.assertEqual(ns, ns_roundtrip, pname) + def test_replace(self): + ns = types.SimpleNamespace(x=11, y=22) + + ns2 = copy.replace(ns) + self.assertEqual(ns2, ns) + self.assertIsNot(ns2, ns) + self.assertIs(type(ns2), types.SimpleNamespace) + self.assertEqual(vars(ns2), {'x': 11, 'y': 22}) + ns2.x = 3 + self.assertEqual(ns.x, 11) + ns.x = 4 + self.assertEqual(ns2.x, 3) + + self.assertEqual(vars(copy.replace(ns, x=1)), {'x': 1, 'y': 22}) + self.assertEqual(vars(copy.replace(ns, y=2)), {'x': 4, 'y': 2}) + self.assertEqual(vars(copy.replace(ns, x=1, y=2)), {'x': 1, 'y': 2}) + + def test_replace_subclass(self): + class Spam(types.SimpleNamespace): + pass + + spam = Spam(ham=8, eggs=9) + spam2 = copy.replace(spam, ham=5) + + self.assertIs(type(spam2), Spam) + self.assertEqual(vars(spam2), {'ham': 5, 'eggs': 9}) + def test_fake_namespace_compare(self): # Issue #24257: Incorrect use of PyObject_IsInstance() caused # SystemError. diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 69f5ff913c57bb..9e891f113840be 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -7586,6 +7586,17 @@ def test_total(self): self.assertEqual(Options.__required_keys__, frozenset()) self.assertEqual(Options.__optional_keys__, {'log_level', 'log_path'}) + def test_total_inherits_non_total(self): + class TD1(TypedDict, total=False): + a: int + + self.assertIs(TD1.__total__, False) + + class TD2(TD1): + b: str + + self.assertIs(TD2.__total__, True) + def test_optional_keys(self): class Point2Dor3D(Point2D, total=False): z: int @@ -9362,6 +9373,10 @@ def test_all(self): self.assertIn('SupportsComplex', a) def test_all_exported_names(self): + # ensure all dynamically created objects are actualised + for name in typing.__all__: + getattr(typing, name) + actual_all = set(typing.__all__) computed_all = { k for k, v in vars(typing).items() diff --git a/Lib/test/test_unicode_identifiers.py b/Lib/test/test_unicode_identifiers.py index 5b9ced5d1cb837..63c6c055824b20 100644 --- a/Lib/test/test_unicode_identifiers.py +++ b/Lib/test/test_unicode_identifiers.py @@ -19,7 +19,7 @@ def test_non_bmp_normalized(self): def test_invalid(self): try: - from test import badsyntax_3131 + from test.tokenizedata import badsyntax_3131 except SyntaxError as err: self.assertEqual(str(err), "invalid character '€' (U+20AC) (badsyntax_3131.py, line 2)") diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index 515c3840cb3647..6adf03316ca0bb 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -18,7 +18,7 @@ class UnicodeMethodsTest(unittest.TestCase): # update this, if the database changes - expectedchecksum = 'e708c31c0d51f758adf475cb7201cf80917362be' + expectedchecksum = '63aa77dcb36b0e1df082ee2a6071caeda7f0955e' @requires_resource('cpu') def test_method_checksum(self): @@ -71,7 +71,7 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): # Update this if the database changes. Make sure to do a full rebuild # (e.g. 'make distclean && make') to get the correct checksum. - expectedchecksum = '26ff0d31c14194b4606a5b3a81ac36df3a14e331' + expectedchecksum = '232affd2a50ec4bd69d2482aa0291385cbdefaba' @requires_resource('cpu') def test_function_checksum(self): diff --git a/Lib/test/test_unittest/test_discovery.py b/Lib/test/test_unittest/test_discovery.py index 946fa1258ea25e..dcb72d73efceab 100644 --- a/Lib/test/test_unittest/test_discovery.py +++ b/Lib/test/test_unittest/test_discovery.py @@ -6,7 +6,6 @@ import pickle from test import support from test.support import import_helper -import test.test_importlib.util import unittest import unittest.mock @@ -572,7 +571,7 @@ def _get_module_from_name(name): result = unittest.TestResult() suite.run(result) self.assertEqual(len(result.skipped), 1) - self.assertEqual(result.testsRun, 1) + self.assertEqual(result.testsRun, 0) self.assertEqual(import_calls, ['my_package']) # Check picklability @@ -826,6 +825,8 @@ def restore(): 'as dotted module names') def test_discovery_failed_discovery(self): + from test.test_importlib import util + loader = unittest.TestLoader() package = types.ModuleType('package') @@ -837,7 +838,7 @@ def _import(packagename, *args, **kwargs): # Since loader.discover() can modify sys.path, restore it when done. with import_helper.DirsOnSysPath(): # Make sure to remove 'package' from sys.modules when done. - with test.test_importlib.util.uncache('package'): + with util.uncache('package'): with self.assertRaises(TypeError) as cm: loader.discover('package') self.assertEqual(str(cm.exception), diff --git a/Lib/test/test_unittest/test_loader.py b/Lib/test/test_unittest/test_loader.py index f32450c9223d8b..83dd25ca54623f 100644 --- a/Lib/test/test_unittest/test_loader.py +++ b/Lib/test/test_unittest/test_loader.py @@ -82,6 +82,22 @@ def runTest(self): self.assertIsInstance(suite, loader.suiteClass) self.assertEqual(list(suite), [Foo('runTest')]) + # "Do not load any tests from `TestCase` class itself." + def test_loadTestsFromTestCase__from_TestCase(self): + loader = unittest.TestLoader() + + suite = loader.loadTestsFromTestCase(unittest.TestCase) + self.assertIsInstance(suite, loader.suiteClass) + self.assertEqual(list(suite), []) + + # "Do not load any tests from `FunctionTestCase` class." + def test_loadTestsFromTestCase__from_FunctionTestCase(self): + loader = unittest.TestLoader() + + suite = loader.loadTestsFromTestCase(unittest.FunctionTestCase) + self.assertIsInstance(suite, loader.suiteClass) + self.assertEqual(list(suite), []) + ################################################################ ### /Tests for TestLoader.loadTestsFromTestCase @@ -103,6 +119,19 @@ def test(self): expected = [loader.suiteClass([MyTestCase('test')])] self.assertEqual(list(suite), expected) + # "This test ensures that internal `TestCase` subclasses are not loaded" + def test_loadTestsFromModule__TestCase_subclass_internals(self): + # See https://github.com/python/cpython/issues/84867 + m = types.ModuleType('m') + # Simulate imported names: + m.TestCase = unittest.TestCase + m.FunctionTestCase = unittest.FunctionTestCase + + loader = unittest.TestLoader() + suite = loader.loadTestsFromModule(m) + self.assertIsInstance(suite, loader.suiteClass) + self.assertEqual(list(suite), []) + # "This method searches `module` for classes derived from TestCase" # # What happens if no tests are found (no TestCase instances)? diff --git a/Lib/test/test_unittest/test_skipping.py b/Lib/test/test_unittest/test_skipping.py index f146dcac18ecc0..1a6af06d32b433 100644 --- a/Lib/test/test_unittest/test_skipping.py +++ b/Lib/test/test_unittest/test_skipping.py @@ -103,16 +103,16 @@ def test_dont_skip(self): pass result = LoggingResult(events) self.assertIs(suite.run(result), result) self.assertEqual(len(result.skipped), 1) - expected = ['startTest', 'addSkip', 'stopTest', - 'startTest', 'addSuccess', 'stopTest'] + expected = ['addSkip', 'stopTest', 'startTest', + 'addSuccess', 'stopTest'] self.assertEqual(events, expected) - self.assertEqual(result.testsRun, 2) + self.assertEqual(result.testsRun, 1) self.assertEqual(result.skipped, [(test_do_skip, "testing")]) self.assertTrue(result.wasSuccessful()) events = [] result = test_do_skip.run() - self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', + self.assertEqual(events, ['startTestRun', 'addSkip', 'stopTest', 'stopTestRun']) self.assertEqual(result.skipped, [(test_do_skip, "testing")]) @@ -135,13 +135,13 @@ def test_1(self): test = Foo("test_1") suite = unittest.TestSuite([test]) self.assertIs(suite.run(result), result) - self.assertEqual(events, ['startTest', 'addSkip', 'stopTest']) + self.assertEqual(events, ['addSkip', 'stopTest']) self.assertEqual(result.skipped, [(test, "testing")]) self.assertEqual(record, []) events = [] result = test.run() - self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip', + self.assertEqual(events, ['startTestRun', 'addSkip', 'stopTest', 'stopTestRun']) self.assertEqual(result.skipped, [(test, "testing")]) self.assertEqual(record, []) diff --git a/Lib/test/test_unittest/testmock/testmock.py b/Lib/test/test_unittest/testmock/testmock.py index bb09913d70b7ca..d23eb87696f406 100644 --- a/Lib/test/test_unittest/testmock/testmock.py +++ b/Lib/test/test_unittest/testmock/testmock.py @@ -2270,7 +2270,7 @@ def test_misspelled_arguments(self): class Foo(): one = 'one' # patch, patch.object and create_autospec need to check for misspelled - # arguments explicitly and throw a RuntimError if found. + # arguments explicitly and throw a RuntimeError if found. with self.assertRaises(RuntimeError): with patch(f'{__name__}.Something.meth', autospect=True): pass with self.assertRaises(RuntimeError): diff --git a/Lib/test/test_unittest/testmock/testthreadingmock.py b/Lib/test/test_unittest/testmock/testthreadingmock.py index 94e71921d9bc03..a02b532ed447cd 100644 --- a/Lib/test/test_unittest/testmock/testthreadingmock.py +++ b/Lib/test/test_unittest/testmock/testthreadingmock.py @@ -3,7 +3,7 @@ import concurrent.futures from test.support import threading_helper -from unittest.mock import patch, ThreadingMock, call +from unittest.mock import patch, ThreadingMock threading_helper.requires_working_threading(module=True) diff --git a/Lib/test/test_unpack.py b/Lib/test/test_unpack.py index f5ca1d455b5c6f..515ec128a08a9c 100644 --- a/Lib/test/test_unpack.py +++ b/Lib/test/test_unpack.py @@ -162,7 +162,7 @@ def test_extended_oparg_not_ignored(self): ns = {} exec(code, ns) unpack_400 = ns["unpack_400"] - # Warm up the the function for quickening (PEP 659) + # Warm up the function for quickening (PEP 659) for _ in range(30): y = unpack_400(range(400)) self.assertEqual(y, 399) diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py index b3efb61e83049e..bdf7b0588bee67 100644 --- a/Lib/test/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -197,6 +197,10 @@ def test_fstrings_complicated(self): self.check_ast_roundtrip('''f"a\\r\\nb"''') self.check_ast_roundtrip('''f"\\u2028{'x'}"''') + def test_fstrings_pep701(self): + self.check_ast_roundtrip('f" something { my_dict["key"] } something else "') + self.check_ast_roundtrip('f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"') + def test_strings(self): self.check_ast_roundtrip("u'foo'") self.check_ast_roundtrip("r'foo'") @@ -378,8 +382,15 @@ def test_invalid_fstring_value(self): ) ) - def test_invalid_fstring_backslash(self): - self.check_invalid(ast.FormattedValue(value=ast.Constant(value="\\\\"))) + def test_fstring_backslash(self): + # valid since Python 3.12 + self.assertEqual(ast.unparse( + ast.FormattedValue( + value=ast.Constant(value="\\\\"), + conversion=-1, + format_spec=None, + ) + ), "{'\\\\\\\\'}") def test_invalid_yield_from(self): self.check_invalid(ast.YieldFrom(value=None)) @@ -502,11 +513,11 @@ def test_class_bases_and_keywords(self): self.check_src_roundtrip("class X(*args, **kwargs):\n pass") def test_fstrings(self): - self.check_src_roundtrip('''f\'\'\'-{f"""*{f"+{f'.{x}.'}+"}*"""}-\'\'\'''') - self.check_src_roundtrip('''f"\\u2028{'x'}"''') + self.check_src_roundtrip("f'-{f'*{f'+{f'.{x}.'}+'}*'}-'") + self.check_src_roundtrip("f'\\u2028{'x'}'") self.check_src_roundtrip(r"f'{x}\n'") - self.check_src_roundtrip('''f''\'{"""\n"""}\\n''\'''') - self.check_src_roundtrip('''f''\'{f"""{x}\n"""}\\n''\'''') + self.check_src_roundtrip("f'{'\\n'}\\n'") + self.check_src_roundtrip("f'{f'{x}\\n'}\\n'") def test_docstrings(self): docstrings = ( @@ -624,6 +635,20 @@ def test_star_expr_assign_target_multiple(self): self.check_src_roundtrip("[a, b] = [c, d] = [e, f] = g") self.check_src_roundtrip("a, b = [c, d] = e, f = g") + def test_multiquote_joined_string(self): + self.check_ast_roundtrip("f\"'''{1}\\\"\\\"\\\"\" ") + self.check_ast_roundtrip("""f"'''{1}""\\"" """) + self.check_ast_roundtrip("""f'""\"{1}''' """) + self.check_ast_roundtrip("""f'""\"{1}""\\"' """) + + self.check_ast_roundtrip("""f"'''{"\\n"}""\\"" """) + self.check_ast_roundtrip("""f'""\"{"\\n"}''' """) + self.check_ast_roundtrip("""f'""\"{"\\n"}""\\"' """) + + self.check_ast_roundtrip("""f'''""\"''\\'{"\\n"}''' """) + self.check_ast_roundtrip("""f'''""\"''\\'{"\\n\\"'"}''' """) + self.check_ast_roundtrip("""f'''""\"''\\'{""\"\\n\\"'''""\" '''\\n'''}''' """) + class ManualASTCreationTestCase(unittest.TestCase): """Test that AST nodes created without a type_params field unparse correctly.""" diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py index 0dcdbac76b50f2..50c491a3cfd3d0 100644 --- a/Lib/test/test_urllib2_localnet.py +++ b/Lib/test/test_urllib2_localnet.py @@ -21,9 +21,9 @@ here = os.path.dirname(__file__) # Self-signed cert file for 'localhost' -CERT_localhost = os.path.join(here, 'keycert.pem') +CERT_localhost = os.path.join(here, 'certdata', 'keycert.pem') # Self-signed cert file for 'fakehostname' -CERT_fakehostname = os.path.join(here, 'keycert2.pem') +CERT_fakehostname = os.path.join(here, 'certdata', 'keycert2.pem') # Loopback http server infrastructure diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py index d8d882b2d33589..f0874d8d3ce463 100644 --- a/Lib/test/test_urllib2net.py +++ b/Lib/test/test_urllib2net.py @@ -133,6 +133,7 @@ def setUp(self): # XXX The rest of these tests aren't very good -- they don't check much. # They do sometimes catch some major disasters, though. + @support.requires_resource('walltime') def test_ftp(self): # Testing the same URL twice exercises the caching in CacheFTPHandler urls = [ @@ -196,6 +197,7 @@ def test_urlwithfrag(self): self.assertEqual(res.geturl(), "http://www.pythontest.net/index.html#frag") + @support.requires_resource('walltime') def test_redirect_url_withfrag(self): redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/" with socket_helper.transient_internet(redirect_url_with_frag): @@ -334,6 +336,7 @@ def test_http_timeout(self): FTP_HOST = 'ftp://www.pythontest.net/' + @support.requires_resource('walltime') def test_ftp_basic(self): self.assertIsNone(socket.getdefaulttimeout()) with socket_helper.transient_internet(self.FTP_HOST, timeout=None): @@ -352,6 +355,7 @@ def test_ftp_default_timeout(self): socket.setdefaulttimeout(None) self.assertEqual(u.fp.fp.raw._sock.gettimeout(), 60) + @support.requires_resource('walltime') def test_ftp_no_timeout(self): self.assertIsNone(socket.getdefaulttimeout()) with socket_helper.transient_internet(self.FTP_HOST): @@ -363,6 +367,7 @@ def test_ftp_no_timeout(self): socket.setdefaulttimeout(None) self.assertIsNone(u.fp.fp.raw._sock.gettimeout()) + @support.requires_resource('walltime') def test_ftp_timeout(self): with socket_helper.transient_internet(self.FTP_HOST): u = _urlopen_with_retry(self.FTP_HOST, timeout=60) diff --git a/Lib/test/test_urllibnet.py b/Lib/test/test_urllibnet.py index 773101ce41f602..49a3b5afdebb2f 100644 --- a/Lib/test/test_urllibnet.py +++ b/Lib/test/test_urllibnet.py @@ -109,6 +109,7 @@ def test_getcode(self): open_url.close() self.assertEqual(code, 404) + @support.requires_resource('walltime') def test_bad_address(self): # Make sure proper exception is raised when connecting to a bogus # address. @@ -191,6 +192,7 @@ def test_header(self): logo = "http://www.pythontest.net/" + @support.requires_resource('walltime') def test_data_header(self): with self.urlretrieve(self.logo) as (file_location, fileheaders): datevalue = fileheaders.get('Date') diff --git a/Lib/test/test_utf8source.py b/Lib/test/test_utf8source.py index 97dced8a622889..c42b6aaaab579d 100644 --- a/Lib/test/test_utf8source.py +++ b/Lib/test/test_utf8source.py @@ -1,5 +1,3 @@ -# This file is marked as binary in the CVS, to prevent MacCVS from recoding it. - import unittest class PEP3120Test(unittest.TestCase): @@ -16,7 +14,7 @@ def test_pep3120(self): def test_badsyntax(self): try: - import test.badsyntax_pep3120 + import test.tokenizedata.badsyntax_pep3120 except SyntaxError as msg: msg = str(msg).lower() self.assertTrue('utf-8' in msg) diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index aa6a8fbf8cfd17..a894bb10bd04da 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -82,6 +82,13 @@ def setUp(self): def tearDown(self): rmtree(self.env_dir) + def envpy(self, *, real_env_dir=False): + if real_env_dir: + env_dir = os.path.realpath(self.env_dir) + else: + env_dir = self.env_dir + return os.path.join(env_dir, self.bindir, self.exe) + def run_with_capture(self, func, *args, **kwargs): with captured_stdout() as output: with captured_stderr() as error: @@ -138,7 +145,8 @@ def _check_output_of_default_create(self): self.assertIn('executable = %s' % os.path.realpath(sys.executable), data) copies = '' if os.name=='nt' else ' --copies' - cmd = f'command = {sys.executable} -m venv{copies} --without-pip {self.env_dir}' + cmd = (f'command = {sys.executable} -m venv{copies} --without-pip ' + f'--without-scm-ignore-files {self.env_dir}') self.assertIn(cmd, data) fn = self.get_env_file(self.bindir, self.exe) if not os.path.exists(fn): # diagnostics for Windows buildbot failures @@ -148,35 +156,37 @@ def _check_output_of_default_create(self): self.assertTrue(os.path.exists(fn), 'File %r should exist.' % fn) def test_config_file_command_key(self): - attrs = [ - (None, None), - ('symlinks', '--copies'), - ('with_pip', '--without-pip'), - ('system_site_packages', '--system-site-packages'), - ('clear', '--clear'), - ('upgrade', '--upgrade'), - ('upgrade_deps', '--upgrade-deps'), - ('prompt', '--prompt'), + options = [ + (None, None, None), # Default case. + ('--copies', 'symlinks', False), + ('--without-pip', 'with_pip', False), + ('--system-site-packages', 'system_site_packages', True), + ('--clear', 'clear', True), + ('--upgrade', 'upgrade', True), + ('--upgrade-deps', 'upgrade_deps', True), + ('--prompt', 'prompt', True), + ('--without-scm-ignore-files', 'scm_ignore_files', frozenset()), ] - for attr, opt in attrs: - rmtree(self.env_dir) - if not attr: - b = venv.EnvBuilder() - else: - b = venv.EnvBuilder( - **{attr: False if attr in ('with_pip', 'symlinks') else True}) - b.upgrade_dependencies = Mock() # avoid pip command to upgrade deps - b._setup_pip = Mock() # avoid pip setup - self.run_with_capture(b.create, self.env_dir) - data = self.get_text_file_contents('pyvenv.cfg') - if not attr: - for opt in ('--system-site-packages', '--clear', '--upgrade', - '--upgrade-deps', '--prompt'): - self.assertNotRegex(data, rf'command = .* {opt}') - elif os.name=='nt' and attr=='symlinks': - pass - else: - self.assertRegex(data, rf'command = .* {opt}') + for opt, attr, value in options: + with self.subTest(opt=opt, attr=attr, value=value): + rmtree(self.env_dir) + if not attr: + kwargs = {} + else: + kwargs = {attr: value} + b = venv.EnvBuilder(**kwargs) + b.upgrade_dependencies = Mock() # avoid pip command to upgrade deps + b._setup_pip = Mock() # avoid pip setup + self.run_with_capture(b.create, self.env_dir) + data = self.get_text_file_contents('pyvenv.cfg') + if not attr or opt.endswith('git'): + for opt in ('--system-site-packages', '--clear', '--upgrade', + '--upgrade-deps', '--prompt'): + self.assertNotRegex(data, rf'command = .* {opt}') + elif os.name=='nt' and attr=='symlinks': + pass + else: + self.assertRegex(data, rf'command = .* {opt}') def test_prompt(self): env_name = os.path.split(self.env_dir)[1] @@ -243,8 +253,7 @@ def test_prefixes(self): # check a venv's prefixes rmtree(self.env_dir) self.run_with_capture(venv.create, self.env_dir) - envpy = os.path.join(self.env_dir, self.bindir, self.exe) - cmd = [envpy, '-c', None] + cmd = [self.envpy(), '-c', None] for prefix, expected in ( ('prefix', self.env_dir), ('exec_prefix', self.env_dir), @@ -261,8 +270,7 @@ def test_sysconfig(self): """ rmtree(self.env_dir) self.run_with_capture(venv.create, self.env_dir, symlinks=False) - envpy = os.path.join(self.env_dir, self.bindir, self.exe) - cmd = [envpy, '-c', None] + cmd = [self.envpy(), '-c', None] for call, expected in ( # installation scheme ('get_preferred_scheme("prefix")', 'venv'), @@ -284,8 +292,7 @@ def test_sysconfig_symlinks(self): """ rmtree(self.env_dir) self.run_with_capture(venv.create, self.env_dir, symlinks=True) - envpy = os.path.join(self.env_dir, self.bindir, self.exe) - cmd = [envpy, '-c', None] + cmd = [self.envpy(), '-c', None] for call, expected in ( # installation scheme ('get_preferred_scheme("prefix")', 'venv'), @@ -424,8 +431,7 @@ def test_executable(self): """ rmtree(self.env_dir) self.run_with_capture(venv.create, self.env_dir) - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) + envpy = self.envpy(real_env_dir=True) out, err = check_output([envpy, '-c', 'import sys; print(sys.executable)']) self.assertEqual(out.strip(), envpy.encode()) @@ -438,8 +444,7 @@ def test_executable_symlinks(self): rmtree(self.env_dir) builder = venv.EnvBuilder(clear=True, symlinks=True) builder.create(self.env_dir) - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) + envpy = self.envpy(real_env_dir=True) out, err = check_output([envpy, '-c', 'import sys; print(sys.executable)']) self.assertEqual(out.strip(), envpy.encode()) @@ -454,7 +459,6 @@ def test_unicode_in_batch_file(self): builder = venv.EnvBuilder(clear=True) builder.create(env_dir) activate = os.path.join(env_dir, self.bindir, 'activate.bat') - envpy = os.path.join(env_dir, self.bindir, self.exe) out, err = check_output( [activate, '&', self.exe, '-c', 'print(0)'], encoding='oem', @@ -473,9 +477,7 @@ def test_multiprocessing(self): rmtree(self.env_dir) self.run_with_capture(venv.create, self.env_dir) - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) - out, err = check_output([envpy, '-c', + out, err = check_output([self.envpy(real_env_dir=True), '-c', 'from multiprocessing import Pool; ' 'pool = Pool(1); ' 'print(pool.apply_async("Python".lower).get(3)); ' @@ -491,10 +493,8 @@ def test_multiprocessing_recursion(self): rmtree(self.env_dir) self.run_with_capture(venv.create, self.env_dir) - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) script = os.path.join(TEST_HOME_DIR, '_test_venv_multiprocessing.py') - subprocess.check_call([envpy, script]) + subprocess.check_call([self.envpy(real_env_dir=True), script]) @unittest.skipIf(os.name == 'nt', 'not relevant on Windows') def test_deactivate_with_strict_bash_opts(self): @@ -521,9 +521,7 @@ def test_macos_env(self): builder = venv.EnvBuilder() builder.create(self.env_dir) - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) - out, err = check_output([envpy, '-c', + out, err = check_output([self.envpy(real_env_dir=True), '-c', 'import os; print("__PYVENV_LAUNCHER__" in os.environ)']) self.assertEqual(out.strip(), 'False'.encode()) @@ -585,6 +583,7 @@ def test_zippath_from_non_installed_posix(self): "-m", "venv", "--without-pip", + "--without-scm-ignore-files", self.env_dir] # Our fake non-installed python is not fully functional because # it cannot find the extensions. Set PYTHONPATH so it can run the @@ -609,13 +608,13 @@ def test_zippath_from_non_installed_posix(self): # prevent https://github.com/python/cpython/issues/104839 child_env["ASAN_OPTIONS"] = asan_options subprocess.check_call(cmd, env=child_env) - envpy = os.path.join(self.env_dir, self.bindir, self.exe) # Now check the venv created from the non-installed python has # correct zip path in pythonpath. - cmd = [envpy, '-S', '-c', 'import sys; print(sys.path)'] + cmd = [self.envpy(), '-S', '-c', 'import sys; print(sys.path)'] out, err = check_output(cmd) self.assertTrue(zip_landmark.encode() in out) + @requireVenvCreate def test_activate_shell_script_has_no_dos_newlines(self): """ Test that the `activate` shell script contains no CR LF. @@ -632,13 +631,80 @@ def test_activate_shell_script_has_no_dos_newlines(self): error_message = f"CR LF found in line {i}" self.assertFalse(line.endswith(b'\r\n'), error_message) + @requireVenvCreate + def test_scm_ignore_files_git(self): + """ + Test that a .gitignore file is created when "git" is specified. + The file should contain a `*\n` line. + """ + self.run_with_capture(venv.create, self.env_dir, + scm_ignore_files={'git'}) + file_lines = self.get_text_file_contents('.gitignore').splitlines() + self.assertIn('*', file_lines) + + @requireVenvCreate + def test_create_scm_ignore_files_multiple(self): + """ + Test that ``scm_ignore_files`` can work with multiple SCMs. + """ + bzrignore_name = ".bzrignore" + contents = "# For Bazaar.\n*\n" + + class BzrEnvBuilder(venv.EnvBuilder): + def create_bzr_ignore_file(self, context): + gitignore_path = os.path.join(context.env_dir, bzrignore_name) + with open(gitignore_path, 'w', encoding='utf-8') as file: + file.write(contents) + + builder = BzrEnvBuilder(scm_ignore_files={'git', 'bzr'}) + self.run_with_capture(builder.create, self.env_dir) + + gitignore_lines = self.get_text_file_contents('.gitignore').splitlines() + self.assertIn('*', gitignore_lines) + + bzrignore = self.get_text_file_contents(bzrignore_name) + self.assertEqual(bzrignore, contents) + + @requireVenvCreate + def test_create_scm_ignore_files_empty(self): + """ + Test that no default ignore files are created when ``scm_ignore_files`` + is empty. + """ + # scm_ignore_files is set to frozenset() by default. + self.run_with_capture(venv.create, self.env_dir) + with self.assertRaises(FileNotFoundError): + self.get_text_file_contents('.gitignore') + + self.assertIn("--without-scm-ignore-files", + self.get_text_file_contents('pyvenv.cfg')) + + @requireVenvCreate + def test_cli_with_scm_ignore_files(self): + """ + Test that default SCM ignore files are created by default via the CLI. + """ + self.run_with_capture(venv.main, ['--without-pip', self.env_dir]) + + gitignore_lines = self.get_text_file_contents('.gitignore').splitlines() + self.assertIn('*', gitignore_lines) + + @requireVenvCreate + def test_cli_without_scm_ignore_files(self): + """ + Test that ``--without-scm-ignore-files`` doesn't create SCM ignore files. + """ + args = ['--without-pip', '--without-scm-ignore-files', self.env_dir] + self.run_with_capture(venv.main, args) + + with self.assertRaises(FileNotFoundError): + self.get_text_file_contents('.gitignore') + @requireVenvCreate class EnsurePipTest(BaseTest): """Test venv module installation of pip.""" def assert_pip_not_installed(self): - envpy = os.path.join(os.path.realpath(self.env_dir), - self.bindir, self.exe) - out, err = check_output([envpy, '-c', + out, err = check_output([self.envpy(real_env_dir=True), '-c', 'try:\n import pip\nexcept ImportError:\n print("OK")']) # We force everything to text, so unittest gives the detailed diff # if we get unexpected results @@ -705,9 +771,9 @@ def do_test_with_pip(self, system_site_packages): system_site_packages=system_site_packages, with_pip=True) # Ensure pip is available in the virtual environment - envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe) # Ignore DeprecationWarning since pip code is not part of Python - out, err = check_output([envpy, '-W', 'ignore::DeprecationWarning', + out, err = check_output([self.envpy(real_env_dir=True), + '-W', 'ignore::DeprecationWarning', '-W', 'ignore::ImportWarning', '-I', '-m', 'pip', '--version']) # We force everything to text, so unittest gives the detailed diff @@ -728,7 +794,7 @@ def do_test_with_pip(self, system_site_packages): # It seems ensurepip._uninstall calls subprocesses which do not # inherit the interpreter settings. envvars["PYTHONWARNINGS"] = "ignore" - out, err = check_output([envpy, + out, err = check_output([self.envpy(real_env_dir=True), '-W', 'ignore::DeprecationWarning', '-W', 'ignore::ImportWarning', '-I', '-m', 'ensurepip._uninstall']) diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index b9352cb865d027..6d413aa68a338d 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -365,6 +365,7 @@ def test_path_cache(self): from xml.etree import ElementPath elem = ET.XML(SAMPLE_XML) + ElementPath._cache.clear() for i in range(10): ET.ElementTree(elem).find('./'+str(i)) cache_len_10 = len(ElementPath._cache) for i in range(10): ET.ElementTree(elem).find('./'+str(i)) @@ -3926,8 +3927,9 @@ def test_issue14818(self): # -------------------------------------------------------------------- class NoAcceleratorTest(unittest.TestCase): - def setUp(self): - if not pyET: + @classmethod + def setUpClass(cls): + if ET is not pyET: raise unittest.SkipTest('only for the Python version') # Test that the C accelerator was not imported for pyET @@ -4192,8 +4194,7 @@ def get_option(config, option_name, default=None): # -------------------------------------------------------------------- - -def test_main(module=None): +def setUpModule(module=None): # When invoked without a module, runs the Python ET tests by loading pyET. # Otherwise, uses the given module as the ET. global pyET @@ -4205,63 +4206,30 @@ def test_main(module=None): global ET ET = module - test_classes = [ - ModuleTest, - ElementSlicingTest, - BasicElementTest, - BadElementTest, - BadElementPathTest, - ElementTreeTest, - IOTest, - ParseErrorTest, - XIncludeTest, - ElementTreeTypeTest, - ElementFindTest, - ElementIterTest, - TreeBuilderTest, - XMLParserTest, - XMLPullParserTest, - BugsTest, - KeywordArgsTest, - BoolTest, - C14NTest, - ] - - # These tests will only run for the pure-Python version that doesn't import - # _elementtree. We can't use skipUnless here, because pyET is filled in only - # after the module is loaded. - if pyET is not ET: - test_classes.extend([ - NoAcceleratorTest, - ]) + # don't interfere with subsequent tests + def cleanup(): + global ET, pyET + ET = pyET = None + unittest.addModuleCleanup(cleanup) # Provide default namespace mapping and path cache. from xml.etree import ElementPath nsmap = ET.register_namespace._namespace_map # Copy the default namespace mapping nsmap_copy = nsmap.copy() + unittest.addModuleCleanup(nsmap.update, nsmap_copy) + unittest.addModuleCleanup(nsmap.clear) + # Copy the path cache (should be empty) path_cache = ElementPath._cache + unittest.addModuleCleanup(setattr, ElementPath, "_cache", path_cache) ElementPath._cache = path_cache.copy() + # Align the Comment/PI factories. if hasattr(ET, '_set_factories'): old_factories = ET._set_factories(ET.Comment, ET.PI) - else: - old_factories = None - - try: - support.run_unittest(*test_classes) - finally: - from xml.etree import ElementPath - # Restore mapping and path cache - nsmap.clear() - nsmap.update(nsmap_copy) - ElementPath._cache = path_cache - if old_factories is not None: - ET._set_factories(*old_factories) - # don't interfere with subsequent tests - ET = pyET = None + unittest.addModuleCleanup(ET._set_factories, *old_factories) if __name__ == '__main__': - test_main() + unittest.main() diff --git a/Lib/test/test_xml_etree_c.py b/Lib/test/test_xml_etree_c.py index fd27b575ec8dc9..3a0fc572f457ff 100644 --- a/Lib/test/test_xml_etree_c.py +++ b/Lib/test/test_xml_etree_c.py @@ -254,20 +254,25 @@ def test_element_with_children(self): self.check_sizeof(e, self.elementsize + self.extra + struct.calcsize('8P')) -def test_main(): - from test import test_xml_etree - - # Run the tests specific to the C implementation - support.run_unittest( - MiscTests, - TestAliasWorking, - TestAcceleratorImported, - SizeofTest, - ) - # Run the same test suite as the Python module - test_xml_etree.test_main(module=cET) +def install_tests(): + # Test classes should have __module__ referring to this module. + from test import test_xml_etree + for name, base in vars(test_xml_etree).items(): + if isinstance(base, type) and issubclass(base, unittest.TestCase): + class Temp(base): + pass + Temp.__name__ = Temp.__qualname__ = name + Temp.__module__ = __name__ + assert name not in globals() + globals()[name] = Temp + +install_tests() + +def setUpModule(): + from test import test_xml_etree + test_xml_etree.setUpModule(module=cET) if __name__ == '__main__': - test_main() + unittest.main() diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index edc741dbc60088..6c4b8384a3202e 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -1037,38 +1037,47 @@ def test_path2(self): self.assertEqual(p.add(6,8), 6+8) self.assertRaises(xmlrpclib.Fault, p.pow, 6, 8) + @support.requires_resource('walltime') def test_path3(self): p = xmlrpclib.ServerProxy(URL+"/is/broken") self.assertRaises(xmlrpclib.Fault, p.add, 6, 8) + @support.requires_resource('walltime') def test_invalid_path(self): p = xmlrpclib.ServerProxy(URL+"/invalid") self.assertRaises(xmlrpclib.Fault, p.add, 6, 8) + @support.requires_resource('walltime') def test_path_query_fragment(self): p = xmlrpclib.ServerProxy(URL+"/foo?k=v#frag") self.assertEqual(p.test(), "/foo?k=v#frag") + @support.requires_resource('walltime') def test_path_fragment(self): p = xmlrpclib.ServerProxy(URL+"/foo#frag") self.assertEqual(p.test(), "/foo#frag") + @support.requires_resource('walltime') def test_path_query(self): p = xmlrpclib.ServerProxy(URL+"/foo?k=v") self.assertEqual(p.test(), "/foo?k=v") + @support.requires_resource('walltime') def test_empty_path(self): p = xmlrpclib.ServerProxy(URL) self.assertEqual(p.test(), "/RPC2") + @support.requires_resource('walltime') def test_root_path(self): p = xmlrpclib.ServerProxy(URL + "/") self.assertEqual(p.test(), "/") + @support.requires_resource('walltime') def test_empty_path_query(self): p = xmlrpclib.ServerProxy(URL + "?k=v") self.assertEqual(p.test(), "?k=v") + @support.requires_resource('walltime') def test_empty_path_fragment(self): p = xmlrpclib.ServerProxy(URL + "#frag") self.assertEqual(p.test(), "#frag") diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index 55306c63cd4e16..9a099adc74f4b4 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -3,7 +3,6 @@ from test.support import import_helper import binascii import copy -import os import pickle import random import sys diff --git a/Lib/test/tokenizedata/__init__.py b/Lib/test/tokenizedata/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/Lib/test/bad_coding.py b/Lib/test/tokenizedata/bad_coding.py similarity index 100% rename from Lib/test/bad_coding.py rename to Lib/test/tokenizedata/bad_coding.py diff --git a/Lib/test/bad_coding2.py b/Lib/test/tokenizedata/bad_coding2.py similarity index 100% rename from Lib/test/bad_coding2.py rename to Lib/test/tokenizedata/bad_coding2.py diff --git a/Lib/test/badsyntax_3131.py b/Lib/test/tokenizedata/badsyntax_3131.py similarity index 100% rename from Lib/test/badsyntax_3131.py rename to Lib/test/tokenizedata/badsyntax_3131.py diff --git a/Lib/test/badsyntax_pep3120.py b/Lib/test/tokenizedata/badsyntax_pep3120.py similarity index 100% rename from Lib/test/badsyntax_pep3120.py rename to Lib/test/tokenizedata/badsyntax_pep3120.py diff --git a/Lib/test/coding20731.py b/Lib/test/tokenizedata/coding20731.py similarity index 100% rename from Lib/test/coding20731.py rename to Lib/test/tokenizedata/coding20731.py diff --git a/Lib/test/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt b/Lib/test/tokenizedata/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt similarity index 100% rename from Lib/test/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt rename to Lib/test/tokenizedata/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt diff --git a/Lib/test/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt b/Lib/test/tokenizedata/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt similarity index 100% rename from Lib/test/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt rename to Lib/test/tokenizedata/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt diff --git a/Lib/test/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt b/Lib/test/tokenizedata/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt similarity index 100% rename from Lib/test/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt rename to Lib/test/tokenizedata/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt diff --git a/Lib/test/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt b/Lib/test/tokenizedata/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt similarity index 100% rename from Lib/test/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt rename to Lib/test/tokenizedata/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt diff --git a/Lib/test/tokenize_tests.txt b/Lib/test/tokenizedata/tokenize_tests.txt similarity index 100% rename from Lib/test/tokenize_tests.txt rename to Lib/test/tokenizedata/tokenize_tests.txt diff --git a/Lib/traceback.py b/Lib/traceback.py index 354754b9560a19..67941ff45988c2 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -608,11 +608,21 @@ def _extract_caret_anchors_from_line_segment(segment): and not operator_str[operator_offset + 1].isspace() ): right_anchor += 1 + + while left_anchor < len(segment) and ((ch := segment[left_anchor]).isspace() or ch in ")#"): + left_anchor += 1 + right_anchor += 1 return _Anchors(normalize(left_anchor), normalize(right_anchor)) case ast.Subscript(): - subscript_start = normalize(expr.value.end_col_offset) - subscript_end = normalize(expr.slice.end_col_offset + 1) - return _Anchors(subscript_start, subscript_end) + left_anchor = normalize(expr.value.end_col_offset) + right_anchor = normalize(expr.slice.end_col_offset + 1) + while left_anchor < len(segment) and ((ch := segment[left_anchor]).isspace() or ch != "["): + left_anchor += 1 + while right_anchor < len(segment) and ((ch := segment[right_anchor]).isspace() or ch != "]"): + right_anchor += 1 + if right_anchor < len(segment): + right_anchor += 1 + return _Anchors(left_anchor, right_anchor) return None diff --git a/Lib/typing.py b/Lib/typing.py index 8655b756a9fd13..639be75747dae0 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -23,10 +23,8 @@ from collections import defaultdict import collections.abc import copyreg -import contextlib import functools import operator -import re as stdlib_re # Avoid confusion with the typing.re namespace on <=3.11 import sys import types from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType, GenericAlias @@ -2580,8 +2578,6 @@ class Other(Leaf): # Error reported by type checker KeysView = _alias(collections.abc.KeysView, 1) ItemsView = _alias(collections.abc.ItemsView, 2) ValuesView = _alias(collections.abc.ValuesView, 1) -ContextManager = _alias(contextlib.AbstractContextManager, 1, name='ContextManager') -AsyncContextManager = _alias(contextlib.AbstractAsyncContextManager, 1, name='AsyncContextManager') Dict = _alias(dict, 2, inst=False, name='Dict') DefaultDict = _alias(collections.defaultdict, 2, name='DefaultDict') OrderedDict = _alias(collections.OrderedDict, 2) @@ -2886,8 +2882,7 @@ def __new__(cls, name, bases, ns, total=True): tp_dict.__annotations__ = annotations tp_dict.__required_keys__ = frozenset(required_keys) tp_dict.__optional_keys__ = frozenset(optional_keys) - if not hasattr(tp_dict, '__total__'): - tp_dict.__total__ = total + tp_dict.__total__ = total return tp_dict __call__ = dict # static method @@ -3239,10 +3234,6 @@ def __enter__(self) -> 'TextIO': pass -Pattern = _alias(stdlib_re.Pattern, 1) -Match = _alias(stdlib_re.Match, 1) - - def reveal_type[T](obj: T, /) -> T: """Reveal the inferred type of a variable. @@ -3427,3 +3418,21 @@ def get_protocol_members(tp: type, /) -> frozenset[str]: if not is_protocol(tp): raise TypeError(f'{tp!r} is not a Protocol') return frozenset(tp.__protocol_attrs__) + + +def __getattr__(attr): + """Improve the import time of the typing module. + + Soft-deprecated objects which are costly to create + are only created on-demand here. + """ + if attr in {"Pattern", "Match"}: + import re + obj = _alias(getattr(re, attr), 1) + elif attr in {"ContextManager", "AsyncContextManager"}: + import contextlib + obj = _alias(getattr(contextlib, f"Abstract{attr}"), 1, name=attr) + else: + raise AttributeError(f"module {__name__!r} has no attribute {attr!r}") + globals()[attr] = obj + return obj diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py index 001b640dc43ad6..811557498bb30e 100644 --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -606,7 +606,6 @@ def run(self, result=None): else: stopTestRun = None - result.startTest(self) try: testMethod = getattr(self, self._testMethodName) if (getattr(self.__class__, "__unittest_skip__", False) or @@ -617,6 +616,9 @@ def run(self, result=None): _addSkip(result, self, skip_why) return result + # Increase the number of tests only if it hasn't been skipped + result.startTest(self) + expecting_failure = ( getattr(self, "__unittest_expecting_failure__", False) or getattr(testMethod, "__unittest_expecting_failure__", False) diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index 678d627d7c6926..9a3e5cc4bf30e5 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -84,9 +84,13 @@ def loadTestsFromTestCase(self, testCaseClass): raise TypeError("Test cases should not be derived from " "TestSuite. Maybe you meant to derive from " "TestCase?") - testCaseNames = self.getTestCaseNames(testCaseClass) - if not testCaseNames and hasattr(testCaseClass, 'runTest'): - testCaseNames = ['runTest'] + if testCaseClass in (case.TestCase, case.FunctionTestCase): + # We don't load any tests from base types that should not be loaded. + testCaseNames = [] + else: + testCaseNames = self.getTestCaseNames(testCaseClass) + if not testCaseNames and hasattr(testCaseClass, 'runTest'): + testCaseNames = ['runTest'] loaded_suite = self.suiteClass(map(testCaseClass, testCaseNames)) return loaded_suite @@ -95,7 +99,11 @@ def loadTestsFromModule(self, module, *, pattern=None): tests = [] for name in dir(module): obj = getattr(module, name) - if isinstance(obj, type) and issubclass(obj, case.TestCase): + if ( + isinstance(obj, type) + and issubclass(obj, case.TestCase) + and obj not in (case.TestCase, case.FunctionTestCase) + ): tests.append(self.loadTestsFromTestCase(obj)) load_tests = getattr(module, 'load_tests', None) @@ -164,7 +172,11 @@ def loadTestsFromName(self, name, module=None): if isinstance(obj, types.ModuleType): return self.loadTestsFromModule(obj) - elif isinstance(obj, type) and issubclass(obj, case.TestCase): + elif ( + isinstance(obj, type) + and issubclass(obj, case.TestCase) + and obj not in (case.TestCase, case.FunctionTestCase) + ): return self.loadTestsFromTestCase(obj) elif (isinstance(obj, types.FunctionType) and isinstance(parent, type) and diff --git a/Lib/unittest/result.py b/Lib/unittest/result.py index 3ace0a5b7bf2ef..9e56f658027f4d 100644 --- a/Lib/unittest/result.py +++ b/Lib/unittest/result.py @@ -97,10 +97,12 @@ def _restoreStdout(self): sys.stdout = self._original_stdout sys.stderr = self._original_stderr - self._stdout_buffer.seek(0) - self._stdout_buffer.truncate() - self._stderr_buffer.seek(0) - self._stderr_buffer.truncate() + if self._stdout_buffer is not None: + self._stdout_buffer.seek(0) + self._stdout_buffer.truncate() + if self._stderr_buffer is not None: + self._stderr_buffer.seek(0) + self._stderr_buffer.truncate() def stopTestRun(self): """Called once after all tests are executed. diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index 2173c9b13e5cf7..d960bf3bd82ac5 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -41,11 +41,13 @@ class EnvBuilder: environment :param prompt: Alternative terminal prefix for the environment. :param upgrade_deps: Update the base venv modules to the latest on PyPI + :param scm_ignore_files: Create ignore files for the SCMs specified by the + iterable. """ def __init__(self, system_site_packages=False, clear=False, symlinks=False, upgrade=False, with_pip=False, prompt=None, - upgrade_deps=False): + upgrade_deps=False, *, scm_ignore_files=frozenset()): self.system_site_packages = system_site_packages self.clear = clear self.symlinks = symlinks @@ -56,6 +58,7 @@ def __init__(self, system_site_packages=False, clear=False, prompt = os.path.basename(os.getcwd()) self.prompt = prompt self.upgrade_deps = upgrade_deps + self.scm_ignore_files = frozenset(map(str.lower, scm_ignore_files)) def create(self, env_dir): """ @@ -66,6 +69,8 @@ def create(self, env_dir): """ env_dir = os.path.abspath(env_dir) context = self.ensure_directories(env_dir) + for scm in self.scm_ignore_files: + getattr(self, f"create_{scm}_ignore_file")(context) # See issue 24875. We need system_site_packages to be False # until after pip is installed. true_system_site_packages = self.system_site_packages @@ -210,6 +215,8 @@ def create_configuration(self, context): args.append('--upgrade-deps') if self.orig_prompt is not None: args.append(f'--prompt="{self.orig_prompt}"') + if not self.scm_ignore_files: + args.append('--without-scm-ignore-files') args.append(context.env_dir) args = ' '.join(args) @@ -278,6 +285,19 @@ def symlink_or_copy(self, src, dst, relative_symlinks_ok=False): shutil.copyfile(src, dst) + def create_git_ignore_file(self, context): + """ + Create a .gitignore file in the environment directory. + + The contents of the file cause the entire environment directory to be + ignored by git. + """ + gitignore_path = os.path.join(context.env_dir, '.gitignore') + with open(gitignore_path, 'w', encoding='utf-8') as file: + file.write('# Created by venv; ' + 'see https://docs.python.org/3/library/venv.html\n') + file.write('*\n') + def setup_python(self, context): """ Set up a Python executable in the environment. @@ -461,11 +481,13 @@ def upgrade_dependencies(self, context): def create(env_dir, system_site_packages=False, clear=False, - symlinks=False, with_pip=False, prompt=None, upgrade_deps=False): + symlinks=False, with_pip=False, prompt=None, upgrade_deps=False, + *, scm_ignore_files=frozenset()): """Create a virtual environment in a directory.""" builder = EnvBuilder(system_site_packages=system_site_packages, clear=clear, symlinks=symlinks, with_pip=with_pip, - prompt=prompt, upgrade_deps=upgrade_deps) + prompt=prompt, upgrade_deps=upgrade_deps, + scm_ignore_files=scm_ignore_files) builder.create(env_dir) @@ -525,6 +547,11 @@ def main(args=None): dest='upgrade_deps', help=f'Upgrade core dependencies ({", ".join(CORE_VENV_DEPS)}) ' 'to the latest version in PyPI') + parser.add_argument('--without-scm-ignore-files', dest='scm_ignore_files', + action='store_const', const=frozenset(), + default=frozenset(['git']), + help='Skips adding SCM ignore files to the environment ' + 'directory (Git is supported by default).') options = parser.parse_args(args) if options.upgrade and options.clear: raise ValueError('you cannot supply --upgrade and --clear together.') @@ -534,7 +561,8 @@ def main(args=None): upgrade=options.upgrade, with_pip=options.with_pip, prompt=options.prompt, - upgrade_deps=options.upgrade_deps) + upgrade_deps=options.upgrade_deps, + scm_ignore_files=options.scm_ignore_files) for d in options.dirs: builder.create(d) diff --git a/Lib/venv/__main__.py b/Lib/venv/__main__.py index 912423e4a78198..88f55439dc210c 100644 --- a/Lib/venv/__main__.py +++ b/Lib/venv/__main__.py @@ -6,5 +6,5 @@ main() rc = 0 except Exception as e: - print('Error: %s' % e, file=sys.stderr) + print('Error:', e, file=sys.stderr) sys.exit(rc) diff --git a/Makefile.pre.in b/Makefile.pre.in index 7b67738f4341a2..d123fa3e6f4a47 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -400,12 +400,14 @@ PYTHON_OBJS= \ Python/instrumentation.o \ Python/intrinsics.o \ Python/legacy_tracing.o \ + Python/lock.o \ Python/marshal.o \ Python/modsupport.o \ Python/mysnprintf.o \ Python/mystrtoul.o \ Python/optimizer.o \ Python/optimizer_analysis.o \ + Python/parking_lot.o \ Python/pathconfig.o \ Python/preconfig.o \ Python/pyarena.o \ @@ -490,6 +492,7 @@ OBJECT_OBJS= \ Objects/weakrefobject.o \ @PERF_TRAMPOLINE_OBJ@ +DEEPFREEZE_C = Python/deepfreeze/deepfreeze.c DEEPFREEZE_OBJS = Python/deepfreeze/deepfreeze.o ########################################################################## @@ -504,7 +507,6 @@ LIBRARY_OBJS_OMIT_FROZEN= \ LIBRARY_OBJS= \ $(LIBRARY_OBJS_OMIT_FROZEN) \ - $(DEEPFREEZE_OBJS) \ Modules/getpath.o \ Python/frozen.o @@ -777,7 +779,6 @@ coverage-report: regen-token regen-frozen .PHONY: clinic clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c $(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --exclude Lib/test/clinic.test.c --srcdir $(srcdir) - $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py .PHONY: clinic-tests clinic-tests: check-clean-src $(srcdir)/Lib/test/clinic.test.c @@ -1061,7 +1062,7 @@ regen-re: $(BUILDPYTHON) $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/build/generate_re_casefix.py $(srcdir)/Lib/re/_casefix.py Programs/_testembed: Programs/_testembed.o $(LINK_PYTHON_DEPS) - $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) + $(LINKCC) $(PY_LDFLAGS_NOLTO) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) ############################################################################ # "Bootstrap Python" used to run deepfreeze.py @@ -1162,7 +1163,7 @@ Programs/_freeze_module.o: Programs/_freeze_module.c Makefile Modules/getpath_noop.o: $(srcdir)/Modules/getpath_noop.c Makefile Programs/_freeze_module: Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN) - $(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) + $(LINKCC) $(PY_LDFLAGS_NOLTO) -o $@ Programs/_freeze_module.o Modules/getpath_noop.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) # We manually freeze getpath.py rather than through freeze_modules Python/frozen_modules/getpath.h: Modules/getpath.py $(FREEZE_MODULE_BOOTSTRAP_DEPS) @@ -1252,12 +1253,12 @@ regen-frozen: Tools/build/freeze_modules.py $(FROZEN_FILES_IN) # Deepfreeze targets .PHONY: regen-deepfreeze -regen-deepfreeze: $(DEEPFREEZE_OBJS) +regen-deepfreeze: $(DEEPFREEZE_C) DEEPFREEZE_DEPS=$(srcdir)/Tools/build/deepfreeze.py Include/internal/pycore_global_strings.h $(FREEZE_MODULE_DEPS) $(FROZEN_FILES_OUT) # BEGIN: deepfreeze modules -Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS) +$(DEEPFREEZE_C): $(DEEPFREEZE_DEPS) $(PYTHON_FOR_FREEZE) $(srcdir)/Tools/build/deepfreeze.py \ Python/frozen_modules/importlib._bootstrap.h:importlib._bootstrap \ Python/frozen_modules/importlib._bootstrap_external.h:importlib._bootstrap_external \ @@ -1284,8 +1285,6 @@ Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS) Python/frozen_modules/frozen_only.h:frozen_only \ -o Python/deepfreeze/deepfreeze.c # END: deepfreeze modules - @echo "Note: Deepfreeze may have added some global objects," - @echo " so run 'make regen-global-objects' if necessary." # We keep this renamed target around for folks with muscle memory. .PHONY: regen-importlib @@ -1294,11 +1293,12 @@ regen-importlib: regen-frozen ############################################################################ # Global objects +# Dependencies which can add and/or remove _Py_ID() identifiers: +# - deepfreeze.c +# - "make clinic" .PHONY: regen-global-objects -regen-global-objects: $(srcdir)/Tools/build/generate_global_objects.py +regen-global-objects: $(srcdir)/Tools/build/generate_global_objects.py $(DEEPFREEZE_C) clinic $(PYTHON_FOR_REGEN) $(srcdir)/Tools/build/generate_global_objects.py - @echo "Note: Global objects can be added or removed by other tools (e.g. deepfreeze), " - @echo " so be sure to re-run regen-global-objects after those tools." ############################################################################ # ABI @@ -1320,9 +1320,10 @@ regen-limited-abi: all ############################################################################ # Regenerate all generated files +# "clinic" is regenerated implicitly via "regen-global-objects". .PHONY: regen-all regen-all: regen-cases regen-typeslots \ - regen-token regen-ast regen-keyword regen-sre regen-frozen clinic \ + regen-token regen-ast regen-keyword regen-sre regen-frozen \ regen-pegen-metaparser regen-pegen regen-test-frozenmain \ regen-test-levenshtein regen-global-objects @echo @@ -1724,6 +1725,7 @@ PYTHON_HEADERS= \ $(srcdir)/Include/cpython/pylifecycle.h \ $(srcdir)/Include/cpython/pymem.h \ $(srcdir)/Include/cpython/pystate.h \ + $(srcdir)/Include/cpython/pystats.h \ $(srcdir)/Include/cpython/pythonrun.h \ $(srcdir)/Include/cpython/pythread.h \ $(srcdir)/Include/cpython/setobject.h \ @@ -1741,7 +1743,6 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_ast_state.h \ $(srcdir)/Include/internal/pycore_atexit.h \ $(srcdir)/Include/internal/pycore_atomic.h \ - $(srcdir)/Include/internal/pycore_atomic_funcs.h \ $(srcdir)/Include/internal/pycore_bitutils.h \ $(srcdir)/Include/internal/pycore_bytes_methods.h \ $(srcdir)/Include/internal/pycore_bytesobject.h \ @@ -1779,6 +1780,8 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_interp.h \ $(srcdir)/Include/internal/pycore_intrinsics.h \ $(srcdir)/Include/internal/pycore_list.h \ + $(srcdir)/Include/internal/pycore_llist.h \ + $(srcdir)/Include/internal/pycore_lock.h \ $(srcdir)/Include/internal/pycore_long.h \ $(srcdir)/Include/internal/pycore_modsupport.h \ $(srcdir)/Include/internal/pycore_moduleobject.h \ @@ -1790,6 +1793,7 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_opcode_metadata.h \ $(srcdir)/Include/internal/pycore_opcode_utils.h \ $(srcdir)/Include/internal/pycore_optimizer.h \ + $(srcdir)/Include/internal/pycore_parking_lot.h \ $(srcdir)/Include/internal/pycore_pathconfig.h \ $(srcdir)/Include/internal/pycore_pyarena.h \ $(srcdir)/Include/internal/pycore_pyerrors.h \ @@ -1798,12 +1802,14 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_pymem.h \ $(srcdir)/Include/internal/pycore_pymem_init.h \ $(srcdir)/Include/internal/pycore_pystate.h \ + $(srcdir)/Include/internal/pycore_pystats.h \ $(srcdir)/Include/internal/pycore_pythonrun.h \ $(srcdir)/Include/internal/pycore_pythread.h \ $(srcdir)/Include/internal/pycore_range.h \ $(srcdir)/Include/internal/pycore_runtime.h \ $(srcdir)/Include/internal/pycore_runtime_init_generated.h \ $(srcdir)/Include/internal/pycore_runtime_init.h \ + $(srcdir)/Include/internal/pycore_semaphore.h \ $(srcdir)/Include/internal/pycore_setobject.h \ $(srcdir)/Include/internal/pycore_signal.h \ $(srcdir)/Include/internal/pycore_sliceobject.h \ @@ -1886,7 +1892,7 @@ buildbottest: all -@if which pybuildbot.identify >/dev/null 2>&1; then \ pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \ fi - $(TESTRUNNER) -j 1 -u all -W --slowest --fail-env-changed --timeout=$(TESTTIMEOUT) $(TESTOPTS) + $(TESTRUNNER) -j 1 -u all -W --slowest --fail-env-changed --fail-rerun --timeout=$(TESTTIMEOUT) $(TESTOPTS) # Like testall, but run Python tests with HOSTRUNNER directly. .PHONY: hostrunnertest @@ -2140,7 +2146,8 @@ LIBSUBDIRS= asyncio \ TESTSUBDIRS= idlelib/idle_test \ test \ test/audiodata \ - test/capath \ + test/certdata \ + test/certdata/capath \ test/cjkencodings \ test/crashers \ test/data \ @@ -2149,6 +2156,7 @@ TESTSUBDIRS= idlelib/idle_test \ test/encoded_modules \ test/leakers \ test/libregrtest \ + test/mathdata \ test/subprocessdata \ test/support \ test/support/_hypothesis_stubs \ @@ -2156,8 +2164,10 @@ TESTSUBDIRS= idlelib/idle_test \ test/test_capi \ test/test_cppext \ test/test_ctypes \ + test/test_dataclasses \ test/test_email \ test/test_email/data \ + test/test_future_stmt \ test/test_import \ test/test_import/data \ test/test_import/data/circular_imports \ @@ -2244,6 +2254,7 @@ TESTSUBDIRS= idlelib/idle_test \ test/test_zoneinfo \ test/test_zoneinfo/data \ test/tkinterdata \ + test/tokenizedata \ test/tracedmodules \ test/typinganndata \ test/xmltestdata \ @@ -2594,6 +2605,7 @@ recheck: autoconf: (cd $(srcdir); autoreconf -ivf -Werror) +# See https://github.com/tiran/cpython_autoconf container .PHONY: regen-configure regen-configure: @if command -v podman >/dev/null; then RUNTIME="podman"; else RUNTIME="docker"; fi; \ diff --git a/Misc/ACKS b/Misc/ACKS index e52208a41cc9f7..aaa178fc3b5d08 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -254,6 +254,7 @@ Curtis Bucher Colm Buckley Erik de Bueger Jan-Hein Bührman +Marc Bürg Lars Buitinck Artem Bulgakov Dick Bulterman @@ -503,6 +504,7 @@ Daniel Ellis Phil Elson David Ely Victor van den Elzen +Vlad Emelianov Jeff Epler Tom Epperly Gökcen Eraslan @@ -1269,7 +1271,7 @@ R. David Murray Matti Mäki Jörg Müller Kaushik N -Dong-hee Na +Donghee Na Dale Nagata John Nagle Takahiro Nakayama @@ -1331,6 +1333,7 @@ Ethan Onstott Ken Jin Ooi Piet van Oostrum Tomas Oppelstrup +Itamar Oren Jason Orendorff Yan "yyyyyyyan" Orestes Bastien Orivel @@ -1341,7 +1344,6 @@ Michele Orrù Tomáš Orsava Oleg Oshmyan Denis Osipov -Itamar Ostricher Denis S. Otkidach Peter Otten Michael Otteneder @@ -1869,6 +1871,7 @@ Steven Troxler Brent Tubbs Anthony Tuininga Erno Tukia +Adam Turner David Turner Stephen Turner Itamar Turner-Trauring @@ -2076,7 +2079,5 @@ Jelle Zijlstra Gennadiy Zlobin Doug Zongker Peter Åstrand -Vlad Emelianov -Andrey Doroschenko (Entries should be added in rough alphabetical order by last names) diff --git a/Misc/NEWS.d/3.10.0a1.rst b/Misc/NEWS.d/3.10.0a1.rst index 79d85a40df8bbe..a9f25b482508ba 100644 --- a/Misc/NEWS.d/3.10.0a1.rst +++ b/Misc/NEWS.d/3.10.0a1.rst @@ -68,7 +68,7 @@ getting the ``__bases__`` attribute leads to infinite recursion. .. section: Core and Builtins Speed up calls to ``reversed()`` by using the :pep:`590` ``vectorcall`` -calling convention. Patch by Dong-hee Na. +calling convention. Patch by Donghee Na. .. @@ -88,7 +88,7 @@ convention. Patch by Dennis Sweeney. .. section: Core and Builtins Speed up calls to ``bool()`` by using the :pep:`590` ``vectorcall`` calling -convention. Patch by Dong-hee Na. +convention. Patch by Donghee Na. .. @@ -715,7 +715,7 @@ Fix refleak in _Py_fopen_obj() when PySys_Audit() fails .. section: Core and Builtins Add a state to the :mod:`!nis` module (:pep:`3121`) and apply the multiphase -initialization. Patch by Dong-hee Na. +initialization. Patch by Donghee Na. .. @@ -936,7 +936,7 @@ class. Patch by Pablo Galindo. .. section: Core and Builtins :c:func:`Py_TYPE()` is changed to the inline static function. Patch by -Dong-hee Na. +Donghee Na. .. @@ -2596,7 +2596,7 @@ remove multiple items from a list". .. section: Documentation Fix RemovedInSphinx40Warning when building the documentation. Patch by -Dong-hee Na. +Donghee Na. .. @@ -2862,7 +2862,7 @@ Make test_gdb properly run on HP-UX. Patch by Michael Osipov. .. section: Build Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() if only the -compiler is able to use it. Patch by Dong-hee Na. +compiler is able to use it. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.10.0a2.rst b/Misc/NEWS.d/3.10.0a2.rst index 78b25779802d6e..78f4377656b0cc 100644 --- a/Misc/NEWS.d/3.10.0a2.rst +++ b/Misc/NEWS.d/3.10.0a2.rst @@ -185,7 +185,7 @@ Removed special methods ``__int__``, ``__float__``, ``__floordiv__``, Micro optimization when compute :c:member:`~PySequenceMethods.sq_item` and :c:member:`~PyMappingMethods.mp_subscript` of :class:`range`. Patch by -Dong-hee Na. +Donghee Na. .. @@ -205,7 +205,7 @@ error message using the current locale's encoding. .. nonce: iLoMVF .. section: Core and Builtins -Micro optimization for range.index if step is 1. Patch by Dong-hee Na. +Micro optimization for range.index if step is 1. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.10.0a3.rst b/Misc/NEWS.d/3.10.0a3.rst index 755109cbd376f4..7112819c1b4118 100644 --- a/Misc/NEWS.d/3.10.0a3.rst +++ b/Misc/NEWS.d/3.10.0a3.rst @@ -153,7 +153,7 @@ Allow an unparenthesized walrus in subscript indexes. .. section: Core and Builtins Make sure that the compiler front-end produces a well-formed control flow -graph. Be be more aggressive in the compiler back-end, as it is now safe to +graph. Be more aggressive in the compiler back-end, as it is now safe to do so. .. @@ -394,7 +394,7 @@ Removed the ``formatter`` module, which was deprecated in Python 3.4. It is somewhat obsolete, little used, and not tested. It was originally scheduled to be removed in Python 3.6, but such removals were delayed until after Python 2.7 EOL. Existing users should copy whatever classes they use into -their code. Patch by Dong-hee Na and and Terry J. Reedy. +their code. Patch by Donghee Na and and Terry J. Reedy. .. diff --git a/Misc/NEWS.d/3.10.0a4.rst b/Misc/NEWS.d/3.10.0a4.rst index 95f9319668db45..414823f162d85c 100644 --- a/Misc/NEWS.d/3.10.0a4.rst +++ b/Misc/NEWS.d/3.10.0a4.rst @@ -105,7 +105,7 @@ blocks .. section: Core and Builtins Make the :mod:`atexit` module state per-interpreter. It is now safe have -more than one :mod:`atexit` module instance. Patch by Dong-hee Na and Victor +more than one :mod:`atexit` module instance. Patch by Donghee Na and Victor Stinner. .. @@ -768,7 +768,7 @@ results. Patch by Ammar Askar. .. section: Tests Update test_nntplib to use official group name of news.aioe.org for testing. -Patch by Dong-hee Na. +Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.10.0a6.rst b/Misc/NEWS.d/3.10.0a6.rst index 313aa689254040..c379b968c9885b 100644 --- a/Misc/NEWS.d/3.10.0a6.rst +++ b/Misc/NEWS.d/3.10.0a6.rst @@ -295,7 +295,7 @@ actual dictionary. This created problems for introspection tools. .. section: Library Added :const:`~os.O_EVTONLY`, :const:`~os.O_FSYNC`, :const:`~os.O_SYMLINK` and -:const:`~os.O_NOFOLLOW_ANY` for macOS. Patch by Dong-hee Na. +:const:`~os.O_NOFOLLOW_ANY` for macOS. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.10.0a7.rst b/Misc/NEWS.d/3.10.0a7.rst index 7933f71b01c14d..3a1694f444616a 100644 --- a/Misc/NEWS.d/3.10.0a7.rst +++ b/Misc/NEWS.d/3.10.0a7.rst @@ -113,7 +113,7 @@ in f-strings. Patch by Pablo Galindo. .. section: Core and Builtins Speed up calls to ``map()`` by using the :pep:`590` ``vectorcall`` calling -convention. Patch by Dong-hee Na. +convention. Patch by Donghee Na. .. @@ -240,7 +240,7 @@ of processes that don't use sigaltstack. .. section: Core and Builtins Speed up calls to ``filter()`` by using the :pep:`590` ``vectorcall`` -calling convention. Patch by Dong-hee Na. +calling convention. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.10.0b1.rst b/Misc/NEWS.d/3.10.0b1.rst index 3c71bc73b812a1..e7b6b93d0b6df3 100644 --- a/Misc/NEWS.d/3.10.0b1.rst +++ b/Misc/NEWS.d/3.10.0b1.rst @@ -516,7 +516,7 @@ encoding. .. section: Library Removed an unnecessary list comprehension before looping from -:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Dong-hee +:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Donghee Na. .. diff --git a/Misc/NEWS.d/3.11.0a1.rst b/Misc/NEWS.d/3.11.0a1.rst index e1d0adc478029f..7c991e7667b01a 100644 --- a/Misc/NEWS.d/3.11.0a1.rst +++ b/Misc/NEWS.d/3.11.0a1.rst @@ -292,7 +292,7 @@ Fixed pickling of range iterators that iterated for over ``2**32`` times. .. section: Core and Builtins A :exc:`SyntaxError` is now raised when trying to delete :const:`__debug__`. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -415,7 +415,7 @@ type :class:`float` or :class:`complex`. .. section: Core and Builtins A debug variable :envvar:`PYTHONDUMPREFSFILE` is added for creating a dump -file which is generated by :option:`--with-trace-refs`. Patch by Dong-hee +file which is generated by :option:`--with-trace-refs`. Patch by Donghee Na. .. @@ -670,7 +670,7 @@ Parameter substitution of the union type with wrong types now raises .. section: Core and Builtins Update ``property_descr_set`` to use vectorcall if possible. Patch by -Dong-hee Na. +Donghee Na. .. @@ -732,7 +732,7 @@ Collapse union of equal types. E.g. the result of ``int | int`` is now On Windows, :func:`os.urandom`: uses BCryptGenRandom API instead of CryptGenRandom API which is deprecated from Microsoft Windows API. Patch by -Dong-hee Na. +Donghee Na. .. @@ -1657,7 +1657,7 @@ Patch by Hugo van Kemenade. .. section: Library Pure ASCII strings are now normalized in constant time by -:func:`unicodedata.normalize`. Patch by Dong-hee Na. +:func:`unicodedata.normalize`. Patch by Donghee Na. .. @@ -1968,7 +1968,7 @@ A new function ``operator.call`` has been added, such that :class:`!webbrowser.MacOSX` is deprecated and will be removed in Python 3.13. It is untested and undocumented and also not used by :mod:`webbrowser` itself. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -2465,7 +2465,7 @@ generator .. section: Library Make the implementation consistency of :func:`~operator.indexOf` between C -and Python versions. Patch by Dong-hee Na. +and Python versions. Patch by Donghee Na. .. @@ -2752,7 +2752,7 @@ of reserved filenames, including those with trailing spaces or colons. .. section: Library Fix :meth:`~email.message.MIMEPart.as_string` to pass unixfrom properly. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -2809,7 +2809,7 @@ behaves differently than the similar implementation in :mod:`sysconfig`. .. section: Library :class:`smtpd.MailmanProxy` is now removed as it is unusable without an -external module, ``mailman``. Patch by Dong-hee Na. +external module, ``mailman``. Patch by Donghee Na. .. @@ -2916,7 +2916,7 @@ Support PEP 515 for Fraction's initialization from string. .. nonce: qFBYpp .. section: Library -Remove deprecated functions in the :mod:`gettext`. Patch by Dong-hee Na. +Remove deprecated functions in the :mod:`gettext`. Patch by Donghee Na. .. @@ -4471,7 +4471,7 @@ and modify the frozen modules. .. section: Build Add support for building with clang thin lto via --with-lto=thin/full. Patch -by Dong-hee Na and Brett Holman. +by Donghee Na and Brett Holman. .. @@ -4798,7 +4798,7 @@ Allow the Argument Clinic tool to handle ``__complex__`` special methods. Removed the 'test2to3' demo project that demonstrated using lib2to3 to support Python 2.x and Python 3.x from a single source in a distutils -package. Patch by Dong-hee Na +package. Patch by Donghee Na .. diff --git a/Misc/NEWS.d/3.11.0a2.rst b/Misc/NEWS.d/3.11.0a2.rst index cf26137dff19ef..503e489b658e4d 100644 --- a/Misc/NEWS.d/3.11.0a2.rst +++ b/Misc/NEWS.d/3.11.0a2.rst @@ -142,7 +142,7 @@ Add SipHash13 for string hash algorithm and use it by default. .. nonce: CTUT8s .. section: Core and Builtins -Fix reference leak from descr_check. Patch by Dong-hee Na. +Fix reference leak from descr_check. Patch by Donghee Na. .. @@ -263,7 +263,7 @@ Improve the generated bytecode for class and mapping patterns. .. section: Core and Builtins Speed up calls to ``enumerate()`` by using the :pep:`590` ``vectorcall`` -calling convention. Patch by Dong-hee Na. +calling convention. Patch by Donghee Na. .. @@ -396,7 +396,7 @@ Patch by Inada Naoki. .. section: Library Update :class:`~typing.ForwardRef` to support ``|`` operator. Patch by -Dong-hee Na. +Donghee Na. .. @@ -486,7 +486,7 @@ Patch by Joongi Kim. .. section: Library Empty escapechar/quotechar is not allowed when initializing -:class:`csv.Dialect`. Patch by Vajrasky Kok and Dong-hee Na. +:class:`csv.Dialect`. Patch by Vajrasky Kok and Donghee Na. .. @@ -569,7 +569,7 @@ formatting options. .. section: Library Improve error message of :class:`csv.Dialect` when initializing. Patch by -Vajrasky Kok and Dong-hee Na. +Vajrasky Kok and Donghee Na. .. diff --git a/Misc/NEWS.d/3.11.0a3.rst b/Misc/NEWS.d/3.11.0a3.rst index 7fdc191c244849..a96a59115797ee 100644 --- a/Misc/NEWS.d/3.11.0a3.rst +++ b/Misc/NEWS.d/3.11.0a3.rst @@ -615,7 +615,7 @@ Launch GNOME web browsers via gio tool instead of obsolete gvfs-open .. section: Library On Windows, :func:`time.sleep` now uses a waitable timer which supports -high-resolution timers. Patch by Dong-hee Na and Eryk Sun. +high-resolution timers. Patch by Donghee Na and Eryk Sun. .. diff --git a/Misc/NEWS.d/3.11.0a5.rst b/Misc/NEWS.d/3.11.0a5.rst index c28078da8d8339..08d94e82ed8ccf 100644 --- a/Misc/NEWS.d/3.11.0a5.rst +++ b/Misc/NEWS.d/3.11.0a5.rst @@ -127,7 +127,7 @@ Aditya. .. section: Core and Builtins Speed up calls to :meth:`weakref.ref.__call__` by using the :pep:`590` -``vectorcall`` calling convention. Patch by Dong-hee Na. +``vectorcall`` calling convention. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.11.0a6.rst b/Misc/NEWS.d/3.11.0a6.rst index fcec71c6f59da2..52055b3fafd485 100644 --- a/Misc/NEWS.d/3.11.0a6.rst +++ b/Misc/NEWS.d/3.11.0a6.rst @@ -382,7 +382,7 @@ involving lots of brackets. Patch by Pablo Galindo. .. section: Core and Builtins :mod:`ctypes` now allocates memory on the stack instead of on the heap to -pass arguments while calling a Python callback function. Patch by Dong-hee +pass arguments while calling a Python callback function. Patch by Donghee Na. .. @@ -441,7 +441,7 @@ Add a missing call to ``va_end()`` in ``Modules/_hashopenssl.c``. .. section: Core and Builtins Use :c:func:`PyObject_Vectorcall` while calling ctypes callback function. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -514,7 +514,7 @@ For performance, use the optimized string-searching implementations from .. section: Library :class:`~http.server.SimpleHTTPRequestHandler` now uses HTML5 grammar. Patch -by Dong-hee Na. +by Donghee Na. .. diff --git a/Misc/NEWS.d/3.11.0a7.rst b/Misc/NEWS.d/3.11.0a7.rst index 94c15f1c1f5237..6e41f9cbd933b5 100644 --- a/Misc/NEWS.d/3.11.0a7.rst +++ b/Misc/NEWS.d/3.11.0a7.rst @@ -89,7 +89,7 @@ problem. Define :c:macro:`PY_CALL_TRAMPOLINE` to enable call trampolines. .. section: Core and Builtins Some Windows system error codes(>= 10000) are now mapped into the correct -errno and may now raise a subclass of :exc:`OSError`. Patch by Dong-hee Na. +errno and may now raise a subclass of :exc:`OSError`. Patch by Donghee Na. .. @@ -1599,7 +1599,7 @@ Call the public :func:`sys.get_asyncgen_hooks` and .. section: C API Remove private functions ``_PySys_GetObjectId()`` and -``_PySys_SetObjectId()``. Patch by Dong-hee Na. +``_PySys_SetObjectId()``. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.11.0b1.rst b/Misc/NEWS.d/3.11.0b1.rst index 2bcccc7dae3734..a4cdda2cafdb43 100644 --- a/Misc/NEWS.d/3.11.0b1.rst +++ b/Misc/NEWS.d/3.11.0b1.rst @@ -185,7 +185,7 @@ functions leave the current exception unchanged. Patch by Victor Stinner. .. section: Core and Builtins Fix a minor memory leak at exit: release the memory of the -:class:`generic_alias_iterator` type. Patch by Dong-hee Na. +:class:`generic_alias_iterator` type. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.12.0a1.rst b/Misc/NEWS.d/3.12.0a1.rst index 5178f4055e7b8e..633738de92bef7 100644 --- a/Misc/NEWS.d/3.12.0a1.rst +++ b/Misc/NEWS.d/3.12.0a1.rst @@ -82,7 +82,7 @@ the test failed). .. nonce: eOBh8M .. section: Core and Builtins -Suppress ImportError for invalid query for help() command. Patch by Dong-hee +Suppress ImportError for invalid query for help() command. Patch by Donghee Na. .. @@ -164,7 +164,7 @@ to calculate those doing pointer arithmetic. .. section: Core and Builtins :func:`os.sched_yield` now release the GIL while calling sched_yield(2). -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -465,7 +465,7 @@ Remove dead code from ``CALL_FUNCTION_EX`` opcode. .. nonce: VE8-zf .. section: Core and Builtins -:class:`memoryview` now supports half-floats. Patch by Dong-hee Na and +:class:`memoryview` now supports half-floats. Patch by Donghee Na and Antoine Pitrou. .. @@ -857,7 +857,7 @@ code objects could be "deduplicated" during compilation. .. section: Core and Builtins Reduce allocation size of :class:`list` from :meth:`str.split` and -:meth:`str.rsplit`. Patch by Dong-hee Na and Inada Naoki. +:meth:`str.rsplit`. Patch by Donghee Na and Inada Naoki. .. @@ -3742,7 +3742,7 @@ Fix :func:`ast.unparse` when ``ImportFrom.level`` is None Now :func:`~dis.dis` and :func:`~dis.get_instructions` handle operand values for instructions prefixed by ``EXTENDED_ARG_QUICK``. Patch by Sam Gross and -Dong-hee Na. +Donghee Na. .. @@ -5004,7 +5004,7 @@ Patch by Illia Volochii and Adam Turner. .. section: Build Fix the build process of clang compiler for :program:`_bootstrap_python` if -LTO optimization is applied. Patch by Matthias Görgens and Dong-hee Na. +LTO optimization is applied. Patch by Matthias Görgens and Donghee Na. .. @@ -5024,7 +5024,7 @@ LTO optimization is applied. Patch by Matthias Görgens and Dong-hee Na. .. section: Build CPython now uses the ThinLTO option as the default policy if the Clang -compiler accepts the flag. Patch by Dong-hee Na. +compiler accepts the flag. Patch by Donghee Na. .. @@ -5350,7 +5350,7 @@ in a virtual environment. .. nonce: FbHZuS .. section: Windows -Fix :file:`py.exe` launcher handling of ``-V:/`` option when +Fix :file:`py.exe` launcher handling of :samp:`-V:{}/` option when default preferences have been set in environment variables or configuration files. diff --git a/Misc/NEWS.d/3.12.0a2.rst b/Misc/NEWS.d/3.12.0a2.rst index f781e38665a8ea..1a04ed473f329d 100644 --- a/Misc/NEWS.d/3.12.0a2.rst +++ b/Misc/NEWS.d/3.12.0a2.rst @@ -8,7 +8,7 @@ The IDNA codec decoder used on DNS hostnames by :mod:`socket` or :mod:`asyncio` related name resolution functions no longer involves a quadratic algorithm. This prevents a potential CPU denial of service if an out-of-spec excessive length hostname involving bidirectional characters -were decoded. Some protocols such as :mod:`urllib` http ``3xx`` redirects +were decoded. Some protocols such as :mod:`urllib` http :samp:`3{xx}` redirects potentially allow for an attacker to supply such a name. Individual labels within an IDNA encoded DNS name will now raise an error @@ -111,7 +111,7 @@ back to alternative names ("python", "python."). .. section: Core and Builtins Update :mod:`faulthandler` to emit an error message with the proper -unexpected signal number. Patch by Dong-hee Na. +unexpected signal number. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.12.0a3.rst b/Misc/NEWS.d/3.12.0a3.rst index 3e6f8de5d911f2..ce128fd5f80c77 100644 --- a/Misc/NEWS.d/3.12.0a3.rst +++ b/Misc/NEWS.d/3.12.0a3.rst @@ -9,7 +9,7 @@ within a garbage request to be printed to the stderr server log. This is done by changing the :mod:`http.server` :class:`BaseHTTPRequestHandler` ``.log_message`` method to replace control -characters with a ``\xHH`` hex escape before printing. +characters with a :samp:`\\x{HH}` hex escape before printing. .. @@ -153,7 +153,7 @@ to specialize attribute accesses on types that haven't had .. section: Core and Builtins Allow some features of :mod:`syslog` to the main interpreter only. Patch by -Dong-hee Na. +Donghee Na. .. diff --git a/Misc/NEWS.d/3.12.0a4.rst b/Misc/NEWS.d/3.12.0a4.rst index 8951490f41b94c..b3b39024056ccc 100644 --- a/Misc/NEWS.d/3.12.0a4.rst +++ b/Misc/NEWS.d/3.12.0a4.rst @@ -676,7 +676,7 @@ parameter names in the C implementation. Patch by Alex Waygood. .. section: Library Update :exc:`~urllib.error.HTTPError` to be initialized properly, even if -the ``fp`` is ``None``. Patch by Dong-hee Na. +the ``fp`` is ``None``. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.12.0a5.rst b/Misc/NEWS.d/3.12.0a5.rst index f6f8de46cf70d9..8cf90b0e9cde46 100644 --- a/Misc/NEWS.d/3.12.0a5.rst +++ b/Misc/NEWS.d/3.12.0a5.rst @@ -38,7 +38,7 @@ would get out of sync, causing inconsistent behavior and crashes. .. section: Core and Builtins Fix wrong lineno in exception message on :keyword:`continue` or -:keyword:`break` which are not in a loop. Patch by Dong-hee Na. +:keyword:`break` which are not in a loop. Patch by Donghee Na. .. @@ -48,7 +48,7 @@ Fix wrong lineno in exception message on :keyword:`continue` or .. section: Core and Builtins Fix :func:`~unicodedata.is_normalized` to properly handle the UCD 3.2.0 -cases. Patch by Dong-hee Na. +cases. Patch by Donghee Na. .. @@ -507,7 +507,7 @@ inheritance. .. section: Build Update BOLT configration not to use depreacted usage of ``--split -functions``. Patch by Dong-hee Na. +functions``. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.12.0a6.rst b/Misc/NEWS.d/3.12.0a6.rst index 07967028bdee70..5bd600cd8b6fc0 100644 --- a/Misc/NEWS.d/3.12.0a6.rst +++ b/Misc/NEWS.d/3.12.0a6.rst @@ -220,7 +220,7 @@ access of ``builtins.__dict__`` keys mutates the iter object. .. section: Core and Builtins Update :mod:`tracemalloc` to handle presize of object properly. Patch by -Dong-hee Na. +Donghee Na. .. diff --git a/Misc/NEWS.d/3.12.0b1.rst b/Misc/NEWS.d/3.12.0b1.rst index 652b706880fb92..0944dfd0e90ab9 100644 --- a/Misc/NEWS.d/3.12.0b1.rst +++ b/Misc/NEWS.d/3.12.0b1.rst @@ -213,7 +213,7 @@ attribute. .. section: Core and Builtins Reduce object creation while calling callback function from gc. Patch by -Dong-hee Na. +Donghee Na. .. @@ -464,7 +464,7 @@ unpickled. .. section: Core and Builtins Migrate :meth:`~ssl.SSLContext.set_ecdh_curve` method not to use deprecated -OpenSSL APIs. Patch by Dong-hee Na. +OpenSSL APIs. Patch by Donghee Na. .. @@ -2073,7 +2073,7 @@ Define ``.PHONY`` / virtual make targets consistently and properly. .. nonce: -W9BJS .. section: Build -Add gcc fallback of mkfifoat/mknodat for macOS. Patch by Dong-hee Na. +Add gcc fallback of mkfifoat/mknodat for macOS. Patch by Donghee Na. .. @@ -2372,7 +2372,7 @@ Add a new C-API function to eagerly assign a version tag to a PyTypeObject: .. section: C API :c:func:`PyObject_GC_Resize` should calculate preheader size if needed. -Patch by Dong-hee Na. +Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.5.0rc1.rst b/Misc/NEWS.d/3.5.0rc1.rst index 1fb9bc6c04da38..64e9435b252acb 100644 --- a/Misc/NEWS.d/3.5.0rc1.rst +++ b/Misc/NEWS.d/3.5.0rc1.rst @@ -168,7 +168,7 @@ Sanad Zaki Rizvi. Idle editor default font. Switch from Courier to platform-sensitive TkFixedFont. This should not affect current customized font selections. If -there is a problem, edit $HOME/.idlerc/config-main.cfg and remove 'fontxxx' +there is a problem, edit $HOME/.idlerc/config-main.cfg and remove ':samp:`font{xxx}`' entries from [Editor Window]. Patch by Mark Roseman. .. diff --git a/Misc/NEWS.d/3.5.1rc1.rst b/Misc/NEWS.d/3.5.1rc1.rst index dc247ce2096a7d..05e1ecfaf6bc79 100644 --- a/Misc/NEWS.d/3.5.1rc1.rst +++ b/Misc/NEWS.d/3.5.1rc1.rst @@ -189,7 +189,7 @@ comprehensions correspond to the opening brace. .. nonce: 0Gh-Ty .. section: Core and Builtins -Hide the private _Py_atomic_xxx symbols from the public Python.h header to +Hide the private :samp:`_Py_atomic_{xxx}` symbols from the public Python.h header to fix a compilation error with OpenMP. PyThreadState_GET() becomes an alias to PyThreadState_Get() to avoid ABI incompatibilities. diff --git a/Misc/NEWS.d/3.5.4.rst b/Misc/NEWS.d/3.5.4.rst index cd0ca4872f1ab0..7839fa2709ecf2 100644 --- a/Misc/NEWS.d/3.5.4.rst +++ b/Misc/NEWS.d/3.5.4.rst @@ -5,4 +5,4 @@ .. section: Library ftplib.FTP.putline() now throws ValueError on commands that contains CR or -LF. Patch by Dong-hee Na. +LF. Patch by Donghee Na. diff --git a/Misc/NEWS.d/3.5.4rc1.rst b/Misc/NEWS.d/3.5.4rc1.rst index 04a035a41e7461..d65d5d14ee78bb 100644 --- a/Misc/NEWS.d/3.5.4rc1.rst +++ b/Misc/NEWS.d/3.5.4rc1.rst @@ -340,7 +340,7 @@ not keep objects alive longer than expected. .. section: Library inspect.signature() now supports callables with variable-argument parameters -wrapped with partialmethod. Patch by Dong-hee Na. +wrapped with partialmethod. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.6.2rc1.rst b/Misc/NEWS.d/3.6.2rc1.rst index cdf4c3d541c4ca..28eb88f79130c5 100644 --- a/Misc/NEWS.d/3.6.2rc1.rst +++ b/Misc/NEWS.d/3.6.2rc1.rst @@ -77,7 +77,7 @@ delivered to the innermost frame. .. section: Core and Builtins sys.getsizeof() on a code object now returns the sizes which includes the -code struct and sizes of objects which it references. Patch by Dong-hee Na. +code struct and sizes of objects which it references. Patch by Donghee Na. .. @@ -163,7 +163,7 @@ no longer ignored. Patch by Mircea Cosbuc. .. nonce: I2mDTz .. section: Library -Functional API of enum allows to create empty enums. Patched by Dong-hee Na +Functional API of enum allows to create empty enums. Patched by Donghee Na .. @@ -202,7 +202,7 @@ not keep objects alive longer than expected. .. section: Library inspect.signature() now supports callables with variable-argument parameters -wrapped with partialmethod. Patch by Dong-hee Na. +wrapped with partialmethod. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.6.3rc1.rst b/Misc/NEWS.d/3.6.3rc1.rst index 4dc2eef5d3b61b..4b2aae9dc88441 100644 --- a/Misc/NEWS.d/3.6.3rc1.rst +++ b/Misc/NEWS.d/3.6.3rc1.rst @@ -506,7 +506,7 @@ Fix handling of long oids in ssl. Based on patch by Christian Heimes. .. section: Library ftplib.FTP.putline() now throws ValueError on commands that contains CR or -LF. Patch by Dong-hee Na. +LF. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.6.6rc1.rst b/Misc/NEWS.d/3.6.6rc1.rst index 71a5c3ec595ba2..9624195c79043b 100644 --- a/Misc/NEWS.d/3.6.6rc1.rst +++ b/Misc/NEWS.d/3.6.6rc1.rst @@ -289,7 +289,7 @@ literals on pydoc. Patch by Andrés Delfino. .. section: Library Update error message when constructing invalid inspect.Parameters Patch by -Dong-hee Na. +Donghee Na. .. diff --git a/Misc/NEWS.d/3.7.0a1.rst b/Misc/NEWS.d/3.7.0a1.rst index 712558bf98d018..bee424241fd712 100644 --- a/Misc/NEWS.d/3.7.0a1.rst +++ b/Misc/NEWS.d/3.7.0a1.rst @@ -529,7 +529,7 @@ name are now supported. .. section: Core and Builtins sys.getsizeof() on a code object now returns the sizes which includes the -code struct and sizes of objects which it references. Patch by Dong-hee Na. +code struct and sizes of objects which it references. Patch by Donghee Na. .. @@ -2260,7 +2260,7 @@ Update zlib to 1.2.11. .. section: Library ftplib.FTP.putline() now throws ValueError on commands that contains CR or -LF. Patch by Dong-hee Na. +LF. Patch by Donghee Na. .. @@ -2329,7 +2329,7 @@ always return bytes. .. nonce: I2mDTz .. section: Library -Functional API of enum allows to create empty enums. Patched by Dong-hee Na +Functional API of enum allows to create empty enums. Patched by Donghee Na .. @@ -2612,7 +2612,7 @@ Fix handling escape characters in HZ codec. Based on patch by Ma Lin. .. section: Library inspect.signature() now supports callables with variable-argument parameters -wrapped with partialmethod. Patch by Dong-hee Na. +wrapped with partialmethod. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.7.0a3.rst b/Misc/NEWS.d/3.7.0a3.rst index 52df0e7e82b080..a968616f55be68 100644 --- a/Misc/NEWS.d/3.7.0a3.rst +++ b/Misc/NEWS.d/3.7.0a3.rst @@ -539,7 +539,7 @@ optional .. section: Library Updates 2to3 to convert from operator.isCallable(obj) to callable(obj). -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -549,7 +549,7 @@ Patch by Dong-hee Na. .. section: Library inspect.signature should follow :pep:`8`, if the parameter has an annotation -and a default value. Patch by Dong-hee Na. +and a default value. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.7.0b5.rst b/Misc/NEWS.d/3.7.0b5.rst index 20476993b9652a..fb29109869188b 100644 --- a/Misc/NEWS.d/3.7.0b5.rst +++ b/Misc/NEWS.d/3.7.0b5.rst @@ -418,7 +418,7 @@ trigger a ``DeprecationWarning`` and have been marked for removal in Python .. section: Library Update error message when constructing invalid inspect.Parameters Patch by -Dong-hee Na. +Donghee Na. .. diff --git a/Misc/NEWS.d/3.8.0a1.rst b/Misc/NEWS.d/3.8.0a1.rst index dbbfb6e8b0d68e..57f72e95b029fc 100644 --- a/Misc/NEWS.d/3.8.0a1.rst +++ b/Misc/NEWS.d/3.8.0a1.rst @@ -1965,7 +1965,7 @@ result of an internal future if it's already done. .. section: Library Add a deprecated warning for the :meth:`threading.Thread.isAlive` method. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -4974,7 +4974,7 @@ Enum members. .. section: Library Update error message when constructing invalid inspect.Parameters Patch by -Dong-hee Na. +Donghee Na. .. @@ -8253,7 +8253,7 @@ Explain how IDLE's Shell displays output. Improve the doc about IDLE running user code. The section is renamed from "IDLE -- console differences" is renamed "Running user code". It mostly -covers the implications of using custom sys.stdxxx objects. +covers the implications of using custom :samp:sys.std{xxx}` objects. .. diff --git a/Misc/NEWS.d/3.8.0a4.rst b/Misc/NEWS.d/3.8.0a4.rst index da03d93eae3965..7e8bfa5c4364a9 100644 --- a/Misc/NEWS.d/3.8.0a4.rst +++ b/Misc/NEWS.d/3.8.0a4.rst @@ -1087,7 +1087,7 @@ on the ABI. Change ``PyAPI_FUNC(type)``, ``PyAPI_DATA(type)`` and ``PyMODINIT_FUNC`` macros of ``pyport.h`` when ``Py_BUILD_CORE_MODULE`` is defined. The ``Py_BUILD_CORE_MODULE`` define must be now be used to build a C extension -as a dynamic library accessing Python internals: export the PyInit_xxx() +as a dynamic library accessing Python internals: export the :samp:`PyInit_{xxx}()` function in DLL exports on Windows. .. diff --git a/Misc/NEWS.d/3.9.0a1.rst b/Misc/NEWS.d/3.9.0a1.rst index 5a4431b0fcf1c6..9818c17705074b 100644 --- a/Misc/NEWS.d/3.9.0a1.rst +++ b/Misc/NEWS.d/3.9.0a1.rst @@ -33,7 +33,7 @@ Fixes audit event for :func:`os.system` to be named ``os.system``. .. section: Security Escape the server title of :class:`xmlrpc.server.DocXMLRPCServer` when -rendering the document page as HTML. (Contributed by Dong-hee Na in +rendering the document page as HTML. (Contributed by Donghee Na in :issue:`38243`.) .. @@ -203,7 +203,7 @@ arguments in decorators. .. section: Core and Builtins Fix a segmentation fault when using reverse iterators of empty ``dict`` -objects. Patch by Dong-hee Na and Inada Naoki. +objects. Patch by Donghee Na and Inada Naoki. .. @@ -280,7 +280,7 @@ visited by ``tp_traverse()`` are valid. .. section: Core and Builtins Remove unnecessary intersection and update set operation in dictview with -empty set. (Contributed by Dong-hee Na in :issue:`38210`.) +empty set. (Contributed by Donghee Na in :issue:`38210`.) .. @@ -1194,7 +1194,7 @@ Expose the Linux ``pidfd_open`` syscall as :func:`os.pidfd_open`. .. section: Library Added constants :const:`~fcntl.F_OFD_GETLK`, :const:`~fcntl.F_OFD_SETLK` and -:const:`~fcntl.F_OFD_SETLKW` to the :mod:`fcntl` module. Patch by Dong-hee +:const:`~fcntl.F_OFD_SETLKW` to the :mod:`fcntl` module. Patch by Donghee Na. .. @@ -1284,7 +1284,7 @@ Fixed erroneous equality comparison in statistics.NormalDist(). .. section: Library Added :const:`~os.CLD_KILLED` and :const:`~os.CLD_STOPPED` for -:attr:`si_code`. Patch by Dong-hee Na. +:attr:`si_code`. Patch by Donghee Na. .. @@ -1882,7 +1882,7 @@ avoid dynamic lookup. .. section: Library Update :class:`importlib.machinery.BuiltinImporter` to use -``loader._ORIGIN`` instead of a hardcoded value. Patch by Dong-hee Na. +``loader._ORIGIN`` instead of a hardcoded value. Patch by Donghee Na. .. @@ -2080,7 +2080,7 @@ method which emits a deprecation warning and calls corresponding methody .. section: Library Update test_statistics.py to verify that the statistics module works well -for both C and Python implementations. Patch by Dong-hee Na +for both C and Python implementations. Patch by Donghee Na .. @@ -2201,7 +2201,7 @@ uses more than ``SIGSTKSZ`` bytes of stack memory on some platforms. .. nonce: AmXrik .. section: Library -Add C fastpath for statistics.NormalDist.inv_cdf() Patch by Dong-hee Na +Add C fastpath for statistics.NormalDist.inv_cdf() Patch by Donghee Na .. @@ -2210,7 +2210,7 @@ Add C fastpath for statistics.NormalDist.inv_cdf() Patch by Dong-hee Na .. nonce: Ene6L- .. section: Library -Remove the deprecated method `threading.Thread.isAlive()`. Patch by Dong-hee +Remove the deprecated method `threading.Thread.isAlive()`. Patch by Donghee Na. .. @@ -4089,7 +4089,7 @@ Increase code coverage for multiprocessing.shared_memory. .. nonce: Kl1sti .. section: Tests -Add tests for json.dump(..., skipkeys=True). Patch by Dong-hee Na. +Add tests for json.dump(..., skipkeys=True). Patch by Donghee Na. .. @@ -4118,7 +4118,7 @@ Add tests for ROT-13 codec. .. nonce: Zoe9ek .. section: Tests -Added tests for PyDateTime_xxx_GET_xxx() macros of the C API of the +Added tests for :samp:`PyDateTime_{xxx}_GET_{xxx}()` macros of the C API of the :mod:`datetime` module. Patch by Joannah Nanjekye. .. @@ -4576,7 +4576,7 @@ distutils bdist_wininst: bdist_wininst only works on Windows. .. nonce: j5ebdT .. section: Build -Many ``PyRun_XXX()`` functions like :c:func:`PyRun_String` were no longer +Many :samp:`PyRun_{XXX}()` functions like :c:func:`PyRun_String` were no longer exported in ``libpython38.dll`` by mistake. Export them again to fix the ABI compatibility. diff --git a/Misc/NEWS.d/3.9.0a3.rst b/Misc/NEWS.d/3.9.0a3.rst index 8b7ff49668e1c0..8a94848427382b 100644 --- a/Misc/NEWS.d/3.9.0a3.rst +++ b/Misc/NEWS.d/3.9.0a3.rst @@ -149,7 +149,7 @@ argument - by Anthony Sottile. .. section: Core and Builtins Correct the error message when calling the :func:`min` or :func:`max` with -no arguments. Patch by Dong-hee Na. +no arguments. Patch by Donghee Na. .. @@ -392,7 +392,7 @@ Remove ``fractions.gcd()`` function, deprecated since Python 3.5 .. section: Library :class:`~smtplib.LMTP` constructor now has an optional *timeout* parameter. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -414,7 +414,7 @@ Taskaya. :class:`~ftplib.FTP_TLS` and :class:`~ftplib.FTP_TLS` now raise a :class:`ValueError` if the given timeout for their constructor is zero to -prevent the creation of a non-blocking socket. Patch by Dong-hee Na. +prevent the creation of a non-blocking socket. Patch by Donghee Na. .. @@ -425,7 +425,7 @@ prevent the creation of a non-blocking socket. Patch by Dong-hee Na. :class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a :class:`ValueError` if the given timeout for their constructor is zero to -prevent the creation of a non-blocking socket. Patch by Dong-hee Na. +prevent the creation of a non-blocking socket. Patch by Donghee Na. .. @@ -456,7 +456,7 @@ resilients to inaccessible sys.path entries (importlib_metadata v1.4.0). :class:`~!nntplib.NNTP` and :class:`~!nntplib.NNTP_SSL` now raise a :class:`ValueError` if the given timeout for their constructor is zero to -prevent the creation of a non-blocking socket. Patch by Dong-hee Na. +prevent the creation of a non-blocking socket. Patch by Donghee Na. .. @@ -488,7 +488,7 @@ towards *y*. :class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a :class:`ValueError` if the given timeout for their constructor is zero to -prevent the creation of a non-blocking socket. Patch by Dong-hee Na. +prevent the creation of a non-blocking socket. Patch by Donghee Na. .. @@ -571,7 +571,7 @@ new task spawning before exception raising. .. section: Library Correctly parenthesize filter-based statements that contain lambda -expressions in mod:`!lib2to3`. Patch by Dong-hee Na. +expressions in mod:`!lib2to3`. Patch by Donghee Na. .. @@ -699,7 +699,7 @@ upon inheritance. Patch by Bar Harel. :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and :class:`~imaplib.IMAP4_stream` were applied to this change. Patch by -Dong-hee Na. +Donghee Na. .. diff --git a/Misc/NEWS.d/3.9.0a4.rst b/Misc/NEWS.d/3.9.0a4.rst index 019b34c4082d10..e59435b5509acf 100644 --- a/Misc/NEWS.d/3.9.0a4.rst +++ b/Misc/NEWS.d/3.9.0a4.rst @@ -43,7 +43,7 @@ first item. Patch by Yonatan Goldschmidt. .. nonce: BIIX2M .. section: Core and Builtins -Update clinic tool to use :c:func:`Py_IS_TYPE`. Patch by Dong-hee Na. +Update clinic tool to use :c:func:`Py_IS_TYPE`. Patch by Donghee Na. .. @@ -141,7 +141,7 @@ collection of deleted, pickled objects. .. section: Core and Builtins Fixed a possible crash in :meth:`list.__contains__` when a list is changed -during comparing items. Patch by Dong-hee Na. +during comparing items. Patch by Donghee Na. .. @@ -152,7 +152,7 @@ during comparing items. Patch by Dong-hee Na. :term:`floor division` of float operation now has a better performance. Also the message of :exc:`ZeroDivisionError` for this operation is updated. Patch -by Dong-hee Na. +by Donghee Na. .. diff --git a/Misc/NEWS.d/3.9.0a5.rst b/Misc/NEWS.d/3.9.0a5.rst index 19ad20ad3db042..6ff05788214723 100644 --- a/Misc/NEWS.d/3.9.0a5.rst +++ b/Misc/NEWS.d/3.9.0a5.rst @@ -96,7 +96,7 @@ Port itertools module to multiphase initialization (:pep:`489`). .. section: Core and Builtins Speed up calls to ``frozenset()`` by using the :pep:`590` ``vectorcall`` -calling convention. Patch by Dong-hee Na. +calling convention. Patch by Donghee Na. .. @@ -117,7 +117,7 @@ own variable. .. section: Core and Builtins Speed up calls to ``set()`` by using the :pep:`590` ``vectorcall`` calling -convention. Patch by Dong-hee Na. +convention. Patch by Donghee Na. .. @@ -166,7 +166,7 @@ Allow executing asynchronous comprehensions on the top level when the .. section: Core and Builtins Speed up calls to ``tuple()`` by using the :pep:`590` ``vectorcall`` calling -convention. Patch by Dong-hee Na. +convention. Patch by Donghee Na. .. @@ -571,7 +571,7 @@ Fixed :func:`ast.unparse` for extended slices containing a single element .. nonce: yWq9NJ .. section: Library -Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Dong-hee Na. +Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch by Donghee Na. .. @@ -783,7 +783,7 @@ when the optional ``qop`` parameter is not present. .. section: Library HTTP status codes ``103 EARLY_HINTS`` and ``425 TOO_EARLY`` are added to -:class:`http.HTTPStatus`. Patch by Dong-hee Na. +:class:`http.HTTPStatus`. Patch by Donghee Na. .. @@ -1133,7 +1133,7 @@ module. Patch by José Roberto Meza Cabrera. .. section: C API Add :c:func:`PyModule_AddType` helper function: add a type to a module. -Patch by Dong-hee Na. +Patch by Donghee Na. .. @@ -1163,7 +1163,7 @@ Python thread state. .. nonce: R3jaTy .. section: C API -Add _PyArg_NoKwnames helper function. Patch by Dong-hee Na. +Add _PyArg_NoKwnames helper function. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/3.9.0b1.rst b/Misc/NEWS.d/3.9.0b1.rst index 15790bc425c13f..ee87315ad334e9 100644 --- a/Misc/NEWS.d/3.9.0b1.rst +++ b/Misc/NEWS.d/3.9.0b1.rst @@ -490,7 +490,7 @@ The first argument of :func:`pickle.loads` is now positional-only. .. section: Library Update :mod:`!nntplib` to merge :class:`!nntplib.NNTP` and -:class:`!nntplib._NNTPBase`. Patch by Dong-hee Na. +:class:`!nntplib._NNTPBase`. Patch by Donghee Na. .. @@ -500,7 +500,7 @@ Update :mod:`!nntplib` to merge :class:`!nntplib.NNTP` and .. section: Library Update :mod:`dbm.gnu` to use gdbm_count if possible when calling -:func:`len`. Patch by Dong-hee Na. +:func:`len`. Patch by Donghee Na. .. @@ -592,7 +592,7 @@ subdirectories in package data, matching backport in importlib_resources .. nonce: 5GuK2A .. section: Library -:meth:`imaplib.IMAP4.unselect` is added. Patch by Dong-hee Na. +:meth:`imaplib.IMAP4.unselect` is added. Patch by Donghee Na. .. diff --git a/Misc/NEWS.d/next/Build/2023-09-01-01-39-26.gh-issue-108740.JHExAQ.rst b/Misc/NEWS.d/next/Build/2023-09-01-01-39-26.gh-issue-108740.JHExAQ.rst new file mode 100644 index 00000000000000..190d50387f339e --- /dev/null +++ b/Misc/NEWS.d/next/Build/2023-09-01-01-39-26.gh-issue-108740.JHExAQ.rst @@ -0,0 +1,4 @@ +Fix a race condition in ``make regen-all``. The ``deepfreeze.c`` source and +files generated by Argument Clinic are now generated or updated before +generating "global objects". Previously, some identifiers may miss depending +on the order in which these files were generated. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Build/2023-09-02-18-04-15.gh-issue-63760.r8hJ6q.rst b/Misc/NEWS.d/next/Build/2023-09-02-18-04-15.gh-issue-63760.r8hJ6q.rst new file mode 100644 index 00000000000000..9a7249e923e0c7 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2023-09-02-18-04-15.gh-issue-63760.r8hJ6q.rst @@ -0,0 +1,3 @@ +Fix Solaris build: no longer redefine the ``gethostname()`` function. Solaris +defines the function since 2005. Patch by Victor Stinner, original patch by +Jakub Kulík. diff --git a/Misc/NEWS.d/next/Build/2023-09-07-19-58-05.gh-issue-109054.5r3S3l.rst b/Misc/NEWS.d/next/Build/2023-09-07-19-58-05.gh-issue-109054.5r3S3l.rst new file mode 100644 index 00000000000000..d86a110e0de68c --- /dev/null +++ b/Misc/NEWS.d/next/Build/2023-09-07-19-58-05.gh-issue-109054.5r3S3l.rst @@ -0,0 +1,6 @@ +Fix building the ``_testcapi`` extension on Linux AArch64 which requires +linking to libatomic when ```` is used: the +``_Py_atomic_or_uint64()`` function requires libatomic +``__atomic_fetch_or_8()`` on this platform. The configure script now checks +if linking to libatomic is needed and generates a new LIBATOMIC variable +used to build the _testcapi extension. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2023-08-24-20-08-02.gh-issue-108014.20DOSS.rst b/Misc/NEWS.d/next/C API/2023-08-24-20-08-02.gh-issue-108014.20DOSS.rst index 5c1b04f3237e78..35cb153ba09076 100644 --- a/Misc/NEWS.d/next/C API/2023-08-24-20-08-02.gh-issue-108014.20DOSS.rst +++ b/Misc/NEWS.d/next/C API/2023-08-24-20-08-02.gh-issue-108014.20DOSS.rst @@ -1,4 +1,4 @@ Add :c:func:`PyLong_AsInt` function: similar to :c:func:`PyLong_AsLong`, but store the result in a C :c:expr:`int` instead of a C :c:expr:`long`. -Previously, it was known as the the private function :c:func:`!_PyLong_AsInt` +Previously, it was known as the private function :c:func:`!_PyLong_AsInt` (with an underscore prefix). Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2023-09-01-16-28-09.gh-issue-108511.gg-QDG.rst b/Misc/NEWS.d/next/C API/2023-09-01-16-28-09.gh-issue-108511.gg-QDG.rst new file mode 100644 index 00000000000000..1e5f32905aa24d --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-09-01-16-28-09.gh-issue-108511.gg-QDG.rst @@ -0,0 +1,4 @@ +Add functions :c:func:`PyObject_HasAttrWithError`, +:c:func:`PyObject_HasAttrStringWithError`, +:c:func:`PyMapping_HasKeyWithError` and +:c:func:`PyMapping_HasKeyStringWithError`. diff --git a/Misc/NEWS.d/next/C API/2023-09-01-18-42-31.gh-issue-108765.IyYNDu.rst b/Misc/NEWS.d/next/C API/2023-09-01-18-42-31.gh-issue-108765.IyYNDu.rst new file mode 100644 index 00000000000000..7b33481f225b5a --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-09-01-18-42-31.gh-issue-108765.IyYNDu.rst @@ -0,0 +1,6 @@ +``Python.h`` no longer includes these standard header files: ````, +```` and ````. If needed, they should now be included +explicitly. For example, ```` provides the ``clock()`` and ``gmtime()`` +functions, ```` provides the ``select()`` function, and +```` provides the ``futimes()``, ``gettimeofday()`` and +``setitimer()`` functions. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2023-09-02-22-35-55.gh-issue-108765.4TOdBT.rst b/Misc/NEWS.d/next/C API/2023-09-02-22-35-55.gh-issue-108765.4TOdBT.rst new file mode 100644 index 00000000000000..c13b6d9db053fc --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-09-02-22-35-55.gh-issue-108765.4TOdBT.rst @@ -0,0 +1,5 @@ +``Python.h`` no longer includes the ```` standard header file. If +needed, it should now be included explicitly. For example, it provides +``isalpha()`` and ``tolower()`` functions which are locale dependent. Python +provides locale independent functions, like :c:func:`!Py_ISALPHA` and +:c:func:`!Py_TOLOWER`. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/C API/2023-09-12-13-09-36.gh-issue-108724.-yMsC8.rst b/Misc/NEWS.d/next/C API/2023-09-12-13-09-36.gh-issue-108724.-yMsC8.rst new file mode 100644 index 00000000000000..5cddf9bc239700 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-09-12-13-09-36.gh-issue-108724.-yMsC8.rst @@ -0,0 +1 @@ +Add :c:type:`PyMutex` internal-only lightweight locking API. diff --git a/Misc/NEWS.d/next/C API/2023-09-17-21-47-31.gh-issue-109521.JDF6i9.rst b/Misc/NEWS.d/next/C API/2023-09-17-21-47-31.gh-issue-109521.JDF6i9.rst new file mode 100644 index 00000000000000..338650c9246686 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2023-09-17-21-47-31.gh-issue-109521.JDF6i9.rst @@ -0,0 +1,5 @@ +:c:func:`PyImport_GetImporter` now sets RuntimeError if it fails to get +:data:`sys.path_hooks` or :data:`sys.path_importer_cache` or they are not +list and dict correspondingly. Previously it could return NULL without +setting error in obscure cases, crash or raise SystemError if these +attributes have wrong type. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-03-26-19-11-10.gh-issue-93627.0UgwBL.rst b/Misc/NEWS.d/next/Core and Builtins/2023-03-26-19-11-10.gh-issue-93627.0UgwBL.rst new file mode 100644 index 00000000000000..854da44b560b21 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-03-26-19-11-10.gh-issue-93627.0UgwBL.rst @@ -0,0 +1 @@ +Update the Python pickle module implementation to match the C implementation of the pickle module. For objects setting reduction methods like :meth:`~object.__reduce_ex__` or :meth:`~object.__reduce__` to ``None``, pickling will result in a :exc:`TypeError`. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-06-05-23-38-43.gh-issue-104635.VYZhVh.rst b/Misc/NEWS.d/next/Core and Builtins/2023-06-05-23-38-43.gh-issue-104635.VYZhVh.rst index f20ddb56d171c3..417e45a6655db6 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2023-06-05-23-38-43.gh-issue-104635.VYZhVh.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2023-06-05-23-38-43.gh-issue-104635.VYZhVh.rst @@ -1,2 +1,2 @@ Eliminate redundant :opcode:`STORE_FAST` instructions in the compiler. Patch -by Dong-hee Na and Carl Meyer. +by Donghee Na and Carl Meyer. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-06-29-09-42-56.gh-issue-106213.TCUgzM.rst b/Misc/NEWS.d/next/Core and Builtins/2023-06-29-09-42-56.gh-issue-106213.TCUgzM.rst new file mode 100644 index 00000000000000..431f9cc0e4bb7d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-06-29-09-42-56.gh-issue-106213.TCUgzM.rst @@ -0,0 +1,2 @@ +Changed the way that Emscripten call trampolines work for compatibility with +Wasm/JS Promise integration. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-07-06-00-35-44.gh-issue-96844.kwvoS-.rst b/Misc/NEWS.d/next/Core and Builtins/2023-07-06-00-35-44.gh-issue-96844.kwvoS-.rst index 55334173bc002d..cc9c6e39a77fd2 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2023-07-06-00-35-44.gh-issue-96844.kwvoS-.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2023-07-06-00-35-44.gh-issue-96844.kwvoS-.rst @@ -1 +1 @@ -Improve error message of :meth:`list.remove`. Patch by Dong-hee Na. +Improve error message of :meth:`list.remove`. Patch by Donghee Na. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-07-23-13-07-34.gh-issue-107122.9HFUyb.rst b/Misc/NEWS.d/next/Core and Builtins/2023-07-23-13-07-34.gh-issue-107122.9HFUyb.rst index 64ac8ac6df09b8..08decfd89b7cf0 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2023-07-23-13-07-34.gh-issue-107122.9HFUyb.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2023-07-23-13-07-34.gh-issue-107122.9HFUyb.rst @@ -1 +1 @@ -Add :meth:`dbm.gnu.gdbm.clear` to :mod:`dbm.gnu`. Patch By Dong-hee Na. +Add :meth:`dbm.gnu.gdbm.clear` to :mod:`dbm.gnu`. Patch By Donghee Na. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-07-23-21-16-54.gh-issue-107122.VNuNcq.rst b/Misc/NEWS.d/next/Core and Builtins/2023-07-23-21-16-54.gh-issue-107122.VNuNcq.rst index 5b7cc98ddc6414..f68036cef34365 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2023-07-23-21-16-54.gh-issue-107122.VNuNcq.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2023-07-23-21-16-54.gh-issue-107122.VNuNcq.rst @@ -1 +1 @@ -Add :meth:`dbm.ndbm.ndbm.clear` to :mod:`dbm.ndbm`. Patch By Dong-hee Na. +Add :meth:`dbm.ndbm.ndbm.clear` to :mod:`dbm.ndbm`. Patch By Donghee Na. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-08-13-17-18-22.gh-issue-108390.TkBccC.rst b/Misc/NEWS.d/next/Core and Builtins/2023-08-13-17-18-22.gh-issue-108390.TkBccC.rst new file mode 100644 index 00000000000000..3ed596007b56f7 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-08-13-17-18-22.gh-issue-108390.TkBccC.rst @@ -0,0 +1,4 @@ +Raise an exception when setting a non-local event (``RAISE``, ``EXCEPTION_HANDLED``, +etc.) in ``sys.monitoring.set_local_events``. + +Fixes crash when tracing in recursive calls to Python classes. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-08-26-10-36-45.gh-issue-108614.wl5l-W.rst b/Misc/NEWS.d/next/Core and Builtins/2023-08-26-10-36-45.gh-issue-108614.wl5l-W.rst new file mode 100644 index 00000000000000..ace670c9ba7fdf --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-08-26-10-36-45.gh-issue-108614.wl5l-W.rst @@ -0,0 +1,2 @@ +Add RESUME_CHECK instruction, to avoid having to handle instrumentation, +signals, and contexts switches in the tier 2 execution engine. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-08-28-03-38-28.gh-issue-108716.HJBPwt.rst b/Misc/NEWS.d/next/Core and Builtins/2023-08-28-03-38-28.gh-issue-108716.HJBPwt.rst new file mode 100644 index 00000000000000..f63eb8689d63a3 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-08-28-03-38-28.gh-issue-108716.HJBPwt.rst @@ -0,0 +1,2 @@ +Turn off deep-freezing of code objects. Modules are still frozen, so that a +file system search is not needed for common modules. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-05-11-31-27.gh-issue-104584.IRSXA2.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-05-11-31-27.gh-issue-104584.IRSXA2.rst new file mode 100644 index 00000000000000..7f556bf8c31c11 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-05-11-31-27.gh-issue-104584.IRSXA2.rst @@ -0,0 +1,2 @@ +Fix a crash when running with :envvar:`PYTHONUOPS` or :option:`-X uops <-X>` +enabled and an error occurs during optimization. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-05-20-52-17.gh-issue-108959.6z45Sy.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-05-20-52-17.gh-issue-108959.6z45Sy.rst new file mode 100644 index 00000000000000..792bbc454f2b27 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-05-20-52-17.gh-issue-108959.6z45Sy.rst @@ -0,0 +1,2 @@ +Fix caret placement for error locations for subscript and binary operations +that involve non-semantic parentheses and spaces. Patch by Pablo Galindo diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-06-13-28-42.gh-issue-108732.I6DkEQ.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-06-13-28-42.gh-issue-108732.I6DkEQ.rst new file mode 100644 index 00000000000000..94a143b86b6708 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-06-13-28-42.gh-issue-108732.I6DkEQ.rst @@ -0,0 +1,2 @@ +Make iteration variables of module- and class-scoped comprehensions visible +to pdb and other tools that use ``frame.f_locals`` again. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-06-22-50-25.gh-issue-108976.MUKaIJ.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-06-22-50-25.gh-issue-108976.MUKaIJ.rst new file mode 100644 index 00000000000000..4b89375f0f57ef --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-06-22-50-25.gh-issue-108976.MUKaIJ.rst @@ -0,0 +1,2 @@ +Fix crash that occurs after de-instrumenting a code object in a monitoring +callback. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-07-16-05-36.gh-issue-88943.rH_X3W.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-16-05-36.gh-issue-88943.rH_X3W.rst new file mode 100644 index 00000000000000..a99830fe4227c9 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-16-05-36.gh-issue-88943.rH_X3W.rst @@ -0,0 +1,3 @@ +Improve syntax error for non-ASCII character that follows a numerical +literal. It now points on the invalid non-ASCII character, not on the valid +numerical literal. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-07-18-24-42.gh-issue-109118.yPXRAe.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-18-24-42.gh-issue-109118.yPXRAe.rst new file mode 100644 index 00000000000000..f14fce4423896f --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-18-24-42.gh-issue-109118.yPXRAe.rst @@ -0,0 +1,2 @@ +Fix interpreter crash when a NameError is raised inside the type parameters +of a generic class. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-07-18-49-01.gh-issue-109052.TBU4nC.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-18-49-01.gh-issue-109052.TBU4nC.rst new file mode 100644 index 00000000000000..175046c771cdf3 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-18-49-01.gh-issue-109052.TBU4nC.rst @@ -0,0 +1 @@ +Use the base opcode when comparing code objects to avoid interference from instrumentation diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-07-20-52-27.gh-issue-105848.p799D1.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-20-52-27.gh-issue-105848.p799D1.rst new file mode 100644 index 00000000000000..14661d14e190ce --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-07-20-52-27.gh-issue-105848.p799D1.rst @@ -0,0 +1,3 @@ +Add a new :opcode:`CALL_KW` opcode, used for calls containing keyword +arguments. Also, fix a possible crash when jumping over method calls in a +debugger. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-08-01-50-41.gh-issue-109114.adqgtb.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-08-01-50-41.gh-issue-109114.adqgtb.rst new file mode 100644 index 00000000000000..3d95dd5d29450c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-08-01-50-41.gh-issue-109114.adqgtb.rst @@ -0,0 +1,3 @@ +Relax the detection of the error message for invalid lambdas inside +f-strings to not search for arbitrary replacement fields to avoid false +positives. Patch by Pablo Galindo diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst new file mode 100644 index 00000000000000..e681482c3a879e --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-08-18-31-04.gh-issue-109156.KK1EXI.rst @@ -0,0 +1 @@ +Add tests for de-instrumenting instructions while keeping the instrumentation for lines diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-09-12-49-46.gh-issue-109118.gx0X4h.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-09-12-49-46.gh-issue-109118.gx0X4h.rst new file mode 100644 index 00000000000000..87069c85870410 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-09-12-49-46.gh-issue-109118.gx0X4h.rst @@ -0,0 +1,2 @@ +Disallow nested scopes (lambdas, generator expressions, and comprehensions) +within PEP 695 annotation scopes that are nested within classes. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-09-21-17-18.gh-issue-109179.ZR8qs2.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-09-21-17-18.gh-issue-109179.ZR8qs2.rst new file mode 100644 index 00000000000000..dd95a8ec7920aa --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-09-21-17-18.gh-issue-109179.ZR8qs2.rst @@ -0,0 +1 @@ +Fix bug where the C traceback display drops notes from :exc:`SyntaxError`. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-10-18-53-55.gh-issue-109207.Fei8bY.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-10-18-53-55.gh-issue-109207.Fei8bY.rst new file mode 100644 index 00000000000000..f9da3ac4d1abbd --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-10-18-53-55.gh-issue-109207.Fei8bY.rst @@ -0,0 +1 @@ +Fix a SystemError in ``__repr__`` of symtable entry object. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-11-12-41-42.gh-issue-109216.60QOSb.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-11-12-41-42.gh-issue-109216.60QOSb.rst new file mode 100644 index 00000000000000..aa8b2832af23a5 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-11-12-41-42.gh-issue-109216.60QOSb.rst @@ -0,0 +1 @@ +Fix possible memory leak in :opcode:`BUILD_MAP`. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-11-15-11-03.gh-issue-109256.6mfhvF.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-11-15-11-03.gh-issue-109256.6mfhvF.rst new file mode 100644 index 00000000000000..6c33faea0ae6c4 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-11-15-11-03.gh-issue-109256.6mfhvF.rst @@ -0,0 +1,2 @@ +Opcode IDs for specialized opcodes are allocated in their own range to +improve stability of the IDs for the 'real' opcodes. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-11-15-51-55.gh-issue-109195.iwxmuo.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-11-15-51-55.gh-issue-109195.iwxmuo.rst new file mode 100644 index 00000000000000..5427232c2df9a0 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-11-15-51-55.gh-issue-109195.iwxmuo.rst @@ -0,0 +1,4 @@ +Fix source location for the ``LOAD_*`` instruction preceding a +``LOAD_SUPER_ATTR`` to load the ``super`` global (or shadowing variable) so +that it encompasses only the name ``super`` and not the following +parentheses. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-12-15-45-49.gh-issue-109341.4V5bkm.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-12-15-45-49.gh-issue-109341.4V5bkm.rst new file mode 100644 index 00000000000000..9e99ef7eb73273 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-12-15-45-49.gh-issue-109341.4V5bkm.rst @@ -0,0 +1 @@ +Fix crash when compiling an invalid AST involving a :class:`ast.TypeAlias`. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-12-16-00-42.gh-issue-109351.kznGeR.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-12-16-00-42.gh-issue-109351.kznGeR.rst new file mode 100644 index 00000000000000..23b81c1c0a3baa --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-12-16-00-42.gh-issue-109351.kznGeR.rst @@ -0,0 +1,2 @@ +Fix crash when compiling an invalid AST involving a named (walrus) +expression. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-13-08-42-45.gh-issue-109219.UiN8sc.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-13-08-42-45.gh-issue-109219.UiN8sc.rst new file mode 100644 index 00000000000000..2c141f09d7e754 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-13-08-42-45.gh-issue-109219.UiN8sc.rst @@ -0,0 +1,2 @@ +Fix compiling type param scopes that use a name which is also free in an +inner scope. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-13-19-16-51.gh-issue-105658.z2nR2u.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-13-19-16-51.gh-issue-105658.z2nR2u.rst new file mode 100644 index 00000000000000..e95f5b84e8e187 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-13-19-16-51.gh-issue-105658.z2nR2u.rst @@ -0,0 +1,2 @@ +Fix bug where the line trace of an except block ending with a conditional +includes an excess event with the line of the conditional expression. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-13-21-04-04.gh-issue-109371.HPEJr8.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-13-21-04-04.gh-issue-109371.HPEJr8.rst new file mode 100644 index 00000000000000..2fb18d5ae88347 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-13-21-04-04.gh-issue-109371.HPEJr8.rst @@ -0,0 +1 @@ +Deopted instructions correctly for tool initialization and modified the incorrect assertion in instrumentation, when a previous tool already sets INSTRUCTION events diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-14-20-15-57.gh-issue-107265.qHZL_6.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-14-20-15-57.gh-issue-107265.qHZL_6.rst new file mode 100644 index 00000000000000..c30c21f034a1bc --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-14-20-15-57.gh-issue-107265.qHZL_6.rst @@ -0,0 +1 @@ +Deopt opcodes hidden by the executor when base opcode is needed diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-18-15-35-08.gh-issue-109496.Kleoz3.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-18-15-35-08.gh-issue-109496.Kleoz3.rst new file mode 100644 index 00000000000000..51b2144fed7841 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-18-15-35-08.gh-issue-109496.Kleoz3.rst @@ -0,0 +1,5 @@ +On a Python built in debug mode, :c:func:`Py_DECREF()` now calls +``_Py_NegativeRefcount()`` if the object is a dangling pointer to +deallocated memory: memory filled with ``0xDD`` "dead byte" by the debug +hook on memory allocators. The fix is to check the reference count *before* +checking for ``_Py_IsImmortal()``. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-20-13-18-08.gh-issue-109596.RG0K2G.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-20-13-18-08.gh-issue-109596.RG0K2G.rst new file mode 100644 index 00000000000000..23ef73d578651d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-20-13-18-08.gh-issue-109596.RG0K2G.rst @@ -0,0 +1,3 @@ +Fix some tokens in the grammar that were incorrectly marked as soft +keywords. Also fix some repeated rule names and ensure that repeated rules +are not allowed. Patch by Pablo Galindo diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-20-23-04-15.gh-issue-109627.xxe7De.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-20-23-04-15.gh-issue-109627.xxe7De.rst new file mode 100644 index 00000000000000..397d76e291419f --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-20-23-04-15.gh-issue-109627.xxe7De.rst @@ -0,0 +1,2 @@ +Fix bug where the compiler does not assign a new jump target label to a +duplicated small exit block. diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-09-22-13-38-17.gh-issue-109719.fx5OTz.rst b/Misc/NEWS.d/next/Core and Builtins/2023-09-22-13-38-17.gh-issue-109719.fx5OTz.rst new file mode 100644 index 00000000000000..83be54c9ca793e --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-09-22-13-38-17.gh-issue-109719.fx5OTz.rst @@ -0,0 +1 @@ +Fix missing jump target labels when compiler reorders cold/warm blocks. diff --git a/Misc/NEWS.d/next/Documentation/2023-03-16-15-39-26.gh-issue-102759.ehpHw6.rst b/Misc/NEWS.d/next/Documentation/2023-03-16-15-39-26.gh-issue-102759.ehpHw6.rst new file mode 100644 index 00000000000000..d3df6c8997aa35 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2023-03-16-15-39-26.gh-issue-102759.ehpHw6.rst @@ -0,0 +1,2 @@ +Align function signature for ``functools.reduce`` in documentation and docstring +with the C implementation. diff --git a/Misc/NEWS.d/next/Documentation/2023-03-19-09-39-31.gh-issue-102823.OzsOz0.rst b/Misc/NEWS.d/next/Documentation/2023-03-19-09-39-31.gh-issue-102823.OzsOz0.rst new file mode 100644 index 00000000000000..1e32f3c89231c8 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2023-03-19-09-39-31.gh-issue-102823.OzsOz0.rst @@ -0,0 +1,2 @@ +Document the return type of ``x // y`` when ``x`` and ``y`` have type +:class:`float`. diff --git a/Misc/NEWS.d/next/Documentation/2023-09-10-02-39-06.gh-issue-109209.0LBewo.rst b/Misc/NEWS.d/next/Documentation/2023-09-10-02-39-06.gh-issue-109209.0LBewo.rst new file mode 100644 index 00000000000000..79cc0b72ec742f --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2023-09-10-02-39-06.gh-issue-109209.0LBewo.rst @@ -0,0 +1 @@ +The minimum Sphinx version required for the documentation is now 4.2. diff --git a/Misc/NEWS.d/next/Library/2022-12-24-12-50-54.gh-issue-84867.OhaLbU.rst b/Misc/NEWS.d/next/Library/2022-12-24-12-50-54.gh-issue-84867.OhaLbU.rst new file mode 100644 index 00000000000000..8b45dcee481916 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-12-24-12-50-54.gh-issue-84867.OhaLbU.rst @@ -0,0 +1,2 @@ +:class:`unittest.TestLoader` no longer loads test cases from exact +:class:`unittest.TestCase` and :class:`unittest.FunctionTestCase` classes. diff --git a/Misc/NEWS.d/next/Library/2023-07-11-08-56-40.gh-issue-106584.g-SBtC.rst b/Misc/NEWS.d/next/Library/2023-07-11-08-56-40.gh-issue-106584.g-SBtC.rst new file mode 100644 index 00000000000000..a13b61bf1c121b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-07-11-08-56-40.gh-issue-106584.g-SBtC.rst @@ -0,0 +1,2 @@ +Fix exit code for ``unittest`` if all tests are skipped. +Patch by Egor Eliseev. diff --git a/Misc/NEWS.d/next/Library/2023-07-14-01-47-39.gh-issue-106734.eMYSoz.rst b/Misc/NEWS.d/next/Library/2023-07-14-01-47-39.gh-issue-106734.eMYSoz.rst new file mode 100644 index 00000000000000..37d2ab19ed1017 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-07-14-01-47-39.gh-issue-106734.eMYSoz.rst @@ -0,0 +1 @@ +Disable tab completion in multiline mode of :mod:`pdb` diff --git a/Misc/NEWS.d/next/Library/2023-07-18-23-05-12.gh-issue-106751.tVvzN_.rst b/Misc/NEWS.d/next/Library/2023-07-18-23-05-12.gh-issue-106751.tVvzN_.rst index 1cb8424b6221ee..d26ac90d3978d4 100644 --- a/Misc/NEWS.d/next/Library/2023-07-18-23-05-12.gh-issue-106751.tVvzN_.rst +++ b/Misc/NEWS.d/next/Library/2023-07-18-23-05-12.gh-issue-106751.tVvzN_.rst @@ -1,2 +1,2 @@ Optimize :meth:`KqueueSelector.select` for many iteration case. Patch By -Dong-hee Na. +Donghee Na. diff --git a/Misc/NEWS.d/next/Library/2023-07-19-10-45-24.gh-issue-106751.3HJ1of.rst b/Misc/NEWS.d/next/Library/2023-07-19-10-45-24.gh-issue-106751.3HJ1of.rst index 2696b560371d13..1b3ffdc95120a2 100644 --- a/Misc/NEWS.d/next/Library/2023-07-19-10-45-24.gh-issue-106751.3HJ1of.rst +++ b/Misc/NEWS.d/next/Library/2023-07-19-10-45-24.gh-issue-106751.3HJ1of.rst @@ -1,2 +1,2 @@ Optimize :meth:`SelectSelector.select` for many iteration case. Patch By -Dong-hee Na. +Donghee Na. diff --git a/Misc/NEWS.d/next/Library/2023-07-24-01-21-16.gh-issue-46376.w-xuDL.rst b/Misc/NEWS.d/next/Library/2023-07-24-01-21-16.gh-issue-46376.w-xuDL.rst deleted file mode 100644 index 8e8f0245b4539b..00000000000000 --- a/Misc/NEWS.d/next/Library/2023-07-24-01-21-16.gh-issue-46376.w-xuDL.rst +++ /dev/null @@ -1 +0,0 @@ -Prevent memory leak and use-after-free when using pointers to pointers with ctypes diff --git a/Misc/NEWS.d/next/Library/2023-08-15-18-20-00.gh-issue-107963.20g5BG.rst b/Misc/NEWS.d/next/Library/2023-08-15-18-20-00.gh-issue-107963.20g5BG.rst index 3a73b2da0c4334..ea968367d0bdee 100644 --- a/Misc/NEWS.d/next/Library/2023-08-15-18-20-00.gh-issue-107963.20g5BG.rst +++ b/Misc/NEWS.d/next/Library/2023-08-15-18-20-00.gh-issue-107963.20g5BG.rst @@ -1,2 +1,2 @@ Fix :func:`multiprocessing.set_forkserver_preload` to check the given list -of modules names. Patch by Dong-hee Na. +of modules names. Patch by Donghee Na. diff --git a/Misc/NEWS.d/next/Library/2023-08-18-22-58-07.gh-issue-83417.61J4yM.rst b/Misc/NEWS.d/next/Library/2023-08-18-22-58-07.gh-issue-83417.61J4yM.rst new file mode 100644 index 00000000000000..fbb8bdb2073efa --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-08-18-22-58-07.gh-issue-83417.61J4yM.rst @@ -0,0 +1,3 @@ +Add the ability for venv to create a ``.gitignore`` file which causes the +created environment to be ignored by Git. It is on by default when venv is +called via its CLI. diff --git a/Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst b/Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst new file mode 100644 index 00000000000000..a5ab8e2f9d4b59 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst @@ -0,0 +1 @@ +Make expressions/statements work as expected in pdb diff --git a/Misc/NEWS.d/next/Library/2023-08-26-12-35-39.gh-issue-105829.kyYhWI.rst b/Misc/NEWS.d/next/Library/2023-08-26-12-35-39.gh-issue-105829.kyYhWI.rst new file mode 100644 index 00000000000000..eaa2a5a4330e28 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-08-26-12-35-39.gh-issue-105829.kyYhWI.rst @@ -0,0 +1 @@ +Fix concurrent.futures.ProcessPoolExecutor deadlock diff --git a/Misc/NEWS.d/next/Library/2023-09-01-13-14-08.gh-issue-108751.2itqwe.rst b/Misc/NEWS.d/next/Library/2023-09-01-13-14-08.gh-issue-108751.2itqwe.rst new file mode 100644 index 00000000000000..7bc21fe6c81760 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-01-13-14-08.gh-issue-108751.2itqwe.rst @@ -0,0 +1,2 @@ +Add :func:`copy.replace` function which allows to create a modified copy of +an object. It supports named tuples, dataclasses, and many other objects. diff --git a/Misc/NEWS.d/next/Library/2023-09-03-04-37-52.gh-issue-108469.kusj40.rst b/Misc/NEWS.d/next/Library/2023-09-03-04-37-52.gh-issue-108469.kusj40.rst new file mode 100644 index 00000000000000..ac0f682963daec --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-03-04-37-52.gh-issue-108469.kusj40.rst @@ -0,0 +1,3 @@ +:func:`ast.unparse` now supports new :term:`f-string` syntax introduced in +Python 3.12. Note that the :term:`f-string` quotes are reselected for simplicity +under the new syntax. (Patch by Steven Sun) diff --git a/Misc/NEWS.d/next/Library/2023-09-06-06-17-23.gh-issue-108843.WJMhsS.rst b/Misc/NEWS.d/next/Library/2023-09-06-06-17-23.gh-issue-108843.WJMhsS.rst new file mode 100644 index 00000000000000..0f15761c14bb7d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-06-06-17-23.gh-issue-108843.WJMhsS.rst @@ -0,0 +1 @@ +Fix an issue in :func:`ast.unparse` when unparsing f-strings containing many quote types. diff --git a/Misc/NEWS.d/next/Library/2023-09-06-14-47-28.gh-issue-109033.piUzDx.rst b/Misc/NEWS.d/next/Library/2023-09-06-14-47-28.gh-issue-109033.piUzDx.rst new file mode 100644 index 00000000000000..15ec0b437d4339 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-06-14-47-28.gh-issue-109033.piUzDx.rst @@ -0,0 +1,2 @@ +Exceptions raised by os.utime builtin function now include the related +filename diff --git a/Misc/NEWS.d/next/Library/2023-09-06-19-33-41.gh-issue-108682.35Xnc5.rst b/Misc/NEWS.d/next/Library/2023-09-06-19-33-41.gh-issue-108682.35Xnc5.rst new file mode 100644 index 00000000000000..8c13d43ee9744b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-06-19-33-41.gh-issue-108682.35Xnc5.rst @@ -0,0 +1,2 @@ +Enum: require ``names=()`` or ``type=...`` to create an empty enum using +the functional syntax. diff --git a/Misc/NEWS.d/next/Library/2023-09-08-12-09-55.gh-issue-108987.x5AIG8.rst b/Misc/NEWS.d/next/Library/2023-09-08-12-09-55.gh-issue-108987.x5AIG8.rst new file mode 100644 index 00000000000000..16526ee748d869 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-08-12-09-55.gh-issue-108987.x5AIG8.rst @@ -0,0 +1,4 @@ +Fix :func:`_thread.start_new_thread` race condition. If a thread is created +during Python finalization, the newly spawned thread now exits immediately +instead of trying to access freed memory and lead to a crash. Patch by +Victor Stinner. diff --git a/Misc/NEWS.d/next/Library/2023-09-08-22-26-26.gh-issue-109164.-9BFWR.rst b/Misc/NEWS.d/next/Library/2023-09-08-22-26-26.gh-issue-109164.-9BFWR.rst new file mode 100644 index 00000000000000..b439c14ff535ff --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-08-22-26-26.gh-issue-109164.-9BFWR.rst @@ -0,0 +1 @@ +:mod:`pdb`: Replace :mod:`getopt` with :mod:`argparse` for parsing command line arguments. diff --git a/Misc/NEWS.d/next/Library/2023-09-09-09-05-41.gh-issue-109174.OJea5s.rst b/Misc/NEWS.d/next/Library/2023-09-09-09-05-41.gh-issue-109174.OJea5s.rst new file mode 100644 index 00000000000000..63461fac3b96f7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-09-09-05-41.gh-issue-109174.OJea5s.rst @@ -0,0 +1 @@ +Add support of :class:`types.SimpleNamespace` in :func:`copy.replace`. diff --git a/Misc/NEWS.d/next/Library/2023-09-09-15-08-37.gh-issue-50644.JUAZOh.rst b/Misc/NEWS.d/next/Library/2023-09-09-15-08-37.gh-issue-50644.JUAZOh.rst new file mode 100644 index 00000000000000..a7a442e35289d3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-09-15-08-37.gh-issue-50644.JUAZOh.rst @@ -0,0 +1,4 @@ +Attempts to pickle or create a shallow or deep copy of :mod:`codecs` streams +now raise a TypeError. Previously, copying failed with a RecursionError, +while pickling produced wrong results that eventually caused unpickling +to fail with a RecursionError. diff --git a/Misc/NEWS.d/next/Library/2023-09-11-00-32-18.gh-issue-107219.3zqyFT.rst b/Misc/NEWS.d/next/Library/2023-09-11-00-32-18.gh-issue-107219.3zqyFT.rst new file mode 100644 index 00000000000000..10afbcf823386a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-11-00-32-18.gh-issue-107219.3zqyFT.rst @@ -0,0 +1,5 @@ +Fix a race condition in ``concurrent.futures``. When a process in the +process pool was terminated abruptly (while the future was running or +pending), close the connection write end. If the call queue is blocked on +sending bytes to a worker process, closing the connection write end interrupts +the send, so the queue can be closed. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Library/2023-09-12-13-01-55.gh-issue-109319.YaCMtW.rst b/Misc/NEWS.d/next/Library/2023-09-12-13-01-55.gh-issue-109319.YaCMtW.rst new file mode 100644 index 00000000000000..d3cd86b040821a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-12-13-01-55.gh-issue-109319.YaCMtW.rst @@ -0,0 +1 @@ +Deprecate the ``dis.HAVE_ARGUMENT`` field in favour of ``dis.hasarg``. diff --git a/Misc/NEWS.d/next/Library/2023-09-13-17-22-44.gh-issue-109375.ijJHZ9.rst b/Misc/NEWS.d/next/Library/2023-09-13-17-22-44.gh-issue-109375.ijJHZ9.rst new file mode 100644 index 00000000000000..9b7a85d05f66ca --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-13-17-22-44.gh-issue-109375.ijJHZ9.rst @@ -0,0 +1 @@ +The :mod:`pdb` ``alias`` command now prevents registering aliases without arguments. diff --git a/Misc/NEWS.d/next/Library/2023-09-15-12-20-23.gh-issue-109096.VksX1D.rst b/Misc/NEWS.d/next/Library/2023-09-15-12-20-23.gh-issue-109096.VksX1D.rst new file mode 100644 index 00000000000000..bf1308498a8eb0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-15-12-20-23.gh-issue-109096.VksX1D.rst @@ -0,0 +1,3 @@ +:class:`http.server.CGIHTTPRequestHandler` has been deprecated for removal +in 3.15. Its design is old and the web world has long since moved beyond +CGI. diff --git a/Misc/NEWS.d/next/Library/2023-09-18-07-43-22.gh-issue-109543.1tOGoV.rst b/Misc/NEWS.d/next/Library/2023-09-18-07-43-22.gh-issue-109543.1tOGoV.rst new file mode 100644 index 00000000000000..e790f7750c332a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-18-07-43-22.gh-issue-109543.1tOGoV.rst @@ -0,0 +1,2 @@ +Remove unnecessary :func:`hasattr` check during :data:`typing.TypedDict` +creation. diff --git a/Misc/NEWS.d/next/Library/2023-09-19-01-22-43.gh-issue-109559.ijaycU.rst b/Misc/NEWS.d/next/Library/2023-09-19-01-22-43.gh-issue-109559.ijaycU.rst new file mode 100644 index 00000000000000..2c25a7b302dd02 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-19-01-22-43.gh-issue-109559.ijaycU.rst @@ -0,0 +1 @@ +Update :mod:`unicodedata` database to Unicode 15.1.0. diff --git a/Misc/NEWS.d/next/Library/2023-09-19-17-56-24.gh-issue-109109.WJvvX2.rst b/Misc/NEWS.d/next/Library/2023-09-19-17-56-24.gh-issue-109109.WJvvX2.rst new file mode 100644 index 00000000000000..e741e60ff41a9b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-19-17-56-24.gh-issue-109109.WJvvX2.rst @@ -0,0 +1,5 @@ +You can now get the raw TLS certificate chains from TLS connections via +:meth:`ssl.SSLSocket.get_verified_chain` and +:meth:`ssl.SSLSocket.get_unverified_chain` methods. + +Contributed by Mateusz Nowak. diff --git a/Misc/NEWS.d/next/Library/2023-09-20-17-45-46.gh-issue-109613.P13ogN.rst b/Misc/NEWS.d/next/Library/2023-09-20-17-45-46.gh-issue-109613.P13ogN.rst new file mode 100644 index 00000000000000..e21a758fc2eb05 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-20-17-45-46.gh-issue-109613.P13ogN.rst @@ -0,0 +1,4 @@ +Fix :func:`os.stat` and :meth:`os.DirEntry.stat`: check for exceptions. +Previously, on Python built in debug mode, these functions could trigger a +fatal Python error (and abort the process) when a function succeeded with an +exception set. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Library/2023-09-21-14-26-44.gh-issue-74481.KAUDcD.rst b/Misc/NEWS.d/next/Library/2023-09-21-14-26-44.gh-issue-74481.KAUDcD.rst new file mode 100644 index 00000000000000..c2aca4eae64eda --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-21-14-26-44.gh-issue-74481.KAUDcD.rst @@ -0,0 +1 @@ +Add ``set_error_mode`` related constants in ``msvcrt`` module in Python debug build. diff --git a/Misc/NEWS.d/next/Library/2023-09-21-19-42-22.gh-issue-109653.bL3iLH.rst b/Misc/NEWS.d/next/Library/2023-09-21-19-42-22.gh-issue-109653.bL3iLH.rst new file mode 100644 index 00000000000000..9f794bb58ba63b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-21-19-42-22.gh-issue-109653.bL3iLH.rst @@ -0,0 +1,2 @@ +Reduce the import time of :mod:`typing` by around a third. +Patch by Alex Waygood. diff --git a/Misc/NEWS.d/next/Library/2023-09-23-12-47-45.gh-issue-109653.9wZBfs.rst b/Misc/NEWS.d/next/Library/2023-09-23-12-47-45.gh-issue-109653.9wZBfs.rst new file mode 100644 index 00000000000000..1d0f0e4f83b5e1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-23-12-47-45.gh-issue-109653.9wZBfs.rst @@ -0,0 +1 @@ +Reduce the import time of :mod:`enum` by over 50%. Patch by Alex Waygood. diff --git a/Misc/NEWS.d/next/Library/2023-09-24-13-28-35.gh-issue-109653.9IFU0B.rst b/Misc/NEWS.d/next/Library/2023-09-24-13-28-35.gh-issue-109653.9IFU0B.rst new file mode 100644 index 00000000000000..c4f5a62433a2c1 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-09-24-13-28-35.gh-issue-109653.9IFU0B.rst @@ -0,0 +1,2 @@ +Improve import time of :mod:`functools` by around 13%. Patch by Alex +Waygood. diff --git a/Misc/NEWS.d/next/Security/2023-06-01-03-24-58.gh-issue-103142.GLWDMX.rst b/Misc/NEWS.d/next/Security/2023-06-01-03-24-58.gh-issue-103142.GLWDMX.rst deleted file mode 100644 index 7e0836879e4f81..00000000000000 --- a/Misc/NEWS.d/next/Security/2023-06-01-03-24-58.gh-issue-103142.GLWDMX.rst +++ /dev/null @@ -1,2 +0,0 @@ -The version of OpenSSL used in our binary builds has been upgraded to 1.1.1u -to address several CVEs. diff --git a/Misc/NEWS.d/next/Tests/2023-04-05-06-45-20.gh-issue-103186.640Eg-.rst b/Misc/NEWS.d/next/Tests/2023-04-05-06-45-20.gh-issue-103186.640Eg-.rst new file mode 100644 index 00000000000000..2f596aa5f47bda --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-04-05-06-45-20.gh-issue-103186.640Eg-.rst @@ -0,0 +1 @@ +Suppress and assert expected RuntimeWarnings in test_sys_settrace.py diff --git a/Misc/NEWS.d/next/Tests/2023-09-02-19-06-52.gh-issue-108822.arTbBI.rst b/Misc/NEWS.d/next/Tests/2023-09-02-19-06-52.gh-issue-108822.arTbBI.rst new file mode 100644 index 00000000000000..e1c6df2adcb0ae --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-02-19-06-52.gh-issue-108822.arTbBI.rst @@ -0,0 +1,4 @@ +``regrtest`` now computes statistics on all tests: successes, failures and +skipped. ``test_netrc``, ``test_pep646_syntax`` and ``test_xml_etree`` now +return results in their ``test_main()`` function. Patch by Victor Stinner +and Alex Waygood. diff --git a/Misc/NEWS.d/next/Tests/2023-09-03-02-01-55.gh-issue-108834.iAwXzj.rst b/Misc/NEWS.d/next/Tests/2023-09-03-02-01-55.gh-issue-108834.iAwXzj.rst new file mode 100644 index 00000000000000..43b9948db0075c --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-03-02-01-55.gh-issue-108834.iAwXzj.rst @@ -0,0 +1,6 @@ +When regrtest reruns failed tests in verbose mode (``./python -m test +--rerun``), tests are now rerun in fresh worker processes rather than being +executed in the main process. If a test does crash or is killed by a timeout, +the main process can detect and handle the killed worker process. Tests are +rerun in parallel if the ``-jN`` option is used to run tests in parallel. +Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-03-06-17-12.gh-issue-108834.fjV-CJ.rst b/Misc/NEWS.d/next/Tests/2023-09-03-06-17-12.gh-issue-108834.fjV-CJ.rst new file mode 100644 index 00000000000000..734cc66aebee15 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-03-06-17-12.gh-issue-108834.fjV-CJ.rst @@ -0,0 +1,2 @@ +Rename regrtest ``--verbose2`` option (``-w``) to ``--rerun``. Keep +``--verbose2`` as a deprecated alias. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-03-20-15-49.gh-issue-108834.Osvmhf.rst b/Misc/NEWS.d/next/Tests/2023-09-03-20-15-49.gh-issue-108834.Osvmhf.rst new file mode 100644 index 00000000000000..098861ffa30374 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-03-20-15-49.gh-issue-108834.Osvmhf.rst @@ -0,0 +1,3 @@ +Add ``--fail-rerun option`` option to regrtest: if a test failed when then +passed when rerun in verbose mode, exit the process with exit code 2 +(error), instead of exit code 0 (success). Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-03-21-18-35.gh-issue-108851.CCuHyI.rst b/Misc/NEWS.d/next/Tests/2023-09-03-21-18-35.gh-issue-108851.CCuHyI.rst new file mode 100644 index 00000000000000..7a5b3052af22f2 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-03-21-18-35.gh-issue-108851.CCuHyI.rst @@ -0,0 +1,2 @@ +Add ``get_recursion_available()`` and ``get_recursion_depth()`` functions to +the :mod:`test.support` module. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-03-21-41-10.gh-issue-108851.xFTYOE.rst b/Misc/NEWS.d/next/Tests/2023-09-03-21-41-10.gh-issue-108851.xFTYOE.rst new file mode 100644 index 00000000000000..b35aaebb410afb --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-03-21-41-10.gh-issue-108851.xFTYOE.rst @@ -0,0 +1,3 @@ +Fix ``test_tomllib`` recursion tests for WASI buildbots: reduce the recursion +limit and compute the maximum nested array/dict depending on the current +available recursion limit. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-04-15-18-14.gh-issue-89392.8A4T5p.rst b/Misc/NEWS.d/next/Tests/2023-09-04-15-18-14.gh-issue-89392.8A4T5p.rst new file mode 100644 index 00000000000000..e1dea8e78cdd4e --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-04-15-18-14.gh-issue-89392.8A4T5p.rst @@ -0,0 +1,2 @@ +Removed support of ``test_main()`` function in tests. They now always use +normal unittest test runner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-05-21-42-54.gh-issue-91960.abClTs.rst b/Misc/NEWS.d/next/Tests/2023-09-05-21-42-54.gh-issue-91960.abClTs.rst new file mode 100644 index 00000000000000..f63e0874499193 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-05-21-42-54.gh-issue-91960.abClTs.rst @@ -0,0 +1 @@ +FreeBSD 13.2 CI coverage for pull requests is now provided by Cirrus-CI (a hosted CI service that supports Linux, macOS, Windows, and FreeBSD). diff --git a/Misc/NEWS.d/next/Tests/2023-09-05-23-00-09.gh-issue-108962.R4NwuU.rst b/Misc/NEWS.d/next/Tests/2023-09-05-23-00-09.gh-issue-108962.R4NwuU.rst new file mode 100644 index 00000000000000..380fb20b8881b2 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-05-23-00-09.gh-issue-108962.R4NwuU.rst @@ -0,0 +1,3 @@ +Skip ``test_tempfile.test_flags()`` if ``chflags()`` fails with "OSError: +[Errno 45] Operation not supported" (ex: on FreeBSD 13). Patch by Victor +Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-06-15-36-51.gh-issue-91960.P3nD5v.rst b/Misc/NEWS.d/next/Tests/2023-09-06-15-36-51.gh-issue-91960.P3nD5v.rst new file mode 100644 index 00000000000000..46472abf9802bc --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-06-15-36-51.gh-issue-91960.P3nD5v.rst @@ -0,0 +1,7 @@ +Skip ``test_gdb`` if gdb is unable to retrieve Python frame objects: if a +frame is ````. When Python is built with "clang -Og", gdb can +fail to retrive the *frame* parameter of ``_PyEval_EvalFrameDefault()``. In +this case, tests like ``py_bt()`` are likely to fail. Without getting access +to Python frames, ``python-gdb.py`` is mostly clueless on retrieving the +Python traceback. Moreover, ``test_gdb`` is no longer skipped on macOS if +Python is built with Clang. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-06-18-27-53.gh-issue-109015.1dS1AQ.rst b/Misc/NEWS.d/next/Tests/2023-09-06-18-27-53.gh-issue-109015.1dS1AQ.rst new file mode 100644 index 00000000000000..cb641be9312e1a --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-06-18-27-53.gh-issue-109015.1dS1AQ.rst @@ -0,0 +1,6 @@ +Fix test_asyncio, test_imaplib and test_socket tests on FreeBSD if the TCP +blackhole is enabled (``sysctl net.inet.tcp.blackhole``). Skip the few tests +which failed with ``ETIMEDOUT`` which such non standard configuration. +Currently, the `FreeBSD GCP image enables TCP and UDP blackhole +`_ (``sysctl net.inet.tcp.blackhole=2`` +and ``sysctl net.inet.udp.blackhole=1``). Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-06-22-06-22.gh-issue-108996.IBhR3U.rst b/Misc/NEWS.d/next/Tests/2023-09-06-22-06-22.gh-issue-108996.IBhR3U.rst new file mode 100644 index 00000000000000..887f8b74bcfa30 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-06-22-06-22.gh-issue-108996.IBhR3U.rst @@ -0,0 +1 @@ +Add tests for ``msvcrt``. diff --git a/Misc/NEWS.d/next/Tests/2023-09-10-19-59-57.gh-issue-109230.SRNLFQ.rst b/Misc/NEWS.d/next/Tests/2023-09-10-19-59-57.gh-issue-109230.SRNLFQ.rst new file mode 100644 index 00000000000000..18e1e85242005a --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-10-19-59-57.gh-issue-109230.SRNLFQ.rst @@ -0,0 +1,5 @@ +Fix ``test_pyexpat.test_exception()``: it can now be run from a directory +different than Python source code directory. Before, the test failed in this +case. Skip the test if Modules/pyexpat.c source is not available. Skip also +the test on Python implementations other than CPython. Patch by Victor +Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-10-22-32-20.gh-issue-109237.SvgKwD.rst b/Misc/NEWS.d/next/Tests/2023-09-10-22-32-20.gh-issue-109237.SvgKwD.rst new file mode 100644 index 00000000000000..1d762bbe1d2592 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-10-22-32-20.gh-issue-109237.SvgKwD.rst @@ -0,0 +1,4 @@ +Fix ``test_site.test_underpth_basic()`` when the working directory contains +at least one non-ASCII character: encode the ``._pth`` file to UTF-8 and +enable the UTF-8 Mode to use UTF-8 for the child process stdout. Patch by +Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-10-23-05-50.gh-issue-108996.tJBru6.rst b/Misc/NEWS.d/next/Tests/2023-09-10-23-05-50.gh-issue-108996.tJBru6.rst new file mode 100644 index 00000000000000..ab6b5b5952b044 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-10-23-05-50.gh-issue-108996.tJBru6.rst @@ -0,0 +1 @@ +Fix and enable ``test_msvcrt``. diff --git a/Misc/NEWS.d/next/Tests/2023-09-11-18-19-52.gh-issue-109276.btfFtT.rst b/Misc/NEWS.d/next/Tests/2023-09-11-18-19-52.gh-issue-109276.btfFtT.rst new file mode 100644 index 00000000000000..5fcf6624f2e84d --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-11-18-19-52.gh-issue-109276.btfFtT.rst @@ -0,0 +1,3 @@ +libregrtest now uses a separated file descriptor to write test result as JSON. +Previously, if a test wrote debug messages late around the JSON, the main test +process failed to parse JSON. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-11-19-11-57.gh-issue-109276.qxI4OG.rst b/Misc/NEWS.d/next/Tests/2023-09-11-19-11-57.gh-issue-109276.qxI4OG.rst new file mode 100644 index 00000000000000..cf4074b2fe23cc --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-11-19-11-57.gh-issue-109276.qxI4OG.rst @@ -0,0 +1,6 @@ +libregrtest now calls :func:`random.seed()` before running each test file +when ``-r/--randomize`` command line option is used. Moreover, it's also +called in worker processes. It should help to make tests more +deterministic. Previously, it was only called once in the main process before +running all test files and it was not called in worker processes. Patch by +Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-13-05-58-09.gh-issue-104736.lA25Fu.rst b/Misc/NEWS.d/next/Tests/2023-09-13-05-58-09.gh-issue-104736.lA25Fu.rst new file mode 100644 index 00000000000000..85c370fc87ac41 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-13-05-58-09.gh-issue-104736.lA25Fu.rst @@ -0,0 +1,4 @@ +Fix test_gdb on Python built with LLVM clang 16 on Linux ppc64le (ex: Fedora +38). Search patterns in gdb "bt" command output to detect when gdb fails to +retrieve the traceback. For example, skip a test if ``Backtrace stopped: frame +did not save the PC`` is found. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-14-22-58-47.gh-issue-109396.J1a4jR.rst b/Misc/NEWS.d/next/Tests/2023-09-14-22-58-47.gh-issue-109396.J1a4jR.rst new file mode 100644 index 00000000000000..71150ecae76434 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-14-22-58-47.gh-issue-109396.J1a4jR.rst @@ -0,0 +1,3 @@ +Fix ``test_socket.test_hmac_sha1()`` in FIPS mode. Use a longer key: FIPS +mode requires at least of at least 112 bits. The previous key was only 32 +bits. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-14-23-27-40.gh-issue-109425.j-uFep.rst b/Misc/NEWS.d/next/Tests/2023-09-14-23-27-40.gh-issue-109425.j-uFep.rst new file mode 100644 index 00000000000000..bfe18569ae97f3 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-14-23-27-40.gh-issue-109425.j-uFep.rst @@ -0,0 +1,3 @@ +libregrtest now decodes stdout of test worker processes with the +"backslashreplace" error handler to log corrupted stdout, instead of failing +with an error and not logging the stdout. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-19-19-08-22.gh-issue-109580.G02Zam.rst b/Misc/NEWS.d/next/Tests/2023-09-19-19-08-22.gh-issue-109580.G02Zam.rst new file mode 100644 index 00000000000000..b917cbf6fd0a05 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-19-19-08-22.gh-issue-109580.G02Zam.rst @@ -0,0 +1,3 @@ +Skip ``test_perf_profiler`` if Python is built with ASAN, MSAN or UBSAN +sanitizer. Python does crash randomly in this test on such build. Patch by +Victor Stinner. diff --git a/Misc/NEWS.d/next/Tests/2023-09-20-02-32-17.gh-issue-103053.AoUJuK.rst b/Misc/NEWS.d/next/Tests/2023-09-20-02-32-17.gh-issue-103053.AoUJuK.rst new file mode 100644 index 00000000000000..6d67bf237bdbb2 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2023-09-20-02-32-17.gh-issue-103053.AoUJuK.rst @@ -0,0 +1,4 @@ +Skip test_freeze_simple_script() of test_tools.test_freeze if Python is built +with ``./configure --enable-optimizations``, which means with Profile Guided +Optimization (PGO): it just makes the test too slow. The freeze tool is tested +by many other CIs with other (faster) compiler flags. Patch by Victor Stinner. diff --git a/Misc/NEWS.d/next/Windows/2023-07-11-20-48-17.gh-issue-99079.CIMftz.rst b/Misc/NEWS.d/next/Windows/2023-07-11-20-48-17.gh-issue-99079.CIMftz.rst deleted file mode 100644 index 11f411be0f17c5..00000000000000 --- a/Misc/NEWS.d/next/Windows/2023-07-11-20-48-17.gh-issue-99079.CIMftz.rst +++ /dev/null @@ -1 +0,0 @@ -Update Windows build to use OpenSSL 3.0.9 diff --git a/Misc/NEWS.d/next/Windows/2023-09-05-10-08-47.gh-issue-107565.CIMftz.rst b/Misc/NEWS.d/next/Windows/2023-09-05-10-08-47.gh-issue-107565.CIMftz.rst new file mode 100644 index 00000000000000..024a58299caed9 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2023-09-05-10-08-47.gh-issue-107565.CIMftz.rst @@ -0,0 +1 @@ +Update Windows build to use OpenSSL 3.0.10. diff --git a/Misc/NEWS.d/next/macOS/2023-05-30-23-30-46.gh-issue-103142.55lMXQ.rst b/Misc/NEWS.d/next/macOS/2023-05-30-23-30-46.gh-issue-103142.55lMXQ.rst deleted file mode 100644 index 1afd949d6a9f03..00000000000000 --- a/Misc/NEWS.d/next/macOS/2023-05-30-23-30-46.gh-issue-103142.55lMXQ.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer to use OpenSSL 1.1.1u. diff --git a/Misc/stable_abi.toml b/Misc/stable_abi.toml index 2030a085abf27c..8df3f85e61eec6 100644 --- a/Misc/stable_abi.toml +++ b/Misc/stable_abi.toml @@ -2452,3 +2452,11 @@ added = '3.13' [function.PyLong_AsInt] added = '3.13' +[function.PyObject_HasAttrWithError] + added = '3.13' +[function.PyObject_HasAttrStringWithError] + added = '3.13' +[function.PyMapping_HasKeyWithError] + added = '3.13' +[function.PyMapping_HasKeyStringWithError] + added = '3.13' diff --git a/Modules/Setup.stdlib.in b/Modules/Setup.stdlib.in index 56c1badf6b44a0..7b3216a50bb284 100644 --- a/Modules/Setup.stdlib.in +++ b/Modules/Setup.stdlib.in @@ -158,7 +158,7 @@ @MODULE_XXSUBTYPE_TRUE@xxsubtype xxsubtype.c @MODULE__XXTESTFUZZ_TRUE@_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c @MODULE__TESTBUFFER_TRUE@_testbuffer _testbuffer.c -@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/pytime.c +@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/test_lock.c _testinternalcapi/pytime.c @MODULE__TESTCAPI_TRUE@_testcapi _testcapimodule.c _testcapi/vectorcall.c _testcapi/vectorcall_limited.c _testcapi/heaptype.c _testcapi/abstract.c _testcapi/unicode.c _testcapi/dict.c _testcapi/getargs.c _testcapi/datetime.c _testcapi/docstring.c _testcapi/mem.c _testcapi/watchers.c _testcapi/long.c _testcapi/float.c _testcapi/structmember.c _testcapi/exceptions.c _testcapi/code.c _testcapi/buffer.c _testcapi/pyatomic.c _testcapi/pyos.c _testcapi/immortal.c _testcapi/heaptype_relative.c _testcapi/gc.c @MODULE__TESTCLINIC_TRUE@_testclinic _testclinic.c @MODULE__TESTCLINIC_LIMITED_TRUE@_testclinic_limited _testclinic_limited.c diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index ed9efcad9ab0c8..184af2132c2707 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -110,6 +110,7 @@ bytes(cdata) #include "pycore_call.h" // _PyObject_CallNoArgs() #include "pycore_ceval.h" // _Py_EnterRecursiveCall() +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #include @@ -5148,41 +5149,6 @@ Pointer_get_contents(CDataObject *self, void *closure) stgdict = PyObject_stgdict((PyObject *)self); assert(stgdict); /* Cannot be NULL for pointer instances */ - - PyObject *keep = GetKeepedObjects(self); - if (keep != NULL) { - // check if it's a pointer to a pointer: - // pointers will have '0' key in the _objects - int ptr_probe = PyDict_ContainsString(keep, "0"); - if (ptr_probe < 0) { - return NULL; - } - if (ptr_probe) { - PyObject *item; - if (PyDict_GetItemStringRef(keep, "1", &item) < 0) { - return NULL; - } - if (item == NULL) { - PyErr_SetString(PyExc_ValueError, - "Unexpected NULL pointer in _objects"); - return NULL; - } -#ifndef NDEBUG - CDataObject *ptr2ptr = (CDataObject *)item; - // Don't construct a new object, - // return existing one instead to preserve refcount. - // Double-check that we are returning the same thing. - assert( - *(void**) self->b_ptr == ptr2ptr->b_ptr || - *(void**) self->b_value.c == ptr2ptr->b_ptr || - *(void**) self->b_ptr == ptr2ptr->b_value.c || - *(void**) self->b_value.c == ptr2ptr->b_value.c - ); -#endif - return item; - } - } - return PyCData_FromBaseObj(stgdict->proto, (PyObject *)self, 0, *(void **)self->b_ptr); diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 0d8ecce009a67a..1bd8fec97179e9 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -8,9 +8,9 @@ # include #endif -#include "pycore_call.h" // _PyObject_CallNoArgs() -#include "pycore_runtime.h" // _PyRuntime -#include "pycore_global_objects.h" // _Py_ID() +#include "pycore_call.h" // _PyObject_CallNoArgs() +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() +#include "pycore_runtime.h" // _Py_ID() #include diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 128506a9eed920..bfb40e5c5393fc 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -250,8 +250,8 @@ PyCField_get_size(PyObject *self, void *data) } static PyGetSetDef PyCField_getset[] = { - { "offset", PyCField_get_offset, NULL, "offset in bytes of this field" }, - { "size", PyCField_get_size, NULL, "size in bytes of this field" }, + { "offset", PyCField_get_offset, NULL, PyDoc_STR("offset in bytes of this field") }, + { "size", PyCField_get_size, NULL, PyDoc_STR("size in bytes of this field") }, { NULL, NULL, NULL, NULL }, }; diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c index 9b0ca73a8b1751..6fbcf77a115371 100644 --- a/Modules/_ctypes/stgdict.c +++ b/Modules/_ctypes/stgdict.c @@ -386,11 +386,11 @@ PyCStructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct if (fields == NULL) return 0; - if (PyObject_GetOptionalAttr(type, &_Py_ID(_swappedbytes_), &tmp) < 0) { + int rc = PyObject_HasAttrWithError(type, &_Py_ID(_swappedbytes_)); + if (rc < 0) { return -1; } - if (tmp) { - Py_DECREF(tmp); + if (rc) { big_endian = !PY_BIG_ENDIAN; } else { diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 191db3f84088d5..0d356779cfe192 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -3590,6 +3590,8 @@ static PyMethodDef date_methods[] = { {"replace", _PyCFunction_CAST(date_replace), METH_VARARGS | METH_KEYWORDS, PyDoc_STR("Return date with new specified fields.")}, + {"__replace__", _PyCFunction_CAST(date_replace), METH_VARARGS | METH_KEYWORDS}, + {"__reduce__", (PyCFunction)date_reduce, METH_NOARGS, PyDoc_STR("__reduce__() -> (cls, state)")}, @@ -4719,6 +4721,8 @@ static PyMethodDef time_methods[] = { {"replace", _PyCFunction_CAST(time_replace), METH_VARARGS | METH_KEYWORDS, PyDoc_STR("Return time with new specified fields.")}, + {"__replace__", _PyCFunction_CAST(time_replace), METH_VARARGS | METH_KEYWORDS}, + {"fromisoformat", (PyCFunction)time_fromisoformat, METH_O | METH_CLASS, PyDoc_STR("string -> time from a string in ISO 8601 format")}, @@ -6579,6 +6583,8 @@ static PyMethodDef datetime_methods[] = { {"replace", _PyCFunction_CAST(datetime_replace), METH_VARARGS | METH_KEYWORDS, PyDoc_STR("Return datetime with new specified fields.")}, + {"__replace__", _PyCFunction_CAST(datetime_replace), METH_VARARGS | METH_KEYWORDS}, + {"astimezone", _PyCFunction_CAST(datetime_astimezone), METH_VARARGS | METH_KEYWORDS, PyDoc_STR("tz -> convert to local time in new timezone tz\n")}, diff --git a/Modules/_decimal/tests/bench.py b/Modules/_decimal/tests/bench.py index 24e091b6887ccd..640290f2ec7962 100644 --- a/Modules/_decimal/tests/bench.py +++ b/Modules/_decimal/tests/bench.py @@ -7,6 +7,8 @@ import time +import sys +from functools import wraps from test.support.import_helper import import_fresh_module C = import_fresh_module('decimal', fresh=['_decimal']) @@ -64,66 +66,85 @@ def factorial(n, m): else: return factorial(n, (n+m)//2) * factorial((n+m)//2 + 1, m) +# Fix failed test cases caused by CVE-2020-10735 patch. +# See gh-95778 for details. +def increase_int_max_str_digits(maxdigits): + def _increase_int_max_str_digits(func, maxdigits=maxdigits): + @wraps(func) + def wrapper(*args, **kwargs): + previous_int_limit = sys.get_int_max_str_digits() + sys.set_int_max_str_digits(maxdigits) + ans = func(*args, **kwargs) + sys.set_int_max_str_digits(previous_int_limit) + return ans + return wrapper + return _increase_int_max_str_digits + +def test_calc_pi(): + print("\n# ======================================================================") + print("# Calculating pi, 10000 iterations") + print("# ======================================================================\n") + + to_benchmark = [pi_float, pi_decimal] + if C is not None: + to_benchmark.insert(1, pi_cdecimal) + + for prec in [9, 19]: + print("\nPrecision: %d decimal digits\n" % prec) + for func in to_benchmark: + start = time.time() + if C is not None: + C.getcontext().prec = prec + P.getcontext().prec = prec + for i in range(10000): + x = func() + print("%s:" % func.__name__.replace("pi_", "")) + print("result: %s" % str(x)) + print("time: %fs\n" % (time.time()-start)) + +@increase_int_max_str_digits(maxdigits=10000000) +def test_factorial(): + print("\n# ======================================================================") + print("# Factorial") + print("# ======================================================================\n") -print("\n# ======================================================================") -print("# Calculating pi, 10000 iterations") -print("# ======================================================================\n") - -to_benchmark = [pi_float, pi_decimal] -if C is not None: - to_benchmark.insert(1, pi_cdecimal) - -for prec in [9, 19]: - print("\nPrecision: %d decimal digits\n" % prec) - for func in to_benchmark: - start = time.time() - if C is not None: - C.getcontext().prec = prec - P.getcontext().prec = prec - for i in range(10000): - x = func() - print("%s:" % func.__name__.replace("pi_", "")) - print("result: %s" % str(x)) - print("time: %fs\n" % (time.time()-start)) - - -print("\n# ======================================================================") -print("# Factorial") -print("# ======================================================================\n") - -if C is not None: - c = C.getcontext() - c.prec = C.MAX_PREC - c.Emax = C.MAX_EMAX - c.Emin = C.MIN_EMIN + if C is not None: + c = C.getcontext() + c.prec = C.MAX_PREC + c.Emax = C.MAX_EMAX + c.Emin = C.MIN_EMIN -for n in [100000, 1000000]: + for n in [100000, 1000000]: - print("n = %d\n" % n) + print("n = %d\n" % n) - if C is not None: - # C version of decimal + if C is not None: + # C version of decimal + start_calc = time.time() + x = factorial(C.Decimal(n), 0) + end_calc = time.time() + start_conv = time.time() + sx = str(x) + end_conv = time.time() + print("cdecimal:") + print("calculation time: %fs" % (end_calc-start_calc)) + print("conversion time: %fs\n" % (end_conv-start_conv)) + + # Python integers start_calc = time.time() - x = factorial(C.Decimal(n), 0) + y = factorial(n, 0) end_calc = time.time() start_conv = time.time() - sx = str(x) - end_conv = time.time() - print("cdecimal:") - print("calculation time: %fs" % (end_calc-start_calc)) - print("conversion time: %fs\n" % (end_conv-start_conv)) + sy = str(y) + end_conv = time.time() - # Python integers - start_calc = time.time() - y = factorial(n, 0) - end_calc = time.time() - start_conv = time.time() - sy = str(y) - end_conv = time.time() + print("int:") + print("calculation time: %fs" % (end_calc-start_calc)) + print("conversion time: %fs\n\n" % (end_conv-start_conv)) - print("int:") - print("calculation time: %fs" % (end_calc-start_calc)) - print("conversion time: %fs\n\n" % (end_conv-start_conv)) + if C is not None: + assert(sx == sy) - if C is not None: - assert(sx == sy) +if __name__ == "__main__": + test_calc_pi() + test_factorial() diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 8cb57e693d81d7..f9d5793f9b6497 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -3532,12 +3532,11 @@ expat_start_doctype_handler(XMLParserObject *self, sysid_obj, NULL); Py_XDECREF(res); } - else if (PyObject_GetOptionalAttr((PyObject *)self, st->str_doctype, &res) > 0) { + else if (PyObject_HasAttrWithError((PyObject *)self, st->str_doctype) > 0) { (void)PyErr_WarnEx(PyExc_RuntimeWarning, "The doctype() method of XMLParser is ignored. " "Define doctype() method on the TreeBuilder target.", 1); - Py_DECREF(res); } Py_DECREF(doctype_name_obj); diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 389ff4391de0be..8ea493ad9ab278 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -725,7 +725,7 @@ functools_reduce(PyObject *self, PyObject *args) } PyDoc_STRVAR(functools_reduce_doc, -"reduce(function, iterable[, initial]) -> value\n\ +"reduce(function, iterable[, initial], /) -> value\n\ \n\ Apply a function of two arguments cumulatively to the items of a sequence\n\ or iterable, from left to right, so as to reduce the iterable to a single\n\ diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 0983a7bd151f40..e8caf9f0df6dbf 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -553,17 +553,14 @@ _io__Buffered_close_impl(buffered *self) } /* flush() will most probably re-take the lock, so drop it first */ LEAVE_BUFFERED(self) - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); + r = _PyFile_Flush((PyObject *)self); if (!ENTER_BUFFERED(self)) { return NULL; } PyObject *exc = NULL; - if (res == NULL) { + if (r < 0) { exc = PyErr_GetRaisedException(); } - else { - Py_DECREF(res); - } res = PyObject_CallMethodNoArgs(self->raw, &_Py_ID(close)); @@ -593,12 +590,11 @@ static PyObject * _io__Buffered_detach_impl(buffered *self) /*[clinic end generated code: output=dd0fc057b8b779f7 input=482762a345cc9f44]*/ { - PyObject *raw, *res; + PyObject *raw; CHECK_INITIALIZED(self) - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) + if (_PyFile_Flush((PyObject *)self) < 0) { return NULL; - Py_DECREF(res); + } raw = self->raw; self->raw = NULL; self->detached = 1; diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h index b2c52cf2a95a44..7577bdec5c3b20 100644 --- a/Modules/_io/clinic/bufferedio.c.h +++ b/Modules/_io/clinic/bufferedio.c.h @@ -26,7 +26,6 @@ _io__BufferedIOBase_readinto(PyObject *self, PyObject *arg) Py_buffer buffer = {NULL, NULL}; if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto", "argument", "read-write bytes-like object", arg); goto exit; } @@ -63,7 +62,6 @@ _io__BufferedIOBase_readinto1(PyObject *self, PyObject *arg) Py_buffer buffer = {NULL, NULL}; if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto1", "argument", "read-write bytes-like object", arg); goto exit; } @@ -590,7 +588,6 @@ _io__Buffered_readinto(buffered *self, PyObject *arg) Py_buffer buffer = {NULL, NULL}; if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto", "argument", "read-write bytes-like object", arg); goto exit; } @@ -627,7 +624,6 @@ _io__Buffered_readinto1(buffered *self, PyObject *arg) Py_buffer buffer = {NULL, NULL}; if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto1", "argument", "read-write bytes-like object", arg); goto exit; } @@ -1098,4 +1094,4 @@ _io_BufferedRandom___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=9e09091995ae02b0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f940cea085f0bf91 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h index d7364779200827..d42ab48cef2859 100644 --- a/Modules/_io/clinic/bytesio.c.h +++ b/Modules/_io/clinic/bytesio.c.h @@ -328,7 +328,6 @@ _io_BytesIO_readinto(bytesio *self, PyObject *arg) Py_buffer buffer = {NULL, NULL}; if (PyObject_GetBuffer(arg, &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto", "argument", "read-write bytes-like object", arg); goto exit; } @@ -538,4 +537,4 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8ab65edc03edbfe0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b753fdf1ba36c461 input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/fileio.c.h b/Modules/_io/clinic/fileio.c.h index 29f8cf6aa9a85c..deb99fa9d99bd0 100644 --- a/Modules/_io/clinic/fileio.c.h +++ b/Modules/_io/clinic/fileio.c.h @@ -245,7 +245,6 @@ _io_FileIO_readinto(fileio *self, PyTypeObject *cls, PyObject *const *args, Py_s goto exit; } if (PyObject_GetBuffer(args[0], &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto", "argument 1", "read-write bytes-like object", args[0]); goto exit; } @@ -536,4 +535,4 @@ _io_FileIO_isatty(fileio *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO_FILEIO_TRUNCATE_METHODDEF #define _IO_FILEIO_TRUNCATE_METHODDEF #endif /* !defined(_IO_FILEIO_TRUNCATE_METHODDEF) */ -/*[clinic end generated code: output=238dd48819076434 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2ce6ce923ccef86e input=a9049054013a1b77]*/ diff --git a/Modules/_io/clinic/winconsoleio.c.h b/Modules/_io/clinic/winconsoleio.c.h index 0683eecdfebb37..ecc71e552c23f4 100644 --- a/Modules/_io/clinic/winconsoleio.c.h +++ b/Modules/_io/clinic/winconsoleio.c.h @@ -243,7 +243,6 @@ _io__WindowsConsoleIO_readinto(winconsoleio *self, PyTypeObject *cls, PyObject * goto exit; } if (PyObject_GetBuffer(args[0], &buffer, PyBUF_WRITABLE) < 0) { - PyErr_Clear(); _PyArg_BadArgument("readinto", "argument 1", "read-write bytes-like object", args[0]); goto exit; } @@ -465,4 +464,4 @@ _io__WindowsConsoleIO_isatty(winconsoleio *self, PyObject *Py_UNUSED(ignored)) #ifndef _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF #define _IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF #endif /* !defined(_IO__WINDOWSCONSOLEIO_ISATTY_METHODDEF) */ -/*[clinic end generated code: output=7be51d48ddb7c8c8 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=37febc4c96732b3b input=a9049054013a1b77]*/ diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 34fcd702391f32..4da8e5bd572d74 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -148,13 +148,9 @@ _io__IOBase_truncate_impl(PyObject *self, PyTypeObject *cls, static int iobase_is_closed(PyObject *self) { - PyObject *res; - int ret; /* This gets the derived attribute, which is *not* __IOBase_closed in most cases! */ - ret = PyObject_GetOptionalAttr(self, &_Py_ID(__IOBase_closed), &res); - Py_XDECREF(res); - return ret; + return PyObject_HasAttrWithError(self, &_Py_ID(__IOBase_closed)); } /* Flush and close methods */ @@ -269,7 +265,7 @@ static PyObject * _io__IOBase_close_impl(PyObject *self) /*[clinic end generated code: output=63c6a6f57d783d6d input=f4494d5c31dbc6b7]*/ { - int rc, closed = iobase_is_closed(self); + int rc1, rc2, closed = iobase_is_closed(self); if (closed < 0) { return NULL; @@ -278,19 +274,14 @@ _io__IOBase_close_impl(PyObject *self) Py_RETURN_NONE; } - PyObject *res = PyObject_CallMethodNoArgs(self, &_Py_ID(flush)); - + rc1 = _PyFile_Flush(self); PyObject *exc = PyErr_GetRaisedException(); - rc = PyObject_SetAttr(self, &_Py_ID(__IOBase_closed), Py_True); + rc2 = PyObject_SetAttr(self, &_Py_ID(__IOBase_closed), Py_True); _PyErr_ChainExceptions1(exc); - if (rc < 0) { - Py_CLEAR(res); - } - - if (res == NULL) + if (rc1 < 0 || rc2 < 0) { return NULL; + } - Py_DECREF(res); Py_RETURN_NONE; } diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 0a727a6e0ecd8a..10ef8a803c50fd 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -1223,11 +1223,10 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, goto error; self->seekable = self->telling = r; - r = PyObject_GetOptionalAttr(buffer, &_Py_ID(read1), &res); + r = PyObject_HasAttrWithError(buffer, &_Py_ID(read1)); if (r < 0) { goto error; } - Py_XDECREF(res); self->has_read1 = r; self->encoding_start_of_stream = 0; @@ -1369,11 +1368,9 @@ _io_TextIOWrapper_reconfigure_impl(textio *self, PyObject *encoding, return NULL; } - PyObject *res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) { + if (_PyFile_Flush((PyObject *)self) < 0) { return NULL; } - Py_DECREF(res); self->b2cratio = 0; if (newline_obj != NULL && set_newline(self, newline) < 0) { @@ -1509,12 +1506,11 @@ static PyObject * _io_TextIOWrapper_detach_impl(textio *self) /*[clinic end generated code: output=7ba3715cd032d5f2 input=e5a71fbda9e1d9f9]*/ { - PyObject *buffer, *res; + PyObject *buffer; CHECK_ATTACHED(self); - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) + if (_PyFile_Flush((PyObject *)self) < 0) { return NULL; - Py_DECREF(res); + } buffer = self->buffer; self->buffer = NULL; self->detached = 1; @@ -1714,10 +1710,9 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text) } if (needflush) { - ret = PyObject_CallMethodNoArgs(self->buffer, &_Py_ID(flush)); - if (ret == NULL) + if (_PyFile_Flush(self->buffer) < 0) { return NULL; - Py_DECREF(ret); + } } textiowrapper_set_decoded_chars(self, NULL); @@ -2503,10 +2498,9 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) goto fail; } - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) + if (_PyFile_Flush((PyObject *)self) < 0) { goto fail; - Py_DECREF(res); + } textiowrapper_set_decoded_chars(self, NULL); Py_CLEAR(self->snapshot); @@ -2551,10 +2545,9 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) goto fail; } - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) + if (_PyFile_Flush((PyObject *)self) < 0) { goto fail; - Py_DECREF(res); + } /* The strategy of seek() is to go back to the safe start point * and replay the effect of read(chars_to_skip) from there. @@ -2678,10 +2671,9 @@ _io_TextIOWrapper_tell_impl(textio *self) if (_textiowrapper_writeflush(self) < 0) return NULL; - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) + if (_PyFile_Flush((PyObject *)self) < 0) { goto fail; - Py_DECREF(res); + } posobj = PyObject_CallMethodNoArgs(self->buffer, &_Py_ID(tell)); if (posobj == NULL) @@ -2886,14 +2878,11 @@ static PyObject * _io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos) /*[clinic end generated code: output=90ec2afb9bb7745f input=56ec8baa65aea377]*/ { - PyObject *res; - CHECK_ATTACHED(self) - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) + if (_PyFile_Flush((PyObject *)self) < 0) { return NULL; - Py_DECREF(res); + } return PyObject_CallMethodOneArg(self->buffer, &_Py_ID(truncate), pos); } @@ -3077,13 +3066,9 @@ _io_TextIOWrapper_close_impl(textio *self) PyErr_Clear(); } } - res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(flush)); - if (res == NULL) { + if (_PyFile_Flush((PyObject *)self) < 0) { exc = PyErr_GetRaisedException(); } - else { - Py_DECREF(res); - } res = PyObject_CallMethodNoArgs(self->buffer, &_Py_ID(close)); if (exc != NULL) { diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index 1847a4811e8ee9..fe8e4c5e30035b 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -10,35 +10,25 @@ This software comes with no warranty. Use at your own risk. ******************************************************************/ #include "Python.h" -#include "pycore_fileutils.h" -#include "pycore_pymem.h" // _PyMem_Strdup - -#include -#include -#include -#include +#include "pycore_fileutils.h" // _Py_GetLocaleconvNumeric() +#include "pycore_pymem.h" // _PyMem_Strdup() +#include // setlocale() +#include // strlen() #ifdef HAVE_ERRNO_H -#include +# include // errno #endif - #ifdef HAVE_LANGINFO_H -#include +# include // nl_langinfo() #endif - #ifdef HAVE_LIBINTL_H -#include -#endif - -#ifdef HAVE_WCHAR_H -#include +# include #endif - -#if defined(MS_WINDOWS) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include +#ifdef MS_WINDOWS +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include #endif PyDoc_STRVAR(locale__doc__, "Support for POSIX locales."); diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index e7dcb6e1713212..d23a756ace887d 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -5,7 +5,9 @@ #include "Python.h" #include "pycore_call.h" // _PyObject_CallNoArgs() #include "pycore_ceval.h" // _PyEval_SetProfile() +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #include "pycore_pystate.h" // _PyThreadState_GET() + #include "rotatingtree.h" /************************************************************/ diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c index 16b5cb5dd9ec7a..2e6d8eb68c0243 100644 --- a/Modules/_multiprocessing/multiprocessing.c +++ b/Modules/_multiprocessing/multiprocessing.c @@ -14,16 +14,17 @@ class HANDLE_converter(CConverter): type = "HANDLE" format_unit = '"F_HANDLE"' - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" {paramname} = PyLong_AsVoidPtr({argname}); if (!{paramname} && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=3e537d244034affb]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=3cf0318efc6a8772]*/ /*[clinic input] module _multiprocessing diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h index 296e0abb29a0f5..099004b437828e 100644 --- a/Modules/_multiprocessing/multiprocessing.h +++ b/Modules/_multiprocessing/multiprocessing.h @@ -10,6 +10,10 @@ #include "pythread.h" #include "pycore_signal.h" // _PyOS_IsMainThread() +#ifndef MS_WINDOWS +# include // sysconf() +#endif + /* * Platform includes and definitions */ diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c index d22b8d18e33e42..f8f2afda28d06d 100644 --- a/Modules/_multiprocessing/semaphore.c +++ b/Modules/_multiprocessing/semaphore.c @@ -9,6 +9,10 @@ #include "multiprocessing.h" +#ifdef HAVE_SYS_TIME_H +# include // gettimeofday() +#endif + #ifdef HAVE_MP_SEMAPHORE enum { RECURSIVE_MUTEX, SEMAPHORE }; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index b97524856eeca8..a3cf34699ba509 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5799,14 +5799,13 @@ instantiate(PyObject *cls, PyObject *args) into a newly created tuple. */ assert(PyTuple_Check(args)); if (!PyTuple_GET_SIZE(args) && PyType_Check(cls)) { - PyObject *func; - if (PyObject_GetOptionalAttr(cls, &_Py_ID(__getinitargs__), &func) < 0) { + int rc = PyObject_HasAttrWithError(cls, &_Py_ID(__getinitargs__)); + if (rc < 0) { return NULL; } - if (func == NULL) { + if (!rc) { return PyObject_CallMethodOneArg(cls, &_Py_ID(__new__), cls); } - Py_DECREF(func); } return PyObject_CallObject(cls, args); } diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index ef76d26282e1b3..2898eedc3e3a8f 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -87,15 +87,16 @@ class pid_t_converter(CConverter): type = 'pid_t' format_unit = '" _Py_PARSE_PID "' - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" {paramname} = PyLong_AsPid({argname}); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=5af1c116d56cbb5a]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=c94349aa1aad151d]*/ #include "clinic/_posixsubprocess.c.h" diff --git a/Modules/_sre/sre.c b/Modules/_sre/sre.c index 3872c3663c7294..07da5da13f70d3 100644 --- a/Modules/_sre/sre.c +++ b/Modules/_sre/sre.c @@ -43,12 +43,40 @@ static const char copyright[] = #include "pycore_long.h" // _PyLong_GetZero() #include "pycore_moduleobject.h" // _PyModule_GetState() +#include "sre.h" // SRE_CODE -#include "sre.h" +#include // tolower(), toupper(), isalnum() #define SRE_CODE_BITS (8 * sizeof(SRE_CODE)) -#include +// On macOS, use the wide character ctype API using btowc() +#if defined(__APPLE__) +# define USE_CTYPE_WINT_T +#endif + +static int sre_isalnum(unsigned int ch) { +#ifdef USE_CTYPE_WINT_T + return (unsigned int)iswalnum(btowc((int)ch)); +#else + return (unsigned int)isalnum((int)ch); +#endif +} + +static unsigned int sre_tolower(unsigned int ch) { +#ifdef USE_CTYPE_WINT_T + return (unsigned int)towlower(btowc((int)ch)); +#else + return (unsigned int)tolower((int)ch); +#endif +} + +static unsigned int sre_toupper(unsigned int ch) { +#ifdef USE_CTYPE_WINT_T + return (unsigned int)towupper(btowc((int)ch)); +#else + return (unsigned int)toupper((int)ch); +#endif +} /* Defining this one controls tracing: * 0 -- disabled @@ -114,17 +142,17 @@ static unsigned int sre_lower_ascii(unsigned int ch) /* locale-specific character predicates */ /* !(c & ~N) == (c < N+1) for any unsigned c, this avoids * warnings when c's type supports only numbers < N+1 */ -#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? isalnum((ch)) : 0) +#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0) #define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_') static unsigned int sre_lower_locale(unsigned int ch) { - return ((ch) < 256 ? (unsigned int)tolower((ch)) : ch); + return ((ch) < 256 ? (unsigned int)sre_tolower((ch)) : ch); } static unsigned int sre_upper_locale(unsigned int ch) { - return ((ch) < 256 ? (unsigned int)toupper((ch)) : ch); + return ((ch) < 256 ? (unsigned int)sre_toupper((ch)) : ch); } /* unicode-specific character predicates */ diff --git a/Modules/_struct.c b/Modules/_struct.c index 4ae21cce74f609..ff1bf4e96c5f21 100644 --- a/Modules/_struct.c +++ b/Modules/_struct.c @@ -12,7 +12,6 @@ #include "pycore_long.h" // _PyLong_AsByteArray() #include "pycore_moduleobject.h" // _PyModule_GetState() -#include #include // offsetof() /*[clinic input] @@ -110,18 +109,20 @@ class cache_struct_converter(CConverter): c_default = "NULL" broken_limited_capi = True - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + assert not limited_capi + return self.format_code(""" if (!{converter}(module, {argname}, &{paramname})) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.name, - converter=self.converter) + """, + argname=argname, + converter=self.converter) def cleanup(self): return "Py_XDECREF(%s);\n" % self.name [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=14e83804f599ed8f]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=c33b27d6b06006c6]*/ static int cache_struct_converter(PyObject *, PyObject *, PyStructObject **); @@ -2197,8 +2198,8 @@ static PyMemberDef s_members[] = { }; static PyGetSetDef s_getsetlist[] = { - {"format", (getter)s_get_format, (setter)NULL, "struct format string", NULL}, - {"size", (getter)s_get_size, (setter)NULL, "struct size in bytes", NULL}, + {"format", (getter)s_get_format, (setter)NULL, PyDoc_STR("struct format string"), NULL}, + {"size", (getter)s_get_size, (setter)NULL, PyDoc_STR("struct size in bytes"), NULL}, {NULL} /* sentinel */ }; diff --git a/Modules/_testcapi/abstract.c b/Modules/_testcapi/abstract.c index 91a1ee3aaafc02..81a3dea4c1dfde 100644 --- a/Modules/_testcapi/abstract.c +++ b/Modules/_testcapi/abstract.c @@ -32,7 +32,7 @@ object_getattrstring(PyObject *self, PyObject *args) static PyObject * object_getoptionalattr(PyObject *self, PyObject *args) { - PyObject *obj, *attr_name, *value; + PyObject *obj, *attr_name, *value = UNINITIALIZED_PTR; if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) { return NULL; } @@ -57,7 +57,7 @@ object_getoptionalattr(PyObject *self, PyObject *args) static PyObject * object_getoptionalattrstring(PyObject *self, PyObject *args) { - PyObject *obj, *value; + PyObject *obj, *value = UNINITIALIZED_PTR; const char *attr_name; Py_ssize_t size; if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) { @@ -105,6 +105,31 @@ object_hasattrstring(PyObject *self, PyObject *args) return PyLong_FromLong(PyObject_HasAttrString(obj, attr_name)); } +static PyObject * +object_hasattrwitherror(PyObject *self, PyObject *args) +{ + PyObject *obj, *attr_name; + if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) { + return NULL; + } + NULLABLE(obj); + NULLABLE(attr_name); + RETURN_INT(PyObject_HasAttrWithError(obj, attr_name)); +} + +static PyObject * +object_hasattrstringwitherror(PyObject *self, PyObject *args) +{ + PyObject *obj; + const char *attr_name; + Py_ssize_t size; + if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) { + return NULL; + } + NULLABLE(obj); + RETURN_INT(PyObject_HasAttrStringWithError(obj, attr_name)); +} + static PyObject * object_setattr(PyObject *self, PyObject *args) { @@ -207,7 +232,7 @@ mapping_getitemstring(PyObject *self, PyObject *args) static PyObject * mapping_getoptionalitem(PyObject *self, PyObject *args) { - PyObject *obj, *attr_name, *value; + PyObject *obj, *attr_name, *value = UNINITIALIZED_PTR; if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) { return NULL; } @@ -232,7 +257,7 @@ mapping_getoptionalitem(PyObject *self, PyObject *args) static PyObject * mapping_getoptionalitemstring(PyObject *self, PyObject *args) { - PyObject *obj, *value; + PyObject *obj, *value = UNINITIALIZED_PTR; const char *attr_name; Py_ssize_t size; if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) { @@ -280,6 +305,31 @@ mapping_haskeystring(PyObject *self, PyObject *args) return PyLong_FromLong(PyMapping_HasKeyString(mapping, key)); } +static PyObject * +mapping_haskeywitherror(PyObject *self, PyObject *args) +{ + PyObject *mapping, *key; + if (!PyArg_ParseTuple(args, "OO", &mapping, &key)) { + return NULL; + } + NULLABLE(mapping); + NULLABLE(key); + RETURN_INT(PyMapping_HasKeyWithError(mapping, key)); +} + +static PyObject * +mapping_haskeystringwitherror(PyObject *self, PyObject *args) +{ + PyObject *mapping; + const char *key; + Py_ssize_t size; + if (!PyArg_ParseTuple(args, "Oz#", &mapping, &key, &size)) { + return NULL; + } + NULLABLE(mapping); + RETURN_INT(PyMapping_HasKeyStringWithError(mapping, key)); +} + static PyObject * object_setitem(PyObject *self, PyObject *args) { @@ -568,6 +618,8 @@ static PyMethodDef test_methods[] = { {"object_getoptionalattrstring", object_getoptionalattrstring, METH_VARARGS}, {"object_hasattr", object_hasattr, METH_VARARGS}, {"object_hasattrstring", object_hasattrstring, METH_VARARGS}, + {"object_hasattrwitherror", object_hasattrwitherror, METH_VARARGS}, + {"object_hasattrstringwitherror", object_hasattrstringwitherror, METH_VARARGS}, {"object_setattr", object_setattr, METH_VARARGS}, {"object_setattrstring", object_setattrstring, METH_VARARGS}, {"object_delattr", object_delattr, METH_VARARGS}, @@ -582,6 +634,8 @@ static PyMethodDef test_methods[] = { {"mapping_getoptionalitemstring", mapping_getoptionalitemstring, METH_VARARGS}, {"mapping_haskey", mapping_haskey, METH_VARARGS}, {"mapping_haskeystring", mapping_haskeystring, METH_VARARGS}, + {"mapping_haskeywitherror", mapping_haskeywitherror, METH_VARARGS}, + {"mapping_haskeystringwitherror", mapping_haskeystringwitherror, METH_VARARGS}, {"object_setitem", object_setitem, METH_VARARGS}, {"mapping_setitemstring", mapping_setitemstring, METH_VARARGS}, {"object_delitem", object_delitem, METH_VARARGS}, diff --git a/Modules/_testcapi/clinic/exceptions.c.h b/Modules/_testcapi/clinic/exceptions.c.h index 01881534329c9d..39b5f8b91a00db 100644 --- a/Modules/_testcapi/clinic/exceptions.c.h +++ b/Modules/_testcapi/clinic/exceptions.c.h @@ -394,38 +394,6 @@ PyDoc_STRVAR(_testcapi_set_exception__doc__, #define _TESTCAPI_SET_EXCEPTION_METHODDEF \ {"set_exception", (PyCFunction)_testcapi_set_exception, METH_O, _testcapi_set_exception__doc__}, -PyDoc_STRVAR(_testcapi_write_unraisable_exc__doc__, -"write_unraisable_exc($module, exception, err_msg, obj, /)\n" -"--\n" -"\n"); - -#define _TESTCAPI_WRITE_UNRAISABLE_EXC_METHODDEF \ - {"write_unraisable_exc", _PyCFunction_CAST(_testcapi_write_unraisable_exc), METH_FASTCALL, _testcapi_write_unraisable_exc__doc__}, - -static PyObject * -_testcapi_write_unraisable_exc_impl(PyObject *module, PyObject *exc, - PyObject *err_msg, PyObject *obj); - -static PyObject * -_testcapi_write_unraisable_exc(PyObject *module, PyObject *const *args, Py_ssize_t nargs) -{ - PyObject *return_value = NULL; - PyObject *exc; - PyObject *err_msg; - PyObject *obj; - - if (!_PyArg_CheckPositional("write_unraisable_exc", nargs, 3, 3)) { - goto exit; - } - exc = args[0]; - err_msg = args[1]; - obj = args[2]; - return_value = _testcapi_write_unraisable_exc_impl(module, exc, err_msg, obj); - -exit: - return return_value; -} - PyDoc_STRVAR(_testcapi_traceback_print__doc__, "traceback_print($module, traceback, file, /)\n" "--\n" @@ -487,4 +455,4 @@ _testcapi_unstable_exc_prep_reraise_star(PyObject *module, PyObject *const *args exit: return return_value; } -/*[clinic end generated code: output=8f273949da28ffb5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ff19512450b3bbdb input=a9049054013a1b77]*/ diff --git a/Modules/_testcapi/clinic/long.c.h b/Modules/_testcapi/clinic/long.c.h index b77cb51810cb65..e2f7042be12c48 100644 --- a/Modules/_testcapi/clinic/long.c.h +++ b/Modules/_testcapi/clinic/long.c.h @@ -133,23 +133,6 @@ _testcapi_test_long_as_double(PyObject *module, PyObject *Py_UNUSED(ignored)) return _testcapi_test_long_as_double_impl(module); } -PyDoc_STRVAR(_testcapi_test_long_numbits__doc__, -"test_long_numbits($module, /)\n" -"--\n" -"\n"); - -#define _TESTCAPI_TEST_LONG_NUMBITS_METHODDEF \ - {"test_long_numbits", (PyCFunction)_testcapi_test_long_numbits, METH_NOARGS, _testcapi_test_long_numbits__doc__}, - -static PyObject * -_testcapi_test_long_numbits_impl(PyObject *module); - -static PyObject * -_testcapi_test_long_numbits(PyObject *module, PyObject *Py_UNUSED(ignored)) -{ - return _testcapi_test_long_numbits_impl(module); -} - PyDoc_STRVAR(_testcapi_call_long_compact_api__doc__, "call_long_compact_api($module, arg, /)\n" "--\n" @@ -165,4 +148,4 @@ PyDoc_STRVAR(_testcapi_PyLong_AsInt__doc__, #define _TESTCAPI_PYLONG_ASINT_METHODDEF \ {"PyLong_AsInt", (PyCFunction)_testcapi_PyLong_AsInt, METH_O, _testcapi_PyLong_AsInt__doc__}, -/*[clinic end generated code: output=31267ab2dd90aa1d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=de762870526e241d input=a9049054013a1b77]*/ diff --git a/Modules/_testcapi/code.c b/Modules/_testcapi/code.c index 691dd5fe043811..c0193489b6f340 100644 --- a/Modules/_testcapi/code.c +++ b/Modules/_testcapi/code.c @@ -1,4 +1,5 @@ #include "parts.h" +#include "util.h" static Py_ssize_t get_code_extra_index(PyInterpreterState* interp) { @@ -75,7 +76,7 @@ test_code_extra(PyObject* self, PyObject *Py_UNUSED(callable)) } // Check the value is initially NULL - void *extra; + void *extra = UNINITIALIZED_PTR; int res = PyUnstable_Code_GetExtra(test_func_code, code_extra_index, &extra); if (res < 0) { goto finally; @@ -88,6 +89,7 @@ test_code_extra(PyObject* self, PyObject *Py_UNUSED(callable)) goto finally; } // Assert it was set correctly + extra = UNINITIALIZED_PTR; res = PyUnstable_Code_GetExtra(test_func_code, code_extra_index, &extra); if (res < 0) { goto finally; diff --git a/Modules/_testcapi/dict.c b/Modules/_testcapi/dict.c index 6720f0437401ef..810989fbed85f9 100644 --- a/Modules/_testcapi/dict.c +++ b/Modules/_testcapi/dict.c @@ -139,7 +139,7 @@ dict_getitemwitherror(PyObject *self, PyObject *args) static PyObject * dict_getitemref(PyObject *self, PyObject *args) { - PyObject *obj, *attr_name, *value; + PyObject *obj, *attr_name, *value = UNINITIALIZED_PTR; if (!PyArg_ParseTuple(args, "OO", &obj, &attr_name)) { return NULL; } @@ -164,7 +164,7 @@ dict_getitemref(PyObject *self, PyObject *args) static PyObject * dict_getitemstringref(PyObject *self, PyObject *args) { - PyObject *obj, *value; + PyObject *obj, *value = UNINITIALIZED_PTR; const char *attr_name; Py_ssize_t size; if (!PyArg_ParseTuple(args, "Oz#", &obj, &attr_name, &size)) { @@ -276,7 +276,7 @@ dict_items(PyObject *self, PyObject *obj) static PyObject * dict_next(PyObject *self, PyObject *args) { - PyObject *mapping, *key, *value; + PyObject *mapping, *key = UNINITIALIZED_PTR, *value = UNINITIALIZED_PTR; Py_ssize_t pos; if (!PyArg_ParseTuple(args, "On", &mapping, &pos)) { return NULL; @@ -286,6 +286,8 @@ dict_next(PyObject *self, PyObject *args) if (rc != 0) { return Py_BuildValue("inOO", rc, pos, key, value); } + assert(key == UNINITIALIZED_PTR); + assert(value == UNINITIALIZED_PTR); if (PyErr_Occurred()) { return NULL; } diff --git a/Modules/_testcapi/docstring.c b/Modules/_testcapi/docstring.c index b680171cc1437a..d99fbdd904b594 100644 --- a/Modules/_testcapi/docstring.c +++ b/Modules/_testcapi/docstring.c @@ -100,6 +100,13 @@ static PyMethodDef test_methods[] = { {"test_with_docstring", test_with_docstring, METH_VARARGS, PyDoc_STR("This is a pretty normal docstring.")}, + {"func_with_unrepresentable_signature", + (PyCFunction)test_with_docstring, METH_VARARGS, + PyDoc_STR( + "func_with_unrepresentable_signature($module, /, a, b=)\n" + "--\n\n" + "This docstring has a signature with unrepresentable default." + )}, {NULL}, }; @@ -140,6 +147,40 @@ static PyTypeObject DocStringNoSignatureTest = { .tp_new = PyType_GenericNew, }; +static PyMethodDef DocStringUnrepresentableSignatureTest_methods[] = { + {"meth", + (PyCFunction)test_with_docstring, METH_VARARGS, + PyDoc_STR( + "meth($self, /, a, b=)\n" + "--\n\n" + "This docstring has a signature with unrepresentable default." + )}, + {"classmeth", + (PyCFunction)test_with_docstring, METH_VARARGS|METH_CLASS, + PyDoc_STR( + "classmeth($type, /, a, b=)\n" + "--\n\n" + "This docstring has a signature with unrepresentable default." + )}, + {"staticmeth", + (PyCFunction)test_with_docstring, METH_VARARGS|METH_STATIC, + PyDoc_STR( + "staticmeth(a, b=)\n" + "--\n\n" + "This docstring has a signature with unrepresentable default." + )}, + {NULL}, +}; + +static PyTypeObject DocStringUnrepresentableSignatureTest = { + PyVarObject_HEAD_INIT(NULL, 0) + .tp_name = "_testcapi.DocStringUnrepresentableSignatureTest", + .tp_basicsize = sizeof(PyObject), + .tp_flags = Py_TPFLAGS_DEFAULT, + .tp_methods = DocStringUnrepresentableSignatureTest_methods, + .tp_new = PyType_GenericNew, +}; + int _PyTestCapi_Init_Docstring(PyObject *mod) { @@ -149,5 +190,8 @@ _PyTestCapi_Init_Docstring(PyObject *mod) if (PyModule_AddType(mod, &DocStringNoSignatureTest) < 0) { return -1; } + if (PyModule_AddType(mod, &DocStringUnrepresentableSignatureTest) < 0) { + return -1; + } return 0; } diff --git a/Modules/_testcapi/exceptions.c b/Modules/_testcapi/exceptions.c index 025b42db247e81..b54ce0cbb0dd20 100644 --- a/Modules/_testcapi/exceptions.c +++ b/Modules/_testcapi/exceptions.c @@ -120,12 +120,15 @@ _testcapi_exc_set_object_fetch_impl(PyObject *module, PyObject *exc, PyObject *obj) /*[clinic end generated code: output=7a5ff5f6d3cf687f input=77ec686f1f95fa38]*/ { - PyObject *type; - PyObject *value; - PyObject *tb; + PyObject *type = UNINITIALIZED_PTR; + PyObject *value = UNINITIALIZED_PTR; + PyObject *tb = UNINITIALIZED_PTR; PyErr_SetObject(exc, obj); PyErr_Fetch(&type, &value, &tb); + assert(type != UNINITIALIZED_PTR); + assert(value != UNINITIALIZED_PTR); + assert(tb != UNINITIALIZED_PTR); Py_XDECREF(type); Py_XDECREF(tb); return value; @@ -244,7 +247,7 @@ _testcapi_set_exc_info_impl(PyObject *module, PyObject *new_type, PyObject *new_value, PyObject *new_tb) /*[clinic end generated code: output=b55fa35dec31300e input=ea9f19e0f55fe5b3]*/ { - PyObject *type, *value, *tb; + PyObject *type = UNINITIALIZED_PTR, *value = UNINITIALIZED_PTR, *tb = UNINITIALIZED_PTR; PyErr_GetExcInfo(&type, &value, &tb); Py_INCREF(new_type); @@ -278,36 +281,6 @@ _testcapi_set_exception(PyObject *module, PyObject *new_exc) return exc; } -/*[clinic input] -_testcapi.write_unraisable_exc - exception as exc: object - err_msg: object - obj: object - / -[clinic start generated code]*/ - -static PyObject * -_testcapi_write_unraisable_exc_impl(PyObject *module, PyObject *exc, - PyObject *err_msg, PyObject *obj) -/*[clinic end generated code: output=39827c5e0a8c2092 input=582498da5b2ee6cf]*/ -{ - - const char *err_msg_utf8; - if (err_msg != Py_None) { - err_msg_utf8 = PyUnicode_AsUTF8(err_msg); - if (err_msg_utf8 == NULL) { - return NULL; - } - } - else { - err_msg_utf8 = NULL; - } - - PyErr_SetObject((PyObject *)Py_TYPE(exc), exc); - _PyErr_WriteUnraisableMsg(err_msg_utf8, obj); - Py_RETURN_NONE; -} - /*[clinic input] _testcapi.traceback_print traceback: object @@ -384,7 +357,6 @@ static PyMethodDef test_methods[] = { _TESTCAPI_SET_EXC_INFO_METHODDEF _TESTCAPI_SET_EXCEPTION_METHODDEF _TESTCAPI_TRACEBACK_PRINT_METHODDEF - _TESTCAPI_WRITE_UNRAISABLE_EXC_METHODDEF _TESTCAPI_UNSTABLE_EXC_PREP_RERAISE_STAR_METHODDEF {NULL}, }; diff --git a/Modules/_testcapi/getargs.c b/Modules/_testcapi/getargs.c index 10a1c1dd05253d..5f4a6dc8ca7672 100644 --- a/Modules/_testcapi/getargs.c +++ b/Modules/_testcapi/getargs.c @@ -589,54 +589,6 @@ getargs_y_hash(PyObject *self, PyObject *args) return PyBytes_FromStringAndSize(str, size); } -static PyObject * -getargs_u(PyObject *self, PyObject *args) -{ - wchar_t *str; - if (!PyArg_ParseTuple(args, "u", &str)) { - return NULL; - } - return PyUnicode_FromWideChar(str, -1); -} - -static PyObject * -getargs_u_hash(PyObject *self, PyObject *args) -{ - wchar_t *str; - Py_ssize_t size; - if (!PyArg_ParseTuple(args, "u#", &str, &size)) { - return NULL; - } - return PyUnicode_FromWideChar(str, size); -} - -static PyObject * -getargs_Z(PyObject *self, PyObject *args) -{ - wchar_t *str; - if (!PyArg_ParseTuple(args, "Z", &str)) { - return NULL; - } - if (str != NULL) { - return PyUnicode_FromWideChar(str, -1); - } - Py_RETURN_NONE; -} - -static PyObject * -getargs_Z_hash(PyObject *self, PyObject *args) -{ - wchar_t *str; - Py_ssize_t size; - if (!PyArg_ParseTuple(args, "Z#", &str, &size)) { - return NULL; - } - if (str != NULL) { - return PyUnicode_FromWideChar(str, size); - } - Py_RETURN_NONE; -} - static PyObject * getargs_es(PyObject *self, PyObject *args) { @@ -845,8 +797,6 @@ static PyMethodDef test_methods[] = { {"getargs_S", getargs_S, METH_VARARGS}, {"getargs_U", getargs_U, METH_VARARGS}, {"getargs_Y", getargs_Y, METH_VARARGS}, - {"getargs_Z", getargs_Z, METH_VARARGS}, - {"getargs_Z_hash", getargs_Z_hash, METH_VARARGS}, {"getargs_b", getargs_b, METH_VARARGS}, {"getargs_c", getargs_c, METH_VARARGS}, {"getargs_d", getargs_d, METH_VARARGS}, @@ -868,8 +818,6 @@ static PyMethodDef test_methods[] = { {"getargs_s_hash", getargs_s_hash, METH_VARARGS}, {"getargs_s_star", getargs_s_star, METH_VARARGS}, {"getargs_tuple", getargs_tuple, METH_VARARGS}, - {"getargs_u", getargs_u, METH_VARARGS}, - {"getargs_u_hash", getargs_u_hash, METH_VARARGS}, {"getargs_w_star", getargs_w_star, METH_VARARGS}, {"getargs_y", getargs_y, METH_VARARGS}, {"getargs_y_hash", getargs_y_hash, METH_VARARGS}, diff --git a/Modules/_testcapi/heaptype_relative.c b/Modules/_testcapi/heaptype_relative.c index c247ca33b33708..53dd01d1ed4f80 100644 --- a/Modules/_testcapi/heaptype_relative.c +++ b/Modules/_testcapi/heaptype_relative.c @@ -3,8 +3,6 @@ #include // max_align_t #include // memset -#ifdef LIMITED_API_AVAILABLE - static PyType_Slot empty_slots[] = { {0, NULL}, }; @@ -339,5 +337,3 @@ _PyTestCapi_Init_HeaptypeRelative(PyObject *m) { return 0; } - -#endif // LIMITED_API_AVAILABLE diff --git a/Modules/_testcapi/long.c b/Modules/_testcapi/long.c index c1d2d42a2c434e..4362f431fc3f4d 100644 --- a/Modules/_testcapi/long.c +++ b/Modules/_testcapi/long.c @@ -4,7 +4,6 @@ #include "parts.h" #include "clinic/long.c.h" -#include "pycore_long.h" // _PyLong_Sign() /*[clinic input] module _testcapi @@ -535,57 +534,6 @@ _testcapi_test_long_as_double_impl(PyObject *module) return Py_None; } -/*[clinic input] -_testcapi.test_long_numbits -[clinic start generated code]*/ - -static PyObject * -_testcapi_test_long_numbits_impl(PyObject *module) -/*[clinic end generated code: output=9eaf8458cb15d7f7 input=265c02d48a13059e]*/ -{ - struct triple { - long input; - size_t nbits; - int sign; - } testcases[] = {{0, 0, 0}, - {1L, 1, 1}, - {-1L, 1, -1}, - {2L, 2, 1}, - {-2L, 2, -1}, - {3L, 2, 1}, - {-3L, 2, -1}, - {4L, 3, 1}, - {-4L, 3, -1}, - {0x7fffL, 15, 1}, /* one Python int digit */ - {-0x7fffL, 15, -1}, - {0xffffL, 16, 1}, - {-0xffffL, 16, -1}, - {0xfffffffL, 28, 1}, - {-0xfffffffL, 28, -1}}; - size_t i; - - for (i = 0; i < Py_ARRAY_LENGTH(testcases); ++i) { - size_t nbits; - int sign; - PyObject *plong; - - plong = PyLong_FromLong(testcases[i].input); - if (plong == NULL) - return NULL; - nbits = _PyLong_NumBits(plong); - sign = _PyLong_Sign(plong); - - Py_DECREF(plong); - if (nbits != testcases[i].nbits) - return raiseTestError("test_long_numbits", - "wrong result for _PyLong_NumBits"); - if (sign != testcases[i].sign) - return raiseTestError("test_long_numbits", - "wrong result for _PyLong_Sign"); - } - Py_RETURN_NONE; -} - /*[clinic input] _testcapi.call_long_compact_api arg: object @@ -631,7 +579,6 @@ static PyMethodDef test_methods[] = { _TESTCAPI_TEST_LONG_AS_SIZE_T_METHODDEF _TESTCAPI_TEST_LONG_AS_UNSIGNED_LONG_LONG_MASK_METHODDEF _TESTCAPI_TEST_LONG_LONG_AND_OVERFLOW_METHODDEF - _TESTCAPI_TEST_LONG_NUMBITS_METHODDEF _TESTCAPI_TEST_LONGLONG_API_METHODDEF _TESTCAPI_CALL_LONG_COMPACT_API_METHODDEF _TESTCAPI_PYLONG_ASINT_METHODDEF diff --git a/Modules/_testcapi/parts.h b/Modules/_testcapi/parts.h index c162dbc65db81a..24abe54814e611 100644 --- a/Modules/_testcapi/parts.h +++ b/Modules/_testcapi/parts.h @@ -4,8 +4,24 @@ // Always enable assertions #undef NDEBUG +// The _testcapi extension tests the public C API: header files in Include/ and +// Include/cpython/ directories. The internal C API must not be tested by +// _testcapi: use _testinternalcapi for that. +// +// _testcapi C files can built with the Py_BUILD_CORE_BUILTIN macro defined if +// one of the Modules/Setup files asks to build _testcapi as "static" +// (gh-109723). +// +// The Visual Studio projects builds _testcapi with Py_BUILD_CORE_MODULE. +#undef Py_BUILD_CORE_MODULE +#undef Py_BUILD_CORE_BUILTIN + #include "Python.h" +#ifdef Py_BUILD_CORE +# error "_testcapi must test the public Python C API, not the internal C API" +#endif + int _PyTestCapi_Init_Vectorcall(PyObject *module); int _PyTestCapi_Init_Heaptype(PyObject *module); int _PyTestCapi_Init_Abstract(PyObject *module); diff --git a/Modules/_testcapi/pyatomic.c b/Modules/_testcapi/pyatomic.c index 15602ce3f4ab3b..5aedf687705707 100644 --- a/Modules/_testcapi/pyatomic.c +++ b/Modules/_testcapi/pyatomic.c @@ -4,11 +4,6 @@ * This only tests basic functionality, not any synchronizing ordering. */ -/* Always enable assertions */ -#undef NDEBUG - -#include "Python.h" -#include "cpython/pyatomic.h" #include "parts.h" // We define atomic bitwise operations on these types diff --git a/Modules/_testcapi/unicode.c b/Modules/_testcapi/unicode.c index f2cf9a744007d9..232b2ad543fca0 100644 --- a/Modules/_testcapi/unicode.c +++ b/Modules/_testcapi/unicode.c @@ -490,7 +490,7 @@ static PyObject * unicode_aswidecharstring(PyObject *self, PyObject *args) { PyObject *unicode, *result; - Py_ssize_t size = 100; + Py_ssize_t size = UNINITIALIZED_SIZE; wchar_t *buffer; if (!PyArg_ParseTuple(args, "O", &unicode)) @@ -498,8 +498,10 @@ unicode_aswidecharstring(PyObject *self, PyObject *args) NULLABLE(unicode); buffer = PyUnicode_AsWideCharString(unicode, &size); - if (buffer == NULL) + if (buffer == NULL) { + assert(size == UNINITIALIZED_SIZE); return NULL; + } result = PyUnicode_FromWideChar(buffer, size + 1); PyMem_Free(buffer); @@ -624,15 +626,17 @@ unicode_asutf8andsize(PyObject *self, PyObject *args) PyObject *unicode; Py_ssize_t buflen; const char *s; - Py_ssize_t size = -100; + Py_ssize_t size = UNINITIALIZED_SIZE; if (!PyArg_ParseTuple(args, "On", &unicode, &buflen)) return NULL; NULLABLE(unicode); s = PyUnicode_AsUTF8AndSize(unicode, &size); - if (s == NULL) + if (s == NULL) { + assert(size == UNINITIALIZED_SIZE); return NULL; + } return Py_BuildValue("(y#n)", s, buflen, size); } @@ -726,7 +730,7 @@ unicode_decodeutf7stateful(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - Py_ssize_t consumed; + Py_ssize_t consumed = UNINITIALIZED_SIZE; PyObject *result; if (!PyArg_ParseTuple(args, "y#|z", &data, &size, &errors)) @@ -734,6 +738,7 @@ unicode_decodeutf7stateful(PyObject *self, PyObject *args) result = PyUnicode_DecodeUTF7Stateful(data, size, errors, &consumed); if (!result) { + assert(consumed == UNINITIALIZED_SIZE); return NULL; } return Py_BuildValue("(Nn)", result, consumed); @@ -760,7 +765,7 @@ unicode_decodeutf8stateful(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - Py_ssize_t consumed = 123456789; + Py_ssize_t consumed = UNINITIALIZED_SIZE; PyObject *result; if (!PyArg_ParseTuple(args, "y#|z", &data, &size, &errors)) @@ -768,6 +773,7 @@ unicode_decodeutf8stateful(PyObject *self, PyObject *args) result = PyUnicode_DecodeUTF8Stateful(data, size, errors, &consumed); if (!result) { + assert(consumed == UNINITIALIZED_SIZE); return NULL; } return Py_BuildValue("(Nn)", result, consumed); @@ -788,7 +794,7 @@ unicode_decodeutf32(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - int byteorder; + int byteorder = UNINITIALIZED_INT; PyObject *result; if (!PyArg_ParseTuple(args, "iy#|z", &byteorder, &data, &size, &errors)) @@ -808,8 +814,8 @@ unicode_decodeutf32stateful(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - int byteorder; - Py_ssize_t consumed; + int byteorder = UNINITIALIZED_INT; + Py_ssize_t consumed = UNINITIALIZED_SIZE; PyObject *result; if (!PyArg_ParseTuple(args, "iy#|z", &byteorder, &data, &size, &errors)) @@ -817,6 +823,7 @@ unicode_decodeutf32stateful(PyObject *self, PyObject *args) result = PyUnicode_DecodeUTF32Stateful(data, size, errors, &byteorder, &consumed); if (!result) { + assert(consumed == UNINITIALIZED_SIZE); return NULL; } return Py_BuildValue("(iNn)", byteorder, result, consumed); @@ -837,7 +844,7 @@ unicode_decodeutf16(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - int byteorder = 0; + int byteorder = UNINITIALIZED_INT; PyObject *result; if (!PyArg_ParseTuple(args, "iy#|z", &byteorder, &data, &size, &errors)) @@ -857,8 +864,8 @@ unicode_decodeutf16stateful(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - int byteorder; - Py_ssize_t consumed; + int byteorder = UNINITIALIZED_INT; + Py_ssize_t consumed = UNINITIALIZED_SIZE; PyObject *result; if (!PyArg_ParseTuple(args, "iy#|z", &byteorder, &data, &size, &errors)) @@ -866,6 +873,7 @@ unicode_decodeutf16stateful(PyObject *self, PyObject *args) result = PyUnicode_DecodeUTF16Stateful(data, size, errors, &byteorder, &consumed); if (!result) { + assert(consumed == UNINITIALIZED_SIZE); return NULL; } return Py_BuildValue("(iNn)", byteorder, result, consumed); @@ -1019,7 +1027,7 @@ unicode_decodembcsstateful(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - Py_ssize_t consumed; + Py_ssize_t consumed = UNINITIALIZED_SIZE; PyObject *result; if (!PyArg_ParseTuple(args, "y#|z", &data, &size, &errors)) @@ -1027,6 +1035,7 @@ unicode_decodembcsstateful(PyObject *self, PyObject *args) result = PyUnicode_DecodeMBCSStateful(data, size, errors, &consumed); if (!result) { + assert(consumed == UNINITIALIZED_SIZE); return NULL; } return Py_BuildValue("(Nn)", result, consumed); @@ -1040,7 +1049,7 @@ unicode_decodecodepagestateful(PyObject *self, PyObject *args) const char *data; Py_ssize_t size; const char *errors = NULL; - Py_ssize_t consumed; + Py_ssize_t consumed = UNINITIALIZED_SIZE; PyObject *result; if (!PyArg_ParseTuple(args, "iy#|z", &code_page, &data, &size, &errors)) @@ -1048,6 +1057,7 @@ unicode_decodecodepagestateful(PyObject *self, PyObject *args) result = PyUnicode_DecodeCodePageStateful(code_page, data, size, errors, &consumed); if (!result) { + assert(consumed == UNINITIALIZED_SIZE); return NULL; } return Py_BuildValue("(Nn)", result, consumed); diff --git a/Modules/_testcapi/util.h b/Modules/_testcapi/util.h index 05ccb12a4444f8..f26d7656a10138 100644 --- a/Modules/_testcapi/util.h +++ b/Modules/_testcapi/util.h @@ -23,3 +23,11 @@ assert(!PyErr_Occurred()); \ return PyLong_FromSsize_t(_ret); \ } while (0) + +/* Marker to check that pointer value was set. */ +static const char uninitialized[] = "uninitialized"; +#define UNINITIALIZED_PTR ((void *)uninitialized) +/* Marker to check that Py_ssize_t value was set. */ +#define UNINITIALIZED_SIZE ((Py_ssize_t)236892191) +/* Marker to check that integer value was set. */ +#define UNINITIALIZED_INT (63256717) diff --git a/Modules/_testcapi/vectorcall_limited.c b/Modules/_testcapi/vectorcall_limited.c index a96925e840121a..e981c8625c2fb2 100644 --- a/Modules/_testcapi/vectorcall_limited.c +++ b/Modules/_testcapi/vectorcall_limited.c @@ -1,10 +1,6 @@ #define Py_LIMITED_API 0x030c0000 // 3.12 #include "parts.h" -#ifdef LIMITED_API_AVAILABLE - - - /* Test Vectorcall in the limited API */ static PyObject * @@ -175,5 +171,3 @@ _PyTestCapi_Init_VectorcallLimited(PyObject *m) { return 0; } - -#endif // LIMITED_API_AVAILABLE diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index ab33702cdfd872..e09fd8806d2f64 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -5,19 +5,13 @@ * standard Python regression test, via Lib/test/test_capi.py. */ -/* This module tests the public (Include/ and Include/cpython/) C API. - The internal C API must not be used here: use _testinternalcapi for that. - - The Visual Studio projects builds _testcapi with Py_BUILD_CORE_MODULE - macro defined, but only the public C API must be tested here. */ - -#undef Py_BUILD_CORE_MODULE -#undef Py_BUILD_CORE_BUILTIN - -/* Always enable assertions */ -#undef NDEBUG +// Include parts.h first since it takes care of NDEBUG and Py_BUILD_CORE macros +// and including Python.h. +// +// Several parts of this module are broken out into files in _testcapi/. +// Include definitions from there. +#include "_testcapi/parts.h" -#include "Python.h" #include "frameobject.h" // PyFrame_New() #include "marshal.h" // PyMarshal_WriteLongToFile() @@ -29,17 +23,10 @@ # include // W_STOPCODE #endif -#ifdef Py_BUILD_CORE -# error "_testcapi must test the public Python C API, not CPython internal C API" -#endif - #ifdef bool # error "The public headers should not include , see gh-48924" #endif -// Several parts of this module are broken out into files in _testcapi/. -// Include definitions from there. -#include "_testcapi/parts.h" #include "_testcapi/util.h" @@ -217,10 +204,13 @@ test_dict_inner(int count) Py_DECREF(v); } + k = v = UNINITIALIZED_PTR; while (PyDict_Next(dict, &pos, &k, &v)) { PyObject *o; iterations++; + assert(k != UNINITIALIZED_PTR); + assert(v != UNINITIALIZED_PTR); i = PyLong_AS_LONG(v) + 1; o = PyLong_FromLong(i); if (o == NULL) @@ -230,7 +220,10 @@ test_dict_inner(int count) return -1; } Py_DECREF(o); + k = v = UNINITIALIZED_PTR; } + assert(k == UNINITIALIZED_PTR); + assert(v == UNINITIALIZED_PTR); Py_DECREF(dict); @@ -2028,6 +2021,26 @@ negative_refcount(PyObject *self, PyObject *Py_UNUSED(args)) Py_RETURN_NONE; } + +static PyObject * +decref_freed_object(PyObject *self, PyObject *Py_UNUSED(args)) +{ + PyObject *obj = PyUnicode_FromString("decref_freed_object"); + if (obj == NULL) { + return NULL; + } + assert(Py_REFCNT(obj) == 1); + + // Deallocate the memory + Py_DECREF(obj); + // obj is a now a dangling pointer + + // gh-109496: If Python is built in debug mode, Py_DECREF() must call + // _Py_NegativeRefcount() and abort Python. + Py_DECREF(obj); + + Py_RETURN_NONE; +} #endif @@ -3118,7 +3131,7 @@ test_weakref_capi(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args)) assert(Py_REFCNT(obj) == refcnt); // test PyWeakref_GetRef(), reference is alive - PyObject *ref = Py_True; // marker to check that value was set + PyObject *ref = UNINITIALIZED_PTR; assert(PyWeakref_GetRef(weakref, &ref) == 1); assert(ref == obj); assert(Py_REFCNT(obj) == (refcnt + 1)); @@ -3140,7 +3153,7 @@ test_weakref_capi(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args)) assert(PyWeakref_GET_OBJECT(weakref) == Py_None); // test PyWeakref_GetRef(), reference is dead - ref = Py_True; + ref = UNINITIALIZED_PTR; assert(PyWeakref_GetRef(weakref, &ref) == 0); assert(ref == NULL); @@ -3152,7 +3165,7 @@ test_weakref_capi(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args)) // test PyWeakref_GetRef(), invalid type assert(!PyErr_Occurred()); - ref = Py_True; + ref = UNINITIALIZED_PTR; assert(PyWeakref_GetRef(invalid_weakref, &ref) == -1); assert(PyErr_ExceptionMatches(PyExc_TypeError)); PyErr_Clear(); @@ -3164,7 +3177,7 @@ test_weakref_capi(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args)) PyErr_Clear(); // test PyWeakref_GetRef(NULL) - ref = Py_True; // marker to check that value was set + ref = UNINITIALIZED_PTR; assert(PyWeakref_GetRef(NULL, &ref) == -1); assert(PyErr_ExceptionMatches(PyExc_SystemError)); assert(ref == NULL); @@ -3293,6 +3306,7 @@ static PyMethodDef TestMethods[] = { {"bad_get", _PyCFunction_CAST(bad_get), METH_FASTCALL}, #ifdef Py_REF_DEBUG {"negative_refcount", negative_refcount, METH_NOARGS}, + {"decref_freed_object", decref_freed_object, METH_NOARGS}, #endif {"meth_varargs", meth_varargs, METH_VARARGS}, {"meth_varargs_keywords", _PyCFunction_CAST(meth_varargs_keywords), METH_VARARGS|METH_KEYWORDS}, @@ -3916,6 +3930,7 @@ PyInit__testcapi(void) PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type); PyModule_AddIntConstant(m, "the_number_three", 3); + PyModule_AddIntMacro(m, Py_C_RECURSION_LIMIT); TestError = PyErr_NewException("_testcapi.error", NULL, NULL); Py_INCREF(TestError); @@ -3990,18 +4005,12 @@ PyInit__testcapi(void) if (_PyTestCapi_Init_PyAtomic(m) < 0) { return NULL; } - -#ifndef LIMITED_API_AVAILABLE - PyModule_AddObjectRef(m, "LIMITED_API_AVAILABLE", Py_False); -#else - PyModule_AddObjectRef(m, "LIMITED_API_AVAILABLE", Py_True); if (_PyTestCapi_Init_VectorcallLimited(m) < 0) { return NULL; } if (_PyTestCapi_Init_HeaptypeRelative(m) < 0) { return NULL; } -#endif PyState_AddModule(m, &_testcapimodule); return m; diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index 96d568294a9710..c6b80fffdec16d 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -10,7 +10,6 @@ #undef NDEBUG #include "Python.h" -#include "pycore_atomic_funcs.h" // _Py_atomic_int_get() #include "pycore_bitutils.h" // _Py_bswap32() #include "pycore_bytesobject.h" // _PyBytes_Find() #include "pycore_ceval.h" // _PyEval_AddPendingCall() @@ -23,10 +22,10 @@ #include "pycore_hashtable.h" // _Py_hashtable_new() #include "pycore_initconfig.h" // _Py_GetConfigsAsDict() #include "pycore_interp.h" // _PyInterpreterState_GetConfigCopy() +#include "pycore_long.h" // _PyLong_Sign() #include "pycore_object.h" // _PyObject_IsFreed() #include "pycore_pathconfig.h" // _PyPathConfig_ClearGlobal() #include "pycore_pyerrors.h" // _PyErr_ChainExceptions1() -#include "pycore_pyerrors.h" // _Py_UTF8_Edit_Cost() #include "pycore_pystate.h" // _PyThreadState_GET() #include "interpreteridobject.h" // PyInterpreterID_LookUp() @@ -350,17 +349,6 @@ test_reset_path_config(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(arg)) } -static PyObject* -test_atomic_funcs(PyObject *self, PyObject *Py_UNUSED(args)) -{ - // Test _Py_atomic_size_get() and _Py_atomic_size_set() - Py_ssize_t var = 1; - _Py_atomic_size_set(&var, 2); - assert(_Py_atomic_size_get(&var) == 2); - Py_RETURN_NONE; -} - - static int check_edit_cost(const char *a, const char *b, Py_ssize_t expected) { @@ -1448,6 +1436,97 @@ run_in_subinterp_with_config(PyObject *self, PyObject *args, PyObject *kwargs) } +/*[clinic input] +_testinternalcapi.write_unraisable_exc + exception as exc: object + err_msg: object + obj: object + / +[clinic start generated code]*/ + +static PyObject * +_testinternalcapi_write_unraisable_exc_impl(PyObject *module, PyObject *exc, + PyObject *err_msg, PyObject *obj) +/*[clinic end generated code: output=a0f063cdd04aad83 input=274381b1a3fa5cd6]*/ +{ + + const char *err_msg_utf8; + if (err_msg != Py_None) { + err_msg_utf8 = PyUnicode_AsUTF8(err_msg); + if (err_msg_utf8 == NULL) { + return NULL; + } + } + else { + err_msg_utf8 = NULL; + } + + PyErr_SetObject((PyObject *)Py_TYPE(exc), exc); + _PyErr_WriteUnraisableMsg(err_msg_utf8, obj); + Py_RETURN_NONE; +} + + +static PyObject * +raiseTestError(const char* test_name, const char* msg) +{ + PyErr_Format(PyExc_AssertionError, "%s: %s", test_name, msg); + return NULL; +} + + +/*[clinic input] +_testinternalcapi.test_long_numbits +[clinic start generated code]*/ + +static PyObject * +_testinternalcapi_test_long_numbits_impl(PyObject *module) +/*[clinic end generated code: output=745d62d120359434 input=f14ca6f638e44dad]*/ +{ + struct triple { + long input; + size_t nbits; + int sign; + } testcases[] = {{0, 0, 0}, + {1L, 1, 1}, + {-1L, 1, -1}, + {2L, 2, 1}, + {-2L, 2, -1}, + {3L, 2, 1}, + {-3L, 2, -1}, + {4L, 3, 1}, + {-4L, 3, -1}, + {0x7fffL, 15, 1}, /* one Python int digit */ + {-0x7fffL, 15, -1}, + {0xffffL, 16, 1}, + {-0xffffL, 16, -1}, + {0xfffffffL, 28, 1}, + {-0xfffffffL, 28, -1}}; + size_t i; + + for (i = 0; i < Py_ARRAY_LENGTH(testcases); ++i) { + size_t nbits; + int sign; + PyObject *plong; + + plong = PyLong_FromLong(testcases[i].input); + if (plong == NULL) + return NULL; + nbits = _PyLong_NumBits(plong); + sign = _PyLong_Sign(plong); + + Py_DECREF(plong); + if (nbits != testcases[i].nbits) + return raiseTestError("test_long_numbits", + "wrong result for _PyLong_NumBits"); + if (sign != testcases[i].sign) + return raiseTestError("test_long_numbits", + "wrong result for _PyLong_Sign"); + } + Py_RETURN_NONE; +} + + static PyMethodDef module_functions[] = { {"get_configs", get_configs, METH_NOARGS}, {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, @@ -1458,7 +1537,6 @@ static PyMethodDef module_functions[] = { {"get_config", test_get_config, METH_NOARGS}, {"set_config", test_set_config, METH_O}, {"reset_path_config", test_reset_path_config, METH_NOARGS}, - {"test_atomic_funcs", test_atomic_funcs, METH_NOARGS}, {"test_edit_cost", test_edit_cost, METH_NOARGS}, {"test_bytes_find", test_bytes_find, METH_NOARGS}, {"normalize_path", normalize_path, METH_O, NULL}, @@ -1503,6 +1581,8 @@ static PyMethodDef module_functions[] = { {"run_in_subinterp_with_config", _PyCFunction_CAST(run_in_subinterp_with_config), METH_VARARGS | METH_KEYWORDS}, + _TESTINTERNALCAPI_WRITE_UNRAISABLE_EXC_METHODDEF + _TESTINTERNALCAPI_TEST_LONG_NUMBITS_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -1512,6 +1592,9 @@ static PyMethodDef module_functions[] = { static int module_exec(PyObject *module) { + if (_PyTestInternalCapi_Init_Lock(module) < 0) { + return 1; + } if (_PyTestInternalCapi_Init_PyTime(module) < 0) { return 1; } @@ -1521,6 +1604,11 @@ module_exec(PyObject *module) return 1; } + if (PyModule_Add(module, "SIZEOF_PYOBJECT", + PyLong_FromSsize_t(sizeof(PyObject))) < 0) { + return 1; + } + if (PyModule_Add(module, "SIZEOF_TIME_T", PyLong_FromSsize_t(sizeof(time_t))) < 0) { return 1; diff --git a/Modules/_testinternalcapi/clinic/test_lock.c.h b/Modules/_testinternalcapi/clinic/test_lock.c.h new file mode 100644 index 00000000000000..3cbe5ef12c5fa6 --- /dev/null +++ b/Modules/_testinternalcapi/clinic/test_lock.c.h @@ -0,0 +1,74 @@ +/*[clinic input] +preserve +[clinic start generated code]*/ + +#include "pycore_abstract.h" // _PyNumber_Index() + +PyDoc_STRVAR(_testinternalcapi_benchmark_locks__doc__, +"benchmark_locks($module, num_threads, use_pymutex=True,\n" +" critical_section_length=1, time_ms=1000, /)\n" +"--\n" +"\n"); + +#define _TESTINTERNALCAPI_BENCHMARK_LOCKS_METHODDEF \ + {"benchmark_locks", _PyCFunction_CAST(_testinternalcapi_benchmark_locks), METH_FASTCALL, _testinternalcapi_benchmark_locks__doc__}, + +static PyObject * +_testinternalcapi_benchmark_locks_impl(PyObject *module, + Py_ssize_t num_threads, + int use_pymutex, + int critical_section_length, + int time_ms); + +static PyObject * +_testinternalcapi_benchmark_locks(PyObject *module, PyObject *const *args, Py_ssize_t nargs) +{ + PyObject *return_value = NULL; + Py_ssize_t num_threads; + int use_pymutex = 1; + int critical_section_length = 1; + int time_ms = 1000; + + if (!_PyArg_CheckPositional("benchmark_locks", nargs, 1, 4)) { + goto exit; + } + { + Py_ssize_t ival = -1; + PyObject *iobj = _PyNumber_Index(args[0]); + if (iobj != NULL) { + ival = PyLong_AsSsize_t(iobj); + Py_DECREF(iobj); + } + if (ival == -1 && PyErr_Occurred()) { + goto exit; + } + num_threads = ival; + } + if (nargs < 2) { + goto skip_optional; + } + use_pymutex = PyObject_IsTrue(args[1]); + if (use_pymutex < 0) { + goto exit; + } + if (nargs < 3) { + goto skip_optional; + } + critical_section_length = PyLong_AsInt(args[2]); + if (critical_section_length == -1 && PyErr_Occurred()) { + goto exit; + } + if (nargs < 4) { + goto skip_optional; + } + time_ms = PyLong_AsInt(args[3]); + if (time_ms == -1 && PyErr_Occurred()) { + goto exit; + } +skip_optional: + return_value = _testinternalcapi_benchmark_locks_impl(module, num_threads, use_pymutex, critical_section_length, time_ms); + +exit: + return return_value; +} +/*[clinic end generated code: output=97c85dff601fed4b input=a9049054013a1b77]*/ diff --git a/Modules/_testinternalcapi/parts.h b/Modules/_testinternalcapi/parts.h index 43e7714b235156..bbb8e62ddaf7a2 100644 --- a/Modules/_testinternalcapi/parts.h +++ b/Modules/_testinternalcapi/parts.h @@ -10,6 +10,7 @@ #include "Python.h" +int _PyTestInternalCapi_Init_Lock(PyObject *module); int _PyTestInternalCapi_Init_PyTime(PyObject *module); #endif // Py_TESTINTERNALCAPI_PARTS_H diff --git a/Modules/_testinternalcapi/test_lock.c b/Modules/_testinternalcapi/test_lock.c new file mode 100644 index 00000000000000..33b49dacaa946e --- /dev/null +++ b/Modules/_testinternalcapi/test_lock.c @@ -0,0 +1,353 @@ +// C Extension module to test pycore_lock.h API + +#include "parts.h" + +#include "pycore_lock.h" +#include "clinic/test_lock.c.h" + +#ifdef MS_WINDOWS +#define WIN32_LEAN_AND_MEAN +#include +#else +#include // usleep() +#endif + +/*[clinic input] +module _testinternalcapi +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=7bb583d8c9eb9a78]*/ + + +static void +pysleep(int ms) +{ +#ifdef MS_WINDOWS + Sleep(ms); +#else + usleep(ms * 1000); +#endif +} + +static PyObject * +test_lock_basic(PyObject *self, PyObject *obj) +{ + PyMutex m = (PyMutex){0}; + + // uncontended lock and unlock + PyMutex_Lock(&m); + assert(m.v == 1); + PyMutex_Unlock(&m); + assert(m.v == 0); + + Py_RETURN_NONE; +} + +struct test_lock2_data { + PyMutex m; + PyEvent done; + int started; +}; + +static void +lock_thread(void *arg) +{ + struct test_lock2_data *test_data = arg; + PyMutex *m = &test_data->m; + _Py_atomic_store_int(&test_data->started, 1); + + PyMutex_Lock(m); + assert(m->v == 1); + + PyMutex_Unlock(m); + assert(m->v == 0); + + _PyEvent_Notify(&test_data->done); +} + +static PyObject * +test_lock_two_threads(PyObject *self, PyObject *obj) +{ + // lock attempt by two threads + struct test_lock2_data test_data; + memset(&test_data, 0, sizeof(test_data)); + + PyMutex_Lock(&test_data.m); + assert(test_data.m.v == 1); + + PyThread_start_new_thread(lock_thread, &test_data); + while (!_Py_atomic_load_int(&test_data.started)) { + pysleep(10); + } + pysleep(10); // allow some time for the other thread to try to lock + assert(test_data.m.v == 3); + + PyMutex_Unlock(&test_data.m); + PyEvent_Wait(&test_data.done); + assert(test_data.m.v == 0); + + Py_RETURN_NONE; +} + +#define COUNTER_THREADS 5 +#define COUNTER_ITERS 10000 + +struct test_data_counter { + PyMutex m; + Py_ssize_t counter; +}; + +struct thread_data_counter { + struct test_data_counter *test_data; + PyEvent done_event; +}; + +static void +counter_thread(void *arg) +{ + struct thread_data_counter *thread_data = arg; + struct test_data_counter *test_data = thread_data->test_data; + + for (Py_ssize_t i = 0; i < COUNTER_ITERS; i++) { + PyMutex_Lock(&test_data->m); + test_data->counter++; + PyMutex_Unlock(&test_data->m); + } + _PyEvent_Notify(&thread_data->done_event); +} + +static PyObject * +test_lock_counter(PyObject *self, PyObject *obj) +{ + // Test with rapidly locking and unlocking mutex + struct test_data_counter test_data; + memset(&test_data, 0, sizeof(test_data)); + + struct thread_data_counter thread_data[COUNTER_THREADS]; + memset(&thread_data, 0, sizeof(thread_data)); + + for (Py_ssize_t i = 0; i < COUNTER_THREADS; i++) { + thread_data[i].test_data = &test_data; + PyThread_start_new_thread(counter_thread, &thread_data[i]); + } + + for (Py_ssize_t i = 0; i < COUNTER_THREADS; i++) { + PyEvent_Wait(&thread_data[i].done_event); + } + + assert(test_data.counter == COUNTER_THREADS * COUNTER_ITERS); + Py_RETURN_NONE; +} + +#define SLOW_COUNTER_ITERS 100 + +static void +slow_counter_thread(void *arg) +{ + struct thread_data_counter *thread_data = arg; + struct test_data_counter *test_data = thread_data->test_data; + + for (Py_ssize_t i = 0; i < SLOW_COUNTER_ITERS; i++) { + PyMutex_Lock(&test_data->m); + if (i % 7 == 0) { + pysleep(2); + } + test_data->counter++; + PyMutex_Unlock(&test_data->m); + } + _PyEvent_Notify(&thread_data->done_event); +} + +static PyObject * +test_lock_counter_slow(PyObject *self, PyObject *obj) +{ + // Test lock/unlock with occasional "long" critical section, which will + // trigger handoff of the lock. + struct test_data_counter test_data; + memset(&test_data, 0, sizeof(test_data)); + + struct thread_data_counter thread_data[COUNTER_THREADS]; + memset(&thread_data, 0, sizeof(thread_data)); + + for (Py_ssize_t i = 0; i < COUNTER_THREADS; i++) { + thread_data[i].test_data = &test_data; + PyThread_start_new_thread(slow_counter_thread, &thread_data[i]); + } + + for (Py_ssize_t i = 0; i < COUNTER_THREADS; i++) { + PyEvent_Wait(&thread_data[i].done_event); + } + + assert(test_data.counter == COUNTER_THREADS * SLOW_COUNTER_ITERS); + Py_RETURN_NONE; +} + +struct bench_data_locks { + int stop; + int use_pymutex; + int critical_section_length; + char padding[200]; + PyThread_type_lock lock; + PyMutex m; + double value; + Py_ssize_t total_iters; +}; + +struct bench_thread_data { + struct bench_data_locks *bench_data; + Py_ssize_t iters; + PyEvent done; +}; + +static void +thread_benchmark_locks(void *arg) +{ + struct bench_thread_data *thread_data = arg; + struct bench_data_locks *bench_data = thread_data->bench_data; + int use_pymutex = bench_data->use_pymutex; + int critical_section_length = bench_data->critical_section_length; + + double my_value = 1.0; + Py_ssize_t iters = 0; + while (!_Py_atomic_load_int_relaxed(&bench_data->stop)) { + if (use_pymutex) { + PyMutex_Lock(&bench_data->m); + for (int i = 0; i < critical_section_length; i++) { + bench_data->value += my_value; + my_value = bench_data->value; + } + PyMutex_Unlock(&bench_data->m); + } + else { + PyThread_acquire_lock(bench_data->lock, 1); + for (int i = 0; i < critical_section_length; i++) { + bench_data->value += my_value; + my_value = bench_data->value; + } + PyThread_release_lock(bench_data->lock); + } + iters++; + } + + thread_data->iters = iters; + _Py_atomic_add_ssize(&bench_data->total_iters, iters); + _PyEvent_Notify(&thread_data->done); +} + +/*[clinic input] +_testinternalcapi.benchmark_locks + + num_threads: Py_ssize_t + use_pymutex: bool = True + critical_section_length: int = 1 + time_ms: int = 1000 + / + +[clinic start generated code]*/ + +static PyObject * +_testinternalcapi_benchmark_locks_impl(PyObject *module, + Py_ssize_t num_threads, + int use_pymutex, + int critical_section_length, + int time_ms) +/*[clinic end generated code: output=381df8d7e9a74f18 input=f3aeaf688738c121]*/ +{ + // Run from Tools/lockbench/lockbench.py + // Based on the WebKit lock benchmarks: + // https://github.com/WebKit/WebKit/blob/main/Source/WTF/benchmarks/LockSpeedTest.cpp + // See also https://webkit.org/blog/6161/locking-in-webkit/ + PyObject *thread_iters = NULL; + PyObject *res = NULL; + + struct bench_data_locks bench_data; + memset(&bench_data, 0, sizeof(bench_data)); + bench_data.use_pymutex = use_pymutex; + bench_data.critical_section_length = critical_section_length; + + bench_data.lock = PyThread_allocate_lock(); + if (bench_data.lock == NULL) { + return PyErr_NoMemory(); + } + + struct bench_thread_data *thread_data = NULL; + thread_data = PyMem_Calloc(num_threads, sizeof(*thread_data)); + if (thread_data == NULL) { + PyErr_NoMemory(); + goto exit; + } + + thread_iters = PyList_New(num_threads); + if (thread_iters == NULL) { + goto exit; + } + + _PyTime_t start = _PyTime_GetMonotonicClock(); + + for (Py_ssize_t i = 0; i < num_threads; i++) { + thread_data[i].bench_data = &bench_data; + PyThread_start_new_thread(thread_benchmark_locks, &thread_data[i]); + } + + // Let the threads run for `time_ms` milliseconds + pysleep(time_ms); + _Py_atomic_store_int(&bench_data.stop, 1); + + // Wait for the threads to finish + for (Py_ssize_t i = 0; i < num_threads; i++) { + PyEvent_Wait(&thread_data[i].done); + } + + Py_ssize_t total_iters = bench_data.total_iters; + _PyTime_t end = _PyTime_GetMonotonicClock(); + + // Return the total number of acquisitions and the number of acquisitions + // for each thread. + for (Py_ssize_t i = 0; i < num_threads; i++) { + PyObject *iter = PyLong_FromSsize_t(thread_data[i].iters); + if (iter == NULL) { + goto exit; + } + PyList_SET_ITEM(thread_iters, i, iter); + } + + double rate = total_iters * 1000000000.0 / (end - start); + res = Py_BuildValue("(dO)", rate, thread_iters); + +exit: + PyThread_free_lock(bench_data.lock); + PyMem_Free(thread_data); + Py_XDECREF(thread_iters); + return res; +} + +static PyObject * +test_lock_benchmark(PyObject *module, PyObject *obj) +{ + // Just make sure the benchmark runs without crashing + PyObject *res = _testinternalcapi_benchmark_locks_impl( + module, 1, 1, 1, 100); + if (res == NULL) { + return NULL; + } + Py_DECREF(res); + Py_RETURN_NONE; +} + +static PyMethodDef test_methods[] = { + {"test_lock_basic", test_lock_basic, METH_NOARGS}, + {"test_lock_two_threads", test_lock_two_threads, METH_NOARGS}, + {"test_lock_counter", test_lock_counter, METH_NOARGS}, + {"test_lock_counter_slow", test_lock_counter_slow, METH_NOARGS}, + _TESTINTERNALCAPI_BENCHMARK_LOCKS_METHODDEF + {"test_lock_benchmark", test_lock_benchmark, METH_NOARGS}, + {NULL, NULL} /* sentinel */ +}; + +int +_PyTestInternalCapi_Init_Lock(PyObject *mod) +{ + if (PyModule_AddFunctions(mod, test_methods) < 0) { + return -1; + } + return 0; +} diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 2cf866c5a11416..9c915488f6e0de 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -7,6 +7,7 @@ #include "pycore_dict.h" // _PyDict_Pop() #include "pycore_interp.h" // _PyInterpreterState.threads.count #include "pycore_moduleobject.h" // _PyModule_GetState() +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #include "pycore_pylifecycle.h" #include "pycore_pystate.h" // _PyThreadState_SetCurrent() #include "pycore_sysmodule.h" // _PySys_GetAttr() @@ -1050,21 +1051,21 @@ _localdummy_destroyed(PyObject *localweakref, PyObject *dummyweakref) /* Module functions */ struct bootstate { - PyInterpreterState *interp; + PyThreadState *tstate; PyObject *func; PyObject *args; PyObject *kwargs; - PyThreadState *tstate; - _PyRuntimeState *runtime; }; static void -thread_bootstate_free(struct bootstate *boot) +thread_bootstate_free(struct bootstate *boot, int decref) { - Py_DECREF(boot->func); - Py_DECREF(boot->args); - Py_XDECREF(boot->kwargs); + if (decref) { + Py_DECREF(boot->func); + Py_DECREF(boot->args); + Py_XDECREF(boot->kwargs); + } PyMem_Free(boot); } @@ -1073,9 +1074,27 @@ static void thread_run(void *boot_raw) { struct bootstate *boot = (struct bootstate *) boot_raw; - PyThreadState *tstate; + PyThreadState *tstate = boot->tstate; + + // gh-108987: If _thread.start_new_thread() is called before or while + // Python is being finalized, thread_run() can called *after*. + // _PyRuntimeState_SetFinalizing() is called. At this point, all Python + // threads must exit, except of the thread calling Py_Finalize() whch holds + // the GIL and must not exit. + // + // At this stage, tstate can be a dangling pointer (point to freed memory), + // it's ok to call _PyThreadState_MustExit() with a dangling pointer. + if (_PyThreadState_MustExit(tstate)) { + // Don't call PyThreadState_Clear() nor _PyThreadState_DeleteCurrent(). + // These functions are called on tstate indirectly by Py_Finalize() + // which calls _PyInterpreterState_Clear(). + // + // Py_DECREF() cannot be called because the GIL is not held: leak + // references on purpose. Python is being finalized anyway. + thread_bootstate_free(boot, 0); + goto exit; + } - tstate = boot->tstate; _PyThreadState_Bind(tstate); PyEval_AcquireThread(tstate); tstate->interp->threads.count++; @@ -1093,14 +1112,17 @@ thread_run(void *boot_raw) Py_DECREF(res); } - thread_bootstate_free(boot); + thread_bootstate_free(boot, 1); + tstate->interp->threads.count--; PyThreadState_Clear(tstate); _PyThreadState_DeleteCurrent(tstate); +exit: // bpo-44434: Don't call explicitly PyThread_exit_thread(). On Linux with // the glibc, pthread_exit() can abort the whole process if dlopen() fails // to open the libgcc_s.so library (ex: EMFILE error). + return; } static PyObject * @@ -1124,7 +1146,6 @@ and False otherwise.\n"); static PyObject * thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) { - _PyRuntimeState *runtime = &_PyRuntime; PyObject *func, *args, *kwargs = NULL; if (!PyArg_UnpackTuple(fargs, "start_new_thread", 2, 3, @@ -1167,8 +1188,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) if (boot == NULL) { return PyErr_NoMemory(); } - boot->interp = _PyInterpreterState_GET(); - boot->tstate = _PyThreadState_New(boot->interp); + boot->tstate = _PyThreadState_New(interp); if (boot->tstate == NULL) { PyMem_Free(boot); if (!PyErr_Occurred()) { @@ -1176,7 +1196,6 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) } return NULL; } - boot->runtime = runtime; boot->func = Py_NewRef(func); boot->args = Py_NewRef(args); boot->kwargs = Py_XNewRef(kwargs); @@ -1185,7 +1204,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) if (ident == PYTHREAD_INVALID_THREAD_ID) { PyErr_SetString(ThreadError, "can't start new thread"); PyThreadState_Clear(boot->tstate); - thread_bootstate_free(boot); + thread_bootstate_free(boot, 1); return NULL; } return PyLong_FromUnsignedLong(ident); @@ -1478,11 +1497,9 @@ thread_excepthook_file(PyObject *file, PyObject *exc_type, PyObject *exc_value, _PyErr_Display(file, exc_type, exc_value, exc_traceback); /* Call file.flush() */ - PyObject *res = PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); - if (!res) { + if (_PyFile_Flush(file) < 0) { return -1; } - Py_DECREF(res); return 0; } diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 663b4117683629..f9a18644945c65 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -26,15 +26,14 @@ Copyright (C) 1994 Steen Lumholt. #endif #include "Python.h" -#include #ifdef MS_WINDOWS # include "pycore_fileutils.h" // _Py_stat() #endif -#include "pycore_long.h" +#include "pycore_long.h" // _PyLong_IsNegative() #ifdef MS_WINDOWS -#include +# include #endif #define CHECK_SIZE(size, elemsize) \ @@ -46,11 +45,11 @@ Copyright (C) 1994 Steen Lumholt. #define TCL_THREADS #ifdef TK_FRAMEWORK -#include -#include +# include +# include #else -#include -#include +# include +# include #endif #include "tkinter.h" diff --git a/Modules/_xxinterpchannelsmodule.c b/Modules/_xxinterpchannelsmodule.c index 1e418414767db8..6096f88421a73a 100644 --- a/Modules/_xxinterpchannelsmodule.c +++ b/Modules/_xxinterpchannelsmodule.c @@ -123,7 +123,7 @@ get_module_from_type(PyTypeObject *cls) static PyObject * add_new_exception(PyObject *mod, const char *name, PyObject *base) { - assert(!PyObject_HasAttrString(mod, name)); + assert(!PyObject_HasAttrStringWithError(mod, name)); PyObject *exctype = PyErr_NewException(name, base, NULL); if (exctype == NULL) { return NULL; @@ -160,14 +160,24 @@ add_new_type(PyObject *mod, PyType_Spec *spec, crossinterpdatafunc shared) return cls; } +#define XID_IGNORE_EXC 1 +#define XID_FREE 2 + static int -_release_xid_data(_PyCrossInterpreterData *data, int ignoreexc) +_release_xid_data(_PyCrossInterpreterData *data, int flags) { + int ignoreexc = flags & XID_IGNORE_EXC; PyObject *exc; if (ignoreexc) { exc = PyErr_GetRaisedException(); } - int res = _PyCrossInterpreterData_Release(data); + int res; + if (flags & XID_FREE) { + res = _PyCrossInterpreterData_ReleaseAndRawFree(data); + } + else { + res = _PyCrossInterpreterData_Release(data); + } if (res < 0) { /* The owning interpreter is already destroyed. */ if (ignoreexc) { @@ -175,6 +185,9 @@ _release_xid_data(_PyCrossInterpreterData *data, int ignoreexc) PyErr_Clear(); } } + if (flags & XID_FREE) { + /* Either way, we free the data. */ + } if (ignoreexc) { PyErr_SetRaisedException(exc); } @@ -366,9 +379,8 @@ static void _channelitem_clear(_channelitem *item) { if (item->data != NULL) { - (void)_release_xid_data(item->data, 1); // It was allocated in _channel_send(). - GLOBAL_FREE(item->data); + (void)_release_xid_data(item->data, XID_IGNORE_EXC & XID_FREE); item->data = NULL; } item->next = NULL; @@ -1439,14 +1451,12 @@ _channel_recv(_channels *channels, int64_t id, PyObject **res) PyObject *obj = _PyCrossInterpreterData_NewObject(data); if (obj == NULL) { assert(PyErr_Occurred()); - (void)_release_xid_data(data, 1); - // It was allocated in _channel_send(). - GLOBAL_FREE(data); + // It was allocated in _channel_send(), so we free it. + (void)_release_xid_data(data, XID_IGNORE_EXC | XID_FREE); return -1; } - int release_res = _release_xid_data(data, 0); - // It was allocated in _channel_send(). - GLOBAL_FREE(data); + // It was allocated in _channel_send(), so we free it. + int release_res = _release_xid_data(data, XID_FREE); if (release_res < 0) { // The source interpreter has been destroyed already. assert(PyErr_Occurred()); diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c index 6638c2c8e0636b..1ddf64909bf18a 100644 --- a/Modules/_xxsubinterpretersmodule.c +++ b/Modules/_xxsubinterpretersmodule.c @@ -41,7 +41,7 @@ _get_current_interp(void) static PyObject * add_new_exception(PyObject *mod, const char *name, PyObject *base) { - assert(!PyObject_HasAttrString(mod, name)); + assert(!PyObject_HasAttrStringWithError(mod, name)); PyObject *exctype = PyErr_NewException(name, base, NULL); if (exctype == NULL) { return NULL; @@ -58,24 +58,17 @@ add_new_exception(PyObject *mod, const char *name, PyObject *base) add_new_exception(MOD, MODULE_NAME "." Py_STRINGIFY(NAME), BASE) static int -_release_xid_data(_PyCrossInterpreterData *data, int ignoreexc) +_release_xid_data(_PyCrossInterpreterData *data) { - PyObject *exc; - if (ignoreexc) { - exc = PyErr_GetRaisedException(); - } + PyObject *exc = PyErr_GetRaisedException(); int res = _PyCrossInterpreterData_Release(data); if (res < 0) { /* The owning interpreter is already destroyed. */ _PyCrossInterpreterData_Clear(NULL, data); - if (ignoreexc) { - // XXX Emit a warning? - PyErr_Clear(); - } - } - if (ignoreexc) { - PyErr_SetRaisedException(exc); + // XXX Emit a warning? + PyErr_Clear(); } + PyErr_SetRaisedException(exc); return res; } @@ -145,7 +138,7 @@ _sharednsitem_clear(struct _sharednsitem *item) PyMem_RawFree((void *)item->name); item->name = NULL; } - (void)_release_xid_data(&item->data, 1); + (void)_release_xid_data(&item->data); } static int @@ -174,16 +167,16 @@ typedef struct _sharedns { static _sharedns * _sharedns_new(Py_ssize_t len) { - _sharedns *shared = PyMem_NEW(_sharedns, 1); + _sharedns *shared = PyMem_RawCalloc(sizeof(_sharedns), 1); if (shared == NULL) { PyErr_NoMemory(); return NULL; } shared->len = len; - shared->items = PyMem_NEW(struct _sharednsitem, len); + shared->items = PyMem_RawCalloc(sizeof(struct _sharednsitem), len); if (shared->items == NULL) { PyErr_NoMemory(); - PyMem_Free(shared); + PyMem_RawFree(shared); return NULL; } return shared; @@ -195,8 +188,8 @@ _sharedns_free(_sharedns *shared) for (Py_ssize_t i=0; i < shared->len; i++) { _sharednsitem_clear(&shared->items[i]); } - PyMem_Free(shared->items); - PyMem_Free(shared); + PyMem_RawFree(shared->items); + PyMem_RawFree(shared); } static _sharedns * diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c index 3f7b2851c5b794..eb4e522465181f 100644 --- a/Modules/_zoneinfo.c +++ b/Modules/_zoneinfo.c @@ -6,11 +6,10 @@ #include "pycore_long.h" // _PyLong_GetOne() #include "pycore_pyerrors.h" // _PyErr_ChainExceptions1() -#include -#include -#include +#include "datetime.h" // PyDateTime_TZInfo -#include "datetime.h" +#include // offsetof() +#include #include "clinic/_zoneinfo.c.h" /*[clinic input] diff --git a/Modules/atexitmodule.c b/Modules/atexitmodule.c index cec177cfc2f9c8..57e2ea67450453 100644 --- a/Modules/atexitmodule.c +++ b/Modules/atexitmodule.c @@ -7,9 +7,10 @@ */ #include "Python.h" -#include "pycore_atexit.h" +#include "pycore_atexit.h" // export _Py_AtExit() #include "pycore_initconfig.h" // _PyStatus_NO_MEMORY #include "pycore_interp.h" // PyInterpreterState.atexit +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #include "pycore_pystate.h" // _PyInterpreterState_GET /* ===================================================================== */ diff --git a/Modules/clinic/_testclinic_limited.c.h b/Modules/clinic/_testclinic_limited.c.h index 93e7d7f98769cc..eff72cee24975c 100644 --- a/Modules/clinic/_testclinic_limited.c.h +++ b/Modules/clinic/_testclinic_limited.c.h @@ -37,7 +37,8 @@ my_int_func(PyObject *module, PyObject *arg_) int arg; int _return_value; - if (!PyArg_Parse(arg_, "i:my_int_func", &arg)) { + arg = PyLong_AsInt(arg_); + if (arg == -1 && PyErr_Occurred()) { goto exit; } _return_value = my_int_func_impl(module, arg); @@ -56,22 +57,31 @@ PyDoc_STRVAR(my_int_sum__doc__, "\n"); #define MY_INT_SUM_METHODDEF \ - {"my_int_sum", (PyCFunction)my_int_sum, METH_VARARGS, my_int_sum__doc__}, + {"my_int_sum", (PyCFunction)(void(*)(void))my_int_sum, METH_FASTCALL, my_int_sum__doc__}, static int my_int_sum_impl(PyObject *module, int x, int y); static PyObject * -my_int_sum(PyObject *module, PyObject *args) +my_int_sum(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; int x; int y; int _return_value; - if (!PyArg_ParseTuple(args, "ii:my_int_sum", - &x, &y)) + if (nargs != 2) { + PyErr_Format(PyExc_TypeError, "my_int_sum expected 2 arguments, got %zd", nargs); goto exit; + } + x = PyLong_AsInt(args[0]); + if (x == -1 && PyErr_Occurred()) { + goto exit; + } + y = PyLong_AsInt(args[1]); + if (y == -1 && PyErr_Occurred()) { + goto exit; + } _return_value = my_int_sum_impl(module, x, y); if ((_return_value == -1) && PyErr_Occurred()) { goto exit; @@ -81,4 +91,4 @@ my_int_sum(PyObject *module, PyObject *args) exit: return return_value; } -/*[clinic end generated code: output=dcd5203d0d29df3a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5cf64baf978d2288 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_testinternalcapi.c.h b/Modules/clinic/_testinternalcapi.c.h index 28761387023508..c1b42672e13d53 100644 --- a/Modules/clinic/_testinternalcapi.c.h +++ b/Modules/clinic/_testinternalcapi.c.h @@ -264,4 +264,53 @@ _testinternalcapi_assemble_code_object(PyObject *module, PyObject *const *args, exit: return return_value; } -/*[clinic end generated code: output=cba1c94ff4015b82 input=a9049054013a1b77]*/ + +PyDoc_STRVAR(_testinternalcapi_write_unraisable_exc__doc__, +"write_unraisable_exc($module, exception, err_msg, obj, /)\n" +"--\n" +"\n"); + +#define _TESTINTERNALCAPI_WRITE_UNRAISABLE_EXC_METHODDEF \ + {"write_unraisable_exc", _PyCFunction_CAST(_testinternalcapi_write_unraisable_exc), METH_FASTCALL, _testinternalcapi_write_unraisable_exc__doc__}, + +static PyObject * +_testinternalcapi_write_unraisable_exc_impl(PyObject *module, PyObject *exc, + PyObject *err_msg, PyObject *obj); + +static PyObject * +_testinternalcapi_write_unraisable_exc(PyObject *module, PyObject *const *args, Py_ssize_t nargs) +{ + PyObject *return_value = NULL; + PyObject *exc; + PyObject *err_msg; + PyObject *obj; + + if (!_PyArg_CheckPositional("write_unraisable_exc", nargs, 3, 3)) { + goto exit; + } + exc = args[0]; + err_msg = args[1]; + obj = args[2]; + return_value = _testinternalcapi_write_unraisable_exc_impl(module, exc, err_msg, obj); + +exit: + return return_value; +} + +PyDoc_STRVAR(_testinternalcapi_test_long_numbits__doc__, +"test_long_numbits($module, /)\n" +"--\n" +"\n"); + +#define _TESTINTERNALCAPI_TEST_LONG_NUMBITS_METHODDEF \ + {"test_long_numbits", (PyCFunction)_testinternalcapi_test_long_numbits, METH_NOARGS, _testinternalcapi_test_long_numbits__doc__}, + +static PyObject * +_testinternalcapi_test_long_numbits_impl(PyObject *module); + +static PyObject * +_testinternalcapi_test_long_numbits(PyObject *module, PyObject *Py_UNUSED(ignored)) +{ + return _testinternalcapi_test_long_numbits_impl(module); +} +/*[clinic end generated code: output=59144f59957627bd input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h index 854fd6cf5ec353..c3e7f86b3e33f1 100644 --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -10695,22 +10695,18 @@ PyDoc_STRVAR(os_DirEntry_is_junction__doc__, "Return True if the entry is a junction; cached per entry."); #define OS_DIRENTRY_IS_JUNCTION_METHODDEF \ - {"is_junction", _PyCFunction_CAST(os_DirEntry_is_junction), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, os_DirEntry_is_junction__doc__}, + {"is_junction", (PyCFunction)os_DirEntry_is_junction, METH_NOARGS, os_DirEntry_is_junction__doc__}, static int -os_DirEntry_is_junction_impl(DirEntry *self, PyTypeObject *defining_class); +os_DirEntry_is_junction_impl(DirEntry *self); static PyObject * -os_DirEntry_is_junction(DirEntry *self, PyTypeObject *defining_class, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +os_DirEntry_is_junction(DirEntry *self, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; - if (nargs) { - PyErr_SetString(PyExc_TypeError, "is_junction() takes no arguments"); - goto exit; - } - _return_value = os_DirEntry_is_junction_impl(self, defining_class); + _return_value = os_DirEntry_is_junction_impl(self); if ((_return_value == -1) && PyErr_Occurred()) { goto exit; } @@ -11992,4 +11988,4 @@ os_waitstatus_to_exitcode(PyObject *module, PyObject *const *args, Py_ssize_t na #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=30c63cb556431cea input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1dd5aa7495cd6e3a input=a9049054013a1b77]*/ diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index f05cdd9a37f8a4..b051c71b3ade9b 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -146,10 +146,7 @@ faulthandler_get_fileno(PyObject **file_ptr) return -1; } - result = PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); - if (result != NULL) - Py_DECREF(result); - else { + if (_PyFile_Flush(file) < 0) { /* ignore flush() error */ PyErr_Clear(); } diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 35a35091bf4511..632cabdf4bcfbd 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1200,8 +1200,8 @@ gc_collect_main(PyThreadState *tstate, int generation, { GC_STAT_ADD(generation, collections, 1); #ifdef Py_STATS - if (_py_stats) { - _py_stats->object_stats.object_visits = 0; + if (_Py_stats) { + _Py_stats->object_stats.object_visits = 0; } #endif int i; @@ -1362,10 +1362,10 @@ gc_collect_main(PyThreadState *tstate, int generation, GC_STAT_ADD(generation, objects_collected, m); #ifdef Py_STATS - if (_py_stats) { + if (_Py_stats) { GC_STAT_ADD(generation, object_visits, - _py_stats->object_stats.object_visits); - _py_stats->object_stats.object_visits = 0; + _Py_stats->object_stats.object_visits); + _Py_stats->object_stats.object_visits = 0; } #endif diff --git a/Modules/getpath.c b/Modules/getpath.c index 71e23e1edaf11c..3b926cac0d3f24 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -4,6 +4,7 @@ #include "pycore_fileutils.h" // _Py_abspath() #include "pycore_initconfig.h" // _PyStatus_EXCEPTION() #include "pycore_pathconfig.h" // _PyPathConfig_ReadGlobal() +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #include "pycore_pymem.h" // _PyMem_RawWcsdup() #include "marshal.h" // PyMarshal_ReadObjectFromString diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index d929dcf65a7e32..2d896e7fe333a4 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -2195,12 +2195,10 @@ math_modf_impl(PyObject *module, double x) double y; /* some platforms don't do the right thing for NaNs and infinities, so we take care of special cases directly. */ - if (!Py_IS_FINITE(x)) { - if (Py_IS_INFINITY(x)) - return Py_BuildValue("(dd)", copysign(0., x), x); - else if (Py_IS_NAN(x)) - return Py_BuildValue("(dd)", x, x); - } + if (Py_IS_INFINITY(x)) + return Py_BuildValue("(dd)", copysign(0., x), x); + else if (Py_IS_NAN(x)) + return Py_BuildValue("(dd)", x, x); errno = 0; x = modf(x, &y); @@ -2950,7 +2948,8 @@ math_pow_impl(PyObject *module, double x, double y) else /* y < 0. */ r = odd_y ? copysign(0., x) : 0.; } - else if (Py_IS_INFINITY(y)) { + else { + assert(Py_IS_INFINITY(y)); if (fabs(x) == 1.0) r = 1.; else if (y > 0. && fabs(x) > 1.0) @@ -3480,9 +3479,7 @@ static const uint8_t factorial_trailing_zeros[] = { static PyObject * perm_comb_small(unsigned long long n, unsigned long long k, int iscomb) { - if (k == 0) { - return PyLong_FromLong(1); - } + assert(k != 0); /* For small enough n and k the result fits in the 64-bit range and can * be calculated without allocating intermediate PyLong objects. */ diff --git a/Modules/overlapped.c b/Modules/overlapped.c index c682e6adccc765..e23db22dadb18b 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -38,13 +38,14 @@ class pointer_converter(CConverter): format_unit = '"F_POINTER"' - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" {paramname} = PyLong_AsVoidPtr({argname}); if (!{paramname} && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) class OVERLAPPED_converter(pointer_converter): type = 'OVERLAPPED *' @@ -55,13 +56,14 @@ class HANDLE_converter(pointer_converter): class ULONG_PTR_converter(pointer_converter): type = 'ULONG_PTR' - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" {paramname} = (uintptr_t)PyLong_AsVoidPtr({argname}); if (!{paramname} && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) class DWORD_converter(unsigned_long_converter): type = 'DWORD' @@ -69,7 +71,7 @@ class DWORD_converter(unsigned_long_converter): class BOOL_converter(int_converter): type = 'BOOL' [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=8a07ea3018f4cec8]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=436f4440630a304c]*/ /*[clinic input] module _overlapped diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 6e829b200fa46d..096aa043514c85 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -57,6 +57,10 @@ #include // ctermid() #include // system() +#ifdef HAVE_SYS_TIME_H +# include // futimes() +#endif + // SGI apparently needs this forward declaration #ifdef HAVE__GETPTY @@ -2392,21 +2396,26 @@ _posix_free(void *module) _posix_clear((PyObject *)module); } -static void +static int fill_time(PyObject *module, PyObject *v, int s_index, int f_index, int ns_index, time_t sec, unsigned long nsec) { - PyObject *s = _PyLong_FromTime_t(sec); - PyObject *ns_fractional = PyLong_FromUnsignedLong(nsec); + assert(!PyErr_Occurred()); + + int res = -1; PyObject *s_in_ns = NULL; PyObject *ns_total = NULL; PyObject *float_s = NULL; - if (!(s && ns_fractional)) + PyObject *s = _PyLong_FromTime_t(sec); + PyObject *ns_fractional = PyLong_FromUnsignedLong(nsec); + if (!(s && ns_fractional)) { goto exit; + } s_in_ns = PyNumber_Multiply(s, get_posix_state(module)->billion); - if (!s_in_ns) + if (!s_in_ns) { goto exit; + } ns_total = PyNumber_Add(s_in_ns, ns_fractional); if (!ns_total) @@ -2429,12 +2438,17 @@ fill_time(PyObject *module, PyObject *v, int s_index, int f_index, int ns_index, PyStructSequence_SET_ITEM(v, ns_index, ns_total); ns_total = NULL; } + + assert(!PyErr_Occurred()); + res = 0; + exit: Py_XDECREF(s); Py_XDECREF(ns_fractional); Py_XDECREF(s_in_ns); Py_XDECREF(ns_total); Py_XDECREF(float_s); + return res; } #ifdef MS_WINDOWS @@ -2469,34 +2483,47 @@ _pystat_l128_from_l64_l64(uint64_t low, uint64_t high) static PyObject* _pystat_fromstructstat(PyObject *module, STRUCT_STAT *st) { - unsigned long ansec, mnsec, cnsec; + assert(!PyErr_Occurred()); + PyObject *StatResultType = get_posix_state(module)->StatResultType; PyObject *v = PyStructSequence_New((PyTypeObject *)StatResultType); - if (v == NULL) + if (v == NULL) { return NULL; + } - PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long)st->st_mode)); +#define SET_ITEM(pos, expr) \ + do { \ + PyObject *obj = (expr); \ + if (obj == NULL) { \ + goto error; \ + } \ + PyStructSequence_SET_ITEM(v, (pos), obj); \ + } while (0) + + SET_ITEM(0, PyLong_FromLong((long)st->st_mode)); #ifdef MS_WINDOWS - PyStructSequence_SET_ITEM(v, 1, _pystat_l128_from_l64_l64(st->st_ino, st->st_ino_high)); - PyStructSequence_SET_ITEM(v, 2, PyLong_FromUnsignedLongLong(st->st_dev)); + SET_ITEM(1, _pystat_l128_from_l64_l64(st->st_ino, st->st_ino_high)); + SET_ITEM(2, PyLong_FromUnsignedLongLong(st->st_dev)); #else static_assert(sizeof(unsigned long long) >= sizeof(st->st_ino), "stat.st_ino is larger than unsigned long long"); - PyStructSequence_SET_ITEM(v, 1, PyLong_FromUnsignedLongLong(st->st_ino)); - PyStructSequence_SET_ITEM(v, 2, _PyLong_FromDev(st->st_dev)); + SET_ITEM(1, PyLong_FromUnsignedLongLong(st->st_ino)); + SET_ITEM(2, _PyLong_FromDev(st->st_dev)); #endif - PyStructSequence_SET_ITEM(v, 3, PyLong_FromLong((long)st->st_nlink)); + SET_ITEM(3, PyLong_FromLong((long)st->st_nlink)); #if defined(MS_WINDOWS) - PyStructSequence_SET_ITEM(v, 4, PyLong_FromLong(0)); - PyStructSequence_SET_ITEM(v, 5, PyLong_FromLong(0)); + SET_ITEM(4, PyLong_FromLong(0)); + SET_ITEM(5, PyLong_FromLong(0)); #else - PyStructSequence_SET_ITEM(v, 4, _PyLong_FromUid(st->st_uid)); - PyStructSequence_SET_ITEM(v, 5, _PyLong_FromGid(st->st_gid)); + SET_ITEM(4, _PyLong_FromUid(st->st_uid)); + SET_ITEM(5, _PyLong_FromGid(st->st_gid)); #endif static_assert(sizeof(long long) >= sizeof(st->st_size), "stat.st_size is larger than long long"); - PyStructSequence_SET_ITEM(v, 6, PyLong_FromLongLong(st->st_size)); + SET_ITEM(6, PyLong_FromLongLong(st->st_size)); + // Set st_atime, st_mtime and st_ctime + unsigned long ansec, mnsec, cnsec; #if defined(HAVE_STAT_TV_NSEC) ansec = st->st_atim.tv_nsec; mnsec = st->st_mtim.tv_nsec; @@ -2512,67 +2539,67 @@ _pystat_fromstructstat(PyObject *module, STRUCT_STAT *st) #else ansec = mnsec = cnsec = 0; #endif - fill_time(module, v, 7, 10, 13, st->st_atime, ansec); - fill_time(module, v, 8, 11, 14, st->st_mtime, mnsec); - fill_time(module, v, 9, 12, 15, st->st_ctime, cnsec); + if (fill_time(module, v, 7, 10, 13, st->st_atime, ansec) < 0) { + goto error; + } + if (fill_time(module, v, 8, 11, 14, st->st_mtime, mnsec) < 0) { + goto error; + } + if (fill_time(module, v, 9, 12, 15, st->st_ctime, cnsec) < 0) { + goto error; + } #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE - PyStructSequence_SET_ITEM(v, ST_BLKSIZE_IDX, - PyLong_FromLong((long)st->st_blksize)); + SET_ITEM(ST_BLKSIZE_IDX, PyLong_FromLong((long)st->st_blksize)); #endif #ifdef HAVE_STRUCT_STAT_ST_BLOCKS - PyStructSequence_SET_ITEM(v, ST_BLOCKS_IDX, - PyLong_FromLong((long)st->st_blocks)); + SET_ITEM(ST_BLOCKS_IDX, PyLong_FromLong((long)st->st_blocks)); #endif #ifdef HAVE_STRUCT_STAT_ST_RDEV - PyStructSequence_SET_ITEM(v, ST_RDEV_IDX, - PyLong_FromLong((long)st->st_rdev)); + SET_ITEM(ST_RDEV_IDX, PyLong_FromLong((long)st->st_rdev)); #endif #ifdef HAVE_STRUCT_STAT_ST_GEN - PyStructSequence_SET_ITEM(v, ST_GEN_IDX, - PyLong_FromLong((long)st->st_gen)); + SET_ITEM(ST_GEN_IDX, PyLong_FromLong((long)st->st_gen)); #endif #if defined(HAVE_STRUCT_STAT_ST_BIRTHTIME) { - PyObject *val; - unsigned long bsec,bnsec; + unsigned long bsec, bnsec; bsec = (long)st->st_birthtime; #ifdef HAVE_STAT_TV_NSEC2 bnsec = st->st_birthtimespec.tv_nsec; #else bnsec = 0; #endif - val = PyFloat_FromDouble(bsec + 1e-9*bnsec); - PyStructSequence_SET_ITEM(v, ST_BIRTHTIME_IDX, - val); + SET_ITEM(ST_BIRTHTIME_IDX, PyFloat_FromDouble(bsec + bnsec * 1e-9)); } #elif defined(MS_WINDOWS) - fill_time(module, v, -1, ST_BIRTHTIME_IDX, ST_BIRTHTIME_NS_IDX, - st->st_birthtime, st->st_birthtime_nsec); + if (fill_time(module, v, -1, ST_BIRTHTIME_IDX, ST_BIRTHTIME_NS_IDX, + st->st_birthtime, st->st_birthtime_nsec) < 0) { + goto error; + } #endif #ifdef HAVE_STRUCT_STAT_ST_FLAGS - PyStructSequence_SET_ITEM(v, ST_FLAGS_IDX, - PyLong_FromLong((long)st->st_flags)); + SET_ITEM(ST_FLAGS_IDX, PyLong_FromLong((long)st->st_flags)); #endif #ifdef HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES - PyStructSequence_SET_ITEM(v, ST_FILE_ATTRIBUTES_IDX, - PyLong_FromUnsignedLong(st->st_file_attributes)); + SET_ITEM(ST_FILE_ATTRIBUTES_IDX, + PyLong_FromUnsignedLong(st->st_file_attributes)); #endif #ifdef HAVE_STRUCT_STAT_ST_FSTYPE - PyStructSequence_SET_ITEM(v, ST_FSTYPE_IDX, - PyUnicode_FromString(st->st_fstype)); + SET_ITEM(ST_FSTYPE_IDX, PyUnicode_FromString(st->st_fstype)); #endif #ifdef HAVE_STRUCT_STAT_ST_REPARSE_TAG - PyStructSequence_SET_ITEM(v, ST_REPARSE_TAG_IDX, - PyLong_FromUnsignedLong(st->st_reparse_tag)); + SET_ITEM(ST_REPARSE_TAG_IDX, PyLong_FromUnsignedLong(st->st_reparse_tag)); #endif - if (PyErr_Occurred()) { - Py_DECREF(v); - return NULL; - } - + assert(!PyErr_Occurred()); return v; + +error: + Py_DECREF(v); + return NULL; + +#undef SET_ITEM } /* POSIX methods */ @@ -6303,11 +6330,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, _Py_time_t_to_FILE_TIME(utime.mtime_s, utime.mtime_ns, &mtime); } if (!SetFileTime(hFile, NULL, &atime, &mtime)) { - /* Avoid putting the file name into the error here, - as that may confuse the user into believing that - something is wrong with the file, when it also - could be the time stamp that gives a problem. */ - PyErr_SetFromWindowsErr(0); + path_error(path); CloseHandle(hFile); return NULL; } @@ -6347,8 +6370,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, #endif if (result < 0) { - /* see previous comment about not putting filename in error here */ - posix_error(); + path_error(path); return NULL; } @@ -14572,15 +14594,13 @@ os_DirEntry_is_symlink_impl(DirEntry *self, PyTypeObject *defining_class) /*[clinic input] os.DirEntry.is_junction -> bool - defining_class: defining_class - / Return True if the entry is a junction; cached per entry. [clinic start generated code]*/ static int -os_DirEntry_is_junction_impl(DirEntry *self, PyTypeObject *defining_class) -/*[clinic end generated code: output=7061a07b0ef2cd1f input=475cd36fb7d4723f]*/ +os_DirEntry_is_junction_impl(DirEntry *self) +/*[clinic end generated code: output=97f64d5d99eeccb5 input=4fc8e701eea118a1]*/ { #ifdef MS_WINDOWS return self->win32_lstat.st_reparse_tag == IO_REPARSE_TAG_MOUNT_POINT; diff --git a/Modules/posixmodule.h b/Modules/posixmodule.h index 5452ffbf17acfc..8827ce153fed8c 100644 --- a/Modules/posixmodule.h +++ b/Modules/posixmodule.h @@ -2,31 +2,37 @@ #ifndef Py_POSIXMODULE_H #define Py_POSIXMODULE_H +#ifndef Py_LIMITED_API #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_SYS_TYPES_H -#include +# include // uid_t #endif -#ifndef Py_LIMITED_API #ifndef MS_WINDOWS -PyAPI_FUNC(PyObject *) _PyLong_FromUid(uid_t); -PyAPI_FUNC(PyObject *) _PyLong_FromGid(gid_t); +extern PyObject* _PyLong_FromUid(uid_t); + +// Export for 'grp' shared extension +PyAPI_FUNC(PyObject*) _PyLong_FromGid(gid_t); + +// Export for '_posixsubprocess' shared extension PyAPI_FUNC(int) _Py_Uid_Converter(PyObject *, uid_t *); + +// Export for 'grp' shared extension PyAPI_FUNC(int) _Py_Gid_Converter(PyObject *, gid_t *); -#endif /* MS_WINDOWS */ +#endif // !MS_WINDOWS -#if defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGWAIT) || \ - defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT) -# define HAVE_SIGSET_T +#if (defined(PYPTHREAD_SIGMASK) || defined(HAVE_SIGWAIT) \ + || defined(HAVE_SIGWAITINFO) || defined(HAVE_SIGTIMEDWAIT)) +# define HAVE_SIGSET_T #endif -PyAPI_FUNC(int) _Py_Sigset_Converter(PyObject *, void *); -#endif /* Py_LIMITED_API */ +extern int _Py_Sigset_Converter(PyObject *, void *); #ifdef __cplusplus } #endif -#endif /* !Py_POSIXMODULE_H */ +#endif // !Py_LIMITED_API +#endif // !Py_POSIXMODULE_H diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 52dd06cd3c8181..bd24523eac830b 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -7,7 +7,6 @@ #include "pycore_pyhash.h" // _Py_HashSecret #include "pycore_traceback.h" // _PyTraceback_Add() -#include #include // offsetof() #include "expat.h" #include "pyexpat.h" diff --git a/Modules/readline.c b/Modules/readline.c index 2531b236b6ef17..aeae654162f13f 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -12,14 +12,13 @@ #include "Python.h" #include "pycore_pylifecycle.h" // _Py_SetLocaleFromEnv() -#include -#include -#include +#include // errno +#include // SIGWINCH #include // free() -#ifdef HAVE_SYS_TIME_H -#include +#include // strdup() +#ifdef HAVE_SYS_SELECT_H +# include // select() #endif -#include #if defined(HAVE_SETLOCALE) /* GNU readline() mistakenly sets the LC_CTYPE locale. @@ -27,7 +26,7 @@ * We must save and restore the locale around the rl_initialize() call. */ #define SAVE_LOCALE -#include +# include // setlocale() #endif #ifdef SAVE_LOCALE @@ -1333,7 +1332,8 @@ readline_until_enter_or_signal(const char *prompt, int *signal) int has_input = 0, err = 0; while (!has_input) - { struct timeval timeout = {0, 100000}; /* 0.1 seconds */ + { + struct timeval timeout = {0, 100000}; // 100 ms (0.1 seconds) /* [Bug #1552726] Only limit the pause if an input hook has been defined. */ diff --git a/Modules/resource.c b/Modules/resource.c index f5d9972d9a8ff7..d65509ec3436a2 100644 --- a/Modules/resource.c +++ b/Modules/resource.c @@ -2,10 +2,6 @@ #include // errno #include #include // getrusage() -#ifdef HAVE_SYS_TIME_H -# include -#endif -#include #include // getpagesize() /* On some systems, these aren't in any header file. @@ -27,15 +23,16 @@ class pid_t_converter(CConverter): type = 'pid_t' format_unit = '" _Py_PARSE_PID "' - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" {paramname} = PyLong_AsPid({argname}); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=5af1c116d56cbb5a]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=c94349aa1aad151d]*/ #include "clinic/resource.c.h" diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 3adb2e8dfe58d8..8d6556727b3a5a 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -16,10 +16,10 @@ #include "pycore_signal.h" // _Py_RestoreSignals() #ifndef MS_WINDOWS -# include "posixmodule.h" +# include "posixmodule.h" // _PyLong_FromUid() #endif #ifdef MS_WINDOWS -# include "socketmodule.h" /* needed for SOCKET_T */ +# include "socketmodule.h" // SOCKET_T #endif #ifdef MS_WINDOWS @@ -29,16 +29,16 @@ #endif #ifdef HAVE_SIGNAL_H -# include +# include // sigaction() #endif #ifdef HAVE_SYS_SYSCALL_H -# include +# include // __NR_pidfd_send_signal #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_SYS_TIME_H -# include +# include // setitimer() #endif #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 74b1c1c661604f..90592ffc152fc1 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -111,11 +111,6 @@ Local naming conventions: #include "pycore_fileutils.h" // _Py_set_inheritable() #include "pycore_moduleobject.h" // _PyModule_GetState -// gethostname() prototype missing from Solaris standard header files -#ifdef __sun -extern int gethostname(char *, int); -#endif - #ifdef _Py_MEMORY_SANITIZER # include #endif diff --git a/Modules/termios.c b/Modules/termios.c index a0613837ef9795..c779a757e4fa9b 100644 --- a/Modules/termios.c +++ b/Modules/termios.c @@ -27,6 +27,9 @@ #include #include +#if defined(__sun) && defined(__SVR4) +# include // ioctl() +#endif /* HP-UX requires that this be included to pick up MDCD, MCTS, MDSR, * MDTR, MRI, and MRTS (apparently used internally by some things diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 68948b6be1a61a..6a872a285d289b 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -6,22 +6,21 @@ #include "pycore_namespace.h" // _PyNamespace_New() #include "pycore_runtime.h" // _Py_ID() -#include - +#include // clock() #ifdef HAVE_SYS_TIMES_H -# include +# include // times() #endif #ifdef HAVE_SYS_TYPES_H # include #endif #if defined(HAVE_SYS_RESOURCE_H) -# include +# include // getrusage(RUSAGE_SELF) #endif #ifdef QUICKWIN # include #endif #if defined(HAVE_PTHREAD_H) -# include +# include // pthread_getcpuclockid() #endif #if defined(_AIX) # include @@ -414,7 +413,9 @@ Return the clk_id of a thread's CPU time clock."); static PyObject * time_sleep(PyObject *self, PyObject *timeout_obj) { - PySys_Audit("time.sleep", "O", timeout_obj); + if (PySys_Audit("time.sleep", "O", timeout_obj) < 0) { + return NULL; + } _PyTime_t timeout; if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT)) diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index c1e22f3868931f..875a9c18c4e340 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1035,6 +1035,7 @@ is_unified_ideograph(Py_UCS4 code) (0x2B740 <= code && code <= 0x2B81D) || /* CJK Ideograph Extension D */ (0x2B820 <= code && code <= 0x2CEA1) || /* CJK Ideograph Extension E */ (0x2CEB0 <= code && code <= 0x2EBE0) || /* CJK Ideograph Extension F */ + (0x2EBF0 <= code && code <= 0x2EE5D) || /* CJK Ideograph Extension I */ (0x30000 <= code && code <= 0x3134A) || /* CJK Ideograph Extension G */ (0x31350 <= code && code <= 0x323AF); /* CJK Ideograph Extension H */ } diff --git a/Modules/unicodedata_db.h b/Modules/unicodedata_db.h index 4c4b2f589c50bf..ed4b0eea9a6c59 100644 --- a/Modules/unicodedata_db.h +++ b/Modules/unicodedata_db.h @@ -1,6 +1,6 @@ /* this file was generated by Tools/unicode/makeunicodedata.py 3.3 */ -#define UNIDATA_VERSION "15.0.0" +#define UNIDATA_VERSION "15.1.0" /* a list of unique database records */ const _PyUnicode_DatabaseRecord _PyUnicode_Database_Records[] = { {0, 0, 0, 0, 0, 0}, @@ -810,46 +810,46 @@ static const unsigned short index1[] = { 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 271, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 121, 121, 121, 121, 273, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 274, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 271, 101, 101, 101, 101, 272, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 121, 121, 121, 121, 274, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 275, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 275, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 276, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 276, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 274, 137, 137, 137, 137, + 101, 101, 101, 277, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 275, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, @@ -1215,7 +1215,7 @@ static const unsigned short index1[] = { 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 277, 137, 278, 279, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 278, 137, 279, 280, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, @@ -1288,7 +1288,7 @@ static const unsigned short index1[] = { 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 280, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 281, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, @@ -1325,7 +1325,7 @@ static const unsigned short index1[] = { 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 280, + 120, 281, }; static const unsigned short index2[] = { @@ -2016,58 +2016,57 @@ static const unsigned short index2[] = { 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, 0, 0, 0, 0, 252, 253, 253, 253, 243, 254, 172, 255, 256, 257, 256, - 257, 256, 257, 256, 257, 256, 257, 243, 243, 256, 257, 256, 257, 256, - 257, 256, 257, 258, 259, 260, 260, 243, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 261, 262, 263, 264, 265, 265, 258, 254, 254, 254, 254, - 254, 251, 243, 266, 266, 266, 254, 172, 253, 243, 26, 0, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 267, 172, 267, 172, 267, 172, + 243, 243, 243, 243, 243, 252, 253, 253, 253, 243, 254, 172, 255, 256, + 257, 256, 257, 256, 257, 256, 257, 256, 257, 243, 243, 256, 257, 256, + 257, 256, 257, 256, 257, 258, 259, 260, 260, 243, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 261, 262, 263, 264, 265, 265, 258, 254, 254, + 254, 254, 254, 251, 243, 266, 266, 266, 254, 172, 253, 243, 26, 0, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, - 267, 172, 267, 172, 172, 267, 172, 267, 172, 267, 172, 172, 172, 172, - 172, 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, - 267, 267, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 267, 172, 172, 0, 0, - 268, 268, 269, 269, 254, 270, 271, 258, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, + 267, 172, 267, 172, 267, 172, 172, 267, 172, 267, 172, 267, 172, 172, + 172, 172, 172, 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, 267, + 267, 172, 267, 267, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 267, 172, + 172, 0, 0, 268, 268, 269, 269, 254, 270, 271, 258, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, 172, 267, - 172, 172, 267, 172, 267, 172, 267, 172, 172, 172, 172, 172, 172, 267, - 267, 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, + 172, 267, 172, 172, 267, 172, 267, 172, 267, 172, 172, 172, 172, 172, + 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, 267, 267, 172, 267, + 267, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 267, 172, 172, 267, 267, + 267, 267, 253, 254, 254, 270, 271, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 267, 172, 172, 267, 267, 267, 267, - 253, 254, 254, 270, 271, 0, 0, 0, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 0, 271, 271, 271, 271, 271, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 0, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 0, 272, 272, 273, 273, 273, 273, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 172, 172, 172, 172, 172, 172, 172, + 271, 271, 271, 271, 271, 271, 271, 0, 272, 272, 273, 273, 273, 273, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 243, 243, 243, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, 243, 243, 243, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, + 243, 243, 243, 243, 243, 243, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 251, 251, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 251, 251, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 275, 275, 275, 275, 275, 275, 275, 275, 251, 276, 276, 276, 276, - 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 251, 251, 251, - 272, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, + 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 251, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 251, + 251, 251, 272, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 276, 276, 276, 276, 276, 276, - 276, 276, 276, 276, 276, 276, 276, 276, 276, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 251, 251, 251, 251, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 251, 251, 251, 251, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, @@ -2078,17 +2077,18 @@ static const unsigned short index2[] = { 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 251, 251, 251, 251, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 251, 251, + 251, 251, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 251, 251, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 251, 251, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 251, 172, 172, 172, 172, 172, 172, 172, + 274, 274, 274, 274, 274, 274, 274, 274, 251, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, @@ -2102,12 +2102,12 @@ static const unsigned short index2[] = { 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 172, 172, 172, 172, 172, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 172, 172, 172, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 254, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 254, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, @@ -2115,12 +2115,12 @@ static const unsigned short index2[] = { 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 0, 0, 0, 243, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 0, 0, 0, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 53, 53, 53, 53, 53, 83, 83, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 53, 138, 138, 138, 48, 48, 48, @@ -3339,6 +3339,15 @@ static const unsigned short index2[] = { 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, @@ -3350,9 +3359,9 @@ static const unsigned short index2[] = { 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + 281, 281, 281, 281, 281, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, @@ -3368,33 +3377,33 @@ static const unsigned short index2[] = { 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 281, 281, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, + 281, 281, 281, 281, 281, 281, 281, 0, 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, 281, 281, - 281, 281, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 281, + 281, 281, 281, 281, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, + 172, 172, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 0, 177, 0, 0, 0, 0, 0, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, + 0, 0, 0, 0, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 71, 71, 71, + 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, @@ -3408,7 +3417,7 @@ static const unsigned short index2[] = { 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 279, + 71, 71, 71, 71, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, @@ -3417,7 +3426,7 @@ static const unsigned short index2[] = { 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 0, 0, + 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 0, 0, }; /* decomposition data */ @@ -6027,385 +6036,199 @@ static const change_record change_records_3_2_0[] = { { 9, 255, 255, 255, 255, 0 }, { 255, 255, 255, 1, 255, 0 }, { 255, 20, 255, 255, 255, 0 }, - { 255, 255, 255, 255, 255, 1e+16 }, + { 255, 255, 255, 255, 255, 1000000000000.0 }, { 255, 255, 255, 255, 255, 1e+20 }, { 255, 19, 255, 255, 255, -1 }, { 1, 255, 255, 0, 255, 0 }, }; static const unsigned char changes_3_2_0_index[] = { - 0, 1, 2, 2, 3, 4, 5, 6, 2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 2, 2, 2, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 52, 2, 53, 2, 2, 54, 55, 56, 57, 58, 2, 59, 60, 61, 62, 2, 63, 64, - 65, 66, 67, 68, 68, 2, 69, 2, 2, 70, 71, 52, 72, 73, 74, 75, 2, 2, 2, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 2, 2, 2, 2, 2, 2, 86, 2, 2, 2, 2, 2, - 87, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 88, 2, 89, 2, 2, 2, 2, 2, 2, 2, 2, - 90, 91, 2, 2, 2, 2, 2, 2, 2, 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 93, - 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 95, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 96, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 97, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 98, 99, 2, 2, 2, 2, 2, 2, 2, 2, 100, 52, - 52, 101, 102, 52, 103, 104, 105, 106, 107, 108, 109, 110, 111, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 112, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 113, 114, 115, 116, 117, 118, 2, 2, 119, 120, 121, - 2, 122, 123, 124, 125, 126, 127, 2, 128, 129, 130, 131, 132, 133, 134, - 52, 52, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 2, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 2, 159, 160, 2, - 161, 162, 163, 164, 2, 165, 166, 167, 168, 169, 170, 171, 2, 172, 173, - 174, 175, 2, 176, 177, 178, 52, 52, 52, 52, 52, 52, 52, 179, 180, 52, - 181, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 182, 52, - 52, 52, 52, 52, 52, 52, 52, 183, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 52, 52, 52, - 184, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 52, 52, - 52, 185, 186, 187, 188, 2, 2, 2, 2, 189, 190, 191, 192, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 102, 52, 52, 52, 52, 52, 52, 52, 52, 52, 183, - 193, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 194, 52, - 52, 195, 52, 52, 196, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 197, 198, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199, 181, 2, 2, 200, 201, - 202, 203, 204, 2, 2, 205, 2, 2, 2, 206, 207, 208, 52, 52, 52, 52, 52, - 209, 2, 2, 2, 2, 2, 2, 2, 2, 210, 2, 211, 212, 213, 2, 2, 214, 2, 2, 2, - 215, 2, 2, 2, 2, 2, 216, 52, 217, 218, 2, 2, 2, 2, 2, 219, 220, 221, 2, - 222, 223, 2, 2, 224, 225, 52, 226, 227, 2, 52, 52, 52, 52, 52, 52, 52, - 228, 229, 230, 231, 232, 52, 52, 233, 234, 52, 235, 2, 2, 2, 2, 2, 2, 2, - 2, 236, 237, 97, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 86, 238, 2, - 239, 240, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 241, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 242, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 243, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 244, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 245, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 246, - 52, 247, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 248, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 249, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 241, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 250, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 251, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 52, 252, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 1, 21, 22, 23, 24, 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 1, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 1, 1, 1, 50, 1, 1, 51, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 53, 54, 55, 56, 1, + 57, 1, 1, 1, 58, 1, 1, 1, 1, 1, 1, 59, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 61, 1, 55, 1, 1, 1, 1, 1, 1, 62, 1, 1, 63, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, 65, 1, 66, 1, 67, 1, + 1, 1, 1, 1, 1, 1, 1, 68, 69, 1, 1, 1, 70, 28, 71, 72, 73, 74, 75, 76, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 77, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 78, 79, 80, 1, 81, 82, 83, 84, 85, 86, 87, 88, 89, 28, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 28, 28, 28, 115, 116, 117, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 118, 28, 28, 28, 28, 119, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 28, 28, 120, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 121, + 122, 1, 1, 123, 124, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 125, 28, 28, 28, 28, 126, 127, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 128, 28, 129, 130, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 131, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 132, 1, 133, + 134, 135, 136, 1, 137, 138, 28, 28, 139, 1, 1, 1, 1, 140, 141, 142, 143, + 1, 144, 1, 1, 145, 146, 147, 1, 1, 148, 149, 150, 1, 151, 152, 153, 28, + 28, 28, 154, 155, 156, 28, 157, 158, 1, 1, 1, 1, 159, 67, 1, 1, 1, 1, 1, + 1, 1, 160, 161, 162, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 164, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 165, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 166, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 167, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 168, 169, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 170, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 171, 28, 28, 43, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 163, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 172, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 173, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, }; static const unsigned char changes_3_2_0_data[] = { @@ -6426,153 +6249,169 @@ static const unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 10, 0, 9, 9, 0, 0, 0, 9, 9, - 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 10, 0, 9, 9, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, 18, 19, 0, 0, 9, - 9, 9, 9, 0, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 15, 16, 17, 18, 19, 0, 0, 9, 9, 9, 9, 0, 0, 9, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 20, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 0, 20, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 9, 0, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 9, 9, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6618,82 +6457,98 @@ static const unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6726,74 +6581,97 @@ static const unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 47, 47, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 51, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 0, 0, 0, 0, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, + 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -6802,26 +6680,31 @@ static const unsigned char changes_3_2_0_data[] = { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6829,526 +6712,984 @@ static const unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 21, 21, 21, 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 9, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, + 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 9, 9, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, - 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 49, 50, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 21, 21, 21, - 21, 21, 0, 0, 0, 1, 1, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, - 14, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 19, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, - 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 0, 0, 9, 9, 9, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7356,94 +7697,66 @@ static const unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, + 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, + 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -7453,317 +7766,346 @@ static const unsigned char changes_3_2_0_data[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, + 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, 9, 0, 9, 9, + 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, 0, 9, 0, 0, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 9, 9, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 9, 0, 9, 0, - 9, 0, 9, 9, 9, 0, 9, 9, 0, 9, 0, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 9, - 0, 9, 0, 0, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 0, 9, 9, - 9, 9, 0, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 0, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const change_record* get_change_3_2_0(Py_UCS4 n) @@ -7771,8 +8113,8 @@ static const change_record* get_change_3_2_0(Py_UCS4 n) int index; if (n >= 0x110000) index = 0; else { - index = changes_3_2_0_index[n>>7]; - index = changes_3_2_0_data[(index<<7)+(n & 127)]; + index = changes_3_2_0_index[n>>8]; + index = changes_3_2_0_data[(index<<8)+(n & 255)]; } return change_records_3_2_0+index; } diff --git a/Modules/unicodename_db.h b/Modules/unicodename_db.h index f6320c43e53f77..1116905308177d 100644 --- a/Modules/unicodename_db.h +++ b/Modules/unicodename_db.h @@ -53,240 +53,240 @@ static const unsigned char lexicon[] = { 200, 84, 72, 82, 69, 69, 128, 79, 86, 69, 210, 72, 65, 128, 73, 78, 68, 69, 216, 77, 65, 76, 65, 89, 65, 76, 65, 205, 83, 73, 89, 65, 209, 68, 79, 87, 206, 80, 65, 72, 65, 87, 200, 67, 72, 79, 83, 69, 79, 78, 199, - 66, 65, 76, 73, 78, 69, 83, 197, 70, 73, 86, 69, 128, 72, 65, 76, 70, 87, - 73, 68, 84, 200, 72, 65, 78, 68, 45, 70, 73, 83, 212, 77, 69, 82, 79, 73, - 84, 73, 195, 84, 85, 82, 78, 69, 196, 73, 68, 69, 79, 71, 82, 65, 80, 72, - 73, 195, 75, 65, 128, 76, 73, 71, 72, 212, 73, 68, 69, 79, 71, 82, 65, - 205, 80, 72, 65, 83, 69, 45, 196, 84, 79, 128, 65, 76, 67, 72, 69, 77, - 73, 67, 65, 204, 78, 69, 85, 77, 197, 66, 82, 65, 72, 77, 201, 84, 79, - 78, 197, 66, 65, 82, 128, 82, 65, 128, 83, 73, 78, 72, 65, 76, 193, 78, - 85, 77, 69, 82, 73, 195, 80, 65, 128, 83, 73, 88, 128, 89, 65, 128, 69, - 73, 71, 72, 84, 128, 76, 65, 128, 77, 65, 128, 83, 69, 86, 69, 78, 128, - 84, 72, 85, 77, 194, 72, 85, 78, 71, 65, 82, 73, 65, 206, 78, 73, 78, 69, - 128, 76, 79, 78, 199, 78, 65, 128, 66, 65, 82, 194, 72, 65, 200, 82, 73, - 71, 72, 84, 128, 66, 76, 79, 67, 203, 68, 79, 84, 211, 78, 79, 82, 84, - 200, 83, 65, 128, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 65, 128, 90, - 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 128, 90, 90, - 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 90, 89, 128, - 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 82, 128, 90, - 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128, 90, 90, 83, - 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90, 79, 128, 90, - 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128, 90, 90, 73, - 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80, 128, 90, 90, - 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90, 69, 80, 128, - 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 90, 90, 65, - 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 65, 128, 90, - 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74, 128, 90, 87, - 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, 87, 65, 82, 65, - 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, 88, 128, - 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, 66, 85, - 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 213, 90, 83, 72, 65, 128, 90, - 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, 79, 128, - 90, 79, 77, 66, 73, 69, 128, 90, 79, 65, 128, 90, 77, 69, 89, 84, 83, 65, - 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, 74, 69, 128, - 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 80, 80, 69, 82, 45, - 77, 79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, 73, 76, 68, 69, 128, - 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, 68, 193, 90, 73, 66, - 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, 89, 88, 128, 90, 72, - 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, 82, 128, 90, 72, 89, - 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, 72, 87, 65, 128, 90, - 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, 82, 88, 128, 90, 72, - 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, 88, 128, 90, 72, 85, - 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, 90, 72, 79, 88, 128, - 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, 79, 79, 128, 90, 72, - 79, 73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, 128, 90, 72, - 73, 76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, 69, 84, 128, - 90, 72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, 90, 72, 197, - 90, 72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, 90, 72, 65, 84, 128, - 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, 65, 73, 78, 128, 90, - 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, 69, 86, 79, 75, 128, - 90, 69, 85, 83, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, 128, 90, 69, - 82, 207, 90, 69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, 69, 77, 76, - 74, 65, 128, 90, 69, 76, 79, 128, 90, 69, 66, 82, 193, 90, 69, 50, 128, - 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 45, 89, 79, 68, 72, - 128, 90, 65, 89, 73, 78, 128, 90, 65, 89, 73, 206, 90, 65, 86, 73, 89, - 65, 78, 73, 128, 90, 65, 84, 65, 128, 90, 65, 82, 81, 65, 128, 90, 65, - 82, 76, 128, 90, 65, 81, 69, 198, 90, 65, 80, 89, 65, 84, 89, 77, 73, - 128, 90, 65, 80, 89, 65, 84, 79, 89, 128, 90, 65, 80, 89, 65, 84, 79, - 217, 90, 65, 80, 89, 65, 84, 65, 89, 65, 128, 90, 65, 78, 79, 90, 72, 69, - 75, 128, 90, 65, 78, 65, 66, 65, 90, 65, 210, 90, 65, 77, 88, 128, 90, - 65, 76, 128, 90, 65, 204, 90, 65, 75, 82, 89, 84, 79, 69, 128, 90, 65, - 75, 82, 89, 84, 65, 89, 65, 128, 90, 65, 75, 82, 89, 84, 65, 89, 193, 90, - 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90, 65, 72, 128, 90, - 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 65, 68, 69, 82, 90, - 72, 75, 65, 128, 90, 65, 55, 128, 90, 193, 90, 48, 49, 54, 72, 128, 90, - 48, 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, 69, 128, - 90, 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, 54, 66, - 128, 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, 53, 73, - 128, 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, 49, 53, - 70, 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, 48, 49, - 53, 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, 90, 48, - 49, 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, 49, 50, - 128, 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, 128, 90, - 48, 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, 48, 48, - 53, 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, 48, 48, - 52, 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, 48, 48, - 51, 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, 48, 48, - 50, 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, 48, 48, - 49, 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, 82, 88, - 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, 65, 65, - 128, 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, 79, 128, - 89, 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, 65, 65, - 128, 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, 79, 81, - 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, 85, 85, - 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, 88, 128, - 89, 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, 89, 85, - 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, 79, 77, - 128, 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, 74, 128, - 89, 85, 73, 128, 89, 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, 68, 72, - 128, 89, 85, 68, 200, 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, 128, 89, - 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, 85, 128, - 89, 85, 45, 79, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, 128, 89, - 85, 45, 69, 128, 89, 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, 89, 85, - 45, 52, 128, 89, 85, 45, 51, 128, 89, 85, 45, 50, 128, 89, 85, 45, 49, - 128, 89, 85, 128, 89, 213, 89, 82, 89, 128, 89, 80, 83, 73, 76, 73, 128, - 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, 75, 82, 73, 83, 73, 83, 128, - 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, 79, 71, 69, 71, 82, 65, 77, - 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79, 88, 128, 89, 79, 87, 68, - 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, 128, 89, 79, 85, 84, - 72, 70, 85, 204, 89, 79, 213, 89, 79, 84, 128, 89, 79, 212, 89, 79, 82, - 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, 89, 79, 79, 128, - 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 128, 89, 79, 196, - 89, 79, 65, 128, 89, 79, 45, 89, 79, 128, 89, 79, 45, 89, 69, 79, 128, - 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, 79, 45, 79, - 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, 45, 65, 69, - 128, 89, 79, 45, 65, 128, 89, 79, 45, 54, 128, 89, 79, 45, 53, 128, 89, - 79, 45, 52, 128, 89, 79, 45, 51, 128, 89, 79, 45, 50, 128, 89, 79, 45, - 49, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, 88, 128, 89, 73, 87, - 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, 78, 71, 128, 89, 73, - 73, 128, 89, 73, 72, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, 73, 69, - 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69, 128, 89, - 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, 72, 69, - 128, 89, 72, 65, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, 83, 73, - 211, 89, 70, 69, 206, 89, 69, 90, 73, 68, 201, 89, 69, 89, 128, 89, 69, - 87, 128, 89, 69, 85, 88, 128, 89, 69, 85, 82, 65, 69, 128, 89, 69, 85, - 81, 128, 89, 69, 85, 77, 128, 89, 69, 85, 65, 69, 84, 128, 89, 69, 85, - 65, 69, 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, 85, 128, 89, 69, - 83, 73, 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, 79, 75, - 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, 69, 83, - 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, 83, 73, - 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, 69, 83, 73, 69, 85, 78, - 71, 45, 75, 73, 89, 69, 79, 75, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, - 75, 72, 73, 69, 85, 75, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 72, - 73, 69, 85, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, 89, 69, 82, 85, - 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, 65, 200, 89, 69, - 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, 79, 45, - 89, 65, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, 45, 79, 128, 89, 69, - 78, 73, 83, 69, 201, 89, 69, 78, 65, 80, 128, 89, 69, 78, 128, 89, 69, - 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 76, 76, 79, 215, 89, 69, 73, - 78, 128, 89, 69, 72, 128, 89, 69, 69, 71, 128, 89, 69, 69, 128, 89, 69, - 65, 210, 89, 69, 65, 128, 89, 65, 90, 90, 128, 89, 65, 90, 72, 128, 89, - 65, 90, 128, 89, 65, 89, 68, 128, 89, 65, 89, 65, 78, 78, 65, 128, 89, - 65, 89, 128, 89, 65, 87, 78, 73, 78, 199, 89, 65, 87, 78, 128, 89, 65, - 87, 128, 89, 65, 86, 128, 89, 65, 85, 128, 89, 65, 84, 84, 128, 89, 65, - 84, 73, 128, 89, 65, 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, 83, 128, - 89, 65, 83, 72, 128, 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, 65, 82, - 78, 128, 89, 65, 82, 128, 89, 65, 210, 89, 65, 81, 128, 89, 65, 80, 128, - 89, 65, 78, 83, 65, 89, 65, 128, 89, 65, 78, 71, 128, 89, 65, 78, 199, - 89, 65, 78, 128, 89, 65, 77, 79, 75, 128, 89, 65, 77, 65, 75, 75, 65, 78, - 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, 75, 72, 72, 128, 89, 65, - 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, 65, 75, 128, 89, 65, 74, - 85, 82, 86, 69, 68, 73, 195, 89, 65, 74, 128, 89, 65, 73, 128, 89, 65, - 72, 72, 128, 89, 65, 72, 128, 89, 65, 71, 78, 128, 89, 65, 71, 72, 72, - 128, 89, 65, 71, 72, 128, 89, 65, 71, 128, 89, 65, 70, 213, 89, 65, 70, - 128, 89, 65, 69, 77, 77, 65, 69, 128, 89, 65, 68, 72, 128, 89, 65, 68, - 68, 72, 128, 89, 65, 68, 68, 128, 89, 65, 68, 128, 89, 65, 67, 72, 128, - 89, 65, 66, 72, 128, 89, 65, 66, 128, 89, 65, 65, 82, 85, 128, 89, 65, - 65, 73, 128, 89, 65, 65, 68, 79, 128, 89, 65, 45, 89, 79, 128, 89, 65, - 45, 85, 128, 89, 65, 45, 79, 128, 89, 65, 45, 53, 128, 89, 65, 45, 52, - 128, 89, 65, 45, 51, 128, 89, 65, 45, 50, 128, 89, 65, 45, 49, 128, 89, - 48, 48, 56, 128, 89, 48, 48, 55, 128, 89, 48, 48, 54, 128, 89, 48, 48, - 53, 128, 89, 48, 48, 52, 128, 89, 48, 48, 51, 128, 89, 48, 48, 50, 128, - 89, 48, 48, 49, 65, 128, 89, 48, 48, 49, 128, 89, 45, 67, 82, 69, 197, - 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, 82, 88, 128, - 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 79, 74, 128, 88, 89, 79, - 79, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, 205, 88, 89, - 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, 65, 128, 88, - 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, 128, 88, 87, - 65, 65, 128, 88, 87, 65, 128, 88, 87, 128, 88, 215, 88, 86, 69, 128, 88, - 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, 128, 88, 83, - 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, 128, 88, 79, 84, - 128, 88, 79, 82, 128, 88, 79, 80, 72, 128, 88, 79, 80, 128, 88, 79, 65, - 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, 73, 82, 79, 206, - 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, 128, 88, 73, 69, - 80, 128, 88, 73, 69, 128, 88, 73, 65, 78, 71, 81, 201, 88, 73, 65, 66, - 128, 88, 73, 128, 88, 72, 69, 89, 78, 128, 88, 71, 128, 88, 69, 89, 78, - 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, 69, 128, 88, 69, - 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, 80, 72, 128, 88, 65, - 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, 65, 128, 88, 48, - 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, 128, 88, 48, 48, - 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, 88, 48, 48, 52, - 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, 48, 48, 50, 128, - 88, 48, 48, 49, 128, 88, 45, 216, 88, 45, 82, 65, 89, 128, 87, 90, 128, - 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 73, 128, 87, 86, 69, 128, - 87, 86, 65, 128, 87, 86, 128, 87, 85, 80, 128, 87, 85, 79, 88, 128, 87, - 85, 79, 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, 87, 85, 78, 128, - 87, 85, 76, 85, 128, 87, 85, 76, 213, 87, 85, 73, 128, 87, 85, 69, 128, - 87, 85, 65, 69, 84, 128, 87, 85, 65, 69, 78, 128, 87, 85, 128, 87, 82, - 217, 87, 82, 79, 78, 71, 128, 87, 82, 73, 83, 212, 87, 82, 73, 78, 75, - 76, 69, 83, 128, 87, 82, 73, 78, 75, 76, 69, 211, 87, 82, 73, 78, 75, 76, - 69, 68, 128, 87, 82, 69, 83, 84, 76, 69, 82, 83, 128, 87, 82, 69, 78, 67, - 72, 128, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 80, 69, 196, 87, 82, - 65, 80, 128, 87, 79, 88, 128, 87, 79, 87, 128, 87, 79, 82, 83, 72, 73, - 80, 128, 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, 77, 128, 87, 79, 82, - 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, 87, 79, 82, - 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, 196, 87, 79, - 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, 79, 68, 83, - 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, 87, 79, 206, - 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, 65, 78, 211, - 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, 79, 83, 79, - 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, 79, 45, 55, - 128, 87, 79, 45, 54, 128, 87, 79, 45, 53, 128, 87, 79, 45, 52, 128, 87, - 79, 45, 51, 128, 87, 79, 45, 50, 128, 87, 79, 45, 49, 128, 87, 73, 84, - 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, 73, 206, - 87, 73, 82, 69, 76, 69, 83, 83, 128, 87, 73, 82, 69, 196, 87, 73, 78, 84, - 69, 82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 75, 128, 87, 73, - 78, 74, 65, 128, 87, 73, 78, 71, 83, 128, 87, 73, 78, 71, 128, 87, 73, - 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, 73, 78, 68, - 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, 78, 128, 87, - 73, 76, 84, 69, 196, 87, 73, 71, 78, 89, 65, 78, 128, 87, 73, 71, 71, 76, - 217, 87, 73, 71, 71, 76, 69, 83, 128, 87, 73, 68, 84, 72, 128, 87, 73, - 68, 69, 78, 73, 78, 199, 87, 73, 68, 69, 45, 72, 69, 65, 68, 69, 196, 87, - 73, 68, 197, 87, 73, 65, 78, 71, 87, 65, 65, 75, 128, 87, 73, 65, 78, 71, - 128, 87, 73, 45, 53, 128, 87, 73, 45, 52, 128, 87, 73, 45, 51, 128, 87, - 73, 45, 50, 128, 87, 73, 45, 49, 128, 87, 72, 79, 76, 197, 87, 72, 73, - 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, 73, 84, 69, 128, - 87, 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, 65, 73, 82, 128, - 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, 76, 128, 87, 72, - 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 72, 65, 76, 69, 128, 87, 72, - 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, 87, 69, 212, 87, - 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 45, 67, 82, 69, 197, 87, 69, 83, - 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, 128, 87, 69, 78, - 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, 69, 73, 69, 82, - 83, 84, 82, 65, 83, 211, 87, 69, 73, 128, 87, 69, 69, 78, 128, 87, 69, - 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 71, 69, 128, 87, 69, - 68, 68, 73, 78, 71, 128, 87, 69, 66, 128, 87, 69, 65, 82, 217, 87, 69, - 65, 80, 79, 78, 128, 87, 69, 45, 52, 128, 87, 69, 45, 51, 128, 87, 69, - 45, 50, 128, 87, 69, 45, 49, 128, 87, 67, 128, 87, 66, 128, 87, 65, 89, - 128, 87, 65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, 128, 87, 65, 87, - 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, 128, 87, 65, - 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, 69, 83, 128, - 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, 65, 84, 84, - 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, 84, 69, 82, - 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, 84, 128, 87, - 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 84, 69, 66, 65, 83, 75, 69, 84, - 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, 128, - 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 65, - 76, 76, 65, 205, 87, 65, 83, 45, 83, 65, 76, 65, 65, 77, 128, 87, 65, 82, - 78, 73, 78, 199, 87, 65, 82, 65, 78, 199, 87, 65, 81, 70, 65, 128, 87, - 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, 79, 81, - 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 68, 128, 87, 65, - 78, 67, 72, 207, 87, 65, 78, 128, 87, 65, 76, 76, 80, 76, 65, 78, 197, - 87, 65, 76, 76, 69, 196, 87, 65, 76, 76, 128, 87, 65, 76, 204, 87, 65, - 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, 65, - 73, 83, 84, 128, 87, 65, 73, 128, 87, 65, 70, 70, 76, 69, 128, 87, 65, - 69, 78, 128, 87, 65, 69, 128, 87, 65, 68, 68, 65, 128, 87, 65, 65, 86, - 85, 128, 87, 65, 65, 74, 73, 66, 128, 87, 65, 65, 65, 76, 73, 72, 69, + 73, 68, 69, 79, 71, 82, 65, 80, 72, 73, 195, 66, 65, 76, 73, 78, 69, 83, + 197, 70, 73, 86, 69, 128, 72, 65, 76, 70, 87, 73, 68, 84, 200, 72, 65, + 78, 68, 45, 70, 73, 83, 212, 77, 69, 82, 79, 73, 84, 73, 195, 84, 85, 82, + 78, 69, 196, 75, 65, 128, 76, 73, 71, 72, 212, 73, 68, 69, 79, 71, 82, + 65, 205, 80, 72, 65, 83, 69, 45, 196, 84, 79, 128, 65, 76, 67, 72, 69, + 77, 73, 67, 65, 204, 78, 69, 85, 77, 197, 66, 82, 65, 72, 77, 201, 84, + 79, 78, 197, 66, 65, 82, 128, 82, 65, 128, 83, 73, 78, 72, 65, 76, 193, + 78, 85, 77, 69, 82, 73, 195, 80, 65, 128, 83, 73, 88, 128, 89, 65, 128, + 69, 73, 71, 72, 84, 128, 76, 65, 128, 77, 65, 128, 83, 69, 86, 69, 78, + 128, 84, 72, 85, 77, 194, 72, 85, 78, 71, 65, 82, 73, 65, 206, 78, 73, + 78, 69, 128, 82, 73, 71, 72, 84, 128, 76, 79, 78, 199, 78, 65, 128, 66, + 65, 82, 194, 72, 65, 200, 66, 76, 79, 67, 203, 68, 79, 84, 211, 78, 79, + 82, 84, 200, 83, 65, 128, 84, 72, 79, 85, 83, 65, 78, 68, 128, 84, 65, + 128, 90, 90, 89, 88, 128, 90, 90, 89, 84, 128, 90, 90, 89, 82, 88, 128, + 90, 90, 89, 82, 128, 90, 90, 89, 80, 128, 90, 90, 89, 65, 128, 90, 90, + 89, 128, 90, 90, 85, 88, 128, 90, 90, 85, 82, 88, 128, 90, 90, 85, 82, + 128, 90, 90, 85, 80, 128, 90, 90, 85, 128, 90, 90, 83, 89, 65, 128, 90, + 90, 83, 65, 128, 90, 90, 79, 88, 128, 90, 90, 79, 80, 128, 90, 90, 79, + 128, 90, 90, 73, 88, 128, 90, 90, 73, 84, 128, 90, 90, 73, 80, 128, 90, + 90, 73, 69, 88, 128, 90, 90, 73, 69, 84, 128, 90, 90, 73, 69, 80, 128, + 90, 90, 73, 69, 128, 90, 90, 73, 128, 90, 90, 69, 88, 128, 90, 90, 69, + 80, 128, 90, 90, 69, 69, 128, 90, 90, 69, 128, 90, 90, 65, 88, 128, 90, + 90, 65, 84, 128, 90, 90, 65, 80, 128, 90, 90, 65, 65, 128, 90, 90, 65, + 128, 90, 89, 71, 79, 83, 128, 90, 87, 83, 80, 128, 90, 87, 78, 74, 128, + 90, 87, 78, 66, 83, 80, 128, 90, 87, 74, 128, 90, 87, 202, 90, 87, 65, + 82, 65, 75, 65, 89, 128, 90, 87, 65, 128, 90, 85, 84, 128, 90, 85, 79, + 88, 128, 90, 85, 79, 80, 128, 90, 85, 79, 128, 90, 85, 77, 128, 90, 85, + 66, 85, 82, 128, 90, 85, 53, 128, 90, 85, 181, 90, 213, 90, 83, 72, 65, + 128, 90, 82, 65, 128, 90, 81, 65, 80, 72, 193, 90, 79, 84, 128, 90, 79, + 79, 128, 90, 79, 77, 66, 73, 69, 128, 90, 79, 65, 128, 90, 77, 69, 89, + 84, 83, 65, 128, 90, 76, 65, 77, 193, 90, 76, 65, 128, 90, 76, 193, 90, + 74, 69, 128, 90, 73, 90, 50, 128, 90, 73, 81, 65, 65, 128, 90, 73, 80, + 80, 69, 82, 45, 77, 79, 85, 84, 200, 90, 73, 78, 79, 82, 128, 90, 73, 76, + 68, 69, 128, 90, 73, 71, 90, 65, 199, 90, 73, 71, 128, 90, 73, 68, 193, + 90, 73, 66, 128, 90, 73, 194, 90, 73, 51, 128, 90, 201, 90, 72, 89, 88, + 128, 90, 72, 89, 84, 128, 90, 72, 89, 82, 88, 128, 90, 72, 89, 82, 128, + 90, 72, 89, 80, 128, 90, 72, 89, 128, 90, 72, 87, 69, 128, 90, 72, 87, + 65, 128, 90, 72, 85, 88, 128, 90, 72, 85, 84, 128, 90, 72, 85, 82, 88, + 128, 90, 72, 85, 82, 128, 90, 72, 85, 80, 128, 90, 72, 85, 79, 88, 128, + 90, 72, 85, 79, 80, 128, 90, 72, 85, 79, 128, 90, 72, 85, 128, 90, 72, + 79, 88, 128, 90, 72, 79, 84, 128, 90, 72, 79, 80, 128, 90, 72, 79, 79, + 128, 90, 72, 79, 73, 128, 90, 72, 79, 128, 90, 72, 73, 86, 69, 84, 69, + 128, 90, 72, 73, 76, 128, 90, 72, 73, 128, 90, 72, 69, 88, 128, 90, 72, + 69, 84, 128, 90, 72, 69, 80, 128, 90, 72, 69, 69, 128, 90, 72, 69, 128, + 90, 72, 197, 90, 72, 65, 89, 73, 78, 128, 90, 72, 65, 88, 128, 90, 72, + 65, 84, 128, 90, 72, 65, 82, 128, 90, 72, 65, 80, 128, 90, 72, 65, 73, + 78, 128, 90, 72, 65, 65, 128, 90, 72, 65, 128, 90, 72, 128, 90, 69, 86, + 79, 75, 128, 90, 69, 85, 83, 128, 90, 69, 84, 65, 128, 90, 69, 82, 79, + 128, 90, 69, 82, 207, 90, 69, 78, 128, 90, 69, 77, 76, 89, 65, 128, 90, + 69, 77, 76, 74, 65, 128, 90, 69, 76, 79, 128, 90, 69, 66, 82, 193, 90, + 69, 50, 128, 90, 197, 90, 65, 89, 78, 128, 90, 65, 89, 73, 78, 45, 89, + 79, 68, 72, 128, 90, 65, 89, 73, 78, 128, 90, 65, 89, 73, 206, 90, 65, + 86, 73, 89, 65, 78, 73, 128, 90, 65, 84, 65, 128, 90, 65, 82, 81, 65, + 128, 90, 65, 82, 76, 128, 90, 65, 81, 69, 198, 90, 65, 80, 89, 65, 84, + 89, 77, 73, 128, 90, 65, 80, 89, 65, 84, 79, 89, 128, 90, 65, 80, 89, 65, + 84, 79, 217, 90, 65, 80, 89, 65, 84, 65, 89, 65, 128, 90, 65, 78, 79, 90, + 72, 69, 75, 128, 90, 65, 78, 65, 66, 65, 90, 65, 210, 90, 65, 77, 88, + 128, 90, 65, 76, 128, 90, 65, 204, 90, 65, 75, 82, 89, 84, 79, 69, 128, + 90, 65, 75, 82, 89, 84, 65, 89, 65, 128, 90, 65, 75, 82, 89, 84, 65, 89, + 193, 90, 65, 73, 78, 128, 90, 65, 73, 206, 90, 65, 73, 128, 90, 65, 72, + 128, 90, 65, 200, 90, 65, 71, 128, 90, 65, 69, 70, 128, 90, 65, 68, 69, + 82, 90, 72, 75, 65, 128, 90, 65, 55, 128, 90, 193, 90, 48, 49, 54, 72, + 128, 90, 48, 49, 54, 71, 128, 90, 48, 49, 54, 70, 128, 90, 48, 49, 54, + 69, 128, 90, 48, 49, 54, 68, 128, 90, 48, 49, 54, 67, 128, 90, 48, 49, + 54, 66, 128, 90, 48, 49, 54, 65, 128, 90, 48, 49, 54, 128, 90, 48, 49, + 53, 73, 128, 90, 48, 49, 53, 72, 128, 90, 48, 49, 53, 71, 128, 90, 48, + 49, 53, 70, 128, 90, 48, 49, 53, 69, 128, 90, 48, 49, 53, 68, 128, 90, + 48, 49, 53, 67, 128, 90, 48, 49, 53, 66, 128, 90, 48, 49, 53, 65, 128, + 90, 48, 49, 53, 128, 90, 48, 49, 52, 128, 90, 48, 49, 51, 128, 90, 48, + 49, 50, 128, 90, 48, 49, 49, 128, 90, 48, 49, 48, 128, 90, 48, 48, 57, + 128, 90, 48, 48, 56, 128, 90, 48, 48, 55, 128, 90, 48, 48, 54, 128, 90, + 48, 48, 53, 65, 128, 90, 48, 48, 53, 128, 90, 48, 48, 52, 65, 128, 90, + 48, 48, 52, 128, 90, 48, 48, 51, 66, 128, 90, 48, 48, 51, 65, 128, 90, + 48, 48, 51, 128, 90, 48, 48, 50, 68, 128, 90, 48, 48, 50, 67, 128, 90, + 48, 48, 50, 66, 128, 90, 48, 48, 50, 65, 128, 90, 48, 48, 50, 128, 90, + 48, 48, 49, 128, 90, 128, 218, 89, 89, 88, 128, 89, 89, 84, 128, 89, 89, + 82, 88, 128, 89, 89, 82, 128, 89, 89, 80, 128, 89, 89, 69, 128, 89, 89, + 65, 65, 128, 89, 89, 65, 128, 89, 89, 128, 89, 87, 79, 79, 128, 89, 87, + 79, 128, 89, 87, 73, 73, 128, 89, 87, 73, 128, 89, 87, 69, 128, 89, 87, + 65, 65, 128, 89, 87, 65, 128, 89, 86, 128, 89, 85, 88, 128, 89, 85, 87, + 79, 81, 128, 89, 85, 85, 75, 65, 76, 69, 65, 80, 73, 78, 84, 85, 128, 89, + 85, 85, 128, 89, 85, 84, 128, 89, 85, 83, 128, 89, 85, 211, 89, 85, 82, + 88, 128, 89, 85, 82, 128, 89, 85, 81, 128, 89, 85, 209, 89, 85, 80, 128, + 89, 85, 79, 88, 128, 89, 85, 79, 84, 128, 89, 85, 79, 80, 128, 89, 85, + 79, 77, 128, 89, 85, 79, 128, 89, 85, 78, 128, 89, 85, 77, 128, 89, 85, + 74, 128, 89, 85, 73, 128, 89, 85, 69, 81, 128, 89, 85, 69, 128, 89, 85, + 68, 72, 128, 89, 85, 68, 200, 89, 85, 65, 78, 128, 89, 85, 65, 69, 78, + 128, 89, 85, 45, 89, 69, 79, 128, 89, 85, 45, 89, 69, 128, 89, 85, 45, + 85, 128, 89, 85, 45, 79, 128, 89, 85, 45, 73, 128, 89, 85, 45, 69, 79, + 128, 89, 85, 45, 69, 128, 89, 85, 45, 65, 69, 128, 89, 85, 45, 65, 128, + 89, 85, 45, 52, 128, 89, 85, 45, 51, 128, 89, 85, 45, 50, 128, 89, 85, + 45, 49, 128, 89, 85, 128, 89, 213, 89, 82, 89, 128, 89, 80, 83, 73, 76, + 73, 128, 89, 80, 79, 82, 82, 79, 73, 128, 89, 80, 79, 75, 82, 73, 83, 73, + 83, 128, 89, 80, 79, 75, 82, 73, 83, 73, 211, 89, 80, 79, 71, 69, 71, 82, + 65, 77, 77, 69, 78, 73, 128, 89, 79, 89, 128, 89, 79, 88, 128, 89, 79, + 87, 68, 128, 89, 79, 85, 84, 72, 70, 85, 76, 78, 69, 83, 83, 128, 89, 79, + 85, 84, 72, 70, 85, 204, 89, 79, 213, 89, 79, 84, 128, 89, 79, 212, 89, + 79, 82, 73, 128, 89, 79, 81, 128, 89, 79, 209, 89, 79, 80, 128, 89, 79, + 79, 128, 89, 79, 77, 79, 128, 89, 79, 71, 72, 128, 89, 79, 68, 128, 89, + 79, 196, 89, 79, 65, 128, 89, 79, 45, 89, 79, 128, 89, 79, 45, 89, 69, + 79, 128, 89, 79, 45, 89, 65, 69, 128, 89, 79, 45, 89, 65, 128, 89, 79, + 45, 79, 128, 89, 79, 45, 73, 128, 89, 79, 45, 69, 79, 128, 89, 79, 45, + 65, 69, 128, 89, 79, 45, 65, 128, 89, 79, 45, 54, 128, 89, 79, 45, 53, + 128, 89, 79, 45, 52, 128, 89, 79, 45, 51, 128, 89, 79, 45, 50, 128, 89, + 79, 45, 49, 128, 89, 207, 89, 73, 90, 69, 84, 128, 89, 73, 88, 128, 89, + 73, 87, 78, 128, 89, 73, 84, 128, 89, 73, 80, 128, 89, 73, 78, 71, 128, + 89, 73, 73, 128, 89, 73, 72, 128, 89, 73, 199, 89, 73, 69, 88, 128, 89, + 73, 69, 84, 128, 89, 73, 69, 80, 128, 89, 73, 69, 69, 128, 89, 73, 69, + 128, 89, 73, 68, 68, 73, 83, 200, 89, 73, 45, 85, 128, 89, 73, 128, 89, + 72, 69, 128, 89, 72, 65, 128, 89, 70, 69, 83, 73, 83, 128, 89, 70, 69, + 83, 73, 211, 89, 70, 69, 206, 89, 69, 90, 73, 68, 201, 89, 69, 89, 128, + 89, 69, 87, 128, 89, 69, 85, 88, 128, 89, 69, 85, 82, 65, 69, 128, 89, + 69, 85, 81, 128, 89, 69, 85, 77, 128, 89, 69, 85, 65, 69, 84, 128, 89, + 69, 85, 65, 69, 128, 89, 69, 84, 73, 86, 128, 89, 69, 83, 84, 85, 128, + 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 83, 65, 78, 71, 75, 73, 89, 69, + 79, 75, 128, 89, 69, 83, 73, 69, 85, 78, 71, 45, 83, 73, 79, 83, 128, 89, + 69, 83, 73, 69, 85, 78, 71, 45, 80, 65, 78, 83, 73, 79, 83, 128, 89, 69, + 83, 73, 69, 85, 78, 71, 45, 77, 73, 69, 85, 77, 128, 89, 69, 83, 73, 69, + 85, 78, 71, 45, 75, 73, 89, 69, 79, 75, 128, 89, 69, 83, 73, 69, 85, 78, + 71, 45, 75, 72, 73, 69, 85, 75, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, + 45, 72, 73, 69, 85, 72, 128, 89, 69, 83, 73, 69, 85, 78, 71, 128, 89, 69, + 82, 85, 128, 89, 69, 82, 213, 89, 69, 82, 73, 128, 89, 69, 82, 65, 200, + 89, 69, 82, 128, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 89, 69, + 79, 45, 89, 65, 128, 89, 69, 79, 45, 85, 128, 89, 69, 79, 45, 79, 128, + 89, 69, 78, 73, 83, 69, 201, 89, 69, 78, 65, 80, 128, 89, 69, 78, 128, + 89, 69, 206, 89, 69, 76, 76, 79, 87, 128, 89, 69, 76, 76, 79, 215, 89, + 69, 73, 78, 128, 89, 69, 72, 128, 89, 69, 69, 71, 128, 89, 69, 69, 128, + 89, 69, 65, 210, 89, 69, 65, 128, 89, 65, 90, 90, 128, 89, 65, 90, 72, + 128, 89, 65, 90, 128, 89, 65, 89, 68, 128, 89, 65, 89, 65, 78, 78, 65, + 128, 89, 65, 89, 128, 89, 65, 87, 78, 73, 78, 199, 89, 65, 87, 78, 128, + 89, 65, 87, 128, 89, 65, 86, 128, 89, 65, 85, 128, 89, 65, 84, 84, 128, + 89, 65, 84, 73, 128, 89, 65, 84, 72, 128, 89, 65, 84, 128, 89, 65, 83, + 83, 128, 89, 65, 83, 72, 128, 89, 65, 83, 128, 89, 65, 82, 82, 128, 89, + 65, 82, 78, 128, 89, 65, 82, 128, 89, 65, 210, 89, 65, 81, 128, 89, 65, + 80, 128, 89, 65, 78, 83, 65, 89, 65, 128, 89, 65, 78, 71, 128, 89, 65, + 78, 199, 89, 65, 78, 128, 89, 65, 77, 79, 75, 128, 89, 65, 77, 65, 75, + 75, 65, 78, 128, 89, 65, 77, 128, 89, 65, 76, 128, 89, 65, 75, 72, 72, + 128, 89, 65, 75, 72, 128, 89, 65, 75, 65, 83, 72, 128, 89, 65, 75, 128, + 89, 65, 74, 85, 82, 86, 69, 68, 73, 195, 89, 65, 74, 128, 89, 65, 73, + 128, 89, 65, 72, 72, 128, 89, 65, 72, 128, 89, 65, 71, 78, 128, 89, 65, + 71, 72, 72, 128, 89, 65, 71, 72, 128, 89, 65, 71, 128, 89, 65, 70, 213, + 89, 65, 70, 128, 89, 65, 69, 77, 77, 65, 69, 128, 89, 65, 68, 72, 128, + 89, 65, 68, 68, 72, 128, 89, 65, 68, 68, 128, 89, 65, 68, 128, 89, 65, + 67, 72, 128, 89, 65, 66, 72, 128, 89, 65, 66, 128, 89, 65, 65, 82, 85, + 128, 89, 65, 65, 73, 128, 89, 65, 65, 68, 79, 128, 89, 65, 45, 89, 79, + 128, 89, 65, 45, 85, 128, 89, 65, 45, 79, 128, 89, 65, 45, 53, 128, 89, + 65, 45, 52, 128, 89, 65, 45, 51, 128, 89, 65, 45, 50, 128, 89, 65, 45, + 49, 128, 89, 48, 48, 56, 128, 89, 48, 48, 55, 128, 89, 48, 48, 54, 128, + 89, 48, 48, 53, 128, 89, 48, 48, 52, 128, 89, 48, 48, 51, 128, 89, 48, + 48, 50, 128, 89, 48, 48, 49, 65, 128, 89, 48, 48, 49, 128, 89, 45, 67, + 82, 69, 197, 88, 89, 88, 128, 88, 89, 85, 128, 88, 89, 84, 128, 88, 89, + 82, 88, 128, 88, 89, 82, 128, 88, 89, 80, 128, 88, 89, 79, 79, 74, 128, + 88, 89, 79, 79, 128, 88, 89, 79, 128, 88, 89, 73, 128, 88, 89, 69, 69, + 205, 88, 89, 69, 69, 128, 88, 89, 69, 128, 88, 89, 65, 65, 128, 88, 89, + 65, 128, 88, 89, 128, 88, 87, 73, 128, 88, 87, 69, 69, 128, 88, 87, 69, + 128, 88, 87, 65, 65, 128, 88, 87, 65, 128, 88, 87, 128, 88, 215, 88, 86, + 69, 128, 88, 86, 65, 128, 88, 85, 79, 88, 128, 88, 85, 79, 128, 88, 85, + 128, 88, 83, 72, 65, 65, 89, 65, 84, 72, 73, 89, 65, 128, 88, 79, 88, + 128, 88, 79, 84, 128, 88, 79, 82, 128, 88, 79, 80, 72, 128, 88, 79, 80, + 128, 88, 79, 65, 128, 88, 79, 128, 88, 73, 88, 128, 88, 73, 84, 128, 88, + 73, 82, 79, 206, 88, 73, 80, 128, 88, 73, 69, 88, 128, 88, 73, 69, 84, + 128, 88, 73, 69, 80, 128, 88, 73, 69, 128, 88, 73, 65, 78, 71, 81, 201, + 88, 73, 65, 66, 128, 88, 73, 128, 88, 72, 69, 89, 78, 128, 88, 71, 128, + 88, 69, 89, 78, 128, 88, 69, 83, 84, 69, 211, 88, 69, 72, 128, 88, 69, + 69, 128, 88, 69, 128, 88, 65, 85, 83, 128, 88, 65, 85, 128, 88, 65, 80, + 72, 128, 88, 65, 78, 128, 88, 65, 65, 128, 88, 65, 128, 88, 48, 48, 56, + 65, 128, 88, 48, 48, 56, 128, 88, 48, 48, 55, 128, 88, 48, 48, 54, 65, + 128, 88, 48, 48, 54, 128, 88, 48, 48, 53, 128, 88, 48, 48, 52, 66, 128, + 88, 48, 48, 52, 65, 128, 88, 48, 48, 52, 128, 88, 48, 48, 51, 128, 88, + 48, 48, 50, 128, 88, 48, 48, 49, 128, 88, 45, 216, 88, 45, 82, 65, 89, + 128, 87, 90, 128, 87, 89, 78, 78, 128, 87, 89, 78, 206, 87, 86, 73, 128, + 87, 86, 69, 128, 87, 86, 65, 128, 87, 86, 128, 87, 85, 80, 128, 87, 85, + 79, 88, 128, 87, 85, 79, 80, 128, 87, 85, 79, 128, 87, 85, 78, 74, 207, + 87, 85, 78, 128, 87, 85, 76, 85, 128, 87, 85, 76, 213, 87, 85, 73, 128, + 87, 85, 69, 128, 87, 85, 65, 69, 84, 128, 87, 85, 65, 69, 78, 128, 87, + 85, 128, 87, 82, 217, 87, 82, 79, 78, 71, 128, 87, 82, 73, 83, 212, 87, + 82, 73, 78, 75, 76, 69, 83, 128, 87, 82, 73, 78, 75, 76, 69, 211, 87, 82, + 73, 78, 75, 76, 69, 68, 128, 87, 82, 69, 83, 84, 76, 69, 82, 83, 128, 87, + 82, 69, 78, 67, 72, 128, 87, 82, 69, 65, 84, 200, 87, 82, 65, 80, 80, 69, + 196, 87, 82, 65, 80, 128, 87, 79, 88, 128, 87, 79, 87, 128, 87, 79, 82, + 83, 72, 73, 80, 128, 87, 79, 82, 82, 73, 69, 196, 87, 79, 82, 77, 128, + 87, 79, 82, 76, 196, 87, 79, 82, 75, 69, 82, 128, 87, 79, 82, 75, 128, + 87, 79, 82, 203, 87, 79, 82, 68, 83, 80, 65, 67, 69, 128, 87, 79, 82, + 196, 87, 79, 80, 128, 87, 79, 79, 78, 128, 87, 79, 79, 76, 128, 87, 79, + 79, 68, 83, 45, 67, 82, 69, 197, 87, 79, 79, 68, 128, 87, 79, 78, 128, + 87, 79, 206, 87, 79, 77, 69, 78, 211, 87, 79, 77, 69, 206, 87, 79, 77, + 65, 78, 211, 87, 79, 77, 65, 78, 128, 87, 79, 77, 65, 206, 87, 79, 76, + 79, 83, 79, 128, 87, 79, 76, 198, 87, 79, 69, 128, 87, 79, 65, 128, 87, + 79, 45, 55, 128, 87, 79, 45, 54, 128, 87, 79, 45, 53, 128, 87, 79, 45, + 52, 128, 87, 79, 45, 51, 128, 87, 79, 45, 50, 128, 87, 79, 45, 49, 128, + 87, 73, 84, 72, 79, 85, 212, 87, 73, 84, 72, 73, 78, 128, 87, 73, 84, 72, + 73, 206, 87, 73, 82, 69, 76, 69, 83, 83, 128, 87, 73, 82, 69, 196, 87, + 73, 78, 84, 69, 82, 128, 87, 73, 78, 75, 73, 78, 199, 87, 73, 78, 75, + 128, 87, 73, 78, 74, 65, 128, 87, 73, 78, 71, 83, 128, 87, 73, 78, 71, + 128, 87, 73, 78, 69, 128, 87, 73, 78, 197, 87, 73, 78, 68, 85, 128, 87, + 73, 78, 68, 79, 87, 128, 87, 73, 78, 68, 128, 87, 73, 78, 196, 87, 73, + 78, 128, 87, 73, 76, 84, 69, 196, 87, 73, 71, 78, 89, 65, 78, 128, 87, + 73, 71, 71, 76, 217, 87, 73, 71, 71, 76, 69, 83, 128, 87, 73, 68, 84, 72, + 128, 87, 73, 68, 69, 78, 73, 78, 199, 87, 73, 68, 69, 45, 72, 69, 65, 68, + 69, 196, 87, 73, 68, 197, 87, 73, 65, 78, 71, 87, 65, 65, 75, 128, 87, + 73, 65, 78, 71, 128, 87, 73, 45, 53, 128, 87, 73, 45, 52, 128, 87, 73, + 45, 51, 128, 87, 73, 45, 50, 128, 87, 73, 45, 49, 128, 87, 72, 79, 76, + 197, 87, 72, 73, 84, 69, 45, 70, 69, 65, 84, 72, 69, 82, 69, 196, 87, 72, + 73, 84, 69, 128, 87, 72, 69, 69, 76, 69, 196, 87, 72, 69, 69, 76, 67, 72, + 65, 73, 82, 128, 87, 72, 69, 69, 76, 67, 72, 65, 73, 210, 87, 72, 69, 69, + 76, 128, 87, 72, 69, 69, 204, 87, 72, 69, 65, 84, 128, 87, 72, 65, 76, + 69, 128, 87, 72, 128, 87, 71, 128, 87, 69, 88, 128, 87, 69, 85, 88, 128, + 87, 69, 212, 87, 69, 83, 84, 69, 82, 206, 87, 69, 83, 84, 45, 67, 82, 69, + 197, 87, 69, 83, 84, 128, 87, 69, 83, 212, 87, 69, 80, 128, 87, 69, 79, + 128, 87, 69, 78, 128, 87, 69, 76, 76, 128, 87, 69, 73, 71, 72, 212, 87, + 69, 73, 69, 82, 83, 84, 82, 65, 83, 211, 87, 69, 73, 128, 87, 69, 69, 78, + 128, 87, 69, 68, 71, 69, 45, 84, 65, 73, 76, 69, 196, 87, 69, 68, 71, 69, + 128, 87, 69, 68, 68, 73, 78, 71, 128, 87, 69, 66, 128, 87, 69, 65, 82, + 217, 87, 69, 65, 80, 79, 78, 128, 87, 69, 45, 52, 128, 87, 69, 45, 51, + 128, 87, 69, 45, 50, 128, 87, 69, 45, 49, 128, 87, 67, 128, 87, 66, 128, + 87, 65, 89, 128, 87, 65, 217, 87, 65, 88, 73, 78, 199, 87, 65, 88, 128, + 87, 65, 87, 45, 65, 89, 73, 78, 45, 82, 69, 83, 72, 128, 87, 65, 87, 128, + 87, 65, 215, 87, 65, 86, 217, 87, 65, 86, 73, 78, 199, 87, 65, 86, 69, + 83, 128, 87, 65, 86, 69, 128, 87, 65, 86, 197, 87, 65, 85, 128, 87, 65, + 84, 84, 79, 128, 87, 65, 84, 69, 82, 77, 69, 76, 79, 78, 128, 87, 65, 84, + 69, 82, 128, 87, 65, 84, 69, 210, 87, 65, 84, 67, 72, 128, 87, 65, 84, + 128, 87, 65, 83, 84, 73, 78, 71, 128, 87, 65, 83, 84, 69, 66, 65, 83, 75, + 69, 84, 128, 87, 65, 83, 83, 65, 76, 76, 65, 77, 128, 87, 65, 83, 76, 65, + 128, 87, 65, 83, 76, 193, 87, 65, 83, 65, 76, 76, 65, 77, 128, 87, 65, + 83, 65, 76, 76, 65, 205, 87, 65, 83, 45, 83, 65, 76, 65, 65, 77, 128, 87, + 65, 82, 78, 73, 78, 199, 87, 65, 82, 65, 78, 199, 87, 65, 81, 70, 65, + 128, 87, 65, 80, 128, 87, 65, 78, 73, 78, 199, 87, 65, 78, 71, 75, 85, + 79, 81, 128, 87, 65, 78, 68, 69, 82, 69, 82, 128, 87, 65, 78, 68, 128, + 87, 65, 78, 67, 72, 207, 87, 65, 78, 128, 87, 65, 76, 76, 80, 76, 65, 78, + 197, 87, 65, 76, 76, 69, 196, 87, 65, 76, 76, 128, 87, 65, 76, 204, 87, + 65, 76, 75, 128, 87, 65, 76, 203, 87, 65, 73, 84, 73, 78, 71, 128, 87, + 65, 73, 83, 84, 128, 87, 65, 73, 128, 87, 65, 70, 70, 76, 69, 128, 87, + 65, 69, 78, 128, 87, 65, 69, 128, 87, 65, 68, 68, 65, 128, 87, 65, 65, + 86, 85, 128, 87, 65, 65, 74, 73, 66, 128, 87, 65, 65, 65, 76, 73, 72, 69, 197, 87, 65, 45, 84, 65, 65, 65, 76, 65, 65, 128, 87, 65, 45, 83, 65, 76, 76, 65, 77, 128, 87, 65, 45, 65, 65, 76, 73, 72, 128, 87, 65, 45, 53, 128, 87, 65, 45, 52, 128, 87, 65, 45, 51, 128, 87, 65, 45, 50, 128, 87, @@ -937,249 +937,250 @@ static const unsigned char lexicon[] = { 75, 73, 78, 199, 83, 85, 67, 75, 69, 68, 128, 83, 85, 67, 203, 83, 85, 67, 67, 69, 69, 68, 83, 128, 83, 85, 67, 67, 69, 69, 68, 211, 83, 85, 67, 67, 69, 69, 68, 128, 83, 85, 67, 67, 69, 69, 196, 83, 85, 66, 85, 78, 73, - 84, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, - 84, 73, 84, 85, 84, 69, 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, - 85, 66, 83, 69, 84, 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, - 73, 80, 212, 83, 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, - 73, 78, 69, 65, 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83, - 85, 66, 76, 73, 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65, - 84, 69, 45, 50, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66, - 76, 73, 77, 65, 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 82, 128, 83, 85, - 66, 74, 79, 73, 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, - 73, 84, 79, 128, 83, 85, 66, 72, 65, 65, 78, 65, 72, 213, 83, 85, 66, 71, - 82, 79, 85, 80, 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 66, 128, - 83, 85, 65, 77, 128, 83, 85, 65, 69, 84, 128, 83, 85, 65, 69, 78, 128, - 83, 85, 65, 69, 128, 83, 85, 65, 66, 128, 83, 85, 65, 128, 83, 85, 45, - 56, 128, 83, 85, 45, 55, 128, 83, 85, 45, 54, 128, 83, 85, 45, 53, 128, - 83, 85, 45, 52, 128, 83, 85, 45, 51, 128, 83, 85, 45, 50, 128, 83, 85, - 45, 49, 128, 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, - 80, 65, 128, 83, 84, 85, 70, 70, 69, 196, 83, 84, 85, 68, 89, 128, 83, - 84, 85, 68, 73, 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, - 128, 83, 84, 82, 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, - 82, 79, 75, 69, 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, - 75, 69, 45, 56, 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, - 75, 69, 45, 54, 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, - 75, 69, 45, 52, 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, - 75, 69, 45, 50, 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, - 79, 75, 69, 45, 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, - 82, 79, 75, 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, - 128, 83, 84, 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, - 71, 72, 128, 83, 84, 82, 73, 75, 197, 83, 84, 82, 73, 68, 69, 128, 83, - 84, 82, 73, 67, 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, 196, 83, 84, - 82, 69, 84, 67, 72, 128, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, - 84, 72, 128, 83, 84, 82, 69, 76, 193, 83, 84, 82, 69, 65, 77, 69, 82, - 128, 83, 84, 82, 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 87, - 128, 83, 84, 82, 65, 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77, - 128, 83, 84, 82, 65, 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83, - 84, 82, 65, 78, 78, 79, 128, 83, 84, 82, 65, 78, 78, 207, 83, 84, 82, 65, - 73, 78, 69, 82, 128, 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, - 83, 84, 82, 65, 73, 71, 72, 84, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, - 84, 82, 65, 73, 70, 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, - 128, 83, 84, 79, 86, 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, - 87, 65, 84, 67, 72, 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, - 80, 80, 65, 71, 69, 128, 83, 84, 79, 80, 73, 84, 83, 65, 128, 83, 84, 79, - 80, 73, 84, 83, 193, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, - 78, 69, 128, 83, 84, 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, - 82, 82, 85, 208, 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, - 84, 73, 76, 197, 83, 84, 73, 71, 77, 65, 128, 83, 84, 73, 67, 75, 73, 78, - 199, 83, 84, 73, 67, 203, 83, 84, 69, 84, 72, 79, 83, 67, 79, 80, 69, - 128, 83, 84, 69, 82, 69, 79, 128, 83, 84, 69, 80, 128, 83, 84, 69, 78, - 79, 71, 82, 65, 80, 72, 73, 195, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, - 217, 83, 84, 69, 65, 77, 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84, - 69, 65, 205, 83, 84, 65, 86, 82, 79, 85, 128, 83, 84, 65, 86, 82, 79, 83, - 128, 83, 84, 65, 86, 82, 79, 211, 83, 84, 65, 85, 82, 79, 83, 128, 83, - 84, 65, 84, 89, 65, 128, 83, 84, 65, 84, 89, 193, 83, 84, 65, 84, 85, - 197, 83, 84, 65, 84, 73, 79, 78, 128, 83, 84, 65, 84, 69, 82, 83, 128, - 83, 84, 65, 84, 69, 128, 83, 84, 65, 82, 84, 73, 78, 199, 83, 84, 65, 82, - 84, 128, 83, 84, 65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, - 82, 69, 196, 83, 84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, - 210, 83, 84, 65, 78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 73, - 78, 199, 83, 84, 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, 68, 128, 83, - 84, 65, 78, 128, 83, 84, 65, 77, 80, 69, 196, 83, 84, 65, 76, 76, 73, 79, - 78, 128, 83, 84, 65, 70, 70, 128, 83, 84, 65, 70, 198, 83, 84, 65, 68, - 73, 85, 77, 128, 83, 84, 65, 67, 75, 69, 196, 83, 84, 65, 67, 67, 65, 84, - 79, 128, 83, 84, 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, - 50, 128, 83, 83, 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, - 128, 83, 83, 89, 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, - 85, 88, 128, 83, 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, - 128, 83, 83, 79, 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, - 83, 79, 79, 128, 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, - 128, 83, 83, 73, 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, - 83, 83, 73, 69, 80, 128, 83, 83, 73, 69, 128, 83, 83, 72, 73, 78, 128, - 83, 83, 72, 69, 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, - 69, 69, 128, 83, 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, 83, 65, 84, - 128, 83, 83, 65, 80, 128, 83, 83, 65, 78, 71, 89, 69, 83, 73, 69, 85, 78, - 71, 128, 83, 83, 65, 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, - 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, - 128, 83, 83, 65, 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, - 84, 72, 73, 69, 85, 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, - 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, - 73, 69, 85, 80, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, - 69, 79, 75, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, - 71, 82, 73, 69, 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, - 78, 71, 82, 73, 69, 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, - 128, 83, 83, 65, 78, 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, - 73, 69, 85, 77, 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, - 65, 78, 71, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, - 67, 45, 72, 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, - 128, 83, 83, 65, 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, 128, - 83, 83, 65, 65, 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 69, 68, - 78, 197, 83, 82, 128, 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 82, - 69, 204, 83, 81, 85, 73, 71, 71, 76, 197, 83, 81, 85, 73, 68, 128, 83, - 81, 85, 69, 69, 90, 69, 68, 128, 83, 81, 85, 69, 69, 90, 197, 83, 81, 85, - 65, 212, 83, 81, 85, 65, 82, 69, 83, 128, 83, 81, 85, 65, 82, 69, 68, - 128, 83, 81, 85, 65, 82, 69, 128, 83, 80, 89, 128, 83, 80, 87, 65, 128, - 83, 80, 85, 78, 71, 211, 83, 80, 82, 79, 85, 84, 128, 83, 80, 82, 73, 78, - 71, 83, 128, 83, 80, 82, 73, 78, 71, 128, 83, 80, 82, 69, 67, 72, 71, 69, - 83, 65, 78, 199, 83, 80, 82, 69, 65, 68, 128, 83, 80, 82, 69, 65, 196, - 83, 80, 79, 85, 84, 73, 78, 199, 83, 80, 79, 84, 128, 83, 80, 79, 82, 84, - 211, 83, 80, 79, 79, 78, 128, 83, 80, 79, 79, 204, 83, 80, 79, 78, 71, - 69, 128, 83, 80, 79, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, - 76, 73, 84, 128, 83, 80, 76, 73, 212, 83, 80, 76, 65, 89, 69, 68, 128, - 83, 80, 76, 65, 83, 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, - 80, 73, 82, 73, 84, 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, - 84, 128, 83, 80, 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, - 73, 78, 69, 128, 83, 80, 73, 68, 69, 82, 217, 83, 80, 73, 68, 69, 82, - 128, 83, 80, 73, 68, 69, 210, 83, 80, 73, 67, 69, 128, 83, 80, 73, 128, - 83, 80, 72, 69, 82, 73, 67, 65, 204, 83, 80, 69, 83, 77, 73, 76, 207, 83, - 80, 69, 78, 212, 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 83, 80, 69, 69, - 67, 72, 128, 83, 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 65, 76, 128, - 83, 80, 69, 65, 82, 128, 83, 80, 69, 65, 75, 73, 78, 199, 83, 80, 69, 65, - 75, 69, 82, 128, 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, 45, 78, - 79, 45, 69, 86, 73, 204, 83, 80, 69, 128, 83, 80, 65, 84, 72, 73, 128, - 83, 80, 65, 82, 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, - 83, 80, 65, 82, 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, - 80, 65, 71, 72, 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, - 65, 68, 197, 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, - 65, 128, 83, 79, 89, 79, 77, 66, 207, 83, 79, 89, 128, 83, 79, 87, 73, - 76, 207, 83, 79, 87, 128, 83, 79, 85, 84, 72, 69, 82, 206, 83, 79, 85, - 84, 72, 45, 83, 76, 65, 86, 69, 217, 83, 79, 85, 84, 200, 83, 79, 85, 82, - 67, 69, 128, 83, 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 83, 79, 85, - 78, 65, 80, 128, 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 82, 79, 67, - 72, 89, 193, 83, 79, 82, 73, 128, 83, 79, 82, 193, 83, 79, 81, 128, 83, - 79, 79, 206, 83, 79, 78, 74, 65, 77, 128, 83, 79, 78, 71, 128, 83, 79, - 78, 128, 83, 79, 77, 80, 69, 78, 199, 83, 79, 77, 128, 83, 79, 205, 83, - 79, 76, 73, 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 83, 79, 76, 73, - 196, 83, 79, 76, 68, 73, 69, 82, 128, 83, 79, 72, 128, 83, 79, 71, 68, - 73, 65, 206, 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67, 84, 73, - 79, 206, 83, 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 84, 66, 65, 76, - 76, 128, 83, 79, 70, 212, 83, 79, 198, 83, 79, 67, 75, 83, 128, 83, 79, - 67, 73, 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128, - 83, 79, 65, 128, 83, 79, 45, 55, 128, 83, 79, 45, 54, 128, 83, 79, 45, - 53, 128, 83, 79, 45, 52, 128, 83, 79, 45, 51, 128, 83, 79, 45, 50, 128, - 83, 79, 45, 49, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, - 79, 87, 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, - 87, 66, 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, - 215, 83, 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, 78, 69, 69, 90, - 73, 78, 199, 83, 78, 65, 208, 83, 78, 65, 75, 69, 128, 83, 78, 65, 75, - 197, 83, 78, 65, 73, 76, 128, 83, 78, 193, 83, 77, 79, 75, 73, 78, 199, - 83, 77, 73, 82, 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, - 76, 69, 128, 83, 77, 73, 76, 197, 83, 77, 69, 65, 82, 128, 83, 77, 65, - 83, 200, 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, - 85, 82, 128, 83, 76, 79, 90, 72, 73, 84, 73, 69, 128, 83, 76, 79, 90, 72, - 73, 84, 73, 197, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, 87, 128, 83, - 76, 79, 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 84, 72, 128, 83, 76, - 79, 212, 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, 128, 83, 76, - 79, 65, 206, 83, 76, 73, 78, 71, 128, 83, 76, 73, 71, 72, 84, 76, 217, - 83, 76, 73, 68, 73, 78, 71, 128, 83, 76, 73, 68, 69, 82, 128, 83, 76, 73, - 68, 69, 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76, 69, - 85, 84, 200, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, 199, - 83, 76, 69, 69, 208, 83, 76, 69, 68, 128, 83, 76, 65, 86, 79, 78, 73, - 195, 83, 76, 65, 86, 69, 128, 83, 76, 65, 83, 72, 128, 83, 76, 65, 83, - 200, 83, 76, 65, 78, 84, 69, 196, 83, 75, 87, 65, 128, 83, 75, 87, 128, - 83, 75, 85, 78, 75, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, 76, 204, - 83, 75, 79, 66, 65, 128, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, - 128, 83, 75, 73, 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, - 75, 65, 84, 69, 66, 79, 65, 82, 68, 128, 83, 75, 65, 84, 69, 128, 83, 75, - 65, 77, 69, 89, 84, 83, 193, 83, 75, 128, 83, 74, 69, 128, 83, 73, 90, - 197, 83, 73, 88, 84, 89, 45, 70, 79, 85, 82, 84, 72, 83, 128, 83, 73, 88, - 84, 89, 45, 70, 79, 85, 82, 84, 72, 128, 83, 73, 88, 84, 89, 45, 70, 79, - 85, 82, 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, 217, 83, 73, - 88, 84, 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, 84, 72, 128, - 83, 73, 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, 69, 69, 78, - 84, 72, 45, 50, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 45, 49, 128, 83, - 73, 88, 84, 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, - 83, 73, 88, 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, - 45, 84, 72, 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, - 83, 73, 88, 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, - 83, 73, 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 82, - 65, 72, 128, 83, 73, 82, 73, 78, 71, 85, 128, 83, 73, 79, 83, 45, 84, 72, - 73, 69, 85, 84, 72, 128, 83, 73, 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, - 79, 83, 128, 83, 73, 79, 83, 45, 82, 73, 69, 85, 76, 128, 83, 73, 79, 83, - 45, 80, 73, 69, 85, 80, 45, 75, 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, - 45, 80, 72, 73, 69, 85, 80, 72, 128, 83, 73, 79, 83, 45, 80, 65, 78, 83, - 73, 79, 83, 128, 83, 73, 79, 83, 45, 78, 73, 69, 85, 78, 128, 83, 73, 79, - 83, 45, 77, 73, 69, 85, 77, 128, 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, - 75, 72, 128, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, - 69, 85, 80, 128, 83, 73, 79, 83, 45, 73, 69, 85, 78, 71, 128, 83, 73, 79, - 83, 45, 72, 73, 69, 85, 72, 128, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, - 128, 83, 73, 79, 83, 45, 67, 72, 73, 69, 85, 67, 72, 128, 83, 73, 79, - 211, 83, 73, 78, 85, 83, 79, 73, 196, 83, 73, 78, 79, 76, 79, 71, 73, 67, - 65, 204, 83, 73, 78, 78, 89, 73, 73, 89, 72, 69, 128, 83, 73, 78, 75, 73, - 78, 71, 128, 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 128, - 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 78, - 71, 76, 69, 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, - 71, 76, 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 73, - 78, 68, 72, 201, 83, 73, 78, 128, 83, 73, 206, 83, 73, 77, 85, 76, 84, - 65, 78, 69, 79, 85, 83, 128, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, - 211, 83, 73, 77, 80, 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, - 128, 83, 73, 77, 73, 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, - 73, 77, 65, 76, 85, 78, 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, - 69, 82, 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, - 76, 72, 79, 85, 69, 84, 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, - 197, 83, 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, - 83, 73, 75, 178, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 79, 73, 196, - 83, 73, 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204, 83, - 73, 71, 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, 73, 69, 69, 128, - 83, 73, 68, 69, 87, 65, 89, 211, 83, 73, 68, 69, 128, 83, 73, 68, 197, - 83, 73, 68, 68, 72, 73, 128, 83, 73, 68, 68, 72, 65, 77, 128, 83, 73, 68, - 68, 72, 65, 205, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, - 69, 128, 83, 73, 66, 197, 83, 73, 65, 128, 83, 73, 45, 54, 128, 83, 73, - 45, 53, 128, 83, 73, 45, 52, 128, 83, 73, 45, 51, 128, 83, 73, 45, 50, - 128, 83, 73, 45, 49, 128, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, - 128, 83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, - 83, 72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, - 79, 89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, - 73, 73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, - 83, 72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 86, 128, 83, 72, - 85, 88, 128, 83, 72, 85, 85, 128, 83, 72, 85, 84, 84, 76, 69, 67, 79, 67, - 75, 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, - 128, 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, - 128, 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 76, 128, 83, - 72, 85, 70, 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, - 72, 85, 69, 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 65, 78, 71, - 88, 73, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, - 72, 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, 82, 85, 71, - 128, 83, 72, 82, 79, 79, 128, 83, 72, 82, 79, 128, 83, 72, 82, 73, 78, - 69, 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, 73, 128, 83, 72, - 82, 73, 128, 83, 72, 82, 65, 65, 128, 83, 72, 82, 65, 128, 83, 72, 79, - 89, 128, 83, 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, - 85, 76, 68, 69, 82, 69, 196, 83, 72, 79, 85, 76, 68, 69, 210, 83, 72, 79, - 85, 128, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, - 82, 84, 211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, 72, 79, 82, 84, 69, - 78, 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, 82, - 84, 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, 87, - 73, 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 83, - 79, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, 72, - 79, 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, 84, - 45, 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, 87, - 73, 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, - 71, 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, 73, - 71, 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, 72, - 79, 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 80, 73, 78, 199, 83, 72, - 79, 80, 128, 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, 128, - 83, 72, 79, 79, 73, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, 201, 83, - 72, 79, 199, 83, 72, 79, 69, 83, 128, 83, 72, 79, 69, 128, 83, 72, 79, - 197, 83, 72, 79, 67, 75, 69, 196, 83, 72, 79, 65, 128, 83, 72, 79, 128, - 83, 72, 73, 89, 89, 65, 65, 76, 65, 65, 128, 83, 72, 73, 84, 65, 128, 83, - 72, 73, 84, 193, 83, 72, 73, 82, 212, 83, 72, 73, 82, 65, 69, 128, 83, - 72, 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 81, 128, 83, 72, 73, 78, - 84, 207, 83, 72, 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, - 73, 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, 77, - 128, 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 83, - 72, 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, 83, - 72, 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, 128, - 83, 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, 79, 81, + 84, 128, 83, 85, 66, 84, 82, 65, 67, 84, 73, 79, 78, 128, 83, 85, 66, 83, + 84, 73, 84, 85, 84, 73, 79, 206, 83, 85, 66, 83, 84, 73, 84, 85, 84, 69, + 128, 83, 85, 66, 83, 84, 73, 84, 85, 84, 197, 83, 85, 66, 83, 69, 84, + 128, 83, 85, 66, 83, 69, 212, 83, 85, 66, 83, 67, 82, 73, 80, 212, 83, + 85, 66, 80, 85, 78, 67, 84, 73, 83, 128, 83, 85, 66, 76, 73, 78, 69, 65, + 210, 83, 85, 66, 76, 73, 77, 65, 84, 73, 79, 78, 128, 83, 85, 66, 76, 73, + 77, 65, 84, 69, 45, 51, 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 45, 50, + 128, 83, 85, 66, 76, 73, 77, 65, 84, 69, 128, 83, 85, 66, 76, 73, 77, 65, + 84, 197, 83, 85, 66, 74, 79, 73, 78, 69, 82, 128, 83, 85, 66, 74, 79, 73, + 78, 69, 196, 83, 85, 66, 74, 69, 67, 84, 128, 83, 85, 66, 73, 84, 79, + 128, 83, 85, 66, 72, 65, 65, 78, 65, 72, 213, 83, 85, 66, 71, 82, 79, 85, + 80, 128, 83, 85, 66, 71, 82, 79, 85, 208, 83, 85, 66, 128, 83, 85, 65, + 77, 128, 83, 85, 65, 69, 84, 128, 83, 85, 65, 69, 78, 128, 83, 85, 65, + 69, 128, 83, 85, 65, 66, 128, 83, 85, 65, 128, 83, 85, 45, 56, 128, 83, + 85, 45, 55, 128, 83, 85, 45, 54, 128, 83, 85, 45, 53, 128, 83, 85, 45, + 52, 128, 83, 85, 45, 51, 128, 83, 85, 45, 50, 128, 83, 85, 45, 49, 128, + 83, 213, 83, 84, 88, 128, 83, 84, 87, 65, 128, 83, 84, 85, 80, 65, 128, + 83, 84, 85, 70, 70, 69, 196, 83, 84, 85, 68, 89, 128, 83, 84, 85, 68, 73, + 207, 83, 84, 85, 67, 75, 45, 79, 85, 212, 83, 84, 83, 128, 83, 84, 82, + 79, 78, 199, 83, 84, 82, 79, 75, 69, 83, 128, 83, 84, 82, 79, 75, 69, + 211, 83, 84, 82, 79, 75, 69, 45, 57, 128, 83, 84, 82, 79, 75, 69, 45, 56, + 128, 83, 84, 82, 79, 75, 69, 45, 55, 128, 83, 84, 82, 79, 75, 69, 45, 54, + 128, 83, 84, 82, 79, 75, 69, 45, 53, 128, 83, 84, 82, 79, 75, 69, 45, 52, + 128, 83, 84, 82, 79, 75, 69, 45, 51, 128, 83, 84, 82, 79, 75, 69, 45, 50, + 128, 83, 84, 82, 79, 75, 69, 45, 49, 49, 128, 83, 84, 82, 79, 75, 69, 45, + 49, 48, 128, 83, 84, 82, 79, 75, 69, 45, 49, 128, 83, 84, 82, 79, 75, + 197, 83, 84, 82, 73, 80, 69, 128, 83, 84, 82, 73, 78, 71, 128, 83, 84, + 82, 73, 78, 199, 83, 84, 82, 73, 75, 69, 84, 72, 82, 79, 85, 71, 72, 128, + 83, 84, 82, 73, 75, 197, 83, 84, 82, 73, 68, 69, 128, 83, 84, 82, 73, 67, + 84, 76, 217, 83, 84, 82, 69, 84, 67, 72, 69, 196, 83, 84, 82, 69, 84, 67, + 72, 128, 83, 84, 82, 69, 83, 211, 83, 84, 82, 69, 78, 71, 84, 72, 128, + 83, 84, 82, 69, 76, 193, 83, 84, 82, 69, 65, 77, 69, 82, 128, 83, 84, 82, + 65, 87, 66, 69, 82, 82, 89, 128, 83, 84, 82, 65, 87, 128, 83, 84, 82, 65, + 84, 85, 77, 45, 50, 128, 83, 84, 82, 65, 84, 85, 77, 128, 83, 84, 82, 65, + 84, 85, 205, 83, 84, 82, 65, 84, 73, 65, 206, 83, 84, 82, 65, 78, 78, 79, + 128, 83, 84, 82, 65, 78, 78, 207, 83, 84, 82, 65, 73, 78, 69, 82, 128, + 83, 84, 82, 65, 73, 71, 72, 84, 78, 69, 83, 83, 128, 83, 84, 82, 65, 73, + 71, 72, 84, 128, 83, 84, 82, 65, 73, 71, 72, 212, 83, 84, 82, 65, 73, 70, + 128, 83, 84, 82, 65, 71, 71, 73, 83, 77, 65, 84, 65, 128, 83, 84, 79, 86, + 69, 128, 83, 84, 79, 82, 69, 128, 83, 84, 79, 80, 87, 65, 84, 67, 72, + 128, 83, 84, 79, 80, 80, 73, 78, 71, 128, 83, 84, 79, 80, 80, 65, 71, 69, + 128, 83, 84, 79, 80, 73, 84, 83, 65, 128, 83, 84, 79, 80, 73, 84, 83, + 193, 83, 84, 79, 80, 128, 83, 84, 79, 208, 83, 84, 79, 78, 69, 128, 83, + 84, 79, 67, 75, 128, 83, 84, 79, 67, 203, 83, 84, 73, 82, 82, 85, 208, + 83, 84, 73, 77, 77, 69, 128, 83, 84, 73, 76, 204, 83, 84, 73, 76, 197, + 83, 84, 73, 71, 77, 65, 128, 83, 84, 73, 67, 75, 73, 78, 199, 83, 84, 73, + 67, 203, 83, 84, 69, 84, 72, 79, 83, 67, 79, 80, 69, 128, 83, 84, 69, 82, + 69, 79, 128, 83, 84, 69, 80, 128, 83, 84, 69, 78, 79, 71, 82, 65, 80, 72, + 73, 195, 83, 84, 69, 77, 128, 83, 84, 69, 65, 77, 217, 83, 84, 69, 65, + 77, 73, 78, 199, 83, 84, 69, 65, 77, 128, 83, 84, 69, 65, 205, 83, 84, + 65, 86, 82, 79, 85, 128, 83, 84, 65, 86, 82, 79, 83, 128, 83, 84, 65, 86, + 82, 79, 211, 83, 84, 65, 85, 82, 79, 83, 128, 83, 84, 65, 84, 89, 65, + 128, 83, 84, 65, 84, 89, 193, 83, 84, 65, 84, 85, 197, 83, 84, 65, 84, + 73, 79, 78, 128, 83, 84, 65, 84, 69, 82, 83, 128, 83, 84, 65, 84, 69, + 128, 83, 84, 65, 82, 84, 73, 78, 199, 83, 84, 65, 82, 84, 128, 83, 84, + 65, 82, 212, 83, 84, 65, 82, 83, 128, 83, 84, 65, 82, 82, 69, 196, 83, + 84, 65, 82, 75, 128, 83, 84, 65, 82, 128, 83, 84, 65, 210, 83, 84, 65, + 78, 68, 83, 84, 73, 76, 76, 128, 83, 84, 65, 78, 68, 73, 78, 199, 83, 84, + 65, 78, 68, 65, 82, 196, 83, 84, 65, 78, 68, 128, 83, 84, 65, 78, 128, + 83, 84, 65, 77, 80, 69, 196, 83, 84, 65, 76, 76, 73, 79, 78, 128, 83, 84, + 65, 70, 70, 128, 83, 84, 65, 70, 198, 83, 84, 65, 68, 73, 85, 77, 128, + 83, 84, 65, 67, 75, 69, 196, 83, 84, 65, 67, 67, 65, 84, 79, 128, 83, 84, + 65, 67, 67, 65, 84, 73, 83, 83, 73, 77, 79, 128, 83, 84, 50, 128, 83, 83, + 89, 88, 128, 83, 83, 89, 84, 128, 83, 83, 89, 82, 88, 128, 83, 83, 89, + 82, 128, 83, 83, 89, 80, 128, 83, 83, 89, 128, 83, 83, 85, 88, 128, 83, + 83, 85, 85, 128, 83, 83, 85, 84, 128, 83, 83, 85, 80, 128, 83, 83, 79, + 88, 128, 83, 83, 79, 84, 128, 83, 83, 79, 80, 128, 83, 83, 79, 79, 128, + 83, 83, 79, 128, 83, 83, 73, 88, 128, 83, 83, 73, 84, 128, 83, 83, 73, + 80, 128, 83, 83, 73, 73, 128, 83, 83, 73, 69, 88, 128, 83, 83, 73, 69, + 80, 128, 83, 83, 73, 69, 128, 83, 83, 72, 73, 78, 128, 83, 83, 72, 69, + 128, 83, 83, 69, 88, 128, 83, 83, 69, 80, 128, 83, 83, 69, 69, 128, 83, + 83, 65, 88, 128, 83, 83, 65, 85, 128, 83, 83, 65, 84, 128, 83, 83, 65, + 80, 128, 83, 83, 65, 78, 71, 89, 69, 83, 73, 69, 85, 78, 71, 128, 83, 83, + 65, 78, 71, 89, 69, 79, 82, 73, 78, 72, 73, 69, 85, 72, 128, 83, 83, 65, + 78, 71, 84, 73, 75, 69, 85, 84, 45, 80, 73, 69, 85, 80, 128, 83, 83, 65, + 78, 71, 84, 73, 75, 69, 85, 84, 128, 83, 83, 65, 78, 71, 84, 72, 73, 69, + 85, 84, 72, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 84, 73, 75, 69, + 85, 84, 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, + 128, 83, 83, 65, 78, 71, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, + 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 83, 83, 65, 78, 71, 82, 73, 69, + 85, 76, 45, 75, 72, 73, 69, 85, 75, 72, 128, 83, 83, 65, 78, 71, 82, 73, + 69, 85, 76, 128, 83, 83, 65, 78, 71, 80, 73, 69, 85, 80, 128, 83, 83, 65, + 78, 71, 78, 73, 69, 85, 78, 128, 83, 83, 65, 78, 71, 77, 73, 69, 85, 77, + 128, 83, 83, 65, 78, 71, 73, 69, 85, 78, 71, 128, 83, 83, 65, 78, 71, 72, + 73, 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 45, 72, 73, + 69, 85, 72, 128, 83, 83, 65, 78, 71, 67, 73, 69, 85, 67, 128, 83, 83, 65, + 78, 71, 65, 82, 65, 69, 65, 128, 83, 83, 65, 73, 128, 83, 83, 65, 65, + 128, 83, 83, 51, 128, 83, 83, 50, 128, 83, 82, 69, 68, 78, 197, 83, 82, + 128, 83, 81, 85, 73, 83, 200, 83, 81, 85, 73, 82, 82, 69, 204, 83, 81, + 85, 73, 71, 71, 76, 197, 83, 81, 85, 73, 68, 128, 83, 81, 85, 69, 69, 90, + 69, 68, 128, 83, 81, 85, 69, 69, 90, 197, 83, 81, 85, 65, 212, 83, 81, + 85, 65, 82, 69, 83, 128, 83, 81, 85, 65, 82, 69, 68, 128, 83, 81, 85, 65, + 82, 69, 128, 83, 80, 89, 128, 83, 80, 87, 65, 128, 83, 80, 85, 78, 71, + 211, 83, 80, 82, 79, 85, 84, 128, 83, 80, 82, 73, 78, 71, 83, 128, 83, + 80, 82, 73, 78, 71, 128, 83, 80, 82, 69, 67, 72, 71, 69, 83, 65, 78, 199, + 83, 80, 82, 69, 65, 68, 128, 83, 80, 82, 69, 65, 196, 83, 80, 79, 85, 84, + 73, 78, 199, 83, 80, 79, 84, 128, 83, 80, 79, 82, 84, 211, 83, 80, 79, + 79, 78, 128, 83, 80, 79, 79, 204, 83, 80, 79, 78, 71, 69, 128, 83, 80, + 79, 128, 83, 80, 76, 73, 84, 84, 73, 78, 199, 83, 80, 76, 73, 84, 128, + 83, 80, 76, 73, 212, 83, 80, 76, 65, 89, 69, 68, 128, 83, 80, 76, 65, 83, + 72, 73, 78, 199, 83, 80, 73, 82, 73, 84, 85, 211, 83, 80, 73, 82, 73, 84, + 128, 83, 80, 73, 82, 73, 212, 83, 80, 73, 82, 65, 78, 84, 128, 83, 80, + 73, 82, 65, 76, 128, 83, 80, 73, 82, 65, 204, 83, 80, 73, 78, 69, 128, + 83, 80, 73, 68, 69, 82, 217, 83, 80, 73, 68, 69, 82, 128, 83, 80, 73, 68, + 69, 210, 83, 80, 73, 67, 69, 128, 83, 80, 73, 128, 83, 80, 72, 69, 82, + 73, 67, 65, 204, 83, 80, 69, 83, 77, 73, 76, 207, 83, 80, 69, 78, 212, + 83, 80, 69, 69, 68, 66, 79, 65, 84, 128, 83, 80, 69, 69, 67, 72, 128, 83, + 80, 69, 69, 67, 200, 83, 80, 69, 67, 73, 65, 76, 128, 83, 80, 69, 65, 82, + 128, 83, 80, 69, 65, 75, 73, 78, 199, 83, 80, 69, 65, 75, 69, 82, 128, + 83, 80, 69, 65, 75, 69, 210, 83, 80, 69, 65, 75, 45, 78, 79, 45, 69, 86, + 73, 204, 83, 80, 69, 128, 83, 80, 65, 84, 72, 73, 128, 83, 80, 65, 82, + 75, 76, 73, 78, 199, 83, 80, 65, 82, 75, 76, 69, 83, 128, 83, 80, 65, 82, + 75, 76, 69, 82, 128, 83, 80, 65, 82, 75, 76, 69, 128, 83, 80, 65, 71, 72, + 69, 84, 84, 73, 128, 83, 80, 65, 68, 69, 83, 128, 83, 80, 65, 68, 197, + 83, 80, 65, 67, 73, 78, 199, 83, 80, 65, 67, 197, 83, 80, 65, 128, 83, + 79, 89, 79, 77, 66, 207, 83, 79, 89, 128, 83, 79, 87, 73, 76, 207, 83, + 79, 87, 128, 83, 79, 85, 84, 72, 69, 82, 206, 83, 79, 85, 84, 72, 45, 83, + 76, 65, 86, 69, 217, 83, 79, 85, 84, 200, 83, 79, 85, 82, 67, 69, 128, + 83, 79, 85, 78, 68, 128, 83, 79, 85, 78, 196, 83, 79, 85, 78, 65, 80, + 128, 83, 79, 85, 128, 83, 79, 83, 128, 83, 79, 82, 79, 67, 72, 89, 193, + 83, 79, 82, 73, 128, 83, 79, 82, 193, 83, 79, 81, 128, 83, 79, 79, 206, + 83, 79, 78, 74, 65, 77, 128, 83, 79, 78, 71, 128, 83, 79, 78, 128, 83, + 79, 77, 80, 69, 78, 199, 83, 79, 77, 128, 83, 79, 205, 83, 79, 76, 73, + 68, 85, 83, 128, 83, 79, 76, 73, 68, 85, 211, 83, 79, 76, 73, 196, 83, + 79, 76, 68, 73, 69, 82, 128, 83, 79, 72, 128, 83, 79, 71, 68, 73, 65, + 206, 83, 79, 70, 84, 87, 65, 82, 69, 45, 70, 85, 78, 67, 84, 73, 79, 206, + 83, 79, 70, 84, 78, 69, 83, 83, 128, 83, 79, 70, 84, 66, 65, 76, 76, 128, + 83, 79, 70, 212, 83, 79, 198, 83, 79, 67, 75, 83, 128, 83, 79, 67, 73, + 69, 84, 89, 128, 83, 79, 67, 67, 69, 210, 83, 79, 65, 80, 128, 83, 79, + 65, 128, 83, 79, 45, 55, 128, 83, 79, 45, 54, 128, 83, 79, 45, 53, 128, + 83, 79, 45, 52, 128, 83, 79, 45, 51, 128, 83, 79, 45, 50, 128, 83, 79, + 45, 49, 128, 83, 207, 83, 78, 79, 87, 77, 65, 78, 128, 83, 78, 79, 87, + 77, 65, 206, 83, 78, 79, 87, 70, 76, 65, 75, 69, 128, 83, 78, 79, 87, 66, + 79, 65, 82, 68, 69, 82, 128, 83, 78, 79, 87, 128, 83, 78, 79, 215, 83, + 78, 79, 85, 84, 128, 83, 78, 79, 85, 212, 83, 78, 69, 69, 90, 73, 78, + 199, 83, 78, 65, 208, 83, 78, 65, 75, 69, 128, 83, 78, 65, 75, 197, 83, + 78, 65, 73, 76, 128, 83, 78, 193, 83, 77, 79, 75, 73, 78, 199, 83, 77, + 73, 82, 75, 73, 78, 199, 83, 77, 73, 76, 73, 78, 199, 83, 77, 73, 76, 69, + 128, 83, 77, 73, 76, 197, 83, 77, 69, 65, 82, 128, 83, 77, 65, 83, 200, + 83, 77, 65, 76, 76, 69, 210, 83, 77, 65, 76, 76, 128, 83, 76, 85, 82, + 128, 83, 76, 79, 90, 72, 73, 84, 73, 69, 128, 83, 76, 79, 90, 72, 73, 84, + 73, 197, 83, 76, 79, 87, 76, 89, 128, 83, 76, 79, 87, 128, 83, 76, 79, + 215, 83, 76, 79, 86, 79, 128, 83, 76, 79, 84, 72, 128, 83, 76, 79, 212, + 83, 76, 79, 80, 73, 78, 199, 83, 76, 79, 80, 69, 128, 83, 76, 79, 65, + 206, 83, 76, 73, 78, 71, 128, 83, 76, 73, 71, 72, 84, 76, 217, 83, 76, + 73, 68, 73, 78, 71, 128, 83, 76, 73, 68, 69, 82, 128, 83, 76, 73, 68, 69, + 128, 83, 76, 73, 67, 69, 128, 83, 76, 73, 67, 197, 83, 76, 69, 85, 84, + 200, 83, 76, 69, 69, 80, 217, 83, 76, 69, 69, 80, 73, 78, 199, 83, 76, + 69, 69, 208, 83, 76, 69, 68, 128, 83, 76, 65, 86, 79, 78, 73, 195, 83, + 76, 65, 86, 69, 128, 83, 76, 65, 83, 72, 128, 83, 76, 65, 83, 200, 83, + 76, 65, 78, 84, 69, 196, 83, 75, 87, 65, 128, 83, 75, 87, 128, 83, 75, + 85, 78, 75, 128, 83, 75, 85, 76, 76, 128, 83, 75, 85, 76, 204, 83, 75, + 79, 66, 65, 128, 83, 75, 76, 73, 82, 79, 206, 83, 75, 73, 78, 128, 83, + 75, 73, 69, 82, 128, 83, 75, 201, 83, 75, 69, 87, 69, 196, 83, 75, 65, + 84, 69, 66, 79, 65, 82, 68, 128, 83, 75, 65, 84, 69, 128, 83, 75, 65, 77, + 69, 89, 84, 83, 193, 83, 75, 128, 83, 74, 69, 128, 83, 73, 90, 197, 83, + 73, 88, 84, 89, 45, 70, 79, 85, 82, 84, 72, 83, 128, 83, 73, 88, 84, 89, + 45, 70, 79, 85, 82, 84, 72, 128, 83, 73, 88, 84, 89, 45, 70, 79, 85, 82, + 84, 200, 83, 73, 88, 84, 89, 128, 83, 73, 88, 84, 217, 83, 73, 88, 84, + 72, 83, 128, 83, 73, 88, 84, 72, 211, 83, 73, 88, 84, 72, 128, 83, 73, + 88, 84, 69, 69, 78, 84, 72, 83, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, + 45, 50, 128, 83, 73, 88, 84, 69, 69, 78, 84, 72, 45, 49, 128, 83, 73, 88, + 84, 69, 69, 78, 84, 72, 128, 83, 73, 88, 84, 69, 69, 78, 84, 200, 83, 73, + 88, 84, 69, 69, 78, 128, 83, 73, 88, 84, 69, 69, 206, 83, 73, 88, 45, 84, + 72, 73, 82, 84, 89, 128, 83, 73, 88, 45, 83, 84, 82, 73, 78, 199, 83, 73, + 88, 45, 80, 69, 82, 45, 69, 205, 83, 73, 88, 45, 76, 73, 78, 197, 83, 73, + 216, 83, 73, 84, 69, 128, 83, 73, 83, 65, 128, 83, 73, 82, 82, 65, 72, + 128, 83, 73, 82, 73, 78, 71, 85, 128, 83, 73, 79, 83, 45, 84, 72, 73, 69, + 85, 84, 72, 128, 83, 73, 79, 83, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, + 128, 83, 73, 79, 83, 45, 82, 73, 69, 85, 76, 128, 83, 73, 79, 83, 45, 80, + 73, 69, 85, 80, 45, 75, 73, 89, 69, 79, 75, 128, 83, 73, 79, 83, 45, 80, + 72, 73, 69, 85, 80, 72, 128, 83, 73, 79, 83, 45, 80, 65, 78, 83, 73, 79, + 83, 128, 83, 73, 79, 83, 45, 78, 73, 69, 85, 78, 128, 83, 73, 79, 83, 45, + 77, 73, 69, 85, 77, 128, 83, 73, 79, 83, 45, 75, 72, 73, 69, 85, 75, 72, + 128, 83, 73, 79, 83, 45, 75, 65, 80, 89, 69, 79, 85, 78, 80, 73, 69, 85, + 80, 128, 83, 73, 79, 83, 45, 73, 69, 85, 78, 71, 128, 83, 73, 79, 83, 45, + 72, 73, 69, 85, 72, 128, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 83, + 73, 79, 83, 45, 67, 72, 73, 69, 85, 67, 72, 128, 83, 73, 79, 211, 83, 73, + 78, 85, 83, 79, 73, 196, 83, 73, 78, 79, 76, 79, 71, 73, 67, 65, 204, 83, + 73, 78, 78, 89, 73, 73, 89, 72, 69, 128, 83, 73, 78, 75, 73, 78, 71, 128, + 83, 73, 78, 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 51, 128, 83, 73, 78, + 71, 76, 69, 45, 83, 72, 73, 70, 84, 45, 50, 128, 83, 73, 78, 71, 76, 69, + 45, 76, 73, 78, 197, 83, 73, 78, 71, 76, 69, 128, 83, 73, 78, 71, 76, + 197, 83, 73, 78, 71, 65, 65, 84, 128, 83, 73, 78, 197, 83, 73, 78, 68, + 72, 201, 83, 73, 78, 128, 83, 73, 206, 83, 73, 77, 85, 76, 84, 65, 78, + 69, 79, 85, 83, 128, 83, 73, 77, 85, 76, 84, 65, 78, 69, 79, 85, 211, 83, + 73, 77, 80, 76, 73, 70, 73, 69, 196, 83, 73, 77, 73, 76, 65, 82, 128, 83, + 73, 77, 73, 76, 65, 210, 83, 73, 77, 65, 78, 83, 73, 211, 83, 73, 77, 65, + 76, 85, 78, 71, 85, 206, 83, 73, 77, 65, 128, 83, 73, 76, 86, 69, 82, + 128, 83, 73, 76, 75, 128, 83, 73, 76, 73, 81, 85, 193, 83, 73, 76, 72, + 79, 85, 69, 84, 84, 69, 128, 83, 73, 76, 72, 79, 85, 69, 84, 84, 197, 83, + 73, 76, 65, 51, 128, 83, 73, 75, 73, 128, 83, 73, 75, 50, 128, 83, 73, + 75, 178, 83, 73, 71, 78, 83, 128, 83, 73, 71, 77, 79, 73, 196, 83, 73, + 71, 77, 65, 128, 83, 73, 71, 77, 193, 83, 73, 71, 69, 204, 83, 73, 71, + 52, 128, 83, 73, 71, 180, 83, 73, 71, 128, 83, 73, 69, 69, 128, 83, 73, + 68, 69, 87, 65, 89, 211, 83, 73, 68, 69, 128, 83, 73, 68, 197, 83, 73, + 68, 68, 72, 73, 128, 83, 73, 68, 68, 72, 65, 77, 128, 83, 73, 68, 68, 72, + 65, 205, 83, 73, 67, 75, 78, 69, 83, 83, 128, 83, 73, 67, 75, 76, 69, + 128, 83, 73, 66, 197, 83, 73, 65, 128, 83, 73, 45, 54, 128, 83, 73, 45, + 53, 128, 83, 73, 45, 52, 128, 83, 73, 45, 51, 128, 83, 73, 45, 50, 128, + 83, 73, 45, 49, 128, 83, 201, 83, 72, 89, 88, 128, 83, 72, 89, 84, 128, + 83, 72, 89, 82, 88, 128, 83, 72, 89, 82, 128, 83, 72, 89, 80, 128, 83, + 72, 89, 69, 128, 83, 72, 89, 65, 128, 83, 72, 89, 128, 83, 72, 87, 79, + 89, 128, 83, 72, 87, 79, 79, 128, 83, 72, 87, 79, 128, 83, 72, 87, 73, + 73, 128, 83, 72, 87, 73, 128, 83, 72, 87, 69, 128, 83, 72, 87, 197, 83, + 72, 87, 65, 65, 128, 83, 72, 87, 65, 128, 83, 72, 86, 128, 83, 72, 85, + 88, 128, 83, 72, 85, 85, 128, 83, 72, 85, 84, 84, 76, 69, 67, 79, 67, 75, + 128, 83, 72, 85, 84, 128, 83, 72, 85, 82, 88, 128, 83, 72, 85, 82, 128, + 83, 72, 85, 80, 128, 83, 72, 85, 79, 88, 128, 83, 72, 85, 79, 80, 128, + 83, 72, 85, 79, 128, 83, 72, 85, 77, 128, 83, 72, 85, 76, 128, 83, 72, + 85, 70, 70, 76, 197, 83, 72, 85, 69, 81, 128, 83, 72, 85, 69, 78, 83, 72, + 85, 69, 84, 128, 83, 72, 85, 66, 85, 82, 128, 83, 72, 85, 65, 78, 71, 88, + 73, 128, 83, 72, 85, 50, 128, 83, 72, 85, 178, 83, 72, 85, 128, 83, 72, + 84, 65, 80, 73, 67, 128, 83, 72, 84, 65, 128, 83, 72, 82, 85, 71, 128, + 83, 72, 82, 79, 79, 128, 83, 72, 82, 79, 128, 83, 72, 82, 73, 78, 69, + 128, 83, 72, 82, 73, 77, 80, 128, 83, 72, 82, 73, 73, 128, 83, 72, 82, + 73, 128, 83, 72, 82, 65, 65, 128, 83, 72, 82, 65, 128, 83, 72, 79, 89, + 128, 83, 72, 79, 88, 128, 83, 72, 79, 87, 69, 82, 128, 83, 72, 79, 85, + 76, 68, 69, 82, 69, 196, 83, 72, 79, 85, 76, 68, 69, 210, 83, 72, 79, 85, + 128, 83, 72, 79, 84, 128, 83, 72, 79, 82, 84, 83, 128, 83, 72, 79, 82, + 84, 211, 83, 72, 79, 82, 84, 72, 65, 78, 196, 83, 72, 79, 82, 84, 69, 78, + 69, 82, 128, 83, 72, 79, 82, 84, 67, 65, 75, 69, 128, 83, 72, 79, 82, 84, + 45, 84, 87, 73, 71, 45, 89, 82, 128, 83, 72, 79, 82, 84, 45, 84, 87, 73, + 71, 45, 84, 89, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 83, 79, + 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, 45, 79, 83, 211, 83, 72, 79, + 82, 84, 45, 84, 87, 73, 71, 45, 78, 65, 85, 196, 83, 72, 79, 82, 84, 45, + 84, 87, 73, 71, 45, 77, 65, 68, 210, 83, 72, 79, 82, 84, 45, 84, 87, 73, + 71, 45, 72, 65, 71, 65, 76, 204, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, + 45, 66, 74, 65, 82, 75, 65, 206, 83, 72, 79, 82, 84, 45, 84, 87, 73, 71, + 45, 65, 210, 83, 72, 79, 82, 84, 128, 83, 72, 79, 82, 212, 83, 72, 79, + 81, 128, 83, 72, 79, 209, 83, 72, 79, 80, 80, 73, 78, 199, 83, 72, 79, + 80, 128, 83, 72, 79, 79, 84, 73, 78, 199, 83, 72, 79, 79, 84, 128, 83, + 72, 79, 79, 73, 128, 83, 72, 79, 79, 128, 83, 72, 79, 71, 201, 83, 72, + 79, 199, 83, 72, 79, 69, 83, 128, 83, 72, 79, 69, 128, 83, 72, 79, 197, + 83, 72, 79, 67, 75, 69, 196, 83, 72, 79, 65, 128, 83, 72, 79, 128, 83, + 72, 73, 89, 89, 65, 65, 76, 65, 65, 128, 83, 72, 73, 84, 65, 128, 83, 72, + 73, 84, 193, 83, 72, 73, 82, 212, 83, 72, 73, 82, 65, 69, 128, 83, 72, + 73, 82, 128, 83, 72, 73, 210, 83, 72, 73, 81, 128, 83, 72, 73, 78, 84, + 207, 83, 72, 73, 78, 73, 71, 128, 83, 72, 73, 78, 68, 193, 83, 72, 73, + 206, 83, 72, 73, 77, 65, 128, 83, 72, 73, 77, 193, 83, 72, 73, 77, 128, + 83, 72, 73, 205, 83, 72, 73, 73, 78, 128, 83, 72, 73, 73, 128, 83, 72, + 73, 70, 212, 83, 72, 73, 69, 76, 68, 128, 83, 72, 73, 68, 128, 83, 72, + 73, 196, 83, 72, 72, 65, 128, 83, 72, 72, 193, 83, 72, 69, 88, 128, 83, + 72, 69, 86, 65, 128, 83, 72, 69, 85, 88, 128, 83, 72, 69, 85, 79, 81, 128, 83, 72, 69, 85, 65, 69, 81, 84, 85, 128, 83, 72, 69, 85, 65, 69, 81, 128, 83, 72, 69, 85, 65, 69, 128, 83, 72, 69, 84, 128, 83, 72, 69, 212, 83, 72, 69, 83, 72, 76, 65, 77, 128, 83, 72, 69, 83, 72, 73, 71, 128, 83, @@ -1655,239 +1656,240 @@ static const unsigned char lexicon[] = { 76, 85, 83, 128, 82, 69, 71, 85, 76, 85, 211, 82, 69, 71, 73, 83, 84, 69, 82, 69, 196, 82, 69, 71, 73, 79, 78, 65, 204, 82, 69, 71, 73, 65, 45, 50, 128, 82, 69, 71, 73, 65, 128, 82, 69, 70, 79, 82, 77, 69, 196, 82, 69, - 70, 69, 82, 69, 78, 67, 197, 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, - 79, 78, 128, 82, 69, 67, 89, 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, - 69, 196, 82, 69, 67, 84, 73, 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, - 78, 71, 85, 76, 65, 210, 82, 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69, - 67, 84, 65, 78, 71, 76, 197, 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65, - 204, 82, 69, 67, 79, 82, 68, 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82, - 128, 82, 69, 67, 79, 82, 68, 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, - 73, 84, 65, 84, 73, 86, 197, 82, 69, 67, 69, 80, 84, 73, 86, 197, 82, 69, - 67, 69, 73, 86, 69, 82, 128, 82, 69, 67, 69, 73, 86, 69, 210, 82, 69, 67, - 69, 73, 80, 84, 128, 82, 69, 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, - 76, 71, 65, 82, 128, 82, 69, 65, 72, 77, 85, 75, 128, 82, 69, 65, 68, 73, - 78, 199, 82, 69, 65, 67, 72, 128, 82, 69, 45, 52, 128, 82, 69, 45, 51, - 128, 82, 69, 45, 50, 128, 82, 69, 45, 49, 128, 82, 68, 207, 82, 68, 69, - 204, 82, 66, 65, 83, 193, 82, 65, 90, 83, 69, 75, 65, 128, 82, 65, 90, - 79, 82, 128, 82, 65, 89, 83, 128, 82, 65, 89, 211, 82, 65, 89, 65, 78, - 78, 65, 128, 82, 65, 86, 78, 79, 128, 82, 65, 84, 73, 79, 128, 82, 65, - 84, 72, 65, 128, 82, 65, 84, 72, 193, 82, 65, 84, 65, 128, 82, 65, 84, - 128, 82, 65, 83, 87, 65, 68, 73, 128, 82, 65, 83, 79, 85, 204, 82, 65, - 83, 72, 65, 128, 82, 65, 81, 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, - 65, 78, 71, 197, 82, 65, 78, 65, 128, 82, 65, 78, 128, 82, 65, 77, 211, - 82, 65, 77, 66, 65, 84, 128, 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, - 65, 65, 82, 65, 65, 78, 83, 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, - 82, 65, 73, 83, 69, 68, 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, - 79, 87, 128, 82, 65, 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, - 217, 82, 65, 73, 76, 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, - 82, 65, 72, 77, 65, 84, 85, 76, 76, 65, 200, 82, 65, 72, 73, 77, 65, 72, - 85, 205, 82, 65, 72, 73, 77, 65, 72, 213, 82, 65, 70, 69, 128, 82, 65, - 69, 77, 128, 82, 65, 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 73, - 79, 128, 82, 65, 68, 73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, - 196, 82, 65, 67, 81, 85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82, 65, - 67, 73, 78, 199, 82, 65, 67, 67, 79, 79, 78, 128, 82, 65, 66, 66, 73, 84, - 128, 82, 65, 66, 66, 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, - 65, 51, 128, 82, 65, 50, 128, 82, 65, 45, 75, 65, 82, 65, 128, 82, 65, - 45, 52, 128, 82, 65, 45, 51, 128, 82, 65, 45, 50, 128, 82, 65, 45, 49, - 128, 82, 48, 50, 57, 128, 82, 48, 50, 56, 128, 82, 48, 50, 55, 128, 82, - 48, 50, 54, 128, 82, 48, 50, 53, 128, 82, 48, 50, 52, 128, 82, 48, 50, - 51, 128, 82, 48, 50, 50, 128, 82, 48, 50, 49, 128, 82, 48, 50, 48, 128, - 82, 48, 49, 57, 128, 82, 48, 49, 56, 128, 82, 48, 49, 55, 128, 82, 48, - 49, 54, 65, 128, 82, 48, 49, 54, 128, 82, 48, 49, 53, 128, 82, 48, 49, - 52, 128, 82, 48, 49, 51, 128, 82, 48, 49, 50, 128, 82, 48, 49, 49, 128, - 82, 48, 49, 48, 65, 128, 82, 48, 49, 48, 128, 82, 48, 48, 57, 128, 82, - 48, 48, 56, 128, 82, 48, 48, 55, 128, 82, 48, 48, 54, 128, 82, 48, 48, - 53, 128, 82, 48, 48, 52, 128, 82, 48, 48, 51, 66, 128, 82, 48, 48, 51, - 65, 128, 82, 48, 48, 51, 128, 82, 48, 48, 50, 65, 128, 82, 48, 48, 50, - 128, 82, 48, 48, 49, 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, 81, - 89, 85, 128, 81, 89, 84, 128, 81, 89, 82, 88, 128, 81, 89, 82, 128, 81, - 89, 80, 128, 81, 89, 79, 128, 81, 89, 73, 128, 81, 89, 69, 69, 128, 81, - 89, 69, 128, 81, 89, 65, 65, 128, 81, 89, 65, 128, 81, 89, 128, 81, 87, - 73, 128, 81, 87, 69, 69, 128, 81, 87, 69, 128, 81, 87, 65, 65, 128, 81, - 87, 65, 128, 81, 85, 88, 128, 81, 85, 86, 128, 81, 85, 85, 86, 128, 81, - 85, 85, 128, 81, 85, 84, 128, 81, 85, 83, 72, 83, 72, 65, 89, 65, 128, - 81, 85, 82, 88, 128, 81, 85, 82, 128, 81, 85, 80, 128, 81, 85, 79, 88, - 128, 81, 85, 79, 84, 197, 81, 85, 79, 84, 65, 84, 73, 79, 206, 81, 85, - 79, 84, 128, 81, 85, 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 128, 81, - 85, 73, 78, 84, 73, 76, 69, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, - 67, 69, 128, 81, 85, 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, - 78, 67, 85, 78, 88, 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, - 76, 212, 81, 85, 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, - 81, 85, 70, 128, 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, - 84, 73, 79, 78, 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78, - 128, 81, 85, 69, 69, 206, 81, 85, 69, 128, 81, 85, 68, 68, 73, 83, 193, - 81, 85, 66, 85, 84, 83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, - 85, 65, 82, 84, 69, 82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, - 65, 82, 84, 69, 82, 128, 81, 85, 65, 79, 65, 82, 128, 81, 85, 65, 78, 84, - 73, 84, 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, - 78, 84, 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85, 65, 68, 67, 79, 76, - 79, 78, 128, 81, 85, 65, 68, 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, - 85, 128, 81, 208, 81, 79, 88, 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, - 81, 79, 80, 65, 128, 81, 79, 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, - 79, 70, 128, 81, 79, 198, 81, 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, - 73, 88, 128, 81, 73, 84, 83, 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, - 81, 73, 73, 128, 81, 73, 70, 128, 81, 73, 69, 88, 128, 81, 73, 69, 84, - 128, 81, 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, 81, 72, 87, 73, - 128, 81, 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, 72, 87, 65, 65, - 128, 81, 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, 80, 72, 128, 81, - 72, 79, 128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 81, 72, 69, 128, 81, - 72, 65, 85, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128, 81, 71, 65, 128, - 81, 69, 84, 65, 78, 65, 128, 81, 69, 69, 128, 81, 69, 128, 81, 65, 89, - 128, 81, 65, 85, 128, 81, 65, 84, 65, 78, 128, 81, 65, 83, 82, 128, 81, - 65, 82, 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, 72, - 128, 81, 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, 76, - 193, 81, 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, 70, - 128, 81, 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, 65, - 65, 70, 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, 48, - 54, 128, 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, 128, - 81, 48, 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, 128, - 80, 89, 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, 128, - 80, 87, 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207, - 80, 87, 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69, - 128, 80, 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 90, 90, 76, - 197, 80, 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, - 82, 69, 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 78, 65, 89, 65, 128, - 80, 85, 84, 128, 80, 85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, - 83, 72, 80, 73, 75, 65, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, - 128, 80, 85, 82, 83, 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, - 65, 77, 65, 128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, - 128, 80, 85, 82, 128, 80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, - 128, 80, 85, 79, 80, 128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, - 128, 80, 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, 211, 80, 85, 78, 67, - 84, 85, 65, 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, - 206, 80, 85, 77, 80, 128, 80, 85, 77, 128, 80, 85, 70, 70, 69, 68, 128, - 80, 85, 69, 128, 80, 85, 67, 75, 128, 80, 85, 66, 76, 73, 195, 80, 85, - 194, 80, 85, 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 65, 67, 72, 85, - 197, 80, 85, 50, 128, 80, 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, - 193, 80, 84, 69, 128, 80, 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, - 79, 83, 89, 78, 65, 71, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, - 65, 82, 65, 75, 65, 76, 69, 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, - 79, 206, 80, 83, 73, 70, 73, 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, - 80, 83, 73, 128, 80, 83, 65, 76, 84, 69, 210, 80, 83, 128, 80, 82, 79, - 86, 69, 128, 80, 82, 79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, - 211, 80, 82, 79, 84, 69, 67, 84, 69, 196, 80, 82, 79, 83, 84, 65, 89, 65, - 128, 80, 82, 79, 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, - 79, 83, 69, 82, 80, 73, 78, 65, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, - 78, 65, 204, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80, - 69, 82, 84, 217, 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70, - 128, 80, 82, 79, 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79, - 78, 197, 80, 82, 79, 74, 69, 67, 84, 79, 82, 128, 80, 82, 79, 74, 69, 67, - 84, 73, 86, 69, 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, - 79, 72, 73, 66, 73, 84, 69, 196, 80, 82, 79, 71, 82, 69, 83, 83, 128, 80, - 82, 79, 71, 82, 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79, - 68, 85, 67, 84, 128, 80, 82, 79, 68, 85, 67, 212, 80, 82, 79, 66, 73, 78, - 199, 80, 82, 73, 90, 78, 65, 203, 80, 82, 73, 86, 65, 84, 69, 128, 80, - 82, 73, 86, 65, 84, 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, - 84, 72, 65, 77, 65, 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, - 78, 84, 69, 82, 128, 80, 82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, - 128, 80, 82, 73, 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, - 73, 78, 67, 69, 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, - 82, 69, 86, 73, 79, 85, 211, 80, 82, 69, 84, 90, 69, 76, 128, 80, 82, 69, - 83, 83, 69, 196, 80, 82, 69, 83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, - 65, 84, 73, 79, 206, 80, 82, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, - 82, 69, 80, 79, 78, 68, 69, 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, - 72, 65, 128, 80, 82, 69, 71, 78, 65, 78, 212, 80, 82, 69, 70, 73, 88, 69, - 196, 80, 82, 69, 70, 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, - 69, 128, 80, 82, 69, 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, - 83, 128, 80, 82, 69, 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, - 196, 80, 82, 69, 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, - 82, 65, 89, 69, 210, 80, 82, 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, - 45, 80, 73, 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, - 45, 77, 85, 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, - 77, 45, 66, 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, - 77, 45, 66, 69, 201, 80, 82, 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, - 80, 80, 86, 128, 80, 80, 77, 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, - 79, 88, 128, 80, 79, 87, 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, - 87, 69, 210, 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, - 128, 80, 79, 86, 89, 83, 72, 69, 128, 80, 79, 86, 89, 83, 72, 197, 80, - 79, 86, 79, 68, 78, 89, 128, 80, 79, 85, 82, 73, 78, 199, 80, 79, 85, 78, - 196, 80, 79, 85, 76, 84, 82, 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, - 84, 69, 196, 80, 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, - 80, 79, 212, 80, 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, - 84, 66, 79, 88, 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, - 79, 83, 212, 80, 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 83, 83, - 69, 83, 83, 73, 79, 206, 80, 79, 83, 73, 84, 73, 79, 78, 83, 128, 80, 79, - 83, 73, 84, 73, 79, 78, 128, 80, 79, 83, 69, 73, 68, 79, 78, 128, 80, 79, - 82, 84, 65, 66, 76, 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, - 82, 82, 69, 67, 84, 85, 211, 80, 79, 80, 80, 73, 78, 199, 80, 79, 80, 80, - 69, 82, 128, 80, 79, 80, 67, 79, 82, 78, 128, 80, 79, 80, 128, 80, 79, - 208, 80, 79, 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, - 128, 80, 79, 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, - 80, 79, 76, 85, 80, 79, 86, 79, 68, 78, 65, 89, 65, 128, 80, 79, 76, 79, - 128, 80, 79, 76, 78, 65, 89, 65, 128, 80, 79, 76, 76, 85, 128, 80, 79, - 76, 75, 85, 76, 73, 90, 77, 89, 128, 80, 79, 76, 73, 83, 72, 128, 80, 79, - 76, 73, 83, 200, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76, - 69, 128, 80, 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, - 75, 79, 74, 73, 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79, - 128, 80, 79, 73, 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 69, 196, 80, - 79, 73, 78, 84, 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 82, 217, 80, - 79, 69, 84, 73, 195, 80, 79, 68, 86, 69, 82, 84, 75, 65, 128, 80, 79, 68, - 67, 72, 65, 83, 72, 73, 69, 77, 128, 80, 79, 68, 67, 72, 65, 83, 72, 73, - 69, 128, 80, 79, 68, 67, 72, 65, 83, 72, 73, 197, 80, 79, 68, 65, 84, 85, - 83, 128, 80, 79, 67, 75, 69, 212, 80, 79, 65, 128, 80, 207, 80, 78, 69, - 85, 77, 65, 84, 65, 128, 80, 76, 85, 84, 207, 80, 76, 85, 84, 65, 128, - 80, 76, 85, 83, 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, - 82, 65, 76, 128, 80, 76, 85, 78, 71, 69, 82, 128, 80, 76, 85, 77, 69, - 196, 80, 76, 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, 71, 128, 80, - 76, 85, 128, 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, - 72, 65, 85, 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, 76, 69, 65, 68, - 73, 78, 199, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 76, 65, - 89, 71, 82, 79, 85, 78, 196, 80, 76, 65, 84, 69, 128, 80, 76, 65, 83, 84, - 73, 67, 83, 128, 80, 76, 65, 78, 84, 128, 80, 76, 65, 78, 69, 84, 128, - 80, 76, 65, 78, 69, 128, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75, 128, - 80, 76, 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 82, - 128, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 210, 80, 76, 65, 67, 197, - 80, 76, 65, 67, 65, 82, 68, 128, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, - 65, 84, 79, 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, - 82, 128, 80, 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, - 79, 82, 203, 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, - 69, 76, 69, 72, 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, - 128, 80, 73, 82, 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 82, - 65, 67, 89, 128, 80, 73, 82, 50, 128, 80, 73, 80, 73, 78, 71, 128, 80, - 73, 80, 65, 69, 77, 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69, 77, 66, - 65, 128, 80, 73, 80, 128, 80, 73, 78, 87, 72, 69, 69, 204, 80, 73, 78, - 203, 80, 73, 78, 69, 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, - 78, 67, 72, 73, 78, 199, 80, 73, 78, 67, 72, 69, 196, 80, 73, 78, 65, 84, - 65, 128, 80, 73, 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76, - 128, 80, 73, 76, 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82, - 85, 128, 80, 73, 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69, - 88, 128, 80, 73, 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, - 69, 85, 80, 45, 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85, - 80, 45, 83, 73, 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85, - 80, 45, 83, 73, 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, - 85, 80, 45, 83, 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, - 80, 45, 83, 73, 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85, - 80, 45, 83, 73, 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, - 45, 82, 73, 69, 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, - 85, 80, 45, 82, 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, - 85, 78, 128, 80, 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69, - 85, 80, 45, 75, 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67, - 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72, - 128, 80, 73, 69, 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80, - 73, 69, 69, 84, 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128, - 80, 73, 69, 128, 80, 73, 67, 84, 85, 82, 69, 128, 80, 73, 67, 75, 85, - 208, 80, 73, 67, 75, 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, - 85, 84, 79, 82, 85, 128, 80, 73, 65, 83, 84, 82, 197, 80, 73, 65, 83, 77, - 193, 80, 73, 65, 78, 79, 128, 80, 201, 80, 72, 87, 65, 128, 80, 72, 85, - 84, 72, 65, 79, 128, 80, 72, 85, 210, 80, 72, 85, 78, 71, 128, 80, 72, - 82, 65, 83, 69, 128, 80, 72, 79, 78, 69, 83, 128, 80, 72, 79, 76, 85, 83, - 128, 80, 72, 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, - 72, 79, 128, 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, - 72, 85, 128, 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, - 76, 73, 80, 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, - 69, 85, 84, 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, - 80, 72, 73, 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, - 85, 80, 72, 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, - 72, 73, 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, - 65, 83, 69, 45, 198, 80, 72, 65, 83, 69, 45, 195, 80, 72, 65, 83, 69, 45, - 194, 80, 72, 65, 83, 69, 45, 193, 80, 72, 65, 82, 89, 78, 71, 69, 65, - 204, 80, 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, - 72, 65, 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, - 66, 128, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80, - 71, 128, 80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85, 84, 65, 69, 128, - 80, 69, 85, 84, 128, 80, 69, 84, 82, 201, 80, 69, 84, 65, 83, 84, 79, 75, - 79, 85, 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, - 84, 65, 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79, + 70, 76, 69, 67, 84, 73, 79, 78, 128, 82, 69, 70, 69, 82, 69, 78, 67, 197, + 82, 69, 68, 85, 80, 76, 73, 67, 65, 84, 73, 79, 78, 128, 82, 69, 67, 89, + 67, 76, 73, 78, 199, 82, 69, 67, 89, 67, 76, 69, 196, 82, 69, 67, 84, 73, + 76, 73, 78, 69, 65, 210, 82, 69, 67, 84, 65, 78, 71, 85, 76, 65, 210, 82, + 69, 67, 84, 65, 78, 71, 76, 69, 128, 82, 69, 67, 84, 65, 78, 71, 76, 197, + 82, 69, 67, 82, 69, 65, 84, 73, 79, 78, 65, 204, 82, 69, 67, 79, 82, 68, + 73, 78, 199, 82, 69, 67, 79, 82, 68, 69, 82, 128, 82, 69, 67, 79, 82, 68, + 128, 82, 69, 67, 79, 82, 196, 82, 69, 67, 73, 84, 65, 84, 73, 86, 197, + 82, 69, 67, 69, 80, 84, 73, 86, 197, 82, 69, 67, 69, 73, 86, 69, 82, 128, + 82, 69, 67, 69, 73, 86, 69, 210, 82, 69, 67, 69, 73, 80, 84, 128, 82, 69, + 65, 76, 71, 65, 82, 45, 50, 128, 82, 69, 65, 76, 71, 65, 82, 128, 82, 69, + 65, 72, 77, 85, 75, 128, 82, 69, 65, 68, 73, 78, 199, 82, 69, 65, 67, 72, + 128, 82, 69, 45, 52, 128, 82, 69, 45, 51, 128, 82, 69, 45, 50, 128, 82, + 69, 45, 49, 128, 82, 68, 207, 82, 68, 69, 204, 82, 66, 65, 83, 193, 82, + 65, 90, 83, 69, 75, 65, 128, 82, 65, 90, 79, 82, 128, 82, 65, 89, 83, + 128, 82, 65, 89, 211, 82, 65, 89, 65, 78, 78, 65, 128, 82, 65, 86, 78, + 79, 128, 82, 65, 84, 73, 79, 128, 82, 65, 84, 72, 65, 128, 82, 65, 84, + 72, 193, 82, 65, 84, 65, 128, 82, 65, 84, 128, 82, 65, 83, 87, 65, 68, + 73, 128, 82, 65, 83, 79, 85, 204, 82, 65, 83, 72, 65, 128, 82, 65, 81, + 128, 82, 65, 80, 73, 83, 77, 65, 128, 82, 65, 78, 71, 197, 82, 65, 78, + 65, 128, 82, 65, 78, 128, 82, 65, 77, 211, 82, 65, 77, 66, 65, 84, 128, + 82, 65, 75, 72, 65, 78, 71, 128, 82, 65, 75, 65, 65, 82, 65, 65, 78, 83, + 65, 89, 65, 128, 82, 65, 73, 83, 73, 78, 199, 82, 65, 73, 83, 69, 68, + 128, 82, 65, 73, 83, 69, 196, 82, 65, 73, 78, 66, 79, 87, 128, 82, 65, + 73, 76, 87, 65, 89, 128, 82, 65, 73, 76, 87, 65, 217, 82, 65, 73, 76, + 128, 82, 65, 73, 68, 207, 82, 65, 73, 68, 65, 128, 82, 65, 72, 77, 65, + 84, 85, 76, 76, 65, 200, 82, 65, 72, 73, 77, 65, 72, 85, 205, 82, 65, 72, + 73, 77, 65, 72, 213, 82, 65, 70, 69, 128, 82, 65, 69, 77, 128, 82, 65, + 68, 73, 79, 65, 67, 84, 73, 86, 197, 82, 65, 68, 73, 79, 128, 82, 65, 68, + 73, 207, 82, 65, 68, 201, 82, 65, 68, 128, 82, 65, 196, 82, 65, 67, 81, + 85, 69, 212, 82, 65, 67, 73, 78, 71, 128, 82, 65, 67, 73, 78, 199, 82, + 65, 67, 67, 79, 79, 78, 128, 82, 65, 66, 66, 73, 84, 128, 82, 65, 66, 66, + 73, 212, 82, 65, 66, 128, 82, 65, 65, 73, 128, 82, 65, 51, 128, 82, 65, + 50, 128, 82, 65, 45, 75, 65, 82, 65, 128, 82, 65, 45, 52, 128, 82, 65, + 45, 51, 128, 82, 65, 45, 50, 128, 82, 65, 45, 49, 128, 82, 48, 50, 57, + 128, 82, 48, 50, 56, 128, 82, 48, 50, 55, 128, 82, 48, 50, 54, 128, 82, + 48, 50, 53, 128, 82, 48, 50, 52, 128, 82, 48, 50, 51, 128, 82, 48, 50, + 50, 128, 82, 48, 50, 49, 128, 82, 48, 50, 48, 128, 82, 48, 49, 57, 128, + 82, 48, 49, 56, 128, 82, 48, 49, 55, 128, 82, 48, 49, 54, 65, 128, 82, + 48, 49, 54, 128, 82, 48, 49, 53, 128, 82, 48, 49, 52, 128, 82, 48, 49, + 51, 128, 82, 48, 49, 50, 128, 82, 48, 49, 49, 128, 82, 48, 49, 48, 65, + 128, 82, 48, 49, 48, 128, 82, 48, 48, 57, 128, 82, 48, 48, 56, 128, 82, + 48, 48, 55, 128, 82, 48, 48, 54, 128, 82, 48, 48, 53, 128, 82, 48, 48, + 52, 128, 82, 48, 48, 51, 66, 128, 82, 48, 48, 51, 65, 128, 82, 48, 48, + 51, 128, 82, 48, 48, 50, 65, 128, 82, 48, 48, 50, 128, 82, 48, 48, 49, + 128, 82, 45, 67, 82, 69, 197, 81, 89, 88, 128, 81, 89, 85, 128, 81, 89, + 84, 128, 81, 89, 82, 88, 128, 81, 89, 82, 128, 81, 89, 80, 128, 81, 89, + 79, 128, 81, 89, 73, 128, 81, 89, 69, 69, 128, 81, 89, 69, 128, 81, 89, + 65, 65, 128, 81, 89, 65, 128, 81, 89, 128, 81, 87, 73, 128, 81, 87, 69, + 69, 128, 81, 87, 69, 128, 81, 87, 65, 65, 128, 81, 87, 65, 128, 81, 85, + 88, 128, 81, 85, 86, 128, 81, 85, 85, 86, 128, 81, 85, 85, 128, 81, 85, + 84, 128, 81, 85, 83, 72, 83, 72, 65, 89, 65, 128, 81, 85, 82, 88, 128, + 81, 85, 82, 128, 81, 85, 80, 128, 81, 85, 79, 88, 128, 81, 85, 79, 84, + 197, 81, 85, 79, 84, 65, 84, 73, 79, 206, 81, 85, 79, 84, 128, 81, 85, + 79, 80, 128, 81, 85, 79, 128, 81, 85, 75, 128, 81, 85, 73, 78, 84, 73, + 76, 69, 128, 81, 85, 73, 78, 84, 69, 83, 83, 69, 78, 67, 69, 128, 81, 85, + 73, 78, 68, 73, 67, 69, 83, 73, 77, 193, 81, 85, 73, 78, 67, 85, 78, 88, + 128, 81, 85, 73, 78, 65, 82, 73, 85, 211, 81, 85, 73, 76, 212, 81, 85, + 73, 76, 76, 128, 81, 85, 73, 67, 203, 81, 85, 73, 128, 81, 85, 70, 128, + 81, 85, 69, 83, 84, 73, 79, 78, 69, 196, 81, 85, 69, 83, 84, 73, 79, 78, + 128, 81, 85, 69, 83, 84, 73, 79, 206, 81, 85, 69, 69, 78, 128, 81, 85, + 69, 69, 206, 81, 85, 69, 128, 81, 85, 68, 68, 73, 83, 193, 81, 85, 66, + 85, 84, 83, 128, 81, 85, 65, 84, 69, 82, 78, 73, 79, 206, 81, 85, 65, 82, + 84, 69, 82, 83, 128, 81, 85, 65, 82, 84, 69, 82, 211, 81, 85, 65, 82, 84, + 69, 82, 128, 81, 85, 65, 79, 65, 82, 128, 81, 85, 65, 78, 84, 73, 84, + 217, 81, 85, 65, 68, 82, 85, 80, 76, 197, 81, 85, 65, 68, 82, 65, 78, 84, + 128, 81, 85, 65, 68, 82, 65, 78, 212, 81, 85, 65, 68, 67, 79, 76, 79, 78, + 128, 81, 85, 65, 68, 128, 81, 85, 65, 196, 81, 85, 65, 128, 81, 85, 128, + 81, 208, 81, 79, 88, 128, 81, 79, 84, 128, 81, 79, 80, 72, 128, 81, 79, + 80, 65, 128, 81, 79, 80, 128, 81, 79, 79, 128, 81, 79, 207, 81, 79, 70, + 128, 81, 79, 198, 81, 79, 65, 128, 81, 79, 128, 81, 78, 128, 81, 73, 88, + 128, 81, 73, 84, 83, 65, 128, 81, 73, 84, 128, 81, 73, 80, 128, 81, 73, + 73, 128, 81, 73, 70, 128, 81, 73, 69, 88, 128, 81, 73, 69, 84, 128, 81, + 73, 69, 80, 128, 81, 73, 69, 128, 81, 73, 128, 81, 72, 87, 73, 128, 81, + 72, 87, 69, 69, 128, 81, 72, 87, 69, 128, 81, 72, 87, 65, 65, 128, 81, + 72, 87, 65, 128, 81, 72, 85, 128, 81, 72, 79, 80, 72, 128, 81, 72, 79, + 128, 81, 72, 73, 128, 81, 72, 69, 69, 128, 81, 72, 69, 128, 81, 72, 65, + 85, 128, 81, 72, 65, 65, 128, 81, 72, 65, 128, 81, 71, 65, 128, 81, 69, + 84, 65, 78, 65, 128, 81, 69, 69, 128, 81, 69, 128, 81, 65, 89, 128, 81, + 65, 85, 128, 81, 65, 84, 65, 78, 128, 81, 65, 83, 82, 128, 81, 65, 82, + 78, 69, 217, 81, 65, 82, 128, 81, 65, 81, 128, 81, 65, 80, 72, 128, 81, + 65, 77, 65, 84, 83, 128, 81, 65, 77, 65, 84, 211, 81, 65, 76, 193, 81, + 65, 73, 82, 84, 72, 82, 65, 128, 81, 65, 73, 128, 81, 65, 70, 128, 81, + 65, 198, 81, 65, 68, 77, 65, 128, 81, 65, 65, 73, 128, 81, 65, 65, 70, + 85, 128, 81, 65, 65, 70, 128, 81, 48, 48, 55, 128, 81, 48, 48, 54, 128, + 81, 48, 48, 53, 128, 81, 48, 48, 52, 128, 81, 48, 48, 51, 128, 81, 48, + 48, 50, 128, 81, 48, 48, 49, 128, 80, 90, 128, 80, 89, 88, 128, 80, 89, + 84, 128, 80, 89, 82, 88, 128, 80, 89, 82, 128, 80, 89, 80, 128, 80, 87, + 79, 89, 128, 80, 87, 79, 79, 128, 80, 87, 79, 128, 80, 87, 207, 80, 87, + 73, 73, 128, 80, 87, 73, 128, 80, 87, 69, 69, 128, 80, 87, 69, 128, 80, + 87, 65, 65, 128, 80, 87, 128, 80, 86, 128, 80, 85, 90, 90, 76, 197, 80, + 85, 88, 128, 80, 85, 85, 84, 128, 80, 85, 85, 128, 80, 85, 84, 82, 69, + 70, 65, 67, 84, 73, 79, 78, 128, 80, 85, 84, 78, 65, 89, 65, 128, 80, 85, + 84, 128, 80, 85, 212, 80, 85, 83, 72, 80, 73, 78, 128, 80, 85, 83, 72, + 80, 73, 75, 65, 128, 80, 85, 83, 72, 73, 78, 199, 80, 85, 82, 88, 128, + 80, 85, 82, 83, 69, 128, 80, 85, 82, 80, 76, 197, 80, 85, 82, 78, 65, 77, + 65, 128, 80, 85, 82, 73, 84, 89, 128, 80, 85, 82, 73, 70, 89, 128, 80, + 85, 82, 128, 80, 85, 81, 128, 80, 85, 80, 128, 80, 85, 79, 88, 128, 80, + 85, 79, 80, 128, 80, 85, 79, 128, 80, 85, 78, 71, 65, 65, 77, 128, 80, + 85, 78, 71, 128, 80, 85, 78, 67, 84, 85, 211, 80, 85, 78, 67, 84, 85, 65, + 84, 73, 79, 78, 128, 80, 85, 78, 67, 84, 85, 65, 84, 73, 79, 206, 80, 85, + 77, 80, 128, 80, 85, 77, 128, 80, 85, 70, 70, 69, 68, 128, 80, 85, 69, + 128, 80, 85, 67, 75, 128, 80, 85, 66, 76, 73, 195, 80, 85, 194, 80, 85, + 65, 81, 128, 80, 85, 65, 69, 128, 80, 85, 65, 67, 72, 85, 197, 80, 85, + 50, 128, 80, 85, 49, 128, 80, 85, 128, 80, 84, 72, 65, 72, 193, 80, 84, + 69, 128, 80, 83, 73, 76, 201, 80, 83, 73, 70, 73, 83, 84, 79, 83, 89, 78, + 65, 71, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 80, 65, 82, 65, 75, + 65, 76, 69, 83, 77, 65, 128, 80, 83, 73, 70, 73, 83, 84, 79, 206, 80, 83, + 73, 70, 73, 83, 84, 79, 76, 89, 71, 73, 83, 77, 65, 128, 80, 83, 73, 128, + 80, 83, 65, 76, 84, 69, 210, 80, 83, 128, 80, 82, 79, 86, 69, 128, 80, + 82, 79, 84, 79, 86, 65, 82, 89, 211, 80, 82, 79, 84, 79, 211, 80, 82, 79, + 84, 69, 67, 84, 69, 196, 80, 82, 79, 83, 84, 65, 89, 65, 128, 80, 82, 79, + 83, 71, 69, 71, 82, 65, 77, 77, 69, 78, 73, 128, 80, 82, 79, 83, 69, 82, + 80, 73, 78, 65, 128, 80, 82, 79, 80, 79, 82, 84, 73, 79, 78, 65, 204, 80, + 82, 79, 80, 79, 82, 84, 73, 79, 78, 128, 80, 82, 79, 80, 69, 82, 84, 217, + 80, 82, 79, 80, 69, 76, 76, 69, 210, 80, 82, 79, 79, 70, 128, 80, 82, 79, + 76, 79, 78, 71, 69, 196, 80, 82, 79, 76, 65, 84, 73, 79, 78, 197, 80, 82, + 79, 74, 69, 67, 84, 79, 82, 128, 80, 82, 79, 74, 69, 67, 84, 73, 86, 69, + 128, 80, 82, 79, 74, 69, 67, 84, 73, 79, 78, 128, 80, 82, 79, 72, 73, 66, + 73, 84, 69, 196, 80, 82, 79, 71, 82, 69, 83, 83, 128, 80, 82, 79, 71, 82, + 65, 205, 80, 82, 79, 70, 79, 85, 78, 68, 128, 80, 82, 79, 68, 85, 67, 84, + 128, 80, 82, 79, 68, 85, 67, 212, 80, 82, 79, 66, 73, 78, 199, 80, 82, + 73, 90, 78, 65, 203, 80, 82, 73, 86, 65, 84, 69, 128, 80, 82, 73, 86, 65, + 84, 197, 80, 82, 73, 86, 65, 67, 217, 80, 82, 73, 83, 72, 84, 72, 65, 77, + 65, 84, 82, 193, 80, 82, 73, 78, 84, 83, 128, 80, 82, 73, 78, 84, 69, 82, + 128, 80, 82, 73, 78, 84, 69, 210, 80, 82, 73, 78, 84, 128, 80, 82, 73, + 78, 212, 80, 82, 73, 78, 67, 69, 83, 83, 128, 80, 82, 73, 78, 67, 69, + 128, 80, 82, 73, 77, 69, 128, 80, 82, 73, 77, 197, 80, 82, 69, 86, 73, + 79, 85, 211, 80, 82, 69, 84, 90, 69, 76, 128, 80, 82, 69, 83, 83, 69, + 196, 80, 82, 69, 83, 69, 84, 128, 80, 82, 69, 83, 69, 78, 84, 65, 84, 73, + 79, 206, 80, 82, 69, 83, 67, 82, 73, 80, 84, 73, 79, 206, 80, 82, 69, 80, + 79, 78, 68, 69, 82, 65, 78, 67, 69, 128, 80, 82, 69, 78, 75, 72, 65, 128, + 80, 82, 69, 71, 78, 65, 78, 212, 80, 82, 69, 70, 73, 88, 69, 196, 80, 82, + 69, 70, 65, 67, 197, 80, 82, 69, 67, 73, 80, 73, 84, 65, 84, 69, 128, 80, + 82, 69, 67, 69, 68, 73, 78, 199, 80, 82, 69, 67, 69, 68, 69, 83, 128, 80, + 82, 69, 67, 69, 68, 69, 211, 80, 82, 69, 67, 69, 68, 69, 196, 80, 82, 69, + 67, 69, 68, 69, 128, 80, 82, 69, 67, 69, 68, 197, 80, 82, 65, 89, 69, + 210, 80, 82, 65, 77, 45, 80, 73, 73, 128, 80, 82, 65, 77, 45, 80, 73, + 201, 80, 82, 65, 77, 45, 77, 85, 79, 89, 128, 80, 82, 65, 77, 45, 77, 85, + 79, 217, 80, 82, 65, 77, 45, 66, 85, 79, 78, 128, 80, 82, 65, 77, 45, 66, + 85, 79, 206, 80, 82, 65, 77, 45, 66, 69, 73, 128, 80, 82, 65, 77, 45, 66, + 69, 201, 80, 82, 65, 77, 128, 80, 82, 65, 205, 80, 82, 128, 80, 80, 86, + 128, 80, 80, 77, 128, 80, 80, 65, 128, 80, 79, 89, 128, 80, 79, 88, 128, + 80, 79, 87, 69, 82, 211, 80, 79, 87, 69, 82, 128, 80, 79, 87, 69, 210, + 80, 79, 87, 68, 69, 82, 69, 196, 80, 79, 87, 68, 69, 82, 128, 80, 79, 86, + 89, 83, 72, 69, 128, 80, 79, 86, 89, 83, 72, 197, 80, 79, 86, 79, 68, 78, + 89, 128, 80, 79, 85, 82, 73, 78, 199, 80, 79, 85, 78, 196, 80, 79, 85, + 76, 84, 82, 217, 80, 79, 85, 67, 72, 128, 80, 79, 84, 84, 69, 196, 80, + 79, 84, 65, 84, 79, 128, 80, 79, 84, 65, 66, 76, 197, 80, 79, 212, 80, + 79, 83, 84, 80, 79, 83, 73, 84, 73, 79, 206, 80, 79, 83, 84, 66, 79, 88, + 128, 80, 79, 83, 84, 65, 204, 80, 79, 83, 84, 128, 80, 79, 83, 212, 80, + 79, 83, 83, 69, 83, 83, 73, 79, 78, 128, 80, 79, 83, 83, 69, 83, 83, 73, + 79, 206, 80, 79, 83, 73, 84, 73, 79, 78, 83, 128, 80, 79, 83, 73, 84, 73, + 79, 78, 128, 80, 79, 83, 69, 73, 68, 79, 78, 128, 80, 79, 82, 84, 65, 66, + 76, 197, 80, 79, 82, 82, 69, 67, 84, 85, 83, 128, 80, 79, 82, 82, 69, 67, + 84, 85, 211, 80, 79, 80, 80, 73, 78, 199, 80, 79, 80, 80, 69, 82, 128, + 80, 79, 80, 67, 79, 82, 78, 128, 80, 79, 80, 128, 80, 79, 208, 80, 79, + 79, 68, 76, 69, 128, 80, 79, 79, 128, 80, 79, 78, 68, 79, 128, 80, 79, + 206, 80, 79, 77, 77, 69, 69, 128, 80, 79, 77, 77, 69, 197, 80, 79, 76, + 85, 80, 79, 86, 79, 68, 78, 65, 89, 65, 128, 80, 79, 76, 79, 128, 80, 79, + 76, 78, 65, 89, 65, 128, 80, 79, 76, 76, 85, 128, 80, 79, 76, 75, 85, 76, + 73, 90, 77, 89, 128, 80, 79, 76, 73, 83, 72, 128, 80, 79, 76, 73, 83, + 200, 80, 79, 76, 73, 67, 197, 80, 79, 76, 201, 80, 79, 76, 69, 128, 80, + 79, 76, 197, 80, 79, 75, 82, 89, 84, 73, 69, 128, 80, 79, 75, 79, 74, 73, + 128, 80, 79, 73, 78, 84, 211, 80, 79, 73, 78, 84, 79, 128, 80, 79, 73, + 78, 84, 69, 82, 128, 80, 79, 73, 78, 84, 69, 196, 80, 79, 73, 78, 84, + 128, 80, 79, 73, 78, 212, 80, 79, 69, 84, 82, 217, 80, 79, 69, 84, 73, + 195, 80, 79, 68, 86, 69, 82, 84, 75, 65, 128, 80, 79, 68, 67, 72, 65, 83, + 72, 73, 69, 77, 128, 80, 79, 68, 67, 72, 65, 83, 72, 73, 69, 128, 80, 79, + 68, 67, 72, 65, 83, 72, 73, 197, 80, 79, 68, 65, 84, 85, 83, 128, 80, 79, + 67, 75, 69, 212, 80, 79, 65, 128, 80, 207, 80, 78, 69, 85, 77, 65, 84, + 65, 128, 80, 76, 85, 84, 207, 80, 76, 85, 84, 65, 128, 80, 76, 85, 83, + 45, 77, 73, 78, 85, 211, 80, 76, 85, 83, 128, 80, 76, 85, 82, 65, 76, + 128, 80, 76, 85, 78, 71, 69, 82, 128, 80, 76, 85, 77, 69, 196, 80, 76, + 85, 77, 128, 80, 76, 85, 75, 128, 80, 76, 85, 71, 128, 80, 76, 85, 128, + 80, 76, 79, 87, 128, 80, 76, 79, 80, 72, 85, 128, 80, 76, 72, 65, 85, + 128, 80, 76, 69, 84, 72, 82, 79, 78, 128, 80, 76, 69, 65, 68, 73, 78, + 199, 80, 76, 68, 128, 80, 76, 65, 89, 73, 78, 199, 80, 76, 65, 89, 71, + 82, 79, 85, 78, 196, 80, 76, 65, 84, 69, 128, 80, 76, 65, 83, 84, 73, 67, + 83, 128, 80, 76, 65, 78, 84, 128, 80, 76, 65, 78, 69, 84, 128, 80, 76, + 65, 78, 69, 128, 80, 76, 65, 78, 67, 203, 80, 76, 65, 75, 128, 80, 76, + 65, 71, 73, 79, 211, 80, 76, 65, 67, 69, 72, 79, 76, 68, 69, 82, 128, 80, + 76, 65, 67, 69, 72, 79, 76, 68, 69, 210, 80, 76, 65, 67, 197, 80, 76, 65, + 67, 65, 82, 68, 128, 80, 76, 65, 128, 80, 73, 90, 90, 73, 67, 65, 84, 79, + 128, 80, 73, 90, 90, 65, 128, 80, 73, 88, 128, 80, 73, 87, 82, 128, 80, + 73, 84, 67, 72, 70, 79, 82, 75, 128, 80, 73, 84, 67, 72, 70, 79, 82, 203, + 80, 73, 84, 128, 80, 73, 83, 84, 79, 76, 128, 80, 73, 83, 69, 76, 69, 72, + 128, 80, 73, 83, 67, 69, 83, 128, 80, 73, 82, 73, 71, 128, 80, 73, 82, + 73, 199, 80, 73, 82, 73, 69, 69, 78, 128, 80, 73, 82, 65, 67, 89, 128, + 80, 73, 82, 50, 128, 80, 73, 80, 73, 78, 71, 128, 80, 73, 80, 65, 69, 77, + 71, 66, 73, 69, 69, 128, 80, 73, 80, 65, 69, 77, 66, 65, 128, 80, 73, 80, + 128, 80, 73, 78, 87, 72, 69, 69, 204, 80, 73, 78, 203, 80, 73, 78, 69, + 65, 80, 80, 76, 69, 128, 80, 73, 78, 197, 80, 73, 78, 67, 72, 73, 78, + 199, 80, 73, 78, 67, 72, 69, 196, 80, 73, 78, 65, 84, 65, 128, 80, 73, + 78, 65, 82, 66, 79, 82, 65, 83, 128, 80, 73, 76, 76, 128, 80, 73, 76, + 197, 80, 73, 76, 67, 82, 79, 215, 80, 73, 75, 85, 82, 85, 128, 80, 73, + 75, 79, 128, 80, 73, 71, 128, 80, 73, 199, 80, 73, 69, 88, 128, 80, 73, + 69, 85, 80, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, + 83, 83, 65, 78, 71, 83, 73, 79, 83, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 84, 73, 75, 69, 85, 84, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 84, 72, 73, 69, 85, 84, 72, 128, 80, 73, 69, 85, 80, 45, 83, + 73, 79, 83, 45, 80, 73, 69, 85, 80, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 75, 73, 89, 69, 79, 75, 128, 80, 73, 69, 85, 80, 45, 83, 73, + 79, 83, 45, 67, 73, 69, 85, 67, 128, 80, 73, 69, 85, 80, 45, 82, 73, 69, + 85, 76, 45, 80, 72, 73, 69, 85, 80, 72, 128, 80, 73, 69, 85, 80, 45, 82, + 73, 69, 85, 76, 128, 80, 73, 69, 85, 80, 45, 78, 73, 69, 85, 78, 128, 80, + 73, 69, 85, 80, 45, 77, 73, 69, 85, 77, 128, 80, 73, 69, 85, 80, 45, 75, + 72, 73, 69, 85, 75, 72, 128, 80, 73, 69, 85, 80, 45, 67, 73, 69, 85, 67, + 128, 80, 73, 69, 85, 80, 45, 67, 72, 73, 69, 85, 67, 72, 128, 80, 73, 69, + 85, 208, 80, 73, 69, 84, 128, 80, 73, 69, 80, 128, 80, 73, 69, 69, 84, + 128, 80, 73, 69, 69, 81, 128, 80, 73, 69, 67, 69, 128, 80, 73, 69, 128, + 80, 73, 67, 84, 85, 82, 69, 128, 80, 73, 67, 75, 85, 208, 80, 73, 67, 75, + 69, 84, 128, 80, 73, 67, 75, 128, 80, 73, 65, 83, 85, 84, 79, 82, 85, + 128, 80, 73, 65, 83, 84, 82, 197, 80, 73, 65, 83, 77, 193, 80, 73, 65, + 78, 79, 128, 80, 201, 80, 72, 87, 65, 128, 80, 72, 85, 84, 72, 65, 79, + 128, 80, 72, 85, 210, 80, 72, 85, 78, 71, 128, 80, 72, 82, 65, 83, 69, + 128, 80, 72, 79, 78, 69, 83, 128, 80, 72, 79, 76, 85, 83, 128, 80, 72, + 79, 69, 78, 73, 67, 73, 65, 206, 80, 72, 79, 65, 128, 80, 72, 79, 128, + 80, 72, 207, 80, 72, 78, 65, 69, 203, 80, 72, 73, 78, 84, 72, 85, 128, + 80, 72, 73, 76, 79, 83, 79, 80, 72, 69, 82, 211, 80, 72, 73, 76, 73, 80, + 80, 73, 78, 197, 80, 72, 73, 69, 85, 80, 72, 45, 84, 72, 73, 69, 85, 84, + 72, 128, 80, 72, 73, 69, 85, 80, 72, 45, 83, 73, 79, 83, 128, 80, 72, 73, + 69, 85, 80, 72, 45, 80, 73, 69, 85, 80, 128, 80, 72, 73, 69, 85, 80, 72, + 45, 72, 73, 69, 85, 72, 128, 80, 72, 73, 69, 85, 80, 200, 80, 72, 73, + 128, 80, 72, 201, 80, 72, 69, 69, 128, 80, 72, 69, 128, 80, 72, 65, 83, + 69, 45, 198, 80, 72, 65, 83, 69, 45, 195, 80, 72, 65, 83, 69, 45, 194, + 80, 72, 65, 83, 69, 45, 193, 80, 72, 65, 82, 89, 78, 71, 69, 65, 204, 80, + 72, 65, 82, 128, 80, 72, 65, 78, 128, 80, 72, 65, 77, 128, 80, 72, 65, + 73, 83, 84, 79, 211, 80, 72, 65, 71, 83, 45, 80, 193, 80, 72, 65, 66, + 128, 80, 72, 65, 65, 82, 75, 65, 65, 128, 80, 72, 65, 65, 128, 80, 71, + 128, 80, 70, 128, 80, 69, 85, 88, 128, 80, 69, 85, 84, 65, 69, 128, 80, + 69, 85, 84, 128, 80, 69, 84, 82, 201, 80, 69, 84, 65, 83, 84, 79, 75, 79, + 85, 70, 73, 83, 77, 65, 128, 80, 69, 84, 65, 83, 84, 73, 128, 80, 69, 84, + 65, 83, 77, 65, 128, 80, 69, 84, 65, 76, 76, 69, 196, 80, 69, 83, 79, 128, 80, 69, 83, 207, 80, 69, 83, 72, 50, 128, 80, 69, 83, 72, 178, 80, 69, 83, 69, 84, 193, 80, 69, 211, 80, 69, 82, 84, 72, 207, 80, 69, 82, 83, 80, 69, 67, 84, 73, 86, 69, 128, 80, 69, 82, 83, 79, 78, 65, 204, 80, @@ -7120,9 +7122,9 @@ static const unsigned int lexicon_offset[] = { 593, 598, 606, 615, 618, 625, 629, 633, 637, 642, 645, 652, 659, 666, 671, 676, 683, 692, 694, 703, 707, 715, 719, 727, 281, 736, 749, 753, 758, 761, 765, 769, 771, 776, 786, 792, 796, 802, 806, 809, 814, 823, - 828, 832, 774, 838, 846, 854, 859, 868, 877, 885, 891, 902, 905, 910, + 828, 832, 774, 838, 846, 857, 865, 870, 879, 888, 896, 902, 905, 910, 918, 925, 928, 938, 943, 949, 953, 957, 960, 967, 974, 977, 981, 984, - 657, 990, 993, 996, 1002, 1007, 1016, 1021, 1025, 1028, 1032, 1035, 1041, + 657, 990, 993, 996, 1002, 1007, 1016, 1021, 1027, 1031, 1034, 1038, 1041, 1046, 1050, 617, 1055, 1058, 1067, 1070, 1075, 1080, 1086, 1091, 1096, 1101, 1105, 1110, 1116, 1121, 1126, 1130, 1136, 1141, 1146, 1151, 1155, 1160, 1165, 1170, 1176, 1182, 1188, 1193, 1197, 1202, 1207, 1212, 1216, @@ -7177,7 +7179,7 @@ static const unsigned int lexicon_offset[] = { 2172, 4008, 4012, 4015, 4021, 4026, 4032, 4038, 4043, 4050, 4054, 4058, 4062, 4067, 4072, 4077, 4082, 4087, 4092, 634, 616, 1264, 4097, 4104, 4111, 4117, 4126, 4131, 4138, 4145, 4150, 4156, 4162, 4167, 4172, 4176, - 4182, 4189, 4194, 4198, 4202, 2181, 4208, 4216, 4222, 4230, 863, 4236, + 4182, 4189, 4194, 4198, 4202, 2181, 4208, 4216, 4222, 4230, 874, 4236, 4244, 4255, 4259, 4269, 4275, 4280, 4285, 4290, 4295, 2186, 4300, 4305, 4320, 4326, 4333, 4344, 4354, 4360, 4365, 4371, 4377, 4380, 4383, 4387, 4392, 4395, 4402, 4411, 4416, 4420, 4424, 4428, 4432, 4437, 4443, 4454, @@ -7355,9505 +7357,9508 @@ static const unsigned int lexicon_offset[] = { 15923, 15931, 15938, 15949, 15954, 15964, 15973, 15977, 15980, 15987, 15997, 16006, 16013, 16017, 16024, 16030, 16035, 16040, 16044, 15590, 16053, 16057, 16063, 16067, 16072, 16076, 16083, 16090, 16094, 16103, - 16111, 16119, 16126, 16134, 16146, 16157, 16167, 16174, 16180, 16189, - 16200, 16209, 16221, 16233, 16245, 16255, 16264, 16274, 16283, 16291, - 16298, 16308, 16317, 16325, 16329, 16334, 16340, 16346, 16351, 16356, - 16360, 16365, 16370, 16375, 16380, 16385, 16390, 16395, 8738, 16400, - 16402, 16406, 16411, 16417, 16424, 16430, 16436, 16445, 16449, 16455, - 16463, 16470, 16479, 16488, 16497, 16506, 16515, 16524, 16533, 16542, - 16552, 16562, 16571, 16577, 16584, 16591, 16597, 16611, 16617, 16624, - 16632, 16641, 16649, 16655, 16664, 16670, 16679, 16690, 16696, 16706, - 16714, 16721, 16729, 16737, 16744, 16753, 16766, 16775, 16783, 16790, - 16803, 16809, 16815, 16825, 16834, 16843, 16852, 16860, 16865, 16869, - 16875, 16881, 16886, 16893, 16900, 10242, 16905, 16910, 16917, 16925, - 16930, 16942, 16949, 16954, 16966, 14943, 16971, 16977, 16985, 16991, - 16996, 17004, 17012, 17019, 17027, 17034, 17040, 17046, 17054, 17062, - 17068, 17076, 17082, 17087, 17093, 17100, 17106, 17111, 17115, 17126, - 17134, 17142, 17148, 17153, 17160, 17169, 17175, 17180, 17188, 17195, - 17204, 17218, 4413, 17222, 17227, 17232, 17238, 17243, 17248, 17252, - 17257, 17262, 17267, 8737, 17272, 17277, 17282, 17287, 17292, 17296, - 17301, 17306, 17311, 17316, 17322, 17328, 14216, 17333, 17339, 17344, - 17349, 17354, 10643, 17359, 17364, 17369, 17374, 17379, 17393, 17410, - 17428, 17440, 17453, 17470, 17486, 17503, 17513, 17532, 17543, 17554, - 17565, 2803, 17576, 17587, 17598, 17615, 17626, 17637, 17642, 10648, - 17647, 17651, 2483, 17655, 17661, 17664, 17670, 17678, 17686, 17692, - 17701, 17708, 17713, 17721, 17729, 17736, 17740, 17745, 17751, 17758, - 17766, 17773, 17785, 17792, 17798, 17806, 17811, 17817, 17823, 17828, - 13971, 17835, 17839, 17848, 17854, 17859, 17867, 17876, 17884, 17891, - 17897, 17905, 17912, 17918, 17924, 17931, 17938, 17944, 17950, 17954, - 17963, 17971, 17976, 17986, 17993, 17999, 18007, 18013, 18021, 18029, - 18036, 18049, 18053, 18060, 18069, 18078, 18087, 18095, 18105, 18112, - 18117, 3969, 18124, 18129, 1248, 18133, 18140, 17273, 18144, 18150, - 18154, 18162, 18174, 18179, 18186, 18192, 18197, 18204, 17278, 18208, - 18212, 18220, 18225, 18229, 17283, 18233, 17288, 18237, 18244, 18249, - 18253, 18260, 18264, 18267, 18275, 18282, 18287, 18295, 18299, 18306, - 18323, 18332, 18341, 18345, 18348, 18354, 18362, 18368, 18373, 18377, - 18382, 18387, 18392, 18397, 18402, 18407, 4047, 18412, 18414, 18422, - 18429, 18439, 18451, 18456, 18460, 18466, 18471, 18479, 18483, 18489, - 18494, 18500, 18503, 18510, 18518, 18525, 18531, 18536, 18542, 18547, - 18554, 18560, 18565, 18575, 18584, 18591, 18596, 18600, 18606, 18612, - 18616, 18623, 18629, 18634, 18640, 18648, 18656, 18663, 18669, 18675, - 18680, 18686, 18692, 18700, 18705, 18710, 18718, 18724, 18730, 18735, - 18742, 18747, 18751, 18757, 18763, 18768, 18774, 18781, 18786, 18792, - 18795, 18801, 18812, 18818, 18827, 18830, 18834, 18838, 18852, 18865, - 18877, 18883, 18888, 18895, 18901, 18907, 18918, 18930, 18942, 18952, - 18961, 18969, 18976, 18987, 18997, 19007, 19015, 19018, 17302, 19023, - 19028, 19035, 17307, 17458, 19043, 19056, 19071, 19082, 17475, 19100, - 19113, 19126, 19137, 12546, 19148, 19161, 19180, 19191, 19202, 19213, - 2824, 19226, 19230, 19238, 19249, 19260, 19268, 19283, 19298, 19309, - 19316, 19322, 19330, 19334, 19340, 19344, 19347, 19360, 19372, 19382, - 19390, 19397, 19405, 19415, 19420, 19427, 19432, 19439, 19450, 19460, - 19466, 19471, 19476, 17312, 19480, 19486, 19493, 19499, 19504, 19509, - 19514, 19518, 17317, 17323, 19522, 17329, 19527, 19535, 19540, 19544, - 19551, 19559, 19566, 19575, 19582, 19586, 19590, 19595, 19600, 19605, - 19610, 19615, 10487, 19620, 19622, 19627, 19632, 19638, 19643, 19648, - 19653, 19658, 19662, 19668, 19674, 19679, 19685, 19690, 19695, 19699, - 19705, 19710, 19714, 19719, 19724, 19736, 19741, 19747, 19752, 19757, - 19763, 19769, 19774, 19779, 19784, 19791, 19797, 19808, 19815, 19824, - 19829, 19833, 279, 19837, 19845, 19850, 19856, 19862, 19867, 19874, - 19881, 19887, 19892, 19898, 19903, 19908, 19913, 19920, 19930, 19938, - 19943, 19948, 19955, 19961, 19970, 19980, 19990, 20004, 20018, 20032, - 20046, 20061, 20076, 20093, 20111, 20124, 20130, 20135, 20140, 20144, - 20152, 20157, 20165, 20171, 20177, 20182, 20187, 20191, 20197, 20202, - 20206, 20213, 20218, 20222, 20233, 20239, 20244, 20249, 20256, 20261, - 20265, 3927, 20270, 20276, 20283, 17334, 20289, 20293, 20299, 20304, - 20309, 20313, 20319, 20324, 20329, 20336, 20341, 15730, 20345, 20350, - 20354, 20359, 20365, 20371, 20378, 20388, 20396, 20403, 20408, 20412, - 20421, 20429, 20436, 20443, 20449, 20454, 20460, 20465, 20470, 20476, - 20481, 20487, 20492, 20498, 20504, 20511, 20517, 20522, 20527, 10713, - 20536, 20539, 20547, 20553, 20558, 20563, 20573, 20580, 20586, 20591, - 20596, 20602, 20607, 20613, 20618, 20624, 20631, 20637, 20643, 20648, - 20656, 20663, 20668, 20673, 20679, 20684, 20688, 20697, 20708, 20715, - 20722, 20730, 20737, 20744, 20749, 20754, 20760, 20765, 20773, 20779, - 20785, 20790, 20797, 20803, 20808, 20812, 20818, 20823, 20828, 20832, - 20837, 1321, 8762, 3112, 20841, 20845, 20849, 20853, 20857, 20861, 20864, - 20869, 20876, 20884, 20894, 20905, 20915, 20926, 20938, 20949, 20959, - 20970, 20982, 20993, 21005, 21018, 21030, 21041, 21051, 21062, 21074, - 21085, 21098, 21110, 21121, 21133, 21146, 21158, 21171, 21185, 21198, - 21210, 21221, 21231, 21242, 21254, 21265, 21277, 21290, 21302, 21313, - 21325, 21338, 21351, 21365, 21378, 21390, 21401, 21413, 21426, 21438, - 21451, 21465, 21478, 21490, 21503, 21517, 21530, 21544, 21558, 21571, - 21583, 21594, 21604, 17345, 21611, 21617, 21627, 21635, 21642, 21650, - 21660, 21669, 21682, 21687, 21692, 21700, 21707, 15839, 15848, 21714, - 21724, 21739, 21745, 21752, 21759, 21766, 21772, 21778, 21789, 21797, - 21805, 21815, 21825, 21834, 17350, 21843, 21849, 21855, 21864, 21872, - 21880, 21885, 21894, 21902, 21914, 21924, 21934, 21944, 21953, 21965, - 21975, 21985, 21996, 22003, 22008, 22015, 22027, 22039, 22051, 22063, - 22075, 22087, 22099, 22111, 22123, 22135, 22146, 22158, 22170, 22182, - 22194, 22206, 22218, 22230, 22242, 22254, 22266, 22277, 22289, 22301, - 22313, 22325, 22337, 22349, 22361, 22373, 22385, 22397, 22408, 22420, - 22432, 22444, 22456, 22468, 22480, 22492, 22504, 22516, 22528, 22539, + 16111, 16119, 16126, 16134, 16146, 16158, 16169, 16179, 16186, 16192, + 16201, 16212, 16221, 16233, 16245, 16257, 16267, 16276, 16286, 16295, + 16303, 16310, 16320, 16329, 16337, 16341, 16346, 16352, 16358, 16363, + 16368, 16372, 16377, 16382, 16387, 16392, 16397, 16402, 16407, 8738, + 16412, 16414, 16418, 16423, 16429, 16436, 16442, 16448, 16457, 16461, + 16467, 16475, 16482, 16491, 16500, 16509, 16518, 16527, 16536, 16545, + 16554, 16564, 16574, 16583, 16589, 16596, 16603, 16609, 16623, 16629, + 16636, 16644, 16653, 16661, 16667, 16676, 16682, 16691, 16702, 16708, + 16718, 16726, 16733, 16741, 16749, 16756, 16765, 16778, 16787, 16795, + 16802, 16815, 16821, 16827, 16837, 16846, 16855, 16864, 16872, 16877, + 16881, 16887, 16893, 16898, 16905, 16912, 10242, 16917, 16922, 16929, + 16937, 16942, 16954, 16961, 16966, 16978, 14943, 16983, 16989, 16997, + 17003, 17008, 17016, 17024, 17031, 17039, 17046, 17052, 17058, 17066, + 17074, 17080, 17088, 17094, 17099, 17105, 17112, 17118, 17123, 17127, + 17138, 17146, 17154, 17160, 17165, 17172, 17181, 17187, 17192, 17200, + 17207, 17216, 17230, 4413, 17234, 17239, 17244, 17250, 17255, 17260, + 17264, 17269, 17274, 17279, 8737, 17284, 17289, 17294, 17299, 17304, + 17308, 17313, 17318, 17323, 17328, 17334, 17340, 14216, 17345, 17351, + 17356, 17361, 17366, 10643, 17371, 17376, 17381, 17386, 17391, 17405, + 17422, 17440, 17452, 17465, 17482, 17498, 17515, 17525, 17544, 17555, + 17566, 17577, 2803, 17588, 17599, 17610, 17627, 17638, 17649, 17654, + 10648, 17659, 17663, 2483, 17667, 17673, 17676, 17682, 17690, 17698, + 17704, 17713, 17720, 17725, 17733, 17741, 17748, 17752, 17757, 17763, + 17770, 17778, 17785, 17797, 17804, 17810, 17818, 17823, 17829, 17835, + 17840, 13971, 17847, 17851, 17860, 17866, 17871, 17879, 17888, 17896, + 17903, 17909, 17917, 17924, 17930, 17936, 17943, 17950, 17956, 17962, + 17966, 17975, 17983, 17988, 17998, 18005, 18011, 18019, 18025, 18033, + 18041, 18048, 18061, 18065, 18072, 18081, 18090, 18099, 18107, 18117, + 18124, 18129, 3969, 18136, 18141, 1248, 18145, 18152, 17285, 18156, + 18162, 18166, 18174, 18186, 18191, 18198, 18204, 18209, 18216, 17290, + 18220, 18224, 18232, 18237, 18241, 17295, 18245, 17300, 18249, 18256, + 18261, 18265, 18272, 18276, 18279, 18287, 18294, 18299, 18307, 18311, + 18318, 18335, 18344, 18353, 18357, 18360, 18366, 18374, 18380, 18385, + 18389, 18394, 18399, 18404, 18409, 18414, 18419, 4047, 18424, 18426, + 18434, 18441, 18451, 18463, 18468, 18472, 18478, 18483, 18491, 18495, + 18501, 18506, 18512, 18515, 18522, 18530, 18537, 18543, 18548, 18554, + 18559, 18566, 18572, 18577, 18587, 18596, 18603, 18608, 18612, 18618, + 18624, 18628, 18635, 18641, 18646, 18652, 18660, 18668, 18675, 18681, + 18687, 18692, 18698, 18704, 18712, 18717, 18722, 18730, 18736, 18742, + 18747, 18754, 18759, 18763, 18769, 18775, 18780, 18786, 18793, 18798, + 18804, 18807, 18813, 18824, 18830, 18839, 18842, 18846, 18850, 18864, + 18877, 18889, 18895, 18900, 18907, 18913, 18919, 18930, 18942, 18954, + 18964, 18973, 18981, 18988, 18999, 19009, 19019, 19027, 19030, 17314, + 19035, 19040, 19047, 17319, 17470, 19055, 19068, 19083, 19094, 17487, + 19112, 19125, 19138, 19149, 12546, 19160, 19173, 19192, 19203, 19214, + 19225, 2824, 19238, 19242, 19250, 19261, 19272, 19280, 19295, 19310, + 19321, 19328, 19334, 19342, 19346, 19352, 19356, 19359, 19372, 19384, + 19394, 19402, 19409, 19417, 19427, 19432, 19439, 19444, 19451, 19462, + 19472, 19478, 19483, 19488, 17324, 19492, 19498, 19505, 19511, 19516, + 19521, 19526, 19530, 17329, 17335, 19534, 17341, 19539, 19547, 19552, + 19556, 19563, 19571, 19578, 19587, 19594, 19598, 19602, 19607, 19612, + 19617, 19622, 19627, 10487, 19632, 19634, 19639, 19644, 19650, 19655, + 19660, 19665, 19670, 19674, 19680, 19686, 19691, 19697, 19702, 19707, + 19711, 19717, 19722, 19726, 19731, 19736, 19748, 19753, 19759, 19764, + 19769, 19775, 19781, 19786, 19791, 19796, 19803, 19809, 19820, 19827, + 19836, 19841, 19845, 279, 19849, 19857, 19862, 19868, 19874, 19879, + 19886, 19893, 19899, 19904, 19910, 19915, 19920, 19925, 19932, 19942, + 19950, 19955, 19960, 19967, 19973, 19982, 19992, 20002, 20016, 20030, + 20044, 20058, 20073, 20088, 20105, 20123, 20136, 20142, 20147, 20152, + 20156, 20164, 20169, 20177, 20183, 20189, 20194, 20199, 20203, 20209, + 20214, 20218, 20225, 20230, 20234, 20245, 20251, 20256, 20261, 20268, + 20273, 20277, 3927, 20282, 20288, 20295, 17346, 20301, 20305, 20311, + 20316, 20321, 20325, 20331, 20336, 20341, 20348, 20353, 15730, 20357, + 20362, 20366, 20371, 20377, 20383, 20390, 20400, 20408, 20415, 20420, + 20424, 20433, 20441, 20448, 20455, 20461, 20466, 20472, 20477, 20482, + 20488, 20493, 20499, 20504, 20510, 20516, 20523, 20529, 20534, 20539, + 10713, 20548, 20551, 20559, 20565, 20570, 20575, 20585, 20592, 20598, + 20603, 20608, 20614, 20619, 20625, 20630, 20636, 20643, 20649, 20655, + 20660, 20668, 20675, 20680, 20685, 20691, 20696, 20700, 20709, 20720, + 20727, 20734, 20742, 20749, 20756, 20761, 20766, 20772, 20777, 20785, + 20791, 20797, 20802, 20809, 20815, 20820, 20824, 20830, 20835, 20840, + 20844, 20849, 1321, 8762, 3112, 20853, 20857, 20861, 20865, 20869, 20873, + 20876, 20881, 20888, 20896, 20906, 20917, 20927, 20938, 20950, 20961, + 20971, 20982, 20994, 21005, 21017, 21030, 21042, 21053, 21063, 21074, + 21086, 21097, 21110, 21122, 21133, 21145, 21158, 21170, 21183, 21197, + 21210, 21222, 21233, 21243, 21254, 21266, 21277, 21289, 21302, 21314, + 21325, 21337, 21350, 21363, 21377, 21390, 21402, 21413, 21425, 21438, + 21450, 21463, 21477, 21490, 21502, 21515, 21529, 21542, 21556, 21570, + 21583, 21595, 21606, 21616, 17357, 21623, 21629, 21639, 21647, 21654, + 21662, 21672, 21681, 21694, 21699, 21704, 21712, 21719, 15839, 15848, + 21726, 21736, 21751, 21757, 21764, 21771, 21778, 21784, 21790, 21801, + 21809, 21817, 21827, 21837, 21846, 17362, 21855, 21861, 21867, 21876, + 21884, 21892, 21897, 21906, 21914, 21926, 21936, 21946, 21956, 21965, + 21977, 21987, 21997, 22008, 22015, 22020, 22027, 22039, 22051, 22063, + 22075, 22087, 22099, 22111, 22123, 22135, 22147, 22158, 22170, 22182, + 22194, 22206, 22218, 22230, 22242, 22254, 22266, 22278, 22289, 22301, + 22313, 22325, 22337, 22349, 22361, 22373, 22385, 22397, 22409, 22420, + 22432, 22444, 22456, 22468, 22480, 22492, 22504, 22516, 22528, 22540, 22551, 22563, 22575, 22587, 22599, 22611, 22623, 22635, 22647, 22659, - 22670, 22682, 22694, 22706, 22718, 22730, 22742, 22754, 22766, 22778, - 22790, 22801, 22813, 22825, 22837, 22849, 22861, 22873, 22885, 22897, - 22909, 22921, 22932, 22944, 22956, 22968, 22980, 22993, 23006, 23019, - 23032, 23045, 23058, 23071, 23083, 23096, 23109, 23122, 23135, 23148, - 23161, 23174, 23187, 23200, 23213, 23225, 23238, 23251, 23264, 23277, - 23290, 23303, 23316, 23329, 23342, 23355, 23367, 23380, 23393, 23406, - 23419, 23432, 23445, 23458, 23471, 23484, 23497, 23509, 23522, 23535, - 23548, 23561, 23574, 23587, 23600, 23613, 23626, 23639, 23651, 23664, - 23677, 23690, 23703, 23716, 23729, 23742, 23755, 23768, 23781, 23793, - 23804, 23817, 23830, 23843, 23856, 23869, 23882, 23895, 23908, 23921, - 23934, 23946, 23959, 23972, 23985, 23998, 24011, 24024, 24037, 24050, - 24063, 24076, 24088, 24101, 24114, 24127, 24140, 24153, 24166, 24179, - 24192, 24205, 24218, 24230, 24243, 24256, 24269, 24282, 24295, 24308, - 24321, 24334, 24347, 24360, 24372, 24385, 24398, 24411, 24424, 24437, - 24450, 24463, 24476, 24489, 24502, 24514, 24527, 24540, 24553, 24566, - 24579, 24592, 24605, 24618, 24631, 24644, 24656, 24669, 24682, 24695, - 24708, 24721, 24734, 24747, 24760, 24773, 24786, 24798, 24811, 24824, - 24837, 24850, 24863, 24876, 24889, 24902, 24915, 24928, 24940, 24953, - 24966, 24979, 24992, 25005, 25018, 25031, 25044, 25057, 25070, 25082, - 25095, 25108, 25121, 25134, 25147, 25160, 25173, 25186, 25199, 25212, - 25224, 25235, 25244, 25252, 25260, 25267, 25273, 25277, 25283, 25289, - 25298, 25306, 25311, 25317, 25322, 25326, 25335, 10492, 25346, 25352, - 25359, 25367, 25374, 13145, 13159, 25381, 25388, 25397, 25402, 25407, - 25414, 25419, 25424, 8778, 8784, 8790, 25429, 25434, 25437, 25442, 25450, - 25457, 25464, 25476, 25483, 25489, 25498, 25503, 25512, 25521, 25527, - 25535, 25544, 25548, 25554, 25559, 25569, 25576, 25582, 25590, 25596, - 25603, 25609, 25619, 25628, 25632, 25639, 25643, 25648, 25654, 25662, - 25666, 25676, 17360, 25685, 25691, 25695, 25704, 25713, 25723, 25729, - 17365, 25736, 25743, 25754, 25762, 25772, 25781, 25789, 10207, 25797, - 25802, 25808, 25813, 25817, 25821, 25825, 11301, 25830, 25838, 25845, - 25854, 25862, 25869, 25876, 25885, 25891, 1062, 25898, 25904, 25908, - 25914, 25921, 25927, 25935, 25941, 25948, 25954, 25960, 25969, 25973, - 25981, 25989, 25996, 26005, 26012, 26017, 26021, 26031, 26042, 26053, - 26058, 26063, 26069, 26078, 26083, 26096, 9000, 26100, 26106, 26112, - 26118, 26123, 26131, 26135, 26142, 26151, 26156, 17638, 26164, 26168, - 26180, 26185, 26189, 26192, 26198, 26204, 26210, 26215, 26220, 26224, - 26227, 26238, 26243, 10769, 26250, 26255, 26260, 26265, 26270, 26275, - 26280, 26285, 26290, 10774, 26295, 26300, 26305, 26310, 26315, 26320, - 26325, 26330, 26335, 26340, 26345, 26350, 26356, 26361, 26366, 26371, - 26376, 26381, 26386, 26391, 26396, 26401, 26407, 26413, 26418, 26423, - 26428, 26433, 26438, 26443, 26448, 26453, 26458, 26464, 26469, 26474, - 26479, 26485, 26491, 26496, 26501, 26506, 26511, 26516, 26521, 26526, - 26531, 26537, 26542, 26547, 26552, 26557, 26563, 26568, 26573, 26577, - 1244, 145, 26585, 26589, 26593, 26597, 26602, 26606, 15736, 2409, 26610, - 26615, 26619, 26624, 26628, 26633, 26637, 26643, 26648, 26652, 26656, - 26664, 26668, 26672, 26679, 26684, 26689, 26693, 26699, 26704, 26708, - 26713, 26718, 26722, 26729, 26736, 26743, 26748, 26752, 26756, 26761, - 26765, 26768, 26774, 26787, 26792, 26798, 26807, 26812, 11049, 26817, - 26826, 26831, 26834, 26838, 26843, 26848, 26853, 26858, 26863, 2920, - 2925, 26868, 26874, 26878, 26884, 3888, 26889, 26894, 26899, 26905, - 26910, 16686, 26915, 26920, 26925, 26930, 26936, 26941, 26946, 26952, - 26957, 26961, 26966, 26971, 26976, 26981, 26986, 26990, 26995, 26999, - 27004, 27009, 27014, 27019, 27023, 27028, 27032, 27037, 27042, 27047, - 26962, 3121, 26967, 27052, 27060, 27067, 11395, 27079, 27087, 27097, - 27115, 27134, 27143, 27151, 26972, 27158, 27163, 27171, 26977, 27176, - 27181, 27189, 27194, 27199, 27203, 19858, 27208, 27216, 27221, 27225, - 27232, 27238, 27247, 27251, 27259, 27265, 27269, 27272, 20692, 27279, - 27283, 27287, 27292, 27298, 27305, 27310, 10234, 27314, 27319, 27324, - 27329, 27334, 27339, 1663, 1668, 27344, 27350, 27356, 27361, 27365, - 27369, 27373, 27377, 27381, 27385, 27389, 27393, 25470, 27396, 27403, - 27411, 27417, 27423, 27428, 27433, 27439, 27443, 27448, 27455, 16586, - 16593, 27461, 27473, 27476, 27483, 27487, 19883, 27494, 27502, 27513, - 27522, 27535, 27545, 27559, 27571, 27585, 27598, 27610, 27620, 27632, - 27638, 27653, 27677, 27695, 27714, 27727, 27741, 27759, 27775, 27792, - 27810, 27821, 27840, 27857, 27877, 27895, 27907, 27921, 27935, 27947, - 27964, 27983, 28001, 28013, 28031, 28050, 17518, 28063, 28083, 28095, - 12577, 28107, 28112, 28117, 28122, 28131, 28137, 28142, 28146, 28153, - 28159, 28163, 28168, 28173, 28178, 28183, 28188, 28193, 2506, 28198, - 28204, 28208, 28211, 28222, 28226, 28229, 28237, 28243, 14882, 28247, - 28256, 28267, 28273, 28279, 28294, 28303, 28311, 28318, 28323, 28327, - 28334, 28340, 28349, 28357, 28364, 28374, 28383, 28393, 28398, 28407, - 28416, 28427, 28438, 28448, 28465, 4557, 28475, 28479, 28489, 28497, - 28507, 28518, 28524, 28529, 28539, 28547, 28554, 28560, 28567, 28572, - 27010, 28576, 28585, 28589, 28592, 28597, 28605, 28612, 28621, 28629, - 28637, 28645, 28655, 28664, 28670, 28676, 28682, 28686, 27015, 27020, - 28690, 28700, 28710, 28720, 28728, 28735, 28745, 28753, 28761, 28767, - 28775, 798, 28784, 17725, 649, 28798, 28807, 28815, 28826, 28837, 28847, - 28856, 28868, 28877, 28886, 28893, 28899, 28909, 28918, 28927, 28935, - 28943, 28953, 28961, 28969, 28976, 28982, 28987, 28992, 28997, 8156, - 29002, 29005, 29009, 29014, 29022, 29028, 29033, 29037, 3751, 27033, - 29045, 27038, 29051, 29057, 29063, 29068, 29073, 29077, 29085, 29091, - 29097, 29101, 3912, 29109, 29114, 29119, 29123, 29127, 11681, 29134, - 29142, 29156, 29163, 29170, 29176, 11690, 11696, 29184, 29192, 29199, - 29204, 29209, 27043, 29215, 29226, 29235, 19031, 29243, 29248, 2755, - 29253, 29264, 29270, 29275, 29279, 29283, 29286, 29293, 29300, 29306, - 29314, 29321, 29327, 29331, 8196, 29336, 29340, 29344, 29352, 29357, - 29362, 29367, 1696, 29372, 29377, 29382, 29387, 29392, 29397, 29402, - 29407, 29412, 29417, 29422, 29427, 29432, 29437, 29443, 29448, 29453, - 29458, 29463, 29468, 29473, 29479, 29484, 29489, 29494, 29499, 29504, - 29509, 29514, 29520, 29526, 29531, 29537, 29542, 29547, 5, 29553, 29557, - 29561, 29565, 29570, 29574, 29578, 29582, 29586, 29591, 29595, 29600, - 29604, 29607, 29611, 29616, 29620, 29625, 29629, 29633, 29637, 29642, - 29646, 29650, 29660, 29665, 29669, 29673, 29678, 29683, 29692, 29697, - 29702, 29706, 29710, 29719, 29732, 29744, 29753, 29762, 29767, 29773, - 29778, 29782, 29786, 29796, 29805, 29813, 29819, 29824, 29828, 29835, - 29842, 29852, 29861, 29869, 12934, 29877, 29884, 29892, 29901, 29910, - 29918, 29928, 29933, 29937, 29941, 29944, 29946, 29950, 29954, 29959, - 29964, 29968, 29972, 29975, 29979, 29982, 29986, 29989, 29992, 29996, - 30002, 30006, 30010, 30014, 30018, 30023, 30028, 30033, 30037, 30040, - 30045, 30051, 30056, 30062, 30067, 30071, 30077, 30081, 30085, 30090, - 30094, 30099, 30104, 30108, 30112, 30119, 30123, 30126, 30130, 30134, - 30140, 30145, 30151, 30155, 30159, 30164, 30171, 30177, 30181, 30190, - 30194, 30198, 30201, 30207, 30212, 30218, 1385, 1748, 30223, 30228, - 30233, 30238, 30243, 30248, 30253, 2213, 827, 30258, 30261, 30265, 30269, - 30274, 30278, 17737, 30282, 30287, 30292, 30296, 30299, 30304, 30308, - 30313, 30317, 17741, 30322, 30325, 30328, 30334, 30338, 30343, 30347, - 30360, 30368, 30372, 30375, 30383, 30392, 30399, 30404, 30410, 30416, - 30424, 30431, 30438, 30442, 30446, 30450, 30455, 30460, 30464, 30472, - 30477, 30484, 30496, 30507, 30512, 30516, 30523, 30527, 30532, 30538, - 30541, 30546, 30551, 30558, 30562, 30566, 30569, 30575, 8900, 2413, - 30579, 30584, 30600, 11100, 30620, 30629, 30645, 30649, 30656, 30659, - 30665, 30675, 30681, 30690, 30699, 30714, 30725, 30737, 30748, 30756, - 30765, 30771, 30780, 30790, 30800, 30811, 30822, 30832, 30841, 30848, - 30857, 30865, 30872, 30879, 30886, 30894, 30901, 30908, 30921, 30928, - 30936, 30943, 30949, 30954, 30963, 30970, 30976, 30981, 30989, 30997, - 31004, 31011, 28499, 31023, 31035, 31049, 31057, 31065, 31073, 31080, - 31092, 31101, 31110, 31118, 31126, 31134, 31141, 31147, 31156, 31164, - 31174, 31183, 31193, 31202, 31211, 31219, 31224, 31228, 31231, 31235, - 31239, 31243, 31247, 31251, 31257, 31263, 31268, 31276, 31283, 31291, - 31298, 10806, 17799, 31306, 31313, 31318, 31325, 31331, 31337, 31344, - 14024, 31351, 31354, 31366, 31374, 31380, 31385, 31389, 31400, 31410, - 31420, 11620, 31429, 31438, 31446, 31456, 31465, 31472, 31479, 31487, - 31491, 17818, 31494, 31501, 31505, 4501, 31511, 31514, 31521, 31527, - 31541, 31546, 31554, 31560, 31571, 31578, 31584, 31590, 31594, 31599, - 31603, 31612, 31619, 31625, 8953, 31632, 31640, 31647, 31653, 31658, - 31664, 31670, 31680, 31692, 31703, 31713, 11252, 31721, 31727, 17836, - 31731, 31733, 31236, 11633, 31742, 31747, 31753, 31763, 31768, 31775, - 31783, 31789, 31794, 31799, 31804, 31808, 31813, 31820, 31826, 31835, - 31843, 31847, 31854, 31864, 31870, 31879, 31885, 31892, 4771, 31898, - 31904, 31909, 31916, 31928, 31939, 31944, 31952, 31956, 31966, 31972, - 31976, 31981, 31991, 32000, 32004, 32011, 32019, 32026, 32032, 32037, - 32045, 32052, 32057, 32064, 32076, 32085, 32089, 32097, 15656, 32101, - 32111, 32115, 32123, 32130, 32137, 30379, 32148, 32153, 32157, 32164, - 32171, 26695, 31161, 32176, 32180, 32183, 27827, 32188, 32202, 32218, - 32236, 32255, 32272, 32290, 27846, 32307, 32327, 27863, 32339, 32351, - 19087, 32363, 27883, 32377, 32389, 12590, 32403, 32408, 32413, 32418, - 32424, 32430, 32436, 32440, 32448, 32454, 32461, 32466, 32476, 32483, - 32489, 12128, 32495, 32497, 32502, 32510, 32514, 31816, 32520, 32527, - 13866, 13876, 32534, 32541, 32551, 32556, 32560, 32563, 32569, 32577, - 32589, 32599, 32615, 32628, 32642, 19105, 32656, 32663, 32667, 32670, - 32675, 32679, 32686, 32693, 32700, 32707, 32717, 32722, 32727, 32732, - 32740, 32748, 32753, 32762, 28520, 3561, 32767, 32770, 32773, 32778, - 32785, 32790, 32795, 32811, 32819, 32827, 10864, 32835, 32840, 32844, - 32850, 32855, 32861, 32864, 32870, 32882, 32890, 32897, 32903, 32910, - 32921, 32935, 32948, 32954, 32963, 32969, 32978, 32990, 33001, 33011, - 33020, 33029, 33037, 33047, 33056, 33067, 673, 33074, 33081, 33087, - 33092, 33098, 33105, 33111, 33122, 33132, 33142, 33151, 33157, 33164, - 33169, 33177, 33184, 33192, 33200, 33212, 7142, 33219, 33222, 33231, - 33239, 33245, 33251, 33256, 33260, 33263, 33269, 33276, 33281, 33286, - 33293, 33298, 33302, 33314, 33325, 33334, 33342, 18008, 33347, 33355, - 33360, 33368, 33374, 33380, 33385, 13859, 9802, 33388, 33392, 33396, - 33399, 33402, 33408, 33416, 33424, 33428, 33432, 33437, 33441, 33444, - 33453, 33458, 33463, 33467, 33470, 33475, 33483, 33494, 33503, 33507, - 33513, 33519, 33523, 33529, 33537, 33559, 33583, 33594, 33603, 33609, - 33616, 33623, 33629, 33637, 33643, 33648, 33659, 33677, 33684, 33692, - 33696, 33703, 33708, 33717, 33730, 33738, 33750, 33761, 33772, 33782, - 33796, 33805, 33813, 33825, 33836, 11117, 33845, 33856, 33867, 33879, - 33889, 33898, 33908, 33913, 33917, 33925, 33936, 33946, 33952, 33957, - 33961, 33964, 33967, 33975, 33983, 33992, 34002, 34011, 34017, 34022, - 34036, 2838, 34058, 34069, 34078, 34088, 34100, 34109, 34118, 34128, - 34136, 34144, 34153, 34158, 34169, 34174, 34183, 34189, 34200, 34204, - 34207, 34217, 34226, 34234, 34244, 34254, 34262, 34271, 34278, 34284, - 34292, 34299, 34308, 34317, 34322, 34327, 34331, 34339, 34346, 34352, - 34356, 34364, 34371, 34382, 34397, 34404, 34410, 34420, 34429, 34435, - 34446, 34450, 34457, 34461, 34468, 34474, 16838, 34480, 34484, 34489, - 34495, 34502, 34506, 34510, 34518, 34526, 34532, 34541, 34548, 34555, - 34560, 34565, 34575, 28574, 34579, 34582, 34587, 34592, 34597, 34602, - 34607, 34612, 34617, 34622, 34628, 34633, 34638, 34644, 1094, 770, 34649, - 34652, 34659, 34668, 1777, 34675, 34680, 34684, 34690, 1143, 643, 34695, - 347, 34699, 34709, 34718, 34726, 34735, 34743, 34750, 34761, 34769, - 34778, 34786, 34796, 34804, 34809, 11794, 34813, 34821, 34829, 34834, - 17754, 4101, 34840, 34846, 34852, 6669, 34857, 34861, 34868, 34874, - 34880, 34884, 34893, 34899, 34904, 34911, 1336, 34917, 34923, 34928, - 34935, 34939, 1243, 6677, 34944, 34954, 34962, 34968, 34978, 34987, - 34995, 35001, 35006, 35014, 35021, 13376, 35027, 35034, 35039, 35045, - 35052, 35062, 1404, 253, 2212, 35068, 35074, 35081, 35092, 35103, 35111, - 35118, 35128, 35137, 35145, 35154, 35161, 35168, 35181, 35188, 35194, - 35205, 35224, 35229, 1148, 35233, 35238, 35246, 3984, 35250, 35255, - 35259, 35263, 1340, 29973, 35273, 35277, 35282, 35286, 35292, 3846, - 35298, 35306, 35313, 35324, 35333, 35341, 35366, 35374, 35379, 3985, 401, - 35385, 35393, 35401, 35408, 35413, 35419, 35424, 2281, 12792, 35431, - 35437, 31595, 31934, 35443, 656, 106, 35447, 35451, 35457, 595, 10679, - 35462, 35467, 35474, 35480, 35484, 35488, 1549, 35491, 35495, 18296, - 35498, 35503, 35510, 35516, 8966, 35521, 35529, 35536, 35542, 27205, - 35546, 35550, 35554, 35558, 1834, 20204, 35562, 35567, 35571, 35574, - 35582, 35590, 35595, 35604, 35612, 35615, 35622, 35629, 35641, 27284, - 35651, 35663, 35671, 35676, 35680, 35688, 35695, 35702, 35711, 35717, - 35724, 35731, 35734, 35738, 35742, 1351, 35752, 35754, 35759, 35765, - 35771, 35776, 35781, 35786, 35791, 35796, 35801, 35806, 35811, 35816, - 35821, 35826, 35831, 35836, 35841, 35847, 35853, 35859, 35865, 35870, - 35875, 35880, 35886, 35891, 35896, 35901, 35907, 35912, 35918, 35923, - 35928, 35933, 35938, 35944, 35949, 35955, 35960, 35965, 35970, 35975, - 35981, 35986, 35992, 35997, 36002, 36007, 36012, 36017, 36022, 36027, - 36032, 36037, 36043, 36049, 36055, 36060, 36065, 36070, 36075, 36081, - 36087, 36093, 36099, 36105, 36111, 36116, 36122, 36127, 36132, 36137, - 36142, 36148, 2552, 36153, 2559, 2566, 2962, 36158, 2572, 2582, 36164, - 2614, 2619, 2624, 36168, 36173, 36178, 36184, 36189, 36194, 36198, 36203, - 36209, 36214, 36219, 36224, 36230, 36235, 36239, 36243, 36248, 36253, - 36258, 36263, 36268, 36274, 36280, 36285, 36289, 36294, 36300, 36304, - 36309, 36314, 36319, 36324, 36328, 36331, 36336, 36341, 36346, 36351, - 36356, 36362, 36368, 36373, 36378, 36383, 36387, 36392, 36397, 36402, - 36407, 36412, 36417, 36421, 36426, 36431, 36436, 36440, 36444, 36448, - 36453, 36461, 36466, 36471, 36477, 36483, 36489, 36494, 36502, 36506, - 36509, 36514, 36519, 36523, 36528, 36533, 36537, 36542, 36546, 36549, - 36554, 4211, 21695, 36559, 36564, 36569, 36574, 36582, 25865, 34932, - 10318, 36587, 36592, 36596, 36601, 36605, 36609, 36614, 36618, 36621, - 36624, 36628, 36633, 36637, 36645, 36649, 36652, 36657, 36661, 36665, - 36670, 36675, 36679, 36685, 36690, 36695, 36702, 36709, 36713, 36716, - 36722, 36731, 36738, 36746, 36753, 36757, 36762, 36766, 36770, 36776, - 36781, 36787, 36791, 36797, 36802, 36807, 36811, 36818, 36824, 36830, - 36836, 36842, 36849, 36855, 36861, 36867, 36873, 36879, 36885, 36891, - 36898, 36904, 36911, 36917, 36923, 36929, 36935, 36941, 36947, 36953, - 36959, 36965, 36971, 36976, 36981, 13731, 36986, 36992, 36997, 37002, - 37007, 37012, 37015, 37021, 37026, 37034, 37039, 37043, 37048, 37054, - 37063, 37069, 37074, 37079, 37084, 37088, 37093, 37097, 37102, 37107, - 37112, 37117, 37124, 37131, 37137, 37143, 37148, 19801, 37155, 37161, - 37168, 37174, 37180, 37185, 37193, 37198, 11288, 37202, 37207, 37212, - 37218, 37223, 37228, 37232, 37237, 37242, 37248, 37253, 37258, 37263, - 37267, 37272, 37277, 37281, 37286, 37291, 37295, 37300, 37304, 37309, - 37314, 37319, 37323, 37328, 37332, 37337, 37341, 37348, 37352, 37356, - 18452, 37361, 37368, 37377, 37383, 37389, 37398, 37406, 37415, 37423, - 37428, 37432, 37439, 37445, 37453, 37457, 37460, 37465, 37469, 37478, - 37486, 37504, 37510, 1403, 37516, 37519, 37523, 27351, 27357, 37529, - 37533, 37544, 37555, 37566, 37578, 37582, 37589, 37596, 37603, 37608, - 37612, 37620, 37625, 37630, 37635, 37640, 6734, 16742, 25864, 37645, - 37650, 37654, 16733, 37659, 37665, 37670, 37676, 37681, 37687, 37692, - 37698, 37703, 37709, 37715, 37721, 37726, 37682, 37688, 37730, 37735, - 37741, 37746, 37752, 37757, 37763, 37768, 37693, 12422, 37772, 37704, - 37710, 37716, 3054, 3760, 37778, 37781, 37786, 37792, 37798, 37804, - 37811, 37817, 37823, 37829, 37835, 37841, 37847, 37853, 37859, 37865, - 37871, 37877, 37883, 37890, 37896, 37902, 37908, 37914, 37920, 37923, - 37928, 37931, 37938, 37943, 37951, 37955, 37960, 37965, 37971, 37976, - 37981, 37985, 37990, 37996, 38001, 38007, 38012, 38018, 38023, 38029, - 38035, 38039, 38044, 38049, 38054, 38059, 38063, 38068, 38073, 38078, - 38084, 38090, 38096, 38102, 38107, 38111, 38114, 38120, 38126, 38135, - 38143, 38150, 38155, 38159, 38163, 38168, 18239, 38173, 38181, 38187, - 4152, 1253, 38192, 38197, 38201, 9016, 38207, 38213, 38220, 9025, 38224, - 38230, 38236, 38243, 38249, 38258, 38266, 38278, 38287, 38291, 38298, - 38304, 38309, 38313, 38317, 38320, 38330, 38339, 38347, 37683, 38352, - 38362, 38372, 38382, 38388, 38393, 38403, 38408, 38421, 38435, 38446, - 38458, 38470, 38484, 38497, 38509, 38521, 17559, 38535, 38540, 38545, - 38549, 38553, 38557, 38561, 38567, 38572, 38577, 38582, 38587, 38592, - 38597, 1737, 32999, 38602, 38607, 38612, 37731, 38617, 38620, 38625, - 38630, 38635, 38641, 38647, 19411, 11994, 38652, 38658, 38665, 19039, - 38671, 38676, 38681, 38685, 38690, 38695, 37736, 38700, 38705, 38710, - 38716, 37742, 38721, 38724, 38731, 38739, 38745, 38751, 38757, 38768, - 38773, 38780, 38787, 38794, 38802, 38811, 38820, 38826, 38832, 38840, - 37747, 38845, 38851, 38857, 37753, 38862, 38867, 38875, 38883, 38889, - 38896, 38902, 38909, 38916, 38922, 38930, 38940, 38947, 38953, 38958, - 38964, 38969, 38974, 38981, 38990, 38998, 39003, 39009, 39016, 39024, - 39030, 39035, 39041, 39050, 39057, 33997, 39063, 39067, 39072, 39081, - 39086, 39091, 39096, 14972, 39104, 39109, 39114, 39119, 39123, 39128, - 39133, 39140, 39145, 39150, 39155, 37758, 25793, 39161, 2655, 158, 39164, - 39167, 39171, 39175, 39185, 39193, 39200, 39204, 39208, 39211, 39219, - 39226, 39233, 31888, 39242, 39245, 39252, 39258, 39263, 39267, 39274, - 39278, 39286, 39294, 39301, 39316, 39320, 39324, 39327, 39333, 39340, - 39344, 39350, 39354, 39361, 39369, 39377, 39384, 37694, 39391, 39399, - 39404, 39416, 12075, 12082, 12089, 12096, 12103, 12110, 626, 434, 39422, - 39427, 39432, 39438, 39443, 39448, 4178, 39453, 39456, 39461, 39466, - 39471, 39476, 39481, 39488, 27469, 39493, 39498, 39503, 39508, 39513, - 39519, 39524, 39530, 37934, 39536, 39541, 39547, 39553, 39563, 39568, - 39573, 39577, 39582, 39587, 39592, 39597, 39610, 39615, 27083, 20286, - 1064, 39619, 39625, 39629, 39634, 39639, 39645, 39650, 39655, 39659, - 39664, 39669, 39675, 39680, 39685, 1258, 39689, 39694, 39699, 39704, - 39708, 39713, 39718, 39723, 39729, 39735, 39740, 39744, 39748, 39753, - 39758, 39763, 39767, 39772, 39780, 39784, 39790, 39794, 39801, 39810, - 20057, 37705, 39816, 39823, 39831, 39839, 39846, 39852, 39861, 39874, - 39886, 39891, 39897, 39901, 2981, 39905, 39909, 39335, 39918, 39929, - 39940, 39945, 34065, 39950, 39955, 39959, 34185, 27362, 39964, 39971, - 39975, 39980, 37711, 25900, 39984, 39989, 39995, 40000, 40004, 40008, - 40011, 40015, 40021, 40030, 40041, 40053, 37717, 40058, 40061, 40065, - 40069, 40074, 40079, 40084, 40089, 40094, 40099, 40104, 40109, 373, - 40114, 40119, 40124, 40129, 40134, 40139, 40145, 40150, 40155, 40161, - 40166, 40172, 40177, 40183, 40188, 40193, 40198, 40203, 40208, 40213, - 40218, 40223, 40229, 40234, 40239, 40244, 40249, 40254, 40259, 40264, - 40270, 40276, 40281, 40286, 40291, 40296, 40301, 40306, 40311, 40316, - 40321, 40326, 40331, 40336, 40341, 40346, 40351, 40356, 40361, 40366, - 40376, 40386, 40392, 342, 14, 40397, 40400, 40404, 40408, 40416, 40420, - 40424, 31568, 16975, 1818, 40427, 40432, 40436, 40441, 40445, 40450, - 40454, 40459, 40463, 40466, 40468, 40472, 40477, 40481, 40492, 40495, - 40497, 40501, 40513, 40525, 40534, 40538, 40548, 40552, 40558, 40563, - 40572, 40578, 40583, 40588, 40592, 40596, 40601, 40608, 40613, 40619, - 40624, 40628, 40635, 31169, 31179, 40639, 40644, 40649, 40654, 40661, - 40665, 40672, 40679, 40685, 9171, 40689, 40698, 40706, 40721, 40735, - 40744, 40752, 40763, 40772, 40777, 40784, 40794, 8165, 40804, 40809, - 40815, 40820, 40824, 40827, 40832, 40836, 40841, 40845, 40852, 40857, - 40862, 40867, 40877, 40882, 40887, 40892, 10188, 40897, 40899, 40907, - 40910, 40913, 40921, 40936, 40944, 40954, 40956, 40959, 40963, 40969, - 40973, 40978, 40983, 41001, 41015, 41034, 41051, 41060, 41068, 41073, - 41078, 1396, 41084, 41090, 41095, 41105, 41114, 41122, 41127, 41133, - 41138, 41147, 41156, 41167, 41172, 41179, 41185, 41189, 41198, 41205, - 41213, 41220, 41233, 41241, 41245, 41255, 41261, 41266, 41270, 41278, - 41286, 41291, 41295, 41299, 41308, 41314, 41319, 41327, 41337, 41346, - 41355, 41364, 41375, 41383, 41394, 41403, 41411, 41418, 41424, 41429, - 41440, 41451, 41456, 41460, 41463, 41467, 41477, 41485, 41491, 41502, - 41513, 41524, 41535, 41546, 41557, 41568, 41579, 41591, 41603, 41615, - 41627, 41639, 41651, 41663, 41672, 41676, 41684, 41690, 41696, 41703, - 41709, 41714, 41720, 41724, 41729, 41734, 41739, 40371, 40381, 2526, - 41744, 41746, 41751, 41756, 41761, 41764, 41766, 41770, 41773, 41780, - 41784, 11644, 41788, 41794, 41801, 41807, 41817, 41822, 41828, 41832, - 41837, 41850, 31758, 41856, 41862, 41871, 41880, 21918, 41887, 41896, - 41904, 38368, 41910, 41915, 41919, 41928, 41936, 41943, 41948, 41952, - 41957, 41962, 41970, 41974, 41982, 41988, 41994, 41999, 42004, 42008, - 42011, 42016, 42029, 42045, 27953, 42062, 42074, 42091, 42103, 42117, - 27970, 27989, 42129, 42141, 2855, 42155, 42160, 42165, 42170, 42174, - 42181, 42193, 42200, 42209, 42219, 42222, 42233, 42244, 42252, 42257, - 42261, 42266, 42271, 42276, 42281, 42286, 42291, 1768, 947, 42296, 42300, - 42304, 42307, 42312, 42317, 42323, 42328, 42333, 42339, 42345, 42350, - 42354, 42359, 42364, 42369, 42373, 42376, 42382, 42387, 42392, 42397, - 42401, 42406, 42412, 42420, 32069, 42425, 42430, 42437, 42443, 42449, - 42454, 42462, 27478, 42469, 42474, 42479, 42484, 42488, 42491, 42496, - 42500, 42504, 42511, 42517, 42523, 42529, 42536, 42541, 42547, 41281, - 42551, 42555, 42560, 42573, 42578, 42584, 42592, 42599, 42607, 42617, - 42623, 42629, 42635, 42639, 42648, 42656, 42663, 42668, 42673, 12445, - 42678, 42688, 42695, 42701, 42711, 42716, 42722, 42730, 4017, 42737, - 42744, 42750, 42757, 4023, 42761, 42766, 42777, 42784, 42790, 42799, - 42803, 42806, 4609, 42813, 42820, 42826, 42832, 42840, 42850, 35414, - 42857, 42865, 42871, 42876, 42882, 42887, 42891, 31517, 42897, 42904, - 42910, 42918, 42927, 42934, 42940, 42951, 28772, 42957, 42964, 42970, - 42980, 42985, 42989, 42997, 43005, 43012, 43018, 43023, 11246, 941, - 43028, 43032, 43034, 43038, 43043, 43046, 43048, 43053, 43059, 43064, - 43069, 43076, 39484, 43082, 43087, 43091, 43096, 43100, 43109, 43113, - 43119, 43126, 43132, 43139, 43144, 43153, 43158, 43162, 43167, 43174, - 43182, 43190, 43195, 25956, 43199, 43202, 43206, 43210, 12889, 1005, - 43214, 43219, 43227, 43232, 43236, 43245, 43252, 43256, 43260, 43268, - 43275, 16260, 43285, 43289, 43293, 43301, 43309, 43315, 43320, 43324, - 43333, 16008, 43339, 43348, 43355, 43360, 43367, 43374, 43382, 43389, - 43397, 43405, 43414, 43419, 43426, 43433, 43440, 43447, 43454, 43459, - 43466, 43472, 43489, 43497, 43507, 43515, 43522, 43530, 461, 43534, - 43540, 43544, 43549, 40768, 43555, 43558, 43562, 43568, 43579, 43587, - 4028, 43595, 43601, 43607, 43617, 43623, 43632, 43641, 43651, 43658, - 43664, 43669, 4034, 4040, 43678, 43686, 43693, 43697, 14356, 43705, - 43709, 43716, 43724, 43731, 43740, 43747, 43753, 43762, 43772, 43778, - 43786, 43795, 43802, 43810, 43817, 26758, 43821, 43828, 43834, 43844, - 43853, 43861, 43872, 43876, 43886, 43893, 43898, 43903, 43909, 43916, - 43924, 43933, 43942, 43952, 43963, 43970, 43975, 43982, 3269, 43990, - 43996, 44001, 44008, 44014, 44020, 44025, 44038, 44051, 44064, 44071, - 44077, 44085, 44093, 44098, 44102, 44106, 44111, 44116, 44121, 44126, - 44131, 44136, 1365, 44141, 44145, 44149, 44153, 44157, 44161, 44165, - 44169, 44173, 44177, 44181, 44185, 44189, 44193, 44197, 44201, 44205, - 44209, 44213, 44217, 44221, 44225, 44229, 44233, 44237, 44241, 44245, - 44249, 44253, 44257, 44261, 44265, 44269, 44273, 44277, 44281, 44285, - 44289, 44293, 44297, 44301, 44305, 44309, 44313, 44317, 44321, 44325, - 44329, 44333, 44337, 44341, 44345, 44349, 44353, 44357, 44361, 44365, - 44369, 44373, 44377, 44381, 44385, 44389, 44393, 44397, 44401, 44405, - 44409, 44413, 44417, 44421, 44425, 44429, 44433, 44437, 44441, 44445, - 44449, 44453, 44457, 44461, 44465, 44469, 44473, 44477, 44481, 44485, - 44489, 44493, 44497, 44501, 44505, 44509, 44513, 44517, 44521, 44525, - 44529, 44533, 44537, 44541, 44545, 44549, 44553, 44557, 44561, 44565, - 44569, 44573, 44577, 44581, 44585, 44589, 44593, 44597, 44601, 44605, - 44609, 44613, 44617, 44621, 44625, 44629, 44633, 44637, 44641, 44645, - 44649, 44653, 44657, 44661, 44665, 44669, 44673, 44677, 44681, 44685, - 44689, 44693, 44697, 44701, 44705, 44709, 44713, 44717, 44721, 44725, - 44729, 44733, 44737, 44741, 44745, 44749, 44753, 44758, 44762, 44767, - 44771, 44776, 44780, 44785, 44789, 44795, 44800, 44804, 44809, 44813, - 44818, 44822, 44827, 44831, 44836, 44840, 44845, 44849, 44854, 44858, - 44864, 44870, 44875, 44879, 44884, 44888, 44894, 44899, 44903, 44908, - 44912, 44917, 44921, 44927, 44932, 44936, 44941, 44945, 44950, 44954, - 44959, 44963, 44969, 44974, 44978, 44983, 44987, 44993, 44998, 45002, - 45007, 45011, 45016, 45020, 45025, 45029, 45034, 45038, 45044, 45049, - 45053, 45059, 45064, 45068, 45074, 45079, 45083, 45088, 45092, 45097, - 45101, 45107, 45113, 45119, 45125, 45131, 45137, 45143, 45149, 45154, - 45158, 45163, 45167, 45173, 45178, 45182, 45187, 45191, 45196, 45200, - 45205, 45209, 45214, 45218, 45223, 45227, 45232, 45236, 45242, 45247, - 45251, 45256, 45260, 45266, 45272, 45277, 127, 63, 45281, 45283, 45287, - 45291, 45295, 45300, 45304, 45308, 45313, 11153, 45318, 45324, 1677, - 7181, 45330, 45333, 45338, 45342, 45347, 45351, 45355, 45360, 12233, - 45364, 45368, 45372, 630, 45376, 18561, 45381, 45385, 45390, 45395, - 45400, 45404, 45411, 45417, 45423, 31790, 45428, 45431, 45435, 45440, - 45446, 45450, 45453, 45461, 45467, 45472, 45476, 45479, 45483, 45489, - 45493, 45497, 3811, 3816, 15084, 45500, 45504, 45508, 45512, 45516, - 45524, 45531, 45535, 15958, 45542, 45556, 45563, 45574, 361, 45579, - 45583, 45589, 45601, 45607, 45613, 45618, 45624, 18613, 45628, 45632, - 35727, 45641, 45647, 45656, 45660, 45664, 45669, 45675, 45680, 45684, - 45689, 45693, 45697, 45704, 45710, 45715, 45726, 45741, 45756, 45771, - 45787, 45805, 12140, 45819, 45826, 45832, 45836, 45839, 45848, 45853, - 45857, 45865, 19242, 45873, 45877, 45887, 45898, 35617, 1042, 45911, - 45920, 45938, 45957, 45966, 45974, 45982, 1690, 12342, 45986, 27374, - 45989, 31556, 45994, 11478, 45999, 46005, 46010, 46016, 46021, 46027, - 46032, 46038, 46043, 46049, 46055, 46061, 46066, 46022, 46028, 46070, - 46033, 46039, 46044, 46075, 46050, 46056, 9184, 4434, 46081, 46089, - 46093, 46096, 46103, 46107, 46112, 46117, 46124, 46130, 46136, 46141, - 17850, 46145, 31573, 46149, 46153, 46157, 46164, 46170, 46174, 33931, - 46183, 10351, 46187, 10780, 46190, 46197, 46203, 46207, 14381, 46214, - 46220, 46225, 46232, 46239, 46246, 34730, 9081, 46253, 46260, 46267, - 46273, 46278, 46285, 46296, 46302, 46307, 46312, 46317, 46321, 46326, - 46333, 46023, 46337, 46347, 46356, 46367, 46373, 46381, 46388, 46393, - 46398, 46403, 46408, 46413, 46417, 46421, 46428, 46434, 46442, 2416, - 30582, 12245, 12257, 12262, 12268, 46451, 12273, 12278, 12284, 46456, - 46466, 46470, 12289, 46475, 20484, 46478, 46483, 46487, 46491, 46502, - 46510, 42204, 46518, 46523, 46530, 46537, 46541, 46544, 46552, 12153, - 46559, 46562, 46568, 46578, 6767, 46587, 46592, 46598, 46602, 46610, - 46614, 46624, 46630, 46635, 46646, 46655, 46664, 46673, 46682, 46691, - 46700, 46709, 46715, 46721, 46726, 46732, 46738, 46744, 46749, 46752, - 46759, 46765, 46769, 46774, 46781, 46788, 46792, 46795, 46805, 46818, - 46827, 46836, 46847, 46860, 46872, 46883, 46892, 46903, 46908, 46917, - 46922, 12294, 46928, 46935, 46943, 46950, 46955, 46960, 31836, 46964, - 46971, 4374, 25, 46975, 46980, 20333, 46984, 46987, 46990, 34122, 46994, - 34739, 47002, 47006, 47010, 47013, 47019, 47025, 47030, 37782, 47039, - 47047, 47053, 47060, 34105, 47064, 34342, 47068, 47077, 47081, 47089, - 47095, 47101, 47106, 47110, 34765, 47116, 47119, 47127, 47135, 47143, - 4772, 47149, 47153, 47157, 47162, 47169, 47175, 47180, 47185, 47189, - 47195, 47200, 47206, 4662, 820, 47213, 47217, 47220, 47232, 47239, 47244, - 18434, 47248, 47256, 47264, 47272, 47280, 47287, 47295, 47303, 47310, - 47318, 47326, 47334, 47342, 47350, 47358, 47366, 47374, 47382, 47390, - 47398, 47405, 47413, 47421, 47429, 47437, 47445, 47453, 47461, 47469, - 47477, 47485, 47493, 47501, 47509, 47517, 47525, 47533, 47541, 47549, - 47557, 47564, 47572, 47579, 47587, 47595, 47603, 47611, 47619, 47627, - 47635, 47643, 47654, 26794, 47659, 47662, 47669, 47673, 47679, 47683, - 47689, 47694, 47700, 47705, 47710, 47714, 47718, 47725, 47733, 47738, - 47743, 47753, 47759, 47772, 47778, 47784, 47790, 47793, 47800, 47805, - 4700, 47811, 4869, 965, 47816, 47819, 47822, 47825, 37866, 37872, 47828, - 37878, 37891, 37897, 37903, 47834, 37909, 37915, 47840, 47846, 10, 47854, - 47861, 47865, 47869, 47877, 38726, 47881, 47885, 47892, 47897, 47901, - 47906, 47912, 47917, 47923, 47928, 47932, 47936, 47940, 47945, 47949, - 47954, 47958, 47962, 47969, 47974, 47978, 47982, 47987, 47991, 47996, - 48000, 48004, 48009, 48015, 18743, 18748, 48020, 48024, 48027, 48033, - 48037, 48041, 25750, 48046, 48050, 48056, 48063, 48069, 48074, 40797, - 48084, 48089, 48097, 48101, 48104, 48108, 38741, 48116, 4738, 48121, - 48126, 48130, 48135, 48139, 48144, 16026, 48155, 48159, 48162, 48166, - 48174, 48179, 48183, 48188, 48193, 48197, 48201, 48205, 48208, 48212, - 48215, 48220, 48225, 48230, 48235, 48240, 48245, 8664, 16042, 48250, - 48253, 48259, 48264, 48270, 48275, 48281, 48286, 48292, 48297, 48303, - 48309, 48315, 48320, 48324, 48328, 48339, 48347, 48354, 48360, 48365, - 48376, 48386, 48392, 48397, 48404, 48413, 48429, 48445, 48455, 34007, - 48462, 48466, 48471, 48476, 48480, 48484, 43937, 48490, 48495, 48499, - 48506, 48511, 48516, 48520, 48523, 48527, 48533, 32802, 48537, 26108, - 48542, 48549, 48557, 48563, 48569, 48576, 48584, 48590, 48594, 48599, - 48605, 48613, 48618, 48622, 48631, 11134, 48639, 48643, 48651, 48658, - 48663, 48668, 48673, 48677, 48680, 48686, 48690, 48693, 48697, 48704, - 48709, 48716, 48720, 48726, 48730, 48736, 48741, 48746, 5107, 5114, - 48751, 48760, 48768, 48773, 48779, 48791, 48804, 48818, 48825, 48831, - 48837, 48842, 48850, 48853, 48855, 48866, 48878, 48889, 48904, 48921, - 48941, 48963, 48970, 48977, 48984, 48990, 48994, 8663, 48997, 49001, - 49005, 49010, 49014, 49018, 49021, 49025, 49039, 28019, 49058, 49071, - 49084, 49097, 28037, 49112, 2808, 49127, 49133, 49137, 49147, 49151, - 49155, 49160, 49164, 49171, 49176, 49180, 49187, 49193, 49198, 49204, - 49214, 49226, 49237, 49242, 49249, 49253, 49257, 49260, 49268, 19263, - 4141, 49273, 18782, 49286, 49293, 49300, 49306, 49310, 49314, 49319, - 49325, 49330, 49336, 49340, 49344, 49347, 49352, 49356, 49361, 49366, - 49371, 49376, 49381, 49386, 49391, 49396, 49401, 8727, 18793, 49406, - 49410, 49416, 49425, 49430, 49439, 49446, 43768, 49452, 49457, 49461, - 49468, 49473, 49480, 49488, 49494, 49498, 49501, 49505, 49510, 2886, - 49517, 49524, 49528, 49531, 49536, 49541, 49547, 49552, 49557, 49561, - 49566, 49576, 49581, 49587, 49592, 49599, 47234, 49605, 49611, 49619, - 49629, 49634, 49639, 49643, 49648, 49653, 8167, 8179, 49658, 49661, - 49668, 49674, 49683, 10268, 41421, 49691, 49695, 49699, 38789, 49707, - 49718, 49726, 43985, 49733, 49738, 49743, 49754, 49761, 49772, 38813, - 26125, 49780, 4652, 49785, 16459, 49791, 34096, 49797, 49802, 49812, - 49821, 49828, 49834, 49838, 49841, 49848, 49854, 49861, 49867, 49877, - 49885, 49891, 49897, 49902, 49906, 49913, 49918, 49924, 49931, 49937, - 49006, 49942, 49946, 16501, 16510, 16519, 16528, 16537, 16566, 622, - 16575, 49952, 49957, 49960, 49966, 49974, 1275, 49979, 49983, 49988, - 49993, 49997, 50002, 50009, 50015, 50019, 50024, 50030, 50034, 37939, - 50039, 50044, 50053, 50060, 50070, 50076, 34140, 50093, 50102, 50110, - 50116, 50121, 50128, 50134, 50142, 50151, 50159, 50167, 50173, 50177, - 50182, 50190, 35288, 38822, 50196, 50215, 19166, 50229, 50245, 50259, - 50265, 50270, 50275, 50280, 50286, 38828, 50291, 50294, 50301, 50308, - 50317, 50322, 50326, 423, 3176, 50333, 50338, 50343, 33196, 50131, 50347, - 50355, 50360, 50368, 50372, 50375, 50380, 50386, 50392, 50397, 50401, - 34213, 50404, 50409, 50413, 50416, 50421, 50425, 50430, 50435, 50439, - 50444, 50448, 50455, 50459, 50463, 25746, 25757, 50468, 50473, 50479, - 50484, 50490, 50496, 32758, 50501, 50505, 50508, 50514, 50519, 50524, - 50529, 50534, 50539, 50544, 50549, 50554, 50560, 50566, 14569, 19473, - 50571, 50576, 50581, 50586, 50591, 50596, 50601, 50606, 452, 68, 37956, - 37961, 37966, 37972, 37977, 37982, 50611, 37986, 50615, 50619, 50623, - 37991, 37997, 50637, 38008, 38013, 50645, 50650, 38019, 50655, 50660, - 50669, 50674, 50679, 50688, 50694, 50700, 50706, 38036, 50719, 50728, - 50734, 38040, 50738, 38045, 50743, 38050, 38055, 50746, 50751, 50755, - 50761, 16267, 50768, 16277, 50775, 50780, 38060, 50784, 50789, 50794, - 50799, 50804, 50808, 50813, 50818, 50824, 50829, 50834, 50840, 50846, - 50851, 50855, 50860, 50865, 50870, 50874, 50879, 50884, 50889, 50895, - 50901, 50907, 50912, 50916, 50921, 50925, 38064, 38069, 38074, 50929, - 50933, 50938, 50942, 50954, 38079, 38085, 38091, 38103, 50960, 31616, - 50964, 50969, 50973, 50978, 50985, 50990, 50995, 51000, 51004, 51008, - 51018, 51023, 51028, 51032, 51042, 51046, 51049, 51057, 51062, 38151, - 51066, 1375, 51072, 51077, 51083, 51091, 51095, 51104, 51112, 51116, - 51120, 51128, 51134, 51142, 51158, 51163, 51167, 51171, 51175, 51180, - 51186, 51201, 38188, 1685, 14601, 51205, 1254, 1269, 51217, 51225, 51232, - 51237, 9230, 51244, 51249, 10765, 978, 2641, 12321, 51256, 10658, 51261, - 51264, 51273, 1162, 51278, 49177, 51285, 51294, 51299, 51303, 51311, - 51318, 27424, 2697, 51326, 12842, 51336, 51342, 2434, 2444, 51351, 51360, - 51370, 51381, 3584, 41818, 51386, 4341, 4352, 9258, 1167, 51390, 51398, - 51405, 51410, 51414, 51418, 51423, 29054, 49512, 12412, 51431, 51440, - 51449, 51457, 51470, 51477, 51488, 51493, 51506, 51519, 51531, 51543, - 51555, 51566, 51579, 51590, 51601, 51611, 51619, 51627, 51639, 51651, - 51662, 51671, 51679, 51686, 51698, 51705, 51711, 51720, 51726, 51733, - 51746, 51751, 51761, 51766, 51772, 51777, 32098, 51781, 48682, 51788, - 51795, 51803, 51810, 2654, 51817, 51828, 51838, 51847, 51855, 51865, - 51873, 51882, 51892, 51901, 51906, 51912, 51918, 4190, 51929, 51939, - 51948, 51957, 51965, 51975, 51983, 51992, 51997, 52002, 52007, 1604, 47, - 52015, 52023, 52034, 52045, 19877, 52055, 52059, 52066, 52072, 52077, - 52081, 52092, 52102, 52111, 52122, 52127, 20306, 20311, 52134, 52143, - 52148, 52158, 52163, 52171, 52179, 52186, 52192, 1566, 271, 52196, 52201, - 52207, 46085, 52212, 52215, 2182, 2663, 52223, 52227, 52230, 1420, 52236, - 16787, 1172, 52241, 52254, 2797, 2818, 52268, 52280, 52292, 2832, 2849, - 2864, 2880, 2897, 52306, 52318, 2912, 52332, 1178, 1184, 1190, 12713, - 52337, 52342, 52347, 52351, 52366, 52381, 52396, 52411, 52426, 52441, - 52456, 52471, 52486, 52501, 52516, 52531, 52546, 52561, 52576, 52591, - 52606, 52621, 52636, 52651, 52666, 52681, 52696, 52711, 52726, 52741, - 52756, 52771, 52786, 52801, 52816, 52831, 52846, 52861, 52876, 52891, - 52906, 52921, 52936, 52951, 52966, 52981, 52996, 53011, 53026, 53041, - 53056, 53071, 53086, 53101, 53116, 53131, 53146, 53161, 53176, 53191, - 53206, 53221, 53236, 53251, 53266, 53281, 53296, 53311, 53326, 53341, - 53356, 53371, 53386, 53401, 53416, 53431, 53446, 53461, 53476, 53491, - 53506, 53521, 53536, 53551, 53566, 53581, 53596, 53611, 53626, 53641, - 53656, 53671, 53686, 53701, 53716, 53731, 53746, 53761, 53776, 53791, - 53806, 53821, 53836, 53851, 53866, 53881, 53896, 53911, 53926, 53941, - 53956, 53971, 53986, 54001, 54016, 54031, 54046, 54061, 54076, 54091, - 54106, 54121, 54136, 54151, 54166, 54181, 54196, 54211, 54226, 54241, - 54256, 54271, 54286, 54301, 54316, 54331, 54346, 54361, 54376, 54391, - 54406, 54421, 54436, 54451, 54466, 54481, 54496, 54511, 54526, 54541, - 54556, 54571, 54586, 54601, 54616, 54631, 54646, 54661, 54676, 54691, - 54706, 54721, 54736, 54751, 54766, 54781, 54796, 54811, 54826, 54841, - 54856, 54871, 54886, 54901, 54916, 54931, 54946, 54961, 54976, 54991, - 55006, 55021, 55036, 55051, 55066, 55081, 55096, 55111, 55126, 55141, - 55156, 55171, 55186, 55201, 55216, 55231, 55246, 55261, 55276, 55291, - 55306, 55321, 55336, 55351, 55366, 55381, 55396, 55411, 55426, 55441, - 55456, 55471, 55486, 55501, 55516, 55531, 55546, 55561, 55576, 55591, - 55606, 55621, 55636, 55651, 55666, 55681, 55696, 55711, 55726, 55741, - 55756, 55771, 55786, 55801, 55816, 55831, 55846, 55861, 55876, 55891, - 55906, 55921, 55936, 55951, 55966, 55981, 55996, 56011, 56026, 56041, - 56056, 56071, 56086, 56101, 56116, 56131, 56146, 56161, 56176, 56191, - 56206, 56221, 56236, 56251, 56266, 56281, 56296, 56311, 56326, 56341, - 56356, 56371, 56386, 56401, 56416, 56431, 56446, 56461, 56476, 56491, - 56506, 56521, 56536, 56551, 56566, 56581, 56596, 56611, 56626, 56641, - 56656, 56671, 56686, 56701, 56716, 56731, 56746, 56761, 56776, 56791, - 56806, 56821, 56836, 56851, 56866, 56881, 56896, 56911, 56926, 56941, - 56956, 56971, 56986, 57001, 57016, 57031, 57046, 57061, 57076, 57091, - 57106, 57121, 57136, 57151, 57166, 57181, 57196, 57211, 57226, 57241, - 57256, 57271, 57286, 57301, 57316, 57331, 57346, 57361, 57376, 57391, - 57406, 57421, 57436, 57451, 57466, 57481, 57496, 57511, 57526, 57541, - 57556, 57571, 57586, 57601, 57616, 57631, 57646, 57661, 57676, 57691, - 57706, 57721, 57736, 57751, 57766, 57781, 57796, 57811, 57826, 57841, - 57856, 57871, 57886, 57901, 57916, 57931, 57946, 57961, 57976, 57991, - 58006, 58021, 58036, 58051, 58066, 58081, 58096, 58111, 58126, 58141, - 58156, 58171, 58186, 58201, 58216, 58231, 58246, 58261, 58276, 58291, - 58306, 58321, 58336, 58351, 58366, 58381, 58396, 58411, 58426, 58441, - 58456, 58471, 58486, 58501, 58516, 58531, 58546, 58561, 58576, 58591, - 58606, 58621, 58636, 58651, 58666, 58681, 58696, 58711, 58726, 58741, - 58756, 58771, 58786, 58801, 58816, 58831, 58846, 58861, 58876, 58891, - 58906, 58921, 58936, 58951, 58966, 58981, 58996, 59011, 59026, 59041, - 59056, 59071, 59086, 59101, 59116, 59131, 59146, 59161, 59176, 59191, - 59206, 59221, 59236, 59251, 59266, 59281, 59296, 59311, 59326, 59341, - 59356, 59371, 59386, 59401, 59416, 59431, 59446, 59461, 59476, 59491, - 59506, 59521, 59536, 59551, 59566, 59581, 59596, 59611, 59626, 59641, - 59656, 59671, 59686, 59701, 59716, 59731, 59746, 59761, 59776, 59791, - 59806, 59821, 59836, 59851, 59866, 59881, 59896, 59911, 59926, 59941, - 59956, 59971, 59986, 60001, 60016, 60031, 60046, 60061, 60076, 60091, - 60106, 60121, 60136, 60151, 60166, 60182, 60198, 60214, 60230, 60246, - 60262, 60278, 60294, 60310, 60326, 60342, 60358, 60374, 60390, 60406, - 60422, 60438, 60454, 60470, 60486, 60502, 60518, 60534, 60550, 60566, - 60582, 60598, 60614, 60630, 60646, 60662, 60678, 60694, 60710, 60726, - 60742, 60758, 60774, 60790, 60806, 60822, 60838, 60854, 60870, 60886, - 60902, 60918, 60934, 60950, 60966, 60982, 60998, 61014, 61030, 61046, - 61062, 61078, 61094, 61110, 61126, 61142, 61158, 61174, 61190, 61206, - 61222, 61238, 61254, 61270, 61286, 61302, 61318, 61334, 61350, 61366, - 61382, 61398, 61414, 61430, 61446, 61462, 61478, 61494, 61510, 61526, - 61542, 61558, 61574, 61590, 61606, 61622, 61638, 61654, 61670, 61686, - 61702, 61718, 61734, 61750, 61766, 61782, 61798, 61814, 61830, 61846, - 61862, 61878, 61894, 61910, 61926, 61942, 61958, 61974, 61990, 62006, - 62022, 62038, 62054, 62070, 62086, 62102, 62118, 62134, 62150, 62166, - 62182, 62198, 62214, 62230, 62246, 62262, 62278, 62294, 62310, 62326, - 62342, 62358, 62374, 62390, 62406, 62422, 62438, 62454, 62470, 62486, - 62502, 62518, 62534, 62550, 62566, 62582, 62598, 62614, 62630, 62646, - 62662, 62678, 62694, 62710, 62726, 62742, 62758, 62774, 62790, 62806, - 62822, 62838, 62854, 62870, 62886, 62902, 62918, 62934, 62950, 62966, - 62982, 62998, 63014, 63030, 63046, 63062, 63078, 63094, 63110, 63126, - 63142, 63158, 63174, 63190, 63206, 63222, 63238, 63254, 63270, 63286, - 63302, 63318, 63334, 63350, 63366, 63382, 63398, 63414, 63430, 63446, - 63462, 63478, 63494, 63510, 63526, 63542, 63558, 63574, 63590, 63606, - 63622, 63638, 63654, 63670, 63686, 63702, 63718, 63734, 63750, 63766, - 63782, 63798, 63814, 63830, 63846, 63862, 63878, 63894, 63910, 63926, - 63942, 63958, 63974, 63990, 64006, 64022, 64038, 64054, 64070, 64086, - 64102, 64118, 64134, 64150, 64166, 64182, 64198, 64214, 64230, 64246, - 64262, 64278, 64294, 64310, 64326, 64342, 64358, 64374, 64390, 64406, - 64422, 64438, 64454, 64470, 64486, 64502, 64518, 64534, 64550, 64566, - 64582, 64598, 64614, 64630, 64646, 64662, 64678, 64694, 64710, 64726, - 64742, 64758, 64774, 64790, 64806, 64822, 64838, 64854, 64870, 64886, - 64902, 64918, 64934, 64950, 64966, 64982, 64998, 65014, 65030, 65046, - 65062, 65078, 65094, 65110, 65126, 65142, 65158, 65174, 65190, 65206, - 65222, 65238, 65254, 65270, 65286, 65302, 65318, 65334, 65350, 65366, - 65382, 65398, 65414, 65430, 65446, 65462, 65478, 65494, 65510, 65526, - 65542, 65558, 65574, 65590, 65606, 65622, 65638, 65654, 65670, 65686, - 65702, 65718, 65734, 65750, 65766, 65782, 65798, 65814, 65830, 65846, - 65862, 65878, 65894, 65910, 65926, 65942, 65958, 65974, 65990, 66006, - 66022, 66038, 66054, 66070, 66086, 66102, 66118, 66134, 66150, 66166, - 66182, 66198, 66214, 66230, 66246, 66262, 66278, 66294, 66310, 66326, - 66342, 66358, 66374, 66390, 66406, 66422, 66438, 66454, 66470, 66486, - 66502, 66518, 66534, 66550, 66566, 66582, 66598, 66614, 66630, 66646, - 66662, 66678, 66694, 66710, 66726, 66742, 66758, 66774, 66790, 66806, - 66822, 66838, 66854, 66870, 66886, 66902, 66918, 66934, 66950, 66966, - 66982, 66998, 67014, 67030, 67046, 67062, 67078, 67094, 67110, 67126, - 67142, 67158, 67174, 67190, 67206, 67222, 67238, 67254, 67270, 67286, - 67302, 67318, 67334, 67350, 67366, 67382, 67398, 67414, 67430, 67446, - 67462, 67478, 67494, 67510, 67526, 67542, 67558, 67574, 67590, 67606, - 67622, 67638, 67654, 67670, 67686, 67702, 67718, 67734, 67750, 67766, - 67782, 67798, 67814, 67830, 67846, 67862, 67878, 67894, 67910, 67926, - 67942, 67958, 67974, 67990, 68006, 68022, 68038, 68054, 68070, 68086, - 68102, 68118, 68134, 68150, 68166, 68182, 68198, 68214, 68230, 68246, - 68262, 68278, 68294, 68310, 68326, 68342, 68358, 68374, 68390, 68406, - 68422, 68438, 68454, 68470, 68486, 68502, 68518, 68534, 68550, 68566, - 68582, 68598, 68614, 68630, 68646, 68662, 68678, 68694, 68710, 68726, - 68742, 68758, 68774, 68790, 68806, 68822, 68838, 68847, 68862, 68876, - 68885, 17689, 68889, 68894, 68900, 68906, 68916, 68924, 17946, 18677, - 9277, 68937, 1428, 1432, 68945, 4270, 33321, 8104, 68951, 68956, 68961, - 68966, 68971, 68977, 68982, 68988, 68993, 68999, 69004, 69009, 69014, - 69019, 69025, 69030, 69035, 69040, 69045, 69050, 69055, 69060, 69066, - 69071, 69077, 69084, 2701, 69089, 69095, 9652, 69099, 69104, 69111, - 69119, 4281, 4286, 4291, 4296, 65, 69123, 69129, 69134, 69139, 69143, - 69148, 69152, 69156, 12785, 69160, 69170, 69183, 69194, 69207, 69214, - 69220, 69228, 69235, 12246, 69244, 69249, 69255, 69261, 69267, 69272, - 69277, 69282, 69287, 69291, 69296, 69301, 69306, 69312, 69318, 69324, - 69329, 69333, 69338, 69343, 69347, 69352, 69357, 69362, 69366, 12801, - 12812, 12817, 1471, 69370, 69376, 1476, 19711, 69381, 19720, 1486, 69386, - 69392, 69397, 1507, 69403, 1513, 1519, 12847, 69408, 69417, 69425, 69433, - 69440, 69444, 69448, 69454, 69459, 37599, 69464, 69471, 69479, 69486, - 69491, 69495, 69499, 69508, 69513, 69518, 69523, 1524, 280, 69528, 69533, - 69537, 19846, 987, 69541, 69548, 69553, 69557, 19904, 1528, 46361, 69560, - 69565, 69575, 69584, 69589, 69593, 69599, 1533, 49458, 69604, 69613, - 69619, 69624, 69629, 13086, 13092, 69635, 69648, 69660, 69677, 69694, - 69711, 69728, 69745, 69762, 69779, 69796, 69813, 69830, 69847, 69864, - 69881, 69898, 69915, 69932, 69949, 69966, 69983, 70000, 70017, 70034, - 70051, 70068, 70085, 70102, 70119, 70136, 70153, 70170, 70187, 70204, - 70221, 70238, 70255, 70272, 70289, 70306, 70323, 70340, 70357, 70374, - 70391, 70408, 70425, 70442, 70459, 70476, 70493, 70504, 70514, 70519, - 1538, 70523, 70528, 70534, 70539, 70544, 70551, 10677, 1543, 70557, - 70566, 33713, 70571, 70582, 13108, 70592, 70597, 70603, 70608, 70615, - 70621, 70626, 1548, 20198, 70631, 70637, 13118, 70643, 70648, 70653, - 70658, 70663, 70668, 70673, 70678, 1553, 4761, 70683, 70688, 70694, - 70699, 70704, 70709, 70714, 70719, 70724, 70729, 70734, 70740, 70746, - 70752, 70757, 70761, 70766, 70771, 70775, 70780, 70785, 70790, 70795, - 70799, 70804, 70810, 70815, 70820, 70824, 70829, 70834, 70840, 70845, - 70850, 70856, 70862, 70867, 70871, 70876, 70881, 70886, 70890, 70895, - 70900, 70905, 70911, 70917, 70922, 70926, 70930, 70935, 70940, 70945, - 35492, 70949, 70954, 70959, 70965, 70970, 70975, 70979, 70984, 70989, - 70995, 71000, 71005, 71011, 71017, 71022, 71026, 71031, 71036, 71040, - 71045, 71050, 71055, 71061, 71067, 71072, 71076, 71081, 71086, 71090, - 71095, 71100, 71105, 71110, 71114, 71117, 71120, 71125, 71130, 38335, - 71137, 71145, 50085, 71151, 3928, 33656, 71164, 71171, 71177, 71183, - 4107, 71188, 13260, 71194, 71204, 71219, 71227, 13265, 71238, 71243, - 71254, 71266, 71278, 71290, 2903, 71302, 71307, 31699, 71319, 71325, - 71331, 71336, 71345, 71352, 71357, 71362, 71367, 71372, 71377, 71382, - 1570, 19338, 71387, 71392, 71397, 71402, 71408, 71413, 71419, 71424, - 71429, 71435, 71440, 71445, 49532, 71449, 71453, 71458, 71462, 20346, - 71467, 71470, 71475, 71483, 71491, 1574, 13301, 13307, 1579, 71499, - 71506, 71511, 71520, 71530, 71537, 71542, 71547, 1584, 71554, 71559, - 20466, 71563, 71568, 71575, 71581, 71585, 71598, 71604, 71615, 71625, - 71632, 20488, 10571, 10578, 4355, 4361, 71639, 1589, 71644, 71653, 71659, - 71667, 71674, 71680, 71687, 71699, 71705, 71710, 71717, 71729, 71740, - 71750, 71759, 71769, 71779, 4249, 71787, 37393, 37402, 20528, 71800, - 71805, 71810, 71815, 71820, 71825, 71830, 1594, 1598, 71835, 71839, - 71842, 71853, 71858, 20554, 1608, 71866, 71871, 71876, 71888, 20587, - 71895, 71898, 71904, 71910, 71915, 71923, 1613, 71928, 71933, 71941, - 71949, 71956, 71965, 71973, 71982, 71986, 1618, 71995, 1623, 25931, - 72000, 72007, 72013, 20674, 72021, 72031, 72037, 72042, 72050, 72057, - 72066, 72074, 72084, 72093, 72103, 72112, 72123, 72133, 72143, 72152, - 72162, 72176, 72189, 72198, 72206, 72216, 72225, 72237, 72248, 72259, - 72269, 19966, 72274, 13453, 72283, 72289, 72294, 72301, 72307, 72314, - 72320, 19555, 72330, 72336, 72341, 72352, 72359, 72366, 72371, 72379, - 13470, 13475, 72387, 72393, 72397, 4339, 4350, 20750, 49635, 72405, - 72411, 72416, 72424, 72431, 14582, 72436, 72442, 72448, 1634, 72453, - 72456, 72462, 72467, 72472, 72477, 72482, 72487, 72492, 72497, 72502, - 72508, 72514, 1333, 72519, 72524, 72529, 72535, 72540, 72545, 72550, - 72555, 72560, 72565, 1643, 18, 72571, 72575, 72580, 72584, 72588, 72592, - 38621, 72597, 28238, 72602, 72607, 72611, 72614, 72618, 72622, 72627, - 72631, 72636, 72640, 72643, 72649, 42308, 42313, 42318, 72652, 72659, - 72665, 72673, 49230, 72683, 72689, 42324, 38885, 38636, 38642, 42340, - 38648, 72694, 72699, 72703, 38918, 72710, 72713, 72717, 72725, 72732, - 72737, 72740, 72745, 72750, 72754, 72758, 72761, 72771, 72783, 72790, - 72796, 38653, 72803, 40604, 72806, 9669, 13815, 72809, 72813, 72818, - 4159, 72822, 72825, 16320, 72832, 72839, 72852, 72867, 72881, 72897, - 72912, 72921, 72929, 72937, 72946, 72950, 72959, 72965, 72970, 72980, - 72993, 73005, 73012, 73017, 73026, 73039, 44032, 73057, 73062, 73069, - 73075, 73080, 895, 73085, 73093, 73100, 73107, 33137, 914, 73113, 73119, - 73124, 73134, 73142, 73148, 73153, 38672, 6858, 38686, 73157, 73167, - 73172, 73180, 73190, 73205, 73211, 73217, 73224, 38696, 73229, 73235, - 37737, 73239, 73243, 73248, 73257, 73264, 73269, 73273, 73278, 73286, - 20531, 73293, 73298, 73302, 6899, 38722, 73306, 73312, 341, 73322, 73329, - 73336, 73342, 73349, 73354, 73363, 15941, 69569, 69579, 73369, 73377, - 73381, 73385, 73389, 73393, 73398, 73402, 73408, 73416, 73421, 73426, - 73433, 73438, 73442, 73447, 73451, 73455, 73461, 73467, 73478, 73484, - 73489, 73493, 73498, 73502, 38846, 73506, 38852, 38858, 73511, 73517, - 73524, 73529, 73533, 37754, 20185, 73536, 73540, 73545, 73552, 73558, - 73562, 73567, 48699, 73573, 73577, 73584, 73588, 73593, 73599, 73605, - 73611, 73623, 73632, 73642, 73648, 73655, 73660, 73665, 73669, 73672, - 73678, 73685, 73690, 73695, 73702, 73709, 73716, 73722, 73727, 73732, - 73740, 38863, 2531, 73745, 73750, 73756, 73761, 73767, 73772, 73777, - 73782, 73788, 38884, 73793, 73799, 73805, 73811, 38954, 73816, 73821, - 73826, 38965, 73831, 73836, 73841, 73847, 73853, 38970, 73858, 73863, - 73868, 39025, 39031, 73873, 73878, 39036, 39058, 33998, 39064, 39068, - 73883, 14258, 73887, 73895, 73901, 73909, 73916, 73922, 73932, 73938, - 73945, 12685, 39082, 73951, 73964, 73973, 73979, 73988, 73994, 74000, - 74007, 28581, 74015, 74022, 74032, 74040, 74043, 39026, 74048, 74055, - 74060, 74064, 74068, 74073, 74077, 4478, 74082, 74087, 74092, 42402, - 42407, 74096, 42421, 74101, 42426, 74106, 74112, 42438, 42444, 42450, - 74117, 74123, 27479, 74134, 74137, 74149, 74157, 39105, 74161, 74170, - 74180, 74189, 39115, 74194, 74201, 74210, 74216, 74224, 74231, 74238, - 6950, 5174, 74243, 39037, 74249, 74252, 74258, 74265, 74270, 74275, - 28485, 74279, 74285, 74291, 74296, 74301, 74305, 74311, 74317, 40488, - 74322, 43626, 45463, 45469, 39146, 39151, 74326, 74330, 74334, 74337, - 74350, 74356, 74360, 74363, 74368, 40870, 74372, 37759, 25872, 74378, - 6879, 6887, 10377, 74381, 74386, 74391, 74396, 74401, 74406, 74411, - 74416, 74421, 74426, 74432, 74437, 74442, 74448, 74453, 74458, 74463, - 74468, 74473, 74478, 74484, 74489, 74495, 74500, 74505, 74510, 74515, - 74520, 74525, 74530, 74535, 74540, 74545, 74551, 74556, 74561, 74566, - 74571, 74576, 74581, 74587, 74592, 74597, 74602, 74607, 74612, 74617, - 74622, 74627, 74632, 74638, 74643, 74648, 74653, 74658, 74664, 74670, - 74675, 74681, 74686, 74691, 74696, 74701, 74706, 1421, 159, 74711, 74715, - 74719, 74723, 30435, 74727, 74731, 74736, 74740, 74745, 74749, 74754, - 74759, 74764, 74769, 74773, 74777, 74782, 74786, 16020, 74791, 74795, - 74802, 74812, 18315, 74821, 74830, 74839, 74843, 74848, 74853, 74857, - 74861, 30215, 3259, 74865, 74871, 21763, 74875, 74884, 74892, 74898, - 74903, 74915, 74927, 74932, 74936, 74941, 74945, 74951, 74957, 74962, - 74972, 74982, 74988, 74996, 75001, 75005, 75011, 75016, 75023, 75029, - 75034, 75041, 75050, 75059, 75067, 75071, 18871, 75074, 75083, 75091, - 75103, 75114, 75125, 75134, 75138, 75147, 75155, 75165, 75173, 75180, - 75190, 75196, 75201, 75209, 75216, 75225, 75231, 75236, 75243, 75249, - 75260, 60, 37536, 75266, 31986, 31996, 75272, 75280, 75287, 75293, 75297, - 75307, 75318, 75326, 75335, 75340, 75345, 75350, 75354, 75358, 75366, - 21710, 75373, 75377, 75383, 75393, 75400, 75407, 75413, 75419, 42501, - 75423, 75425, 75428, 75434, 75438, 75449, 75459, 75465, 75472, 75479, - 15957, 75487, 75493, 75502, 75511, 75517, 11579, 75523, 75529, 75534, - 75539, 75546, 75551, 75558, 75564, 75569, 75577, 75590, 75599, 75608, - 72138, 72148, 75618, 75624, 75633, 75639, 75645, 75652, 75659, 75666, - 75673, 75680, 75685, 75689, 75693, 75696, 75706, 75710, 75722, 75731, - 10038, 75740, 75751, 75756, 75760, 72157, 75766, 75773, 75782, 75790, - 51037, 75798, 75802, 75807, 75812, 75822, 75830, 75842, 75847, 75851, - 75855, 75861, 75869, 75876, 75888, 75896, 75907, 75914, 75920, 75930, - 75936, 75940, 75949, 75958, 75965, 75971, 75976, 75980, 75984, 75988, - 75997, 76006, 76015, 76022, 76028, 76034, 76040, 76045, 76052, 76058, - 76066, 76073, 76079, 15046, 76084, 76090, 76094, 17172, 76098, 76103, - 76113, 76118, 76127, 76133, 76139, 76147, 76154, 76158, 76162, 76169, - 76175, 76183, 76190, 76196, 76207, 76211, 76215, 76219, 76222, 76228, - 76233, 76238, 76242, 76246, 76255, 76263, 76270, 76276, 76283, 29245, - 48840, 76288, 76296, 76300, 76304, 76307, 76315, 76322, 76328, 76337, - 76345, 76351, 76356, 76360, 76365, 76370, 76374, 76378, 76382, 76387, - 76396, 76400, 76407, 45567, 76411, 76417, 76425, 76429, 76435, 76443, - 76449, 76454, 76465, 76473, 76479, 76488, 27626, 76496, 76503, 76510, - 76517, 76524, 76531, 52526, 15772, 76538, 76545, 76550, 42537, 4721, - 76556, 76561, 76566, 76572, 76578, 76584, 76589, 76594, 76599, 76604, - 76610, 76615, 76621, 76626, 76632, 76637, 76642, 76647, 76652, 76657, - 76662, 76667, 76673, 76678, 76684, 76689, 76694, 76699, 76704, 76709, - 76714, 76720, 76725, 76730, 76735, 76740, 76745, 76750, 76755, 76760, - 76765, 76770, 76776, 76781, 76786, 76791, 76796, 76801, 76806, 76811, - 76816, 76822, 76827, 76832, 76837, 76842, 76847, 76852, 76857, 76862, - 76867, 76872, 76877, 76882, 76888, 1883, 305, 76893, 46479, 46484, 76897, - 76902, 9293, 76906, 3628, 76911, 76916, 76920, 76929, 76940, 76957, - 76975, 76983, 75794, 76990, 76993, 77003, 77010, 77019, 77035, 77044, - 77054, 77059, 77072, 77082, 77091, 77099, 77113, 77121, 77130, 77134, - 77137, 77144, 77150, 77161, 77168, 77180, 77191, 77202, 77211, 77218, - 1173, 812, 77228, 2744, 77232, 77237, 77246, 997, 9059, 25308, 77254, - 77262, 77276, 77289, 77293, 77298, 77303, 77308, 77314, 77320, 77325, - 9661, 18358, 77330, 77334, 77338, 77346, 10098, 77351, 77357, 77366, - 77374, 1657, 13314, 1179, 4393, 77378, 77382, 77391, 77401, 2482, 32836, - 77410, 77416, 20438, 32851, 77422, 4558, 13696, 77428, 77435, 71848, - 77439, 77443, 77449, 77454, 77459, 3861, 163, 3887, 77464, 77476, 77480, - 77484, 77490, 77495, 33733, 77499, 13684, 2938, 4, 77504, 77514, 77525, - 77536, 77546, 77552, 77563, 77570, 77576, 77582, 2306, 77587, 77595, - 77602, 77608, 77618, 77628, 77638, 77647, 28568, 1185, 77652, 77656, - 77660, 77666, 77670, 2961, 2967, 9658, 2337, 77674, 77678, 77687, 77695, - 77706, 77714, 77722, 77728, 77733, 77744, 77755, 77763, 77769, 77774, - 11356, 77784, 77792, 77796, 77800, 77805, 77809, 77821, 34196, 18257, - 77828, 77838, 77844, 77850, 7977, 11490, 77860, 77871, 77882, 77892, - 77901, 77905, 77912, 999, 2731, 77922, 77927, 77935, 71564, 77943, 77948, - 77959, 77966, 77980, 16968, 529, 77990, 77997, 78001, 78005, 78013, - 78022, 4433, 78030, 78036, 20483, 78041, 78055, 78062, 78068, 78076, - 78085, 78094, 78101, 78113, 78123, 78131, 78138, 78146, 78153, 4357, 116, - 78161, 78172, 78176, 78188, 78194, 1804, 227, 78199, 10709, 78204, 3006, - 78208, 78215, 78221, 78232, 78242, 78250, 78257, 10049, 78264, 78273, - 78281, 4438, 78294, 4455, 78298, 78303, 78309, 78314, 78319, 78324, 3011, - 573, 78330, 78343, 78347, 78352, 78357, 3016, 1882, 763, 78361, 4459, - 78369, 78375, 78379, 799, 78389, 78398, 78403, 3878, 78407, 78411, 17989, - 17996, 9317, 78419, 4490, 4367, 15644, 78427, 78434, 78439, 28632, 78443, - 78450, 78456, 13952, 78461, 14017, 204, 78466, 78478, 78484, 78492, 3028, - 1699, 78500, 78502, 78507, 78512, 78517, 78523, 78528, 78533, 78538, - 78543, 78548, 78553, 78559, 78564, 78569, 78574, 78579, 78584, 78589, - 78594, 78599, 78605, 78610, 78615, 78620, 78626, 78631, 78637, 78642, - 78647, 78652, 78657, 78662, 78667, 78672, 78678, 78683, 78689, 78694, - 78699, 78704, 78709, 78714, 78719, 78724, 78729, 9730, 9743, 4506, 4511, - 4516, 4521, 26, 78735, 78741, 78746, 78751, 78756, 78762, 78767, 78771, - 78775, 78780, 78786, 78790, 78796, 78801, 78806, 78812, 78817, 78821, - 78826, 78831, 78835, 78838, 78840, 78844, 78847, 78854, 78859, 78863, - 78868, 78872, 78876, 78880, 78886, 78897, 78917, 78936, 78957, 78970, - 78982, 78991, 78995, 78998, 39423, 79001, 39428, 79008, 79013, 39433, - 79022, 79031, 39439, 79036, 39444, 79045, 79050, 13941, 79054, 79059, - 79064, 39449, 79068, 79077, 50696, 79081, 79084, 79088, 9325, 79094, - 79097, 79102, 79107, 79112, 79116, 4179, 39454, 79119, 79123, 79126, - 79137, 79142, 79146, 79152, 79160, 79173, 79177, 79185, 79194, 79200, - 79205, 79211, 79215, 79221, 79227, 79235, 79240, 79244, 79251, 79257, - 79265, 79274, 79282, 39457, 79289, 79299, 79308, 79316, 79327, 79340, - 79345, 79350, 79354, 79363, 79369, 79376, 79389, 79401, 79412, 79424, - 79431, 79440, 79449, 79458, 79465, 79471, 79478, 79486, 79493, 79501, - 79510, 79518, 79525, 79533, 79542, 79550, 79559, 79569, 79578, 79586, - 79593, 79601, 79610, 79618, 79627, 79637, 79646, 79654, 79663, 79673, - 79682, 79692, 79703, 79713, 79722, 79730, 79737, 79745, 79754, 79762, - 79771, 79781, 79790, 79798, 79807, 79817, 79826, 79836, 79847, 79857, - 79866, 79874, 79883, 79893, 79902, 79912, 79923, 79933, 79942, 79952, - 79963, 79973, 79984, 79996, 80007, 80017, 80026, 80034, 80041, 80049, - 80058, 80066, 80075, 80085, 80094, 80102, 80111, 80121, 80130, 80140, - 80151, 80161, 80170, 80178, 80187, 80197, 80206, 80216, 80227, 80237, - 80246, 80256, 80267, 80277, 80288, 80300, 80311, 80321, 80330, 80338, - 80347, 80357, 80366, 80376, 80387, 80397, 80406, 80416, 80427, 80437, - 80448, 80460, 80471, 80481, 80490, 80500, 80511, 80521, 80532, 80544, - 80555, 80565, 80576, 80588, 80599, 80611, 80624, 80636, 80647, 80657, - 80666, 80674, 80681, 80689, 80698, 80706, 80715, 80725, 80734, 80742, - 80751, 80761, 80770, 80780, 80791, 80801, 80810, 80818, 80827, 80837, - 80846, 80856, 80867, 80877, 80886, 80896, 80907, 80917, 80928, 80940, - 80951, 80961, 80970, 80978, 80987, 80997, 81006, 81016, 81027, 81037, - 81046, 81056, 81067, 81077, 81088, 81100, 81111, 81121, 81130, 81140, - 81151, 81161, 81172, 81184, 81195, 81205, 81216, 81228, 81239, 81251, - 81264, 81276, 81287, 81297, 81306, 81314, 81323, 81333, 81342, 81352, - 81363, 81373, 81382, 81392, 81403, 81413, 81424, 81436, 81447, 81457, - 81466, 81476, 81487, 81497, 81508, 81520, 81531, 81541, 81552, 81564, - 81575, 81587, 81600, 81612, 81623, 81633, 81642, 81652, 81663, 81673, - 81684, 81696, 81707, 81717, 81728, 81740, 81751, 81763, 81776, 81788, - 81799, 81809, 81820, 81832, 81843, 81855, 81868, 81880, 81891, 81903, - 81916, 81928, 81941, 81955, 81968, 81980, 81991, 82001, 82010, 82018, - 82025, 82030, 9090, 82037, 82042, 39467, 82048, 82053, 39472, 82059, - 82066, 25430, 31434, 82071, 82077, 82083, 82091, 82097, 82103, 82110, - 82117, 82122, 82127, 82131, 82136, 82140, 82143, 82147, 82152, 82161, - 82170, 82178, 82184, 82196, 82207, 82211, 3321, 9065, 82216, 82219, - 82222, 82224, 82228, 82232, 82236, 82242, 82247, 31497, 82252, 82256, - 82259, 82264, 82268, 82275, 82281, 82285, 7060, 82289, 82294, 39494, - 82298, 82305, 82314, 82322, 82328, 82339, 82347, 82356, 82364, 82371, - 82378, 82384, 82389, 82400, 39499, 82405, 82416, 82428, 82436, 82447, - 82456, 82464, 82475, 82480, 82488, 2696, 82493, 82502, 41891, 82515, - 82519, 82531, 82539, 82544, 82552, 82563, 21928, 82572, 82578, 82585, - 82593, 82599, 39509, 82604, 4484, 68920, 82611, 82614, 82622, 82635, - 82648, 82661, 82674, 82681, 82692, 82701, 82706, 52343, 52348, 82710, - 82714, 82722, 82729, 82738, 82746, 82752, 82761, 82769, 82776, 82784, - 82788, 82797, 82806, 82816, 82829, 82842, 82852, 39514, 82858, 82865, - 82871, 82877, 39520, 82882, 82885, 82889, 82897, 82906, 52114, 82914, - 82923, 82931, 82938, 82946, 82956, 82965, 82974, 41043, 82983, 82994, - 83009, 83019, 10747, 26246, 83028, 83033, 83038, 83042, 19547, 83047, - 83052, 83058, 83063, 83068, 83074, 83079, 83084, 26206, 83089, 83096, - 83104, 83112, 83120, 83125, 83132, 83139, 83144, 1717, 83148, 83152, - 83160, 83168, 39537, 83174, 83180, 83192, 83198, 83205, 83209, 83216, - 83221, 83228, 83234, 83241, 83252, 83262, 83272, 83284, 83290, 83298, - 83307, 83313, 83323, 83333, 39564, 83342, 83351, 83357, 83369, 83380, - 83387, 83392, 83396, 83404, 83415, 83421, 83426, 83431, 83438, 83446, - 83458, 83468, 83477, 83486, 83494, 83501, 41705, 29006, 83507, 83512, - 83516, 83520, 83525, 83533, 83539, 83550, 83563, 83568, 83575, 39569, - 83580, 83592, 83601, 83609, 83619, 83630, 83643, 83650, 83659, 83668, - 83676, 83681, 83687, 83691, 1410, 83696, 83701, 83706, 83711, 83717, - 83722, 83727, 83733, 83739, 83744, 83748, 83753, 83758, 83763, 69504, - 83768, 83773, 83778, 83783, 83789, 83795, 83800, 83804, 83809, 19546, - 83814, 83820, 83825, 83831, 83836, 83841, 83846, 83851, 83855, 83861, - 83866, 83875, 83880, 83885, 83890, 83895, 83899, 83906, 83912, 4836, - 20800, 3286, 83917, 83921, 83926, 83930, 83934, 83938, 56143, 83942, - 83867, 83944, 83954, 39578, 83957, 83962, 83971, 83977, 7019, 39583, - 83981, 83987, 83992, 83998, 84003, 84007, 84014, 84019, 84029, 84038, - 84042, 84048, 84054, 84060, 84064, 84072, 84079, 84087, 84095, 39588, - 84102, 84105, 84116, 84123, 84129, 84134, 84138, 84144, 84152, 84159, - 84164, 84168, 84177, 84185, 84191, 84196, 84203, 84211, 39593, 84218, - 28458, 84230, 84236, 84241, 84247, 84254, 84260, 25894, 33344, 84266, - 84271, 84277, 84281, 84293, 83900, 83907, 26138, 84303, 84308, 84315, - 84321, 84328, 84334, 84345, 84350, 84358, 10447, 84363, 84366, 84372, - 84376, 84380, 84383, 84389, 84395, 39282, 4837, 1425, 16069, 84402, - 84408, 84414, 84420, 84426, 84432, 84438, 84444, 84450, 84455, 84460, - 84465, 84470, 84475, 84480, 84485, 84490, 84495, 84500, 84505, 84510, - 84515, 84521, 84526, 84531, 84537, 84542, 84547, 84553, 84559, 84565, - 84571, 84577, 84583, 84589, 84595, 84601, 84606, 84611, 84617, 84622, - 84627, 84633, 84638, 84643, 84648, 84653, 84658, 84663, 84668, 84673, - 84678, 84683, 84688, 84693, 84699, 84704, 84709, 84714, 84720, 84725, - 84730, 84735, 84740, 84746, 84751, 84756, 84761, 84766, 84771, 84776, - 84781, 84786, 84791, 84796, 84801, 84806, 84811, 84816, 84821, 84826, - 84831, 84836, 84841, 84847, 84852, 84857, 84862, 84867, 84872, 84877, - 84882, 1065, 148, 84887, 84891, 84895, 84900, 84908, 84912, 84924, 84931, - 84939, 84943, 84956, 84964, 84969, 84974, 32049, 84978, 84983, 84987, - 84992, 84996, 85004, 85008, 25438, 85013, 85017, 72401, 85021, 85024, - 85032, 85040, 85048, 85053, 85058, 85065, 85072, 85078, 85084, 85089, - 85096, 85101, 85109, 77281, 85116, 85121, 72167, 85128, 85134, 85139, - 85143, 85150, 85156, 85163, 72194, 14031, 85171, 85176, 85181, 85185, - 85188, 85199, 85208, 85214, 85219, 85223, 85233, 85242, 50487, 85246, - 85250, 85257, 85270, 85276, 85284, 85291, 85300, 85311, 85322, 85333, - 85344, 85353, 85359, 85368, 85376, 85386, 85399, 85407, 85414, 85425, - 85434, 85440, 85445, 85450, 85456, 85466, 85472, 85482, 85490, 85497, - 85507, 85516, 83582, 85524, 85530, 85538, 85544, 75834, 85551, 85556, - 85559, 85563, 85569, 85573, 85576, 85584, 85590, 85596, 85604, 85616, - 85628, 85635, 85640, 85644, 85655, 85663, 85670, 85682, 85690, 85697, - 85705, 85712, 85718, 85723, 85729, 85739, 85748, 85756, 85761, 85771, - 85780, 51375, 85787, 85791, 85796, 85804, 85811, 85817, 85821, 85831, - 85842, 85850, 85857, 85869, 85881, 85890, 82505, 85897, 85907, 85919, - 85930, 85944, 85952, 85962, 85969, 85977, 85990, 86002, 86011, 86019, - 86029, 86040, 86052, 86061, 86071, 86081, 86091, 86100, 86107, 86116, - 86131, 86139, 86149, 86158, 86166, 86179, 68890, 86194, 86204, 86213, - 86225, 86235, 86247, 86258, 86272, 86286, 86300, 86314, 86328, 86342, - 86356, 86370, 86384, 86398, 86412, 86426, 86440, 86454, 86468, 86482, - 86496, 86510, 86524, 86538, 86552, 86566, 86580, 86594, 86608, 86622, - 86636, 86650, 86664, 86678, 86692, 86706, 86720, 86734, 86748, 86762, - 86776, 86790, 86804, 86818, 86832, 86846, 86860, 86874, 86888, 86902, - 86916, 86930, 86944, 86958, 86972, 86986, 87000, 87014, 87028, 87042, - 87056, 87070, 87084, 87098, 87112, 87126, 87140, 87154, 87168, 87182, - 87196, 87210, 87224, 87238, 87252, 87266, 87280, 87294, 87308, 87322, - 87336, 87350, 87364, 87378, 87392, 87406, 87420, 87434, 87448, 87462, - 87476, 87490, 87504, 87518, 87532, 87546, 87560, 87574, 87588, 87602, - 87616, 87630, 87644, 87658, 87672, 87686, 87700, 87714, 87728, 87742, - 87756, 87770, 87784, 87798, 87812, 87826, 87840, 87854, 87868, 87882, - 87896, 87910, 87924, 87938, 87952, 87966, 87980, 87994, 88008, 88022, - 88036, 88050, 88064, 88078, 88092, 88106, 88120, 88134, 88148, 88162, - 88176, 88190, 88204, 88218, 88232, 88246, 88260, 88274, 88288, 88302, - 88316, 88330, 88344, 88358, 88372, 88386, 88400, 88414, 88428, 88442, - 88456, 88470, 88484, 88498, 88512, 88526, 88540, 88554, 88568, 88582, - 88596, 88610, 88624, 88638, 88652, 88666, 88680, 88694, 88708, 88722, - 88736, 88750, 88764, 88778, 88792, 88806, 88820, 88834, 88848, 88862, - 88876, 88890, 88904, 88918, 88932, 88946, 88960, 88974, 88988, 89002, - 89016, 89030, 89044, 89058, 89072, 89086, 89100, 89114, 89128, 89142, - 89156, 89170, 89184, 89198, 89212, 89226, 89240, 89254, 89268, 89282, - 89296, 89310, 89324, 89338, 89352, 89366, 89380, 89394, 89408, 89422, - 89436, 89450, 89464, 89478, 89492, 89506, 89520, 89534, 89548, 89562, - 89576, 89590, 89604, 89618, 89632, 89646, 89660, 89674, 89688, 89702, - 89716, 89730, 89744, 89758, 89772, 89786, 89800, 89814, 89828, 89842, - 89856, 89870, 89884, 89898, 89912, 89926, 89940, 89954, 89968, 89982, - 89996, 90010, 90024, 90038, 90052, 90066, 90080, 90094, 90108, 90122, - 90136, 90150, 90164, 90178, 90192, 90206, 90220, 90234, 90248, 90262, - 90276, 90290, 90304, 90318, 90332, 90346, 90360, 90374, 90388, 90402, - 90416, 90430, 90444, 90458, 90472, 90486, 90500, 90514, 90528, 90542, - 90556, 90570, 90584, 90598, 90612, 90626, 90640, 90654, 90668, 90682, - 90696, 90710, 90724, 90738, 90752, 90766, 90780, 90794, 90808, 90822, - 90836, 90850, 90864, 90878, 90892, 90906, 90920, 90934, 90948, 90962, - 90976, 90990, 91004, 91018, 91032, 91046, 91060, 91074, 91088, 91102, - 91116, 91130, 91144, 91158, 91172, 91186, 91200, 91214, 91228, 91242, - 91256, 91270, 91284, 91298, 91312, 91326, 91340, 91354, 91368, 91382, - 91396, 91410, 91424, 91438, 91452, 91466, 91480, 91494, 91508, 91522, - 91536, 91550, 91564, 91578, 91592, 91606, 91620, 91634, 91648, 91662, - 91676, 91690, 91704, 91718, 91732, 91746, 91760, 91774, 91788, 91802, - 91816, 91830, 91844, 91858, 91872, 91886, 91900, 91914, 91928, 91942, - 91956, 91970, 91984, 91998, 92012, 92026, 92040, 92054, 92068, 92082, - 92096, 92110, 92124, 92138, 92152, 92166, 92180, 92194, 92208, 92222, - 92236, 92250, 92264, 92278, 92292, 92306, 92320, 92334, 92348, 92362, - 92376, 92390, 92404, 92418, 92432, 92446, 92460, 92474, 92488, 92502, - 92516, 92530, 92544, 92558, 92572, 92586, 92600, 92614, 92628, 92642, - 92656, 92670, 92684, 92698, 92712, 92726, 92740, 92754, 92768, 92782, - 92796, 92810, 92824, 92838, 92852, 92866, 92880, 92894, 92908, 92922, - 92936, 92950, 92964, 92978, 92992, 93006, 93020, 93034, 93048, 93062, - 93076, 93090, 93104, 93118, 93132, 93146, 93160, 93174, 93188, 93202, - 93216, 93230, 93244, 93258, 93272, 93286, 93300, 93314, 93328, 93342, - 93356, 93370, 93384, 93398, 93412, 93426, 93440, 93454, 93468, 93482, - 93496, 93510, 93524, 93538, 93552, 93566, 93580, 93594, 93608, 93622, - 93636, 93650, 93664, 93678, 93692, 93706, 93720, 93734, 93748, 93762, - 93776, 93790, 93804, 93818, 93832, 93846, 93860, 93874, 93888, 93902, - 93916, 93930, 93944, 93958, 93972, 93986, 94000, 94014, 94028, 94042, - 94056, 94070, 94084, 94098, 94112, 94126, 94140, 94154, 94168, 94182, - 94196, 94210, 94224, 94238, 94252, 94266, 94280, 94294, 94308, 94322, - 94336, 94350, 94364, 94378, 94392, 94406, 94420, 94434, 94448, 94462, - 94476, 94490, 94504, 94518, 94532, 94546, 94560, 94574, 94588, 94602, - 94616, 94630, 94644, 94658, 94672, 94686, 94700, 94714, 94728, 94742, - 94756, 94770, 94784, 94798, 94812, 94826, 94840, 94854, 94868, 94882, - 94896, 94910, 94924, 94938, 94952, 94966, 94980, 94994, 95008, 95022, - 95036, 95050, 95064, 95078, 95092, 95106, 95120, 95134, 95148, 95162, - 95176, 95190, 95204, 95218, 95232, 95246, 95260, 95274, 95288, 95302, - 95316, 95330, 95344, 95358, 95372, 95386, 95400, 95414, 95428, 95442, - 95456, 95470, 95484, 95498, 95512, 95526, 95540, 95554, 95568, 95582, - 95596, 95610, 95624, 95638, 95652, 95666, 95680, 95694, 95708, 95722, - 95736, 95750, 95764, 95778, 95792, 95806, 95820, 95834, 95848, 95862, - 95876, 95890, 95904, 95918, 95932, 95946, 95960, 95974, 95988, 96002, - 96016, 96030, 96044, 96058, 96072, 96086, 96100, 96114, 96128, 96142, - 96156, 96170, 96184, 96198, 96212, 96226, 96240, 96254, 96268, 96282, - 96296, 96310, 96324, 96338, 96352, 96366, 96380, 96394, 96408, 96422, - 96436, 96450, 96464, 96478, 96492, 96506, 96520, 96534, 96548, 96562, - 96576, 96590, 96604, 96618, 96632, 96646, 96660, 96674, 96688, 96702, - 96716, 96730, 96744, 96758, 96772, 96786, 96800, 96814, 96828, 96842, - 96856, 96870, 96884, 96898, 96912, 96926, 96940, 96954, 96968, 96982, - 96996, 97010, 97019, 97030, 97041, 97051, 97062, 97070, 97078, 97084, - 97094, 97102, 97108, 35368, 97113, 97119, 97128, 97140, 97145, 97152, - 11370, 21948, 97158, 97167, 97172, 97176, 97181, 97188, 97194, 97199, - 97204, 97212, 97220, 97230, 97235, 97243, 14513, 97247, 97253, 97259, - 97265, 97271, 97277, 97283, 97289, 97295, 97301, 97307, 97313, 97319, - 97325, 97331, 97337, 97343, 97349, 97355, 97361, 97367, 97373, 97379, - 97385, 97391, 97397, 97403, 97409, 97415, 97421, 97427, 97433, 97439, - 97445, 97451, 97457, 97463, 97470, 97476, 97482, 97488, 97494, 97500, - 97506, 97512, 97518, 97524, 97530, 97536, 97542, 97548, 97554, 97560, - 97566, 97572, 97578, 97584, 97590, 97596, 97602, 97608, 97614, 97620, - 97626, 97632, 97638, 97644, 97650, 97656, 97662, 97668, 97674, 97680, - 97686, 97692, 97698, 97704, 97710, 97716, 97722, 97728, 97734, 97740, - 97746, 97752, 97758, 97764, 97770, 97777, 97783, 97789, 97795, 97801, - 97807, 97813, 97819, 97825, 97831, 97837, 97843, 97846, 97848, 97863, - 97876, 97883, 97889, 97900, 97905, 97909, 97914, 97921, 97927, 97932, - 97940, 77884, 77894, 97946, 97953, 97963, 12672, 97970, 97975, 35616, - 97984, 97989, 97996, 98006, 98014, 98022, 98031, 98040, 98046, 98052, - 98057, 98064, 98071, 98076, 98080, 98088, 72211, 98093, 98102, 98110, - 98117, 98122, 98126, 98135, 98141, 98144, 98148, 98157, 98167, 84951, - 98176, 98180, 98188, 98192, 98198, 98209, 98219, 21957, 98230, 98239, - 98247, 98255, 98262, 72230, 9895, 98270, 98274, 98283, 98290, 98293, - 98297, 33215, 98300, 98304, 98309, 98326, 98338, 12630, 98350, 98355, - 98360, 98365, 25545, 98369, 98374, 98379, 98385, 98390, 6640, 98395, - 25549, 98400, 98405, 98411, 98418, 98423, 98428, 98434, 98440, 98446, - 98451, 98457, 98461, 98475, 98483, 98491, 98497, 98502, 98509, 98519, - 98528, 98533, 98538, 98543, 98551, 98561, 98572, 98577, 98583, 98588, - 98597, 70639, 4760, 98602, 98620, 98639, 98652, 98666, 98682, 98689, - 98696, 98705, 98712, 98718, 98725, 98730, 98736, 98741, 98747, 98755, - 98761, 98766, 98771, 98787, 12643, 98801, 98808, 98816, 98822, 98826, - 98829, 98835, 98840, 98845, 98853, 98860, 98865, 98874, 98880, 98885, - 98891, 98897, 98906, 98915, 43462, 98920, 98931, 98938, 98946, 98955, - 14104, 98964, 98970, 98978, 98984, 98990, 98996, 99001, 99008, 99014, - 14115, 99019, 99022, 99027, 39620, 99037, 99046, 99051, 99059, 99066, - 99072, 99077, 99085, 99092, 99103, 99119, 99135, 99151, 99167, 99183, - 99199, 99215, 99231, 99247, 99263, 99279, 99295, 99311, 99327, 99343, - 99359, 99375, 99391, 99407, 99423, 99439, 99455, 99471, 99487, 99503, - 99519, 99535, 99551, 99567, 99583, 99599, 99615, 99631, 99647, 99663, - 99679, 99695, 99711, 99727, 99743, 99759, 99775, 99791, 99807, 99823, - 99839, 99855, 99871, 99887, 99903, 99919, 99935, 99951, 99967, 99983, - 99999, 100015, 100031, 100047, 100063, 100079, 100095, 100111, 100127, - 100143, 100159, 100175, 100191, 100207, 100223, 100239, 100255, 100271, - 100287, 100303, 100319, 100335, 100351, 100367, 100383, 100399, 100415, - 100431, 100447, 100463, 100479, 100495, 100511, 100527, 100543, 100559, - 100575, 100591, 100607, 100623, 100639, 100655, 100671, 100687, 100703, - 100719, 100735, 100751, 100767, 100783, 100799, 100815, 100831, 100847, - 100863, 100879, 100895, 100911, 100927, 100943, 100959, 100975, 100991, - 101007, 101023, 101039, 101055, 101071, 101087, 101103, 101119, 101135, - 101151, 101167, 101183, 101199, 101215, 101231, 101247, 101263, 101279, - 101295, 101311, 101327, 101343, 101359, 101375, 101391, 101407, 101423, - 101439, 101455, 101471, 101487, 101503, 101519, 101535, 101551, 101567, - 101583, 101599, 101615, 101631, 101647, 101663, 101679, 101695, 101711, - 101727, 101743, 101759, 101775, 101791, 101807, 101823, 101839, 101855, - 101871, 101887, 101903, 101919, 101935, 101951, 101967, 101983, 101999, - 102015, 102031, 102047, 102063, 102079, 102095, 102111, 102127, 102143, - 102159, 102175, 102191, 102207, 102223, 102239, 102255, 102271, 102287, - 102303, 102319, 102335, 102351, 102367, 102383, 102399, 102415, 102431, - 102447, 102463, 102479, 102495, 102511, 102527, 102543, 102559, 102575, - 102591, 102607, 102623, 102639, 102655, 102671, 102687, 102703, 102719, - 102735, 102751, 102767, 102783, 102799, 102815, 102831, 102847, 102863, - 102879, 102895, 102911, 102927, 102943, 102959, 102975, 102991, 103007, - 103023, 103039, 103055, 103071, 103087, 103103, 103119, 103135, 103151, - 103167, 103183, 103199, 103215, 103231, 103247, 103263, 103279, 103295, - 103311, 103327, 103343, 103359, 103375, 103391, 103407, 103423, 103439, - 103455, 103471, 103487, 103503, 103519, 103535, 103551, 103567, 103583, - 103599, 103615, 103631, 103647, 103663, 103679, 103695, 103711, 103727, - 103743, 103759, 103775, 103791, 103807, 103823, 103839, 103855, 103871, - 103887, 103903, 103919, 103935, 103951, 103967, 103983, 103999, 104015, - 104031, 104047, 104063, 104079, 104095, 104111, 104127, 104143, 104159, - 104175, 104191, 104207, 104223, 104239, 104255, 104271, 104287, 104303, - 104319, 104335, 104351, 104367, 104383, 104399, 104415, 104431, 104447, - 104463, 104479, 104495, 104511, 104527, 104543, 104559, 104575, 104591, - 104607, 104623, 104639, 104655, 104671, 104687, 104703, 104719, 104735, - 104751, 104767, 104783, 104799, 104815, 104831, 104847, 104863, 104879, - 104895, 104911, 104927, 104943, 104959, 104975, 104991, 105007, 105023, - 105039, 105055, 105071, 105087, 105103, 105119, 105135, 105151, 105167, - 105183, 105199, 105215, 105231, 105247, 105263, 105279, 105295, 105311, - 105327, 105343, 105359, 105375, 105391, 105407, 105423, 105439, 105455, - 105471, 105487, 105503, 105519, 105535, 105551, 105567, 105583, 105599, - 105615, 105631, 105647, 105663, 105679, 105695, 105711, 105727, 105743, - 105759, 105775, 105791, 105807, 105823, 105839, 105855, 105871, 105887, - 105903, 105919, 105935, 105951, 105967, 105983, 105999, 106015, 106031, - 106047, 106063, 106079, 106095, 106111, 106127, 106143, 106159, 106175, - 106191, 106207, 106223, 106239, 106255, 106271, 106287, 106303, 106319, - 106335, 106351, 106367, 106383, 106399, 106415, 106431, 106447, 106463, - 106479, 106495, 106511, 106527, 106543, 106559, 106575, 106591, 106607, - 106623, 106639, 106655, 106671, 106687, 106703, 106719, 106735, 106751, - 106767, 106783, 106799, 106815, 106831, 106847, 106863, 106879, 106895, - 106911, 106927, 106943, 106959, 106975, 106991, 107007, 107023, 107039, - 107055, 107071, 107087, 107103, 107119, 107135, 107151, 107167, 107183, - 107199, 107215, 107231, 107247, 107263, 107279, 107295, 107311, 107327, - 107343, 107359, 107375, 107391, 107407, 107423, 107439, 107455, 107471, - 107487, 107503, 107519, 107535, 107551, 107567, 107583, 107599, 107615, - 107631, 107647, 107663, 107679, 107695, 107711, 107727, 107743, 107759, - 107775, 107791, 107807, 107823, 107839, 107855, 107871, 107887, 107903, - 107919, 107935, 107951, 107967, 107983, 107999, 108015, 108031, 108047, - 108063, 108079, 108095, 108111, 108127, 108143, 108159, 108175, 108191, - 108207, 108223, 108239, 108255, 108271, 108287, 108303, 108319, 108335, - 108351, 108367, 108383, 108399, 108415, 108431, 108447, 108463, 108479, - 108495, 108511, 108527, 108543, 108559, 108575, 108591, 108607, 108623, - 108639, 108655, 108671, 108687, 108703, 108719, 108735, 108751, 108767, - 108783, 108799, 108815, 108831, 108847, 108863, 108879, 108895, 108911, - 108927, 108943, 108959, 108975, 108991, 109007, 109023, 109039, 109055, - 109071, 109087, 109103, 109119, 109135, 109151, 109167, 109183, 109199, - 109215, 109231, 109247, 109263, 109279, 109295, 109311, 109327, 109343, - 109359, 109375, 109391, 109407, 109423, 109439, 109455, 109471, 109487, - 109503, 109519, 109535, 109551, 109567, 109583, 109599, 109615, 109631, - 109647, 109663, 109679, 109695, 109711, 109727, 109743, 109759, 109775, - 109791, 109807, 109823, 109839, 109855, 109871, 109887, 109903, 109919, - 109935, 109951, 109967, 109983, 109999, 110015, 110031, 110047, 110063, - 110079, 110095, 110111, 110127, 110143, 110159, 110175, 110191, 110207, - 110223, 110239, 110255, 110271, 110287, 110303, 110319, 110335, 110351, - 110367, 110383, 110399, 110415, 110431, 110447, 110463, 110479, 110495, - 110511, 110527, 110543, 110559, 110575, 110591, 110607, 110623, 110639, - 110655, 110671, 110687, 110703, 110719, 110735, 110751, 110767, 110783, - 110799, 110815, 110831, 110847, 110863, 110879, 110895, 110911, 110927, - 110943, 110959, 110975, 110991, 111007, 111023, 111039, 111055, 111071, - 111087, 111103, 111119, 111135, 111151, 111167, 111183, 111199, 111215, - 111231, 111247, 111263, 111279, 111295, 111311, 111327, 111343, 111359, - 111375, 111391, 111407, 111423, 111439, 111455, 111471, 111487, 111503, - 111519, 111535, 111551, 111567, 111583, 111599, 111615, 111631, 111647, - 111663, 111679, 111695, 111711, 111727, 111743, 111759, 111775, 111791, - 111807, 111823, 111839, 111855, 111871, 111887, 111903, 111919, 111935, - 111951, 111967, 111983, 111999, 112015, 112031, 112047, 112063, 112079, - 112095, 112111, 112127, 112143, 112159, 112175, 112191, 112207, 112223, - 112239, 112255, 112271, 112287, 112303, 112319, 112335, 112351, 112367, - 112383, 112399, 112415, 112431, 112447, 112463, 112479, 112495, 112511, - 112527, 112543, 112559, 112575, 112591, 112607, 112623, 112639, 112655, - 112671, 112687, 112703, 112719, 112735, 112751, 112767, 112783, 112799, - 112815, 112831, 112847, 112863, 112879, 112895, 112911, 112927, 112943, - 112959, 112969, 112978, 112983, 112991, 77204, 112996, 113002, 113007, - 113014, 113023, 113031, 113035, 4338, 113041, 113048, 113054, 113058, - 20549, 46595, 3295, 113063, 113067, 113071, 113078, 113084, 113093, - 113099, 113106, 113110, 113131, 113153, 113169, 113186, 113205, 113214, - 113224, 113232, 113239, 113246, 113252, 33070, 113266, 113270, 113276, - 113284, 113296, 113302, 113310, 113317, 113322, 113327, 113331, 113339, - 113346, 113350, 113356, 113362, 113367, 3972, 52543, 113373, 113377, - 113381, 113385, 113390, 113395, 113400, 113406, 113412, 113418, 113425, - 113431, 113438, 113444, 113450, 113455, 113461, 113466, 113470, 105563, - 113475, 105627, 52558, 113480, 113485, 113493, 113497, 113502, 113509, - 113518, 113525, 113531, 113540, 113544, 113551, 113555, 113558, 113565, - 113571, 113580, 113590, 113600, 113605, 113609, 113616, 113624, 113633, - 113637, 113645, 113651, 113656, 113661, 113667, 113673, 113678, 113682, - 31947, 113688, 113692, 113696, 113699, 113704, 113712, 113722, 113728, - 113733, 113743, 49664, 113751, 113763, 113769, 113776, 113782, 113786, - 113791, 113797, 113809, 113820, 113827, 113833, 113840, 113847, 113859, - 113866, 113872, 25629, 113876, 113884, 113890, 113897, 113903, 113909, - 113915, 113920, 113925, 113930, 113934, 113943, 113951, 113962, 7934, - 113967, 19985, 113973, 113977, 113981, 113985, 113993, 114002, 114006, - 114013, 114022, 114030, 114043, 114049, 106139, 36551, 114054, 114056, - 114061, 114066, 114071, 114076, 114081, 114086, 114091, 114096, 114101, - 114106, 114111, 114116, 114121, 114126, 114132, 114137, 114142, 114147, - 114152, 114157, 114162, 114167, 114172, 114178, 114184, 114190, 114195, - 114200, 114212, 114217, 1935, 54, 114222, 114227, 39630, 114231, 39635, - 39640, 39646, 39651, 114235, 39656, 26815, 114257, 114261, 114265, - 114270, 114274, 39660, 114278, 114286, 114293, 114299, 114309, 39665, - 114316, 114319, 114324, 114328, 114337, 11168, 114345, 39670, 26659, - 114348, 114352, 114360, 1307, 114365, 39681, 114368, 114373, 114378, - 31188, 31198, 43060, 114383, 114388, 114393, 114398, 114404, 114409, - 114418, 114423, 114432, 114440, 114447, 114453, 114458, 114463, 114468, - 114478, 114487, 114495, 114500, 114508, 114512, 114520, 114524, 114531, - 114538, 114546, 114553, 39485, 46310, 114559, 114565, 114570, 114575, - 14548, 11961, 114580, 114585, 114590, 114596, 114603, 114609, 114618, - 114623, 114631, 114641, 114648, 114658, 114664, 114669, 114675, 114679, - 21979, 114686, 44045, 114699, 114704, 114711, 114717, 114732, 37615, - 75612, 114745, 114749, 114758, 114767, 114774, 114780, 114788, 114794, - 114802, 114811, 114819, 114826, 46430, 114832, 114835, 114839, 114843, - 114847, 11982, 114853, 114860, 114866, 114874, 114879, 114883, 29180, - 114889, 114892, 114900, 114907, 114915, 114928, 114942, 114949, 114955, - 114962, 114968, 39695, 114972, 114978, 114986, 114993, 115001, 115009, - 115015, 39700, 115023, 115029, 115034, 115044, 115050, 115059, 37410, - 42408, 115067, 115072, 115077, 115081, 115086, 115090, 115098, 115103, - 17981, 18806, 49686, 115107, 115112, 39705, 18138, 115116, 115128, - 115133, 115137, 115144, 115153, 115157, 115165, 115171, 115176, 115184, - 115192, 115200, 115208, 115216, 115224, 115235, 115241, 9132, 115246, - 115252, 115257, 115262, 115273, 115282, 115294, 115309, 40017, 115315, - 20104, 39709, 115319, 115326, 115332, 115336, 29317, 115343, 115349, - 115356, 48811, 115365, 115371, 115380, 115386, 115391, 115399, 115405, - 115410, 39719, 115415, 115424, 115433, 113815, 115442, 115449, 115455, - 115461, 115470, 115480, 115486, 115494, 115501, 115505, 39724, 115508, - 39730, 1346, 115513, 115521, 115529, 115539, 115548, 115556, 115563, - 115573, 39741, 115577, 115579, 115583, 115588, 115592, 115596, 115602, - 115607, 115611, 115622, 115627, 115633, 115638, 115647, 115652, 3300, - 115656, 115663, 115667, 115676, 115684, 115692, 115699, 115704, 115709, - 74113, 115713, 115716, 115722, 115730, 115736, 115740, 115745, 115752, - 115757, 115762, 115766, 115773, 115779, 115784, 42439, 115788, 115791, - 115796, 115800, 115805, 115812, 115817, 115821, 47780, 115829, 31207, - 31216, 115835, 115841, 115847, 115852, 115856, 115859, 115869, 115878, - 115883, 115889, 115896, 115902, 115906, 115914, 115919, 42445, 85210, - 115923, 115931, 115938, 115944, 115951, 115956, 115963, 115968, 115972, - 115978, 115983, 69106, 115989, 115995, 10386, 116000, 116005, 116009, - 116014, 116019, 116024, 116028, 116033, 116038, 116044, 116049, 116054, - 116060, 116066, 116071, 116075, 116080, 116085, 116090, 116094, 29316, - 116099, 116104, 116110, 116116, 116122, 116127, 116131, 116136, 116141, - 109915, 116146, 116151, 116156, 116161, 109979, 52813, 116166, 39749, - 116174, 116178, 116186, 116194, 116205, 116210, 116214, 27294, 82608, - 116219, 116225, 116230, 4649, 116240, 116247, 116252, 116260, 116269, - 116274, 116278, 116283, 116287, 116295, 116303, 116310, 77470, 116316, - 116324, 116331, 116342, 116348, 116354, 39759, 116357, 116364, 116372, - 116377, 116381, 33589, 71792, 116387, 116392, 116399, 116404, 10275, - 116408, 116416, 116423, 116430, 116439, 116446, 116452, 116466, 116474, - 6724, 116236, 116480, 116485, 116491, 116495, 116498, 116506, 116513, - 116518, 116531, 116538, 116544, 116548, 116556, 116561, 116568, 116574, - 116579, 72070, 116584, 116587, 116596, 116603, 110187, 116609, 116612, - 116620, 116626, 116635, 116645, 116655, 116664, 116675, 116683, 116694, - 116699, 116703, 116708, 116712, 43191, 116720, 18771, 43200, 116725, - 101706, 101722, 101738, 101754, 101770, 116730, 101802, 101818, 101834, - 101850, 101962, 101978, 116734, 102010, 102026, 116738, 116742, 116746, - 116750, 102266, 102298, 116754, 102330, 116758, 116762, 102474, 102490, - 102506, 102522, 116766, 102586, 102602, 116770, 102730, 102746, 102762, - 102778, 102794, 102810, 102826, 102842, 102858, 102874, 102986, 103002, - 103018, 103034, 103050, 103066, 103082, 103098, 103114, 103130, 116774, - 104922, 105034, 105098, 105114, 105130, 105146, 105162, 105178, 105290, - 105306, 105322, 116778, 105370, 116782, 105402, 105418, 105434, 116786, - 116791, 116796, 116801, 116806, 116811, 116816, 116820, 116824, 116829, - 116834, 116838, 116843, 116848, 116852, 116857, 116862, 116867, 116872, - 116876, 116881, 116886, 116890, 116895, 116899, 116903, 116907, 116911, - 116916, 116920, 116924, 116928, 116932, 116936, 116940, 116944, 116948, - 116952, 116957, 116962, 116967, 116972, 116977, 116982, 116987, 116992, - 116997, 117002, 117006, 117010, 117014, 117018, 117022, 117026, 117031, - 117035, 117040, 117044, 117049, 117054, 117058, 117062, 117067, 117071, - 117075, 117079, 117083, 117087, 117091, 117095, 117099, 117103, 117107, - 117111, 117115, 117119, 117123, 117128, 117133, 117137, 117141, 117145, - 117149, 117153, 117157, 117162, 117166, 117170, 117174, 117178, 117182, - 117186, 117191, 117195, 117200, 117204, 117208, 117212, 117216, 117220, - 117224, 117228, 117232, 117236, 117240, 117244, 117249, 117253, 117257, - 117261, 117265, 117269, 117273, 117277, 117281, 117285, 117289, 117293, - 117298, 117302, 117306, 117311, 117316, 117320, 117324, 117328, 117332, - 117336, 117340, 117344, 117348, 117353, 117357, 117362, 117366, 117371, - 117375, 117380, 117384, 117390, 117395, 117399, 117404, 117408, 117413, - 117417, 117422, 117426, 117431, 1429, 117435, 117439, 3042, 1705, 28453, - 1602, 31143, 117443, 3051, 117447, 1276, 117452, 1218, 117456, 117460, - 117464, 117468, 117472, 117476, 3075, 117480, 117488, 117495, 117502, - 117516, 3079, 8044, 117525, 117533, 117540, 117551, 117560, 117564, - 117571, 117583, 117596, 117609, 117620, 117625, 117632, 117644, 117648, - 3083, 14185, 117658, 117663, 117672, 117682, 117687, 117696, 3087, - 117704, 117708, 117713, 117720, 117726, 117731, 117740, 117748, 117760, - 117770, 1223, 15645, 117783, 117787, 117793, 117807, 117819, 117831, - 117839, 117849, 117858, 117867, 117876, 117884, 117895, 117903, 4657, - 117913, 117924, 117933, 117939, 117954, 117961, 117967, 117972, 43334, - 117977, 3111, 15649, 117981, 117986, 117993, 10206, 118002, 118008, 4695, - 118018, 3116, 39121, 118027, 71682, 118034, 118038, 118044, 118055, - 118061, 118066, 118073, 118079, 118087, 118094, 118100, 118111, 118127, - 118137, 118146, 118157, 118166, 118173, 118179, 118189, 118197, 118203, - 118218, 118224, 118229, 118233, 118240, 118248, 118252, 118255, 118261, - 118268, 118274, 118282, 118291, 118299, 118305, 118314, 52116, 118328, - 118333, 118339, 17732, 118344, 118357, 118369, 118378, 118386, 118393, - 118397, 118401, 118404, 118411, 118418, 118426, 118434, 118443, 118451, - 17631, 118459, 118464, 118468, 118480, 118487, 118494, 118503, 954, - 118513, 118522, 118533, 3137, 118537, 118541, 118547, 118560, 118572, - 118582, 118591, 118603, 32105, 118614, 118622, 118631, 118642, 118653, - 118663, 118673, 118681, 118690, 118698, 13604, 118705, 118709, 118712, - 118717, 118722, 118726, 118732, 1228, 118739, 118743, 14281, 118747, - 118751, 118762, 118771, 118779, 118788, 118796, 118812, 118823, 118832, - 118840, 118852, 118863, 118879, 118889, 118910, 118924, 118937, 118945, - 118952, 8090, 118965, 118970, 118976, 6733, 118982, 118985, 118992, - 119002, 9266, 119009, 119014, 119019, 119026, 119034, 119042, 119048, - 119053, 119059, 119063, 119071, 119080, 119088, 119093, 119102, 119109, - 11418, 11427, 119115, 119126, 119132, 119137, 119143, 3153, 3158, 119149, - 1063, 119155, 119162, 119169, 119182, 119192, 119197, 2324, 87, 119205, - 119212, 119217, 119225, 119235, 119244, 119250, 119259, 119267, 119277, - 119281, 119285, 119290, 119294, 119306, 3181, 119314, 119322, 119327, - 119338, 119349, 119361, 119372, 119382, 119391, 26013, 119396, 119402, - 119407, 119417, 119427, 119432, 34323, 119438, 119443, 119452, 26035, - 119456, 26046, 119461, 4783, 8, 119468, 119477, 119484, 119491, 119497, - 119502, 119506, 119512, 34353, 119517, 119522, 72367, 119527, 119532, - 119538, 119544, 119552, 119557, 119565, 119573, 119582, 119589, 119595, - 119602, 119608, 119615, 119620, 47649, 52010, 119626, 119636, 1822, 32, - 119643, 119648, 119661, 119666, 119674, 119679, 119685, 3207, 30884, - 3221, 119690, 119698, 119705, 119710, 119715, 119724, 4340, 4351, 73711, - 119732, 119736, 1629, 1862, 119741, 119746, 119753, 34774, 1866, 331, - 119760, 119766, 119771, 3229, 119775, 119780, 119787, 1870, 119792, - 119798, 119803, 119815, 6978, 119825, 119832, 1877, 119838, 119843, - 119850, 119857, 119872, 119879, 119890, 119895, 119903, 2772, 119907, - 119919, 119924, 119928, 119934, 34195, 2329, 119938, 119949, 119953, - 119957, 119963, 119967, 119976, 119980, 119991, 119995, 2375, 38938, - 119999, 120009, 120017, 3320, 120023, 120032, 120040, 10752, 120045, - 120053, 120058, 120062, 120071, 120078, 120084, 3290, 17796, 120088, - 120101, 44058, 120119, 120124, 120132, 120140, 120150, 11759, 15773, - 120162, 120175, 120182, 120192, 120206, 120213, 120229, 120236, 120242, - 26093, 14980, 120249, 120256, 120266, 120275, 52812, 120287, 120295, - 52947, 120302, 120305, 120311, 120317, 120323, 120329, 120335, 120342, - 120349, 120355, 120361, 120367, 120373, 120379, 120385, 120391, 120397, - 120403, 120409, 120415, 120421, 120427, 120433, 120439, 120445, 120451, - 120457, 120463, 120469, 120475, 120481, 120487, 120493, 120499, 120505, - 120511, 120517, 120523, 120529, 120535, 120541, 120547, 120553, 120559, - 120565, 120571, 120577, 120583, 120589, 120595, 120601, 120607, 120613, - 120619, 120625, 120631, 120637, 120643, 120649, 120655, 120662, 120668, - 120675, 120682, 120688, 120695, 120702, 120708, 120714, 120720, 120726, - 120732, 120738, 120744, 120750, 120756, 120762, 120768, 120774, 120780, - 120786, 120792, 3304, 10720, 120798, 120808, 120814, 120822, 120826, - 117716, 3308, 120830, 114044, 25758, 4701, 4265, 120834, 3314, 120838, - 120848, 120854, 120860, 120866, 120872, 120878, 120884, 120890, 120896, - 120902, 120908, 120914, 120920, 120926, 120932, 120938, 120944, 120950, - 120956, 120962, 120968, 120974, 120980, 120986, 120992, 120998, 121005, - 121012, 121018, 121024, 121030, 121036, 121042, 121048, 1233, 121054, - 121059, 121064, 121069, 121074, 121079, 121084, 121089, 121094, 121098, - 121102, 121106, 121110, 121114, 121118, 121122, 121126, 121130, 121136, - 121142, 121148, 121154, 121158, 121162, 121166, 121170, 121174, 121178, - 121182, 121186, 121190, 121195, 121200, 121205, 121210, 121215, 121220, - 121225, 121230, 121235, 121240, 121245, 121250, 121255, 121260, 121265, - 121270, 121275, 121280, 121285, 121290, 121295, 121300, 121305, 121310, - 121315, 121320, 121325, 121330, 121335, 121340, 121345, 121350, 121355, - 121360, 121365, 121370, 121375, 121380, 121385, 121390, 121395, 121400, - 121405, 121410, 121415, 121420, 121425, 121430, 121435, 121440, 121445, - 121450, 121455, 121460, 121465, 121470, 121475, 121480, 121485, 121490, - 121495, 121500, 121505, 121510, 121515, 121520, 121525, 121530, 121535, - 121540, 121545, 121550, 121555, 121560, 121565, 121570, 121575, 121580, - 121585, 121590, 121595, 121600, 121605, 121610, 121615, 121620, 121625, - 121630, 121635, 121640, 121645, 121650, 121655, 121660, 121665, 121670, - 121675, 121680, 121685, 121690, 121695, 121700, 121705, 121710, 121715, - 121720, 121725, 121730, 121735, 121740, 121745, 121750, 121755, 121760, - 121765, 121770, 121775, 121780, 121785, 121790, 121795, 121800, 121805, - 121810, 121815, 121820, 121825, 121830, 121835, 121840, 121845, 121850, - 121855, 121860, 121865, 121870, 121875, 121880, 121885, 121890, 121895, - 121900, 121905, 121910, 121915, 121920, 121925, 121930, 121935, 121940, - 121945, 121950, 121955, 121960, 121965, 121970, 121975, 121980, 121985, - 121990, 121995, 122000, 122005, 122010, 122015, 122020, 122025, 122030, - 122035, 122040, 122045, 122050, 122055, 122060, 122065, 122070, 122075, - 122080, 122086, 122091, 122096, 122101, 122106, 122111, 122116, 122121, - 122127, 122132, 122137, 122142, 122147, 122152, 122157, 122162, 122167, - 122172, 122177, 122182, 122187, 122192, 122197, 122202, 122207, 122212, - 122217, 122222, 122227, 122232, 122237, 122242, 122247, 122252, 122257, - 122262, 122267, 122272, 122277, 122282, 122287, 122296, 122301, 122310, - 122315, 122324, 122329, 122338, 122343, 122352, 122357, 122366, 122371, - 122380, 122385, 122394, 122399, 122404, 122413, 122417, 122426, 122431, - 122440, 122445, 122454, 122459, 122468, 122473, 122482, 122487, 122496, - 122501, 122510, 122515, 122524, 122529, 122538, 122543, 122552, 122557, - 122562, 122567, 122572, 122577, 122582, 122587, 122591, 122596, 122601, - 122606, 122611, 122616, 122621, 122627, 122632, 122637, 122642, 122648, - 122652, 122657, 122663, 122668, 122673, 122678, 122683, 122688, 122693, - 122698, 122703, 122708, 122713, 122719, 122724, 122729, 122734, 122740, - 122745, 122750, 122755, 122760, 122766, 122771, 122776, 122781, 122786, - 122791, 122797, 122802, 122807, 122812, 122817, 122822, 122827, 122832, - 122837, 122842, 122847, 122852, 122857, 122862, 122867, 122872, 122877, - 122882, 122887, 122892, 122897, 122902, 122907, 122912, 122918, 122924, - 122930, 122935, 122940, 122945, 122950, 122956, 122962, 122968, 122973, - 122978, 122983, 122989, 122994, 122999, 123004, 123009, 123014, 123019, - 123024, 123029, 123034, 123039, 123044, 123049, 123054, 123059, 123064, - 123069, 123075, 123081, 123087, 123092, 123097, 123102, 123107, 123113, - 123119, 123125, 123130, 123135, 123140, 123145, 123150, 123155, 123160, - 123165, 123170, 19463, 123175, 123181, 123186, 123191, 123196, 123201, - 123206, 123212, 123217, 123222, 123227, 123232, 123237, 123243, 123248, - 123253, 123258, 123263, 123268, 123273, 123278, 123283, 123288, 123293, - 123298, 123303, 123308, 123313, 123318, 123323, 123328, 123333, 123338, - 123343, 123348, 123353, 123359, 123364, 123369, 123374, 123379, 123384, - 123389, 123394, 123399, 123404, 123409, 123414, 123419, 123424, 123429, - 123434, 123439, 123444, 123449, 123454, 123459, 123464, 123469, 123474, - 123479, 123484, 123489, 123494, 123499, 123504, 123509, 123514, 123519, - 123524, 123529, 123534, 123539, 123544, 123549, 123554, 123559, 123565, - 123570, 123575, 123580, 123585, 123590, 123595, 123600, 123605, 123610, - 123615, 123620, 123626, 123631, 123637, 123642, 123647, 123652, 123657, - 123662, 123667, 123673, 123678, 123683, 123689, 123694, 123699, 123704, - 123709, 123714, 123720, 123726, 123731, 123736, 14614, 123741, 123746, - 123751, 123756, 123761, 123766, 123771, 123776, 123781, 123786, 123791, - 123796, 123801, 123806, 123811, 123816, 123821, 123826, 123831, 123836, - 123841, 123846, 123851, 123856, 123861, 123866, 123871, 123876, 123881, - 123886, 123891, 123896, 123901, 123906, 123911, 123916, 123921, 123926, - 123931, 123936, 123941, 123946, 123951, 123956, 123961, 123966, 123971, - 123976, 123981, 123986, 123991, 123996, 124001, 124006, 124011, 124016, - 124021, 124026, 124031, 124036, 124041, 124046, 124051, 124056, 124061, - 124067, 124072, 124077, 124082, 124087, 124093, 124098, 124103, 124108, - 124113, 124118, 124123, 124129, 124134, 124139, 124144, 124149, 124154, - 124160, 124165, 124170, 124175, 124180, 124185, 124191, 124196, 124201, - 124206, 124211, 124216, 124222, 124228, 124233, 124238, 124243, 124249, - 124255, 124261, 124266, 124271, 124277, 124283, 124288, 124294, 124300, - 124306, 124311, 124316, 124322, 124327, 124333, 124338, 124344, 124353, - 124358, 124363, 124369, 124374, 124380, 124385, 124390, 124395, 124400, - 124405, 124410, 124415, 124420, 124425, 124430, 124435, 124440, 124445, - 124450, 124455, 124460, 124465, 124470, 124475, 124480, 124485, 124490, - 124495, 124500, 124505, 124510, 124515, 124520, 124525, 124530, 124535, - 124541, 124547, 124553, 124558, 124563, 124568, 124573, 124578, 124583, - 124588, 124593, 124598, 124603, 124608, 124613, 124618, 124623, 124628, - 124633, 124638, 124643, 124648, 124653, 124659, 124665, 124670, 124676, - 124681, 124686, 124692, 124697, 124703, 124708, 124714, 124719, 124725, - 124730, 124736, 124741, 124746, 124751, 124756, 124761, 124766, 124771, - 120849, 120855, 120861, 120867, 124777, 120873, 120879, 124783, 120885, - 120891, 120897, 120903, 120909, 120915, 120921, 120927, 120933, 124789, - 120939, 120945, 120951, 124795, 120957, 120963, 120969, 120975, 124801, - 120981, 120987, 120993, 121013, 124807, 124813, 121019, 124819, 121025, - 121031, 121037, 121043, 121049, 124825, 3331, 3336, 124830, 3351, 3356, - 3361, 124835, 124838, 124844, 124850, 124857, 124862, 124867, 2380, + 22671, 22682, 22694, 22706, 22718, 22730, 22742, 22754, 22766, 22778, + 22790, 22802, 22813, 22825, 22837, 22849, 22861, 22873, 22885, 22897, + 22909, 22921, 22933, 22944, 22956, 22968, 22980, 22992, 23005, 23018, + 23031, 23044, 23057, 23070, 23083, 23095, 23108, 23121, 23134, 23147, + 23160, 23173, 23186, 23199, 23212, 23225, 23237, 23250, 23263, 23276, + 23289, 23302, 23315, 23328, 23341, 23354, 23367, 23379, 23392, 23405, + 23418, 23431, 23444, 23457, 23470, 23483, 23496, 23509, 23521, 23534, + 23547, 23560, 23573, 23586, 23599, 23612, 23625, 23638, 23651, 23663, + 23676, 23689, 23702, 23715, 23728, 23741, 23754, 23767, 23780, 23793, + 23805, 23816, 23829, 23842, 23855, 23868, 23881, 23894, 23907, 23920, + 23933, 23946, 23958, 23971, 23984, 23997, 24010, 24023, 24036, 24049, + 24062, 24075, 24088, 24100, 24113, 24126, 24139, 24152, 24165, 24178, + 24191, 24204, 24217, 24230, 24242, 24255, 24268, 24281, 24294, 24307, + 24320, 24333, 24346, 24359, 24372, 24384, 24397, 24410, 24423, 24436, + 24449, 24462, 24475, 24488, 24501, 24514, 24526, 24539, 24552, 24565, + 24578, 24591, 24604, 24617, 24630, 24643, 24656, 24668, 24681, 24694, + 24707, 24720, 24733, 24746, 24759, 24772, 24785, 24798, 24810, 24823, + 24836, 24849, 24862, 24875, 24888, 24901, 24914, 24927, 24940, 24952, + 24965, 24978, 24991, 25004, 25017, 25030, 25043, 25056, 25069, 25082, + 25094, 25107, 25120, 25133, 25146, 25159, 25172, 25185, 25198, 25211, + 25224, 25236, 25247, 25256, 25264, 25272, 25279, 25285, 25289, 25295, + 25301, 25310, 25318, 25323, 25329, 25334, 25338, 25347, 10492, 25358, + 25364, 25371, 25379, 25386, 13145, 13159, 25393, 25400, 25409, 25414, + 25419, 25426, 25431, 25436, 8778, 8784, 8790, 25441, 25446, 25449, 25454, + 25462, 25469, 25476, 25488, 25495, 25501, 25510, 25515, 25524, 25533, + 25539, 25547, 25556, 25560, 25566, 25571, 25581, 25588, 25594, 25602, + 25608, 25615, 25621, 25631, 25640, 25644, 25651, 25655, 25660, 25666, + 25674, 25678, 25688, 17372, 25697, 25703, 25707, 25716, 25725, 25735, + 25741, 17377, 25748, 25755, 25766, 25774, 25784, 25793, 25801, 10207, + 25809, 25814, 25820, 25825, 25829, 25833, 25837, 11301, 25842, 25850, + 25857, 25866, 25874, 25881, 25888, 25897, 25903, 1062, 25910, 25916, + 25920, 25926, 25933, 25939, 25947, 25953, 25960, 25966, 25972, 25981, + 25985, 25993, 26001, 26008, 26017, 26024, 26029, 26033, 26043, 26054, + 26065, 26070, 26075, 26081, 26090, 26095, 26108, 9000, 26112, 26118, + 26124, 26130, 26135, 26143, 26147, 26154, 26163, 26168, 17650, 26176, + 26180, 26192, 26197, 26201, 26204, 26210, 26216, 26222, 26227, 26232, + 26236, 26239, 26250, 26255, 10769, 26262, 26267, 26272, 26277, 26282, + 26287, 26292, 26297, 26302, 10774, 26307, 26312, 26317, 26322, 26327, + 26332, 26337, 26342, 26347, 26352, 26357, 26362, 26368, 26373, 26378, + 26383, 26388, 26393, 26398, 26403, 26408, 26413, 26419, 26425, 26430, + 26435, 26440, 26445, 26450, 26455, 26460, 26465, 26470, 26476, 26481, + 26486, 26491, 26497, 26503, 26508, 26513, 26518, 26523, 26528, 26533, + 26538, 26543, 26549, 26554, 26559, 26564, 26569, 26575, 26580, 26585, + 26589, 1244, 145, 26597, 26601, 26605, 26609, 26614, 26618, 15736, 2409, + 26622, 26627, 26631, 26636, 26640, 26645, 26649, 26655, 26660, 26664, + 26668, 26676, 26680, 26684, 26691, 26696, 26701, 26705, 26711, 26716, + 26720, 26725, 26730, 26734, 26741, 26748, 26755, 26760, 26764, 26768, + 26773, 26777, 26780, 26786, 26799, 26804, 26810, 26819, 26824, 11049, + 26829, 26838, 26843, 26846, 26850, 26855, 26860, 26865, 26870, 26875, + 2920, 2925, 26880, 26886, 26890, 26896, 3888, 26901, 26906, 26911, 26917, + 26922, 16698, 26927, 26932, 26937, 26942, 26948, 26953, 26958, 26964, + 26969, 26973, 26978, 26983, 26988, 26993, 26998, 27002, 27007, 27011, + 27016, 27021, 27026, 27031, 27035, 27040, 27044, 27049, 27054, 27059, + 26974, 3121, 26979, 27064, 27072, 27079, 11395, 27091, 27099, 27109, + 27127, 27146, 27155, 27163, 26984, 27170, 27175, 27183, 26989, 27188, + 27193, 27201, 27206, 27211, 27215, 19870, 27220, 27228, 27233, 27237, + 27244, 27250, 27259, 27263, 27271, 27277, 27281, 27284, 20704, 27291, + 27295, 27299, 27304, 27310, 27317, 27322, 10234, 27326, 27331, 27336, + 27341, 27346, 27351, 1663, 1668, 27356, 27362, 27368, 27373, 27377, + 27381, 27385, 27389, 27393, 27397, 27401, 27405, 25482, 27408, 27415, + 27423, 27429, 27435, 27440, 27445, 27451, 27455, 27460, 27467, 16598, + 16605, 27473, 27485, 27488, 27495, 27499, 19895, 27506, 27514, 27525, + 27534, 27547, 27557, 27571, 27583, 27597, 27610, 27622, 27632, 27644, + 27650, 27665, 27689, 27707, 27726, 27739, 27753, 27771, 27787, 27804, + 27822, 27833, 27852, 27869, 27889, 27907, 27919, 27933, 27947, 27959, + 27976, 27995, 28013, 28025, 28043, 28062, 17530, 28075, 28095, 28107, + 12577, 28119, 28124, 28129, 28134, 28143, 28149, 28154, 28158, 28165, + 28171, 28175, 28180, 28185, 28190, 28195, 28200, 28205, 2506, 28210, + 28216, 28220, 28223, 28234, 28238, 28241, 28249, 28255, 14882, 28259, + 28268, 28279, 28285, 28291, 28306, 28315, 28323, 28330, 28335, 28339, + 28346, 28352, 28361, 28369, 28376, 28386, 28395, 28405, 28410, 28419, + 28428, 28439, 28450, 28460, 28477, 4557, 28487, 28491, 28501, 28509, + 28519, 28530, 28536, 28541, 28551, 28559, 28566, 28572, 28579, 28584, + 27022, 28588, 28597, 28601, 28604, 28609, 28617, 28624, 28633, 28641, + 28649, 28657, 28667, 28676, 28682, 28688, 28694, 28698, 27027, 27032, + 28702, 28712, 28722, 28732, 28740, 28747, 28757, 28765, 28773, 28779, + 28787, 28798, 798, 28807, 17737, 649, 28821, 28830, 28838, 28849, 28860, + 28870, 28879, 28891, 28900, 28909, 28916, 28922, 28932, 28941, 28950, + 28958, 28966, 28976, 28984, 28992, 28999, 29005, 29010, 29015, 29020, + 8156, 29025, 29028, 29032, 29037, 29045, 29051, 29056, 29060, 3751, + 27045, 29068, 27050, 29074, 29080, 29086, 29091, 29096, 29100, 29108, + 29114, 29120, 29124, 3912, 29132, 29137, 29142, 29146, 29150, 11681, + 29157, 29165, 29179, 29186, 29193, 29199, 11690, 11696, 29207, 29215, + 29222, 29227, 29232, 27055, 29238, 29249, 29258, 19043, 29266, 29271, + 2755, 29276, 29287, 29293, 29298, 29302, 29306, 29309, 29316, 29323, + 29329, 29337, 29344, 29350, 29354, 8196, 29359, 29363, 29367, 29375, + 29380, 29385, 29390, 1696, 29395, 29400, 29405, 29410, 29415, 29420, + 29425, 29430, 29435, 29440, 29445, 29450, 29455, 29460, 29466, 29471, + 29476, 29481, 29486, 29491, 29496, 29502, 29507, 29512, 29517, 29522, + 29527, 29532, 29537, 29543, 29549, 29554, 29560, 29565, 29570, 5, 29576, + 29580, 29584, 29588, 29593, 29597, 29601, 29605, 29609, 29614, 29618, + 29623, 29627, 29630, 29634, 29639, 29643, 29648, 29652, 29656, 29660, + 29665, 29669, 29673, 29683, 29688, 29692, 29696, 29701, 29706, 29715, + 29720, 29725, 29729, 29733, 29742, 29755, 29767, 29776, 29785, 29790, + 29796, 29801, 29805, 29809, 29819, 29828, 29836, 29842, 29847, 29851, + 29858, 29865, 29875, 29884, 29892, 12934, 29900, 29907, 29915, 29924, + 29933, 29941, 29951, 29956, 29960, 29964, 29967, 29969, 29973, 29977, + 29982, 29987, 29991, 29995, 29998, 30002, 30005, 30009, 30012, 30015, + 30019, 30025, 30029, 30033, 30037, 30041, 30046, 30051, 30056, 30060, + 30063, 30068, 30074, 30079, 30085, 30090, 30094, 30100, 30104, 30108, + 30113, 30117, 30122, 30127, 30131, 30135, 30142, 30146, 30149, 30153, + 30157, 30163, 30168, 30174, 30178, 30182, 30187, 30194, 30200, 30204, + 30213, 30217, 30221, 30224, 30230, 30235, 30241, 1385, 1748, 30246, + 30251, 30256, 30261, 30266, 30271, 30276, 2213, 827, 30281, 30284, 30288, + 30292, 30297, 30301, 17749, 30305, 30310, 30315, 30319, 30322, 30327, + 30331, 30336, 30340, 17753, 30345, 30348, 30351, 30357, 30361, 30366, + 30370, 30383, 30391, 30395, 30398, 30406, 30415, 30422, 30427, 30433, + 30439, 30447, 30454, 30461, 30465, 30469, 30473, 30478, 30483, 30487, + 30495, 30500, 30507, 30519, 30530, 30535, 30539, 30546, 30550, 30555, + 30561, 30564, 30569, 30574, 30581, 30585, 30589, 30592, 30598, 8900, + 2413, 30602, 30607, 30623, 11100, 30643, 30652, 30668, 30672, 30679, + 30682, 30688, 30698, 30704, 30713, 30722, 30737, 30748, 30760, 30771, + 30779, 30788, 30794, 30803, 30813, 30823, 30834, 30845, 30855, 30864, + 30871, 30880, 30888, 30895, 30902, 30909, 30917, 30924, 30931, 30944, + 30951, 30959, 30966, 30972, 30977, 30986, 30993, 30999, 31004, 31012, + 31020, 31027, 31034, 28511, 31046, 31058, 31072, 31080, 31088, 31096, + 31103, 31115, 31124, 31133, 31141, 31149, 31157, 31164, 31170, 31179, + 31187, 31197, 31206, 31216, 31225, 31234, 31242, 31247, 31251, 31254, + 31258, 31262, 31266, 31270, 31274, 31280, 31286, 31291, 31299, 31306, + 31314, 31321, 10806, 17811, 31329, 31336, 31341, 31348, 31354, 31360, + 31367, 14024, 31374, 31377, 31389, 31397, 31403, 31408, 31412, 31423, + 31433, 31443, 11620, 31452, 31461, 31469, 31479, 31488, 31495, 31502, + 31510, 31514, 17830, 31517, 31524, 31528, 4501, 31534, 31537, 31544, + 31550, 31564, 31569, 31577, 31583, 31594, 31601, 31607, 31613, 31617, + 31622, 31626, 31635, 31642, 31648, 8953, 31655, 31663, 31670, 31676, + 31681, 31687, 31693, 31703, 31715, 31726, 31736, 11252, 31744, 31750, + 17848, 31754, 31756, 31259, 11633, 31765, 31770, 31776, 31786, 31791, + 31798, 31806, 31812, 31817, 31822, 31827, 31831, 31836, 31843, 31849, + 31858, 31866, 31870, 31877, 31887, 31893, 31902, 31908, 31915, 4771, + 31921, 31927, 31932, 31939, 31951, 31962, 31967, 31975, 31979, 31989, + 31995, 31999, 32004, 32014, 32023, 32027, 32034, 32042, 32049, 32055, + 32060, 32068, 32075, 32080, 32087, 32099, 32108, 32112, 32120, 15656, + 32124, 32134, 32138, 32146, 32153, 32160, 30402, 32171, 32176, 32180, + 32187, 32194, 26707, 31184, 32199, 32203, 32206, 27839, 32211, 32225, + 32241, 32259, 32278, 32295, 32313, 27858, 32330, 32350, 27875, 32362, + 32374, 19099, 32386, 27895, 32400, 32412, 12590, 32426, 32431, 32436, + 32441, 32447, 32453, 32459, 32463, 32471, 32477, 32484, 32489, 32499, + 32506, 32512, 12128, 32518, 32520, 32525, 32533, 32537, 31839, 32543, + 32550, 13866, 13876, 32557, 32564, 32574, 32579, 32583, 32586, 32592, + 32600, 32612, 32622, 32638, 32651, 32665, 19117, 32679, 32686, 32690, + 32693, 32698, 32702, 32709, 32716, 32723, 32730, 32740, 32745, 32750, + 32755, 32763, 32771, 32776, 32785, 28532, 3561, 32790, 32793, 32796, + 32801, 32808, 32813, 32818, 32834, 32842, 32850, 10864, 32858, 32863, + 32867, 32873, 32878, 32884, 32887, 32893, 32905, 32913, 32920, 32926, + 32933, 32944, 32958, 32971, 32977, 32986, 32992, 33001, 33013, 33024, + 33034, 33043, 33052, 33060, 33070, 33079, 33090, 673, 33097, 33104, + 33110, 33115, 33121, 33128, 33134, 33145, 33155, 33165, 33174, 33180, + 33187, 33192, 33200, 33207, 33215, 33223, 33235, 7142, 33242, 33245, + 33254, 33262, 33268, 33274, 33279, 33283, 33286, 33292, 33299, 33304, + 33309, 33316, 33321, 33325, 33337, 33348, 33357, 33365, 18020, 33370, + 33378, 33383, 33391, 33397, 33403, 33408, 13859, 9802, 33411, 33415, + 33419, 33422, 33425, 33431, 33439, 33447, 33451, 33455, 33460, 33464, + 33467, 33476, 33481, 33486, 33490, 33493, 33498, 33506, 33517, 33526, + 33530, 33536, 33542, 33546, 33552, 33560, 33582, 33606, 33617, 33626, + 33632, 33639, 33646, 33652, 33660, 33666, 33671, 33682, 33700, 33707, + 33715, 33719, 33726, 33731, 33740, 33753, 33761, 33773, 33784, 33795, + 33805, 33819, 33828, 33836, 33848, 33859, 11117, 33868, 33879, 33890, + 33902, 33912, 33921, 33931, 33936, 33940, 33948, 33959, 33969, 33975, + 33980, 33984, 33987, 33990, 33998, 34006, 34015, 34025, 34034, 34040, + 34045, 34059, 2838, 34081, 34092, 34101, 34111, 34123, 34132, 34141, + 34151, 34159, 34167, 34176, 34181, 34192, 34197, 34206, 34212, 34223, + 34227, 34230, 34240, 34249, 34257, 34267, 34277, 34285, 34294, 34301, + 34307, 34315, 34322, 34331, 34340, 34345, 34350, 34354, 34362, 34369, + 34375, 34379, 34387, 34394, 34405, 34420, 34427, 34433, 34443, 34452, + 34458, 34469, 34473, 34480, 34484, 34491, 34497, 16850, 34503, 34507, + 34512, 34518, 34525, 34529, 34533, 34541, 34549, 34555, 34564, 34571, + 34578, 34583, 34588, 34598, 28586, 34602, 34605, 34610, 34615, 34620, + 34625, 34630, 34635, 34640, 34645, 34651, 34656, 34661, 34667, 1094, 770, + 34672, 34675, 34682, 34691, 1777, 34698, 34703, 34707, 34713, 1143, 643, + 34718, 347, 34722, 34732, 34741, 34749, 34758, 34766, 34773, 34784, + 34792, 34801, 34809, 34819, 34827, 34832, 11794, 34836, 34844, 34852, + 34857, 17766, 4101, 34863, 34869, 34875, 6669, 34880, 34884, 34891, + 34897, 34903, 34907, 34916, 34922, 34927, 34934, 1336, 34940, 34946, + 34951, 34958, 34962, 1243, 6677, 34967, 34977, 34985, 34991, 35001, + 35010, 35018, 35024, 35029, 35037, 35044, 13376, 35050, 35057, 35062, + 35068, 35075, 35085, 1404, 253, 2212, 35091, 35097, 35104, 35115, 35126, + 35134, 35141, 35151, 35160, 35168, 35177, 35184, 35191, 35204, 35211, + 35217, 35228, 35247, 35252, 1148, 35256, 35261, 35269, 3984, 35273, + 35278, 35282, 35286, 1340, 29996, 35296, 35300, 35305, 35309, 35315, + 3846, 35321, 35329, 35336, 35347, 35356, 35364, 35389, 35397, 35402, + 3985, 401, 35408, 35416, 35424, 35431, 35436, 35442, 35447, 2281, 12792, + 35454, 35460, 31618, 31957, 35466, 656, 106, 35470, 35474, 35480, 595, + 10679, 35485, 35490, 35497, 35503, 35507, 35511, 1549, 35514, 35518, + 18308, 35521, 35526, 35533, 35539, 8966, 35544, 35552, 35559, 35565, + 27217, 35569, 35573, 35577, 35581, 1834, 20216, 35585, 35590, 35594, + 35597, 35605, 35613, 35618, 35627, 35635, 35638, 35645, 35652, 35664, + 27296, 35674, 35686, 35694, 35699, 35703, 35711, 35718, 35725, 35734, + 35740, 35747, 35754, 35757, 35761, 35765, 1351, 35775, 35777, 35782, + 35788, 35794, 35799, 35804, 35809, 35814, 35819, 35824, 35829, 35834, + 35839, 35844, 35849, 35854, 35859, 35864, 35870, 35876, 35882, 35888, + 35893, 35898, 35903, 35909, 35914, 35919, 35924, 35930, 35935, 35941, + 35946, 35951, 35956, 35961, 35967, 35972, 35978, 35983, 35988, 35993, + 35998, 36004, 36009, 36015, 36020, 36025, 36030, 36035, 36040, 36045, + 36050, 36055, 36060, 36066, 36072, 36078, 36083, 36088, 36093, 36098, + 36104, 36110, 36116, 36122, 36128, 36134, 36139, 36145, 36150, 36155, + 36160, 36165, 36171, 2552, 36176, 2559, 2566, 2962, 36181, 2572, 2582, + 36187, 2614, 2619, 2624, 36191, 36196, 36201, 36207, 36212, 36217, 36221, + 36226, 36232, 36237, 36242, 36247, 36253, 36258, 36262, 36266, 36271, + 36276, 36281, 36286, 36291, 36297, 36303, 36308, 36312, 36317, 36323, + 36327, 36332, 36337, 36342, 36347, 36351, 36354, 36359, 36364, 36369, + 36374, 36379, 36385, 36391, 36396, 36401, 36406, 36410, 36415, 36420, + 36425, 36430, 36435, 36440, 36444, 36449, 36454, 36459, 36463, 36467, + 36471, 36476, 36484, 36489, 36494, 36500, 36506, 36512, 36517, 36525, + 36529, 36532, 36537, 36542, 36546, 36551, 36556, 36560, 36565, 36569, + 36572, 36577, 4211, 21707, 36582, 36587, 36592, 36597, 36605, 25877, + 34955, 10318, 36610, 36615, 36619, 36624, 36628, 36632, 36637, 36641, + 36644, 36647, 36651, 36656, 36660, 36668, 36672, 36675, 36680, 36684, + 36688, 36693, 36698, 36702, 36708, 36713, 36718, 36725, 36732, 36736, + 36739, 36745, 36754, 36761, 36769, 36776, 36780, 36785, 36789, 36793, + 36799, 36804, 36810, 36814, 36820, 36825, 36830, 36834, 36841, 36847, + 36853, 36859, 36865, 36872, 36878, 36884, 36890, 36896, 36902, 36908, + 36914, 36921, 36927, 36934, 36940, 36946, 36952, 36958, 36964, 36970, + 36976, 36982, 36988, 36994, 36999, 37004, 13731, 37009, 37015, 37020, + 37025, 37030, 37035, 37038, 37044, 37049, 37057, 37062, 37066, 37071, + 37077, 37086, 37092, 37097, 37102, 37107, 37111, 37116, 37120, 37125, + 37130, 37135, 37140, 37147, 37154, 37160, 37166, 37171, 19813, 37178, + 37184, 37191, 37197, 37203, 37208, 37216, 37221, 11288, 37225, 37230, + 37235, 37241, 37246, 37251, 37255, 37260, 37265, 37271, 37276, 37281, + 37286, 37290, 37295, 37300, 37304, 37309, 37314, 37318, 37323, 37327, + 37332, 37337, 37342, 37346, 37351, 37355, 37360, 37364, 37371, 37375, + 37379, 18464, 37384, 37391, 37400, 37406, 37412, 37421, 37429, 37438, + 37446, 37451, 37455, 37462, 37468, 37476, 37480, 37483, 37488, 37492, + 37501, 37509, 37527, 37533, 1403, 37539, 37542, 37546, 27363, 27369, + 37552, 37556, 37567, 37578, 37589, 37601, 37605, 37612, 37619, 37626, + 37631, 37635, 37643, 37648, 37653, 37658, 37663, 6734, 16754, 25876, + 37668, 37673, 37677, 16745, 37682, 37688, 37693, 37699, 37704, 37710, + 37715, 37721, 37726, 37732, 37738, 37744, 37749, 37705, 37711, 37753, + 37758, 37764, 37769, 37775, 37780, 37786, 37791, 37716, 12422, 37795, + 37727, 37733, 37739, 3054, 3760, 37801, 37804, 37809, 37815, 37821, + 37827, 37834, 37840, 37846, 37852, 37858, 37864, 37870, 37876, 37882, + 37888, 37894, 37900, 37906, 37913, 37919, 37925, 37931, 37937, 37943, + 37946, 37951, 37954, 37961, 37966, 37974, 37978, 37983, 37988, 37994, + 37999, 38004, 38008, 38013, 38019, 38024, 38030, 38035, 38041, 38046, + 38052, 38058, 38062, 38067, 38072, 38077, 38082, 38086, 38091, 38096, + 38101, 38107, 38113, 38119, 38125, 38130, 38134, 38137, 38143, 38149, + 38158, 38166, 38173, 38178, 38182, 38186, 38191, 18251, 38196, 38204, + 38210, 4152, 1253, 38215, 38220, 38224, 9016, 38230, 38236, 38243, 9025, + 38247, 38253, 38259, 38266, 38272, 38281, 38289, 38301, 38310, 38314, + 38321, 38327, 38332, 38336, 38340, 38343, 38353, 38362, 38370, 37706, + 38375, 38385, 38395, 38405, 38411, 38416, 38426, 38431, 38444, 38458, + 38469, 38481, 38493, 38507, 38520, 38532, 38544, 17571, 38558, 38563, + 38568, 38572, 38576, 38580, 38584, 38590, 38595, 38600, 38605, 38610, + 38615, 38620, 1737, 33022, 38625, 38630, 38635, 37754, 38640, 38643, + 38648, 38653, 38658, 38664, 38670, 19423, 11994, 38675, 38681, 38688, + 19051, 38694, 38699, 38704, 38708, 38713, 38718, 37759, 38723, 38728, + 38733, 38739, 37765, 38744, 38747, 38754, 38762, 38768, 38774, 38780, + 38791, 38796, 38803, 38810, 38817, 38825, 38834, 38843, 38849, 38855, + 38863, 37770, 38868, 38874, 38880, 37776, 38885, 38890, 38898, 38906, + 38912, 38919, 38925, 38932, 38939, 38945, 38953, 38963, 38970, 38976, + 38981, 38987, 38992, 38997, 39004, 39013, 39021, 39026, 39032, 39039, + 39047, 39053, 39058, 39064, 39073, 39080, 34020, 39086, 39090, 39095, + 39104, 39109, 39114, 39119, 14972, 39127, 39132, 39137, 39142, 39146, + 39151, 39156, 39163, 39168, 39173, 39178, 37781, 25805, 39184, 2655, 158, + 39187, 39190, 39194, 39198, 39208, 39216, 39223, 39227, 39231, 39234, + 39242, 39249, 39256, 31911, 39265, 39268, 39275, 39281, 39286, 39290, + 39297, 39301, 39309, 39317, 39324, 39339, 39343, 39347, 39350, 39356, + 39363, 39367, 39373, 39377, 39384, 39392, 39400, 39407, 37717, 39414, + 39422, 39427, 39439, 12075, 12082, 12089, 12096, 12103, 12110, 626, 434, + 39445, 39450, 39455, 39461, 39466, 39471, 4178, 39476, 39479, 39484, + 39489, 39494, 39499, 39504, 39511, 27481, 39516, 39521, 39526, 39531, + 39536, 39542, 39547, 39553, 37957, 39559, 39564, 39570, 39576, 39586, + 39591, 39596, 39600, 39605, 39610, 39615, 39620, 39633, 39638, 27095, + 20298, 1064, 39642, 39648, 39652, 39657, 39662, 39668, 39673, 39678, + 39682, 39687, 39692, 39698, 39703, 39708, 1258, 39712, 39717, 39722, + 39727, 39731, 39736, 39741, 39746, 39752, 39758, 39763, 39767, 39771, + 39776, 39781, 39786, 39790, 39795, 39803, 39807, 39813, 39817, 39824, + 39833, 20069, 37728, 39839, 39846, 39854, 39862, 39869, 39875, 39884, + 39897, 39909, 39914, 39920, 39924, 2981, 39928, 39932, 39358, 39941, + 39952, 39963, 39968, 34088, 39973, 39978, 39982, 34208, 27374, 39987, + 39994, 39998, 40003, 37734, 25912, 40007, 40012, 40018, 40023, 40027, + 40031, 40034, 40038, 40044, 40053, 40064, 40076, 37740, 40081, 40084, + 40088, 40092, 40097, 40102, 40107, 40112, 40117, 40122, 40127, 40132, + 373, 40137, 40142, 40147, 40152, 40157, 40162, 40168, 40173, 40178, + 40184, 40189, 40195, 40200, 40206, 40211, 40216, 40221, 40226, 40231, + 40236, 40241, 40246, 40252, 40257, 40262, 40267, 40272, 40277, 40282, + 40287, 40293, 40299, 40304, 40309, 40314, 40319, 40324, 40329, 40334, + 40339, 40344, 40349, 40354, 40359, 40364, 40369, 40374, 40379, 40384, + 40389, 40399, 40409, 40415, 342, 14, 40420, 40423, 40427, 40431, 40439, + 40443, 40447, 31591, 16987, 1818, 40450, 40455, 40459, 40464, 40468, + 40473, 40477, 40482, 40486, 40489, 40491, 40495, 40500, 40504, 40515, + 40518, 40520, 40524, 40536, 40548, 40557, 40561, 40571, 40575, 40581, + 40586, 40595, 40601, 40606, 40611, 40615, 40619, 40624, 40631, 40636, + 40642, 40647, 40651, 40658, 31192, 31202, 40662, 40667, 40672, 40677, + 40684, 40688, 40695, 40702, 40708, 9171, 40712, 40721, 40729, 40744, + 40758, 40767, 40775, 40786, 40795, 40800, 40807, 40817, 8165, 40827, + 40832, 40838, 40843, 40847, 40850, 40855, 40859, 40864, 40868, 40875, + 40880, 40885, 40890, 40900, 40905, 40910, 40915, 10188, 40920, 40922, + 40930, 40933, 40936, 40944, 40959, 40967, 40977, 40979, 40982, 40986, + 40992, 40996, 41001, 41006, 41024, 41038, 41057, 41074, 41083, 41091, + 41096, 41101, 1396, 41107, 41113, 41118, 41128, 41137, 41145, 41150, + 41156, 41161, 41170, 41179, 41190, 41195, 41202, 41208, 41212, 41221, + 41228, 41236, 41243, 41256, 41264, 41268, 41278, 41284, 41289, 41293, + 41301, 41309, 41314, 41318, 41322, 41331, 41337, 41342, 41350, 41360, + 41369, 41378, 41387, 41398, 41406, 41417, 41426, 41434, 41441, 41447, + 41452, 41463, 41474, 41479, 41483, 41486, 41490, 41500, 41508, 41514, + 41525, 41536, 41547, 41558, 41569, 41580, 41591, 41602, 41614, 41626, + 41638, 41650, 41662, 41674, 41686, 41695, 41699, 41707, 41713, 41719, + 41726, 41732, 41737, 41743, 41747, 41752, 41757, 41762, 40394, 40404, + 2526, 41767, 41769, 41774, 41779, 41784, 41787, 41789, 41793, 41796, + 41803, 41807, 11644, 41811, 41817, 41824, 41830, 41840, 41845, 41851, + 41855, 41860, 41873, 31781, 41879, 41885, 41894, 41903, 21930, 41910, + 41919, 41927, 38391, 41933, 41938, 41942, 41951, 41959, 41966, 41971, + 41975, 41980, 41985, 41993, 41997, 42005, 42011, 42017, 42022, 42027, + 42031, 42034, 42039, 42052, 42068, 27965, 42085, 42097, 42114, 42126, + 42140, 27982, 28001, 42152, 42164, 2855, 42178, 42183, 42188, 42193, + 42197, 42204, 42216, 42223, 42232, 42242, 42245, 42256, 42267, 42275, + 42280, 42284, 42289, 42294, 42299, 42304, 42309, 42314, 1768, 947, 42319, + 42323, 42327, 42330, 42335, 42340, 42346, 42351, 42356, 42362, 42368, + 42373, 42377, 42382, 42387, 42392, 42396, 42399, 42405, 42410, 42415, + 42420, 42424, 42429, 42435, 42443, 32092, 42448, 42453, 42460, 42466, + 42472, 42477, 42485, 27490, 42492, 42497, 42502, 42507, 42511, 42514, + 42519, 42523, 42527, 42534, 42540, 42546, 42552, 42559, 42564, 42570, + 41304, 42574, 42578, 42583, 42596, 42601, 42607, 42615, 42622, 42630, + 42640, 42646, 42652, 42658, 42662, 42671, 42679, 42686, 42691, 42696, + 12445, 42701, 42711, 42718, 42724, 42734, 42739, 42745, 42753, 4017, + 42760, 42767, 42773, 42780, 4023, 42784, 42789, 42800, 42807, 42813, + 42822, 42826, 42829, 4609, 42836, 42843, 42849, 42855, 42863, 42873, + 35437, 42880, 42888, 42894, 42899, 42905, 42910, 42914, 31540, 42920, + 42927, 42933, 42941, 42950, 42957, 42963, 42974, 28784, 42980, 42987, + 42993, 43003, 43008, 43012, 43020, 43028, 43035, 43041, 43046, 11246, + 941, 43051, 43055, 43057, 43061, 43066, 43069, 43071, 43076, 43082, + 43087, 43092, 43099, 39507, 43105, 43110, 43114, 43119, 43123, 43132, + 43136, 43142, 43149, 43155, 43162, 43167, 43176, 43181, 43185, 43190, + 43197, 43205, 43213, 43218, 25968, 43222, 43225, 43229, 43233, 12889, + 1005, 43237, 43242, 43250, 43255, 43259, 43268, 43275, 43279, 43283, + 43291, 43298, 16272, 43308, 43312, 43316, 43324, 43332, 43338, 43343, + 43347, 43356, 16008, 43362, 43371, 43378, 43383, 43390, 43397, 43405, + 43412, 43420, 43428, 43437, 43442, 43449, 43456, 43463, 43470, 43477, + 43482, 43489, 43495, 43512, 43520, 43530, 43538, 43545, 43553, 461, + 43557, 43563, 43567, 43572, 40791, 43578, 43581, 43585, 43591, 43602, + 43610, 4028, 43618, 43624, 43630, 43640, 43646, 43655, 43664, 43674, + 43681, 43687, 43692, 4034, 4040, 43701, 43709, 43716, 43720, 14356, + 43728, 43732, 43739, 43747, 43754, 43763, 43770, 43776, 43785, 43795, + 43801, 43809, 43818, 43825, 43833, 43840, 26770, 43844, 43851, 43857, + 43867, 43876, 43884, 43895, 43899, 43909, 43916, 43921, 43926, 43932, + 43939, 43947, 43956, 43965, 43975, 43986, 43993, 43998, 44005, 3269, + 44013, 44019, 44024, 44031, 44037, 44043, 44048, 44061, 44074, 44087, + 44094, 44100, 44108, 44116, 44121, 44125, 44129, 44134, 44139, 44144, + 44149, 44154, 44159, 1365, 44164, 44168, 44172, 44176, 44180, 44184, + 44188, 44192, 44196, 44200, 44204, 44208, 44212, 44216, 44220, 44224, + 44228, 44232, 44236, 44240, 44244, 44248, 44252, 44256, 44260, 44264, + 44268, 44272, 44276, 44280, 44284, 44288, 44292, 44296, 44300, 44304, + 44308, 44312, 44316, 44320, 44324, 44328, 44332, 44336, 44340, 44344, + 44348, 44352, 44356, 44360, 44364, 44368, 44372, 44376, 44380, 44384, + 44388, 44392, 44396, 44400, 44404, 44408, 44412, 44416, 44420, 44424, + 44428, 44432, 44436, 44440, 44444, 44448, 44452, 44456, 44460, 44464, + 44468, 44472, 44476, 44480, 44484, 44488, 44492, 44496, 44500, 44504, + 44508, 44512, 44516, 44520, 44524, 44528, 44532, 44536, 44540, 44544, + 44548, 44552, 44556, 44560, 44564, 44568, 44572, 44576, 44580, 44584, + 44588, 44592, 44596, 44600, 44604, 44608, 44612, 44616, 44620, 44624, + 44628, 44632, 44636, 44640, 44644, 44648, 44652, 44656, 44660, 44664, + 44668, 44672, 44676, 44680, 44684, 44688, 44692, 44696, 44700, 44704, + 44708, 44712, 44716, 44720, 44724, 44728, 44732, 44736, 44740, 44744, + 44748, 44752, 44756, 44760, 44764, 44768, 44772, 44776, 44781, 44785, + 44790, 44794, 44799, 44803, 44808, 44812, 44818, 44823, 44827, 44832, + 44836, 44841, 44845, 44850, 44854, 44859, 44863, 44868, 44872, 44877, + 44881, 44887, 44893, 44898, 44902, 44907, 44911, 44917, 44922, 44926, + 44931, 44935, 44940, 44944, 44950, 44955, 44959, 44964, 44968, 44973, + 44977, 44982, 44986, 44992, 44997, 45001, 45006, 45010, 45016, 45021, + 45025, 45030, 45034, 45039, 45043, 45048, 45052, 45057, 45061, 45067, + 45072, 45076, 45082, 45087, 45091, 45097, 45102, 45106, 45111, 45115, + 45120, 45124, 45130, 45136, 45142, 45148, 45154, 45160, 45166, 45172, + 45177, 45181, 45186, 45190, 45196, 45201, 45205, 45210, 45214, 45219, + 45223, 45228, 45232, 45237, 45241, 45246, 45250, 45255, 45259, 45265, + 45270, 45274, 45279, 45283, 45289, 45295, 45300, 127, 63, 45304, 45306, + 45310, 45314, 45318, 45323, 45327, 45331, 45336, 11153, 45341, 45347, + 1677, 7181, 45353, 45356, 45361, 45365, 45370, 45374, 45378, 45383, + 12233, 45387, 45391, 45395, 630, 45399, 18573, 45404, 45408, 45413, + 45418, 45423, 45427, 45434, 45440, 45446, 31813, 45451, 45454, 45458, + 45463, 45469, 45473, 45476, 45484, 45490, 45495, 45499, 45502, 45506, + 45512, 45516, 45520, 3811, 3816, 15084, 45523, 45527, 45531, 45535, + 45539, 45547, 45554, 45558, 15958, 45565, 45579, 45586, 45597, 361, + 45602, 45606, 45612, 45624, 45630, 45636, 45641, 45647, 18625, 45651, + 45655, 35750, 45664, 45670, 45679, 45683, 45687, 45692, 45698, 45703, + 45707, 45712, 45716, 45720, 45727, 45733, 45738, 45749, 45764, 45779, + 45794, 45810, 45828, 12140, 45842, 45849, 45855, 45859, 45862, 45871, + 45876, 45880, 45888, 19254, 45896, 45900, 45910, 45921, 35640, 1042, + 45934, 45943, 45961, 45980, 45989, 45997, 46005, 1690, 12342, 46009, + 27386, 46012, 31579, 46017, 11478, 46022, 46028, 46033, 46039, 46044, + 46050, 46055, 46061, 46066, 46072, 46078, 46084, 46089, 46045, 46051, + 46093, 46056, 46062, 46067, 46098, 46073, 46079, 9184, 4434, 46104, + 46112, 46116, 46119, 46126, 46130, 46135, 46140, 46147, 46153, 46159, + 46164, 17862, 46168, 31596, 46172, 46176, 46180, 46187, 46193, 46197, + 33954, 46206, 10351, 46210, 10780, 46213, 46220, 46226, 46230, 14381, + 46237, 46243, 46248, 46255, 46262, 46269, 34753, 9081, 46276, 46283, + 46290, 46296, 46301, 46308, 46319, 46325, 46330, 46335, 46340, 46344, + 46349, 46356, 46046, 46360, 46370, 46379, 46390, 46396, 46404, 46411, + 46416, 46421, 46426, 46431, 46436, 46440, 46444, 46451, 46457, 46465, + 2416, 30605, 12245, 12257, 12262, 12268, 46474, 12273, 12278, 12284, + 46479, 46489, 46493, 12289, 46498, 20496, 46501, 46506, 46510, 46514, + 46525, 46533, 42227, 46541, 46546, 46553, 46560, 46564, 46567, 46575, + 12153, 46582, 46585, 46591, 46601, 6767, 46610, 46615, 46621, 46625, + 46633, 46637, 46647, 46653, 46658, 46669, 46678, 46687, 46696, 46705, + 46714, 46723, 46732, 46738, 46744, 46749, 46755, 46761, 46767, 46772, + 46775, 46782, 46788, 46792, 46797, 46804, 46811, 46815, 46818, 46828, + 46841, 46850, 46859, 46870, 46883, 46895, 46906, 46915, 46926, 46931, + 46940, 46945, 12294, 46951, 46958, 46966, 46973, 46978, 46983, 31859, + 46987, 46994, 4374, 25, 46998, 47003, 20345, 47007, 47010, 47013, 34145, + 47017, 34762, 47025, 47029, 47033, 47036, 47042, 47048, 47053, 37805, + 47062, 47070, 47076, 47083, 34128, 47087, 34365, 47091, 47100, 47104, + 47112, 47118, 47124, 47129, 47133, 34788, 47139, 47142, 47150, 47158, + 47166, 4772, 47172, 47176, 47180, 47185, 47192, 47198, 47203, 47208, + 47212, 47218, 47223, 47229, 4662, 820, 47236, 47240, 47243, 47255, 47262, + 47267, 18446, 47271, 47279, 47287, 47295, 47303, 47310, 47318, 47326, + 47333, 47341, 47349, 47357, 47365, 47373, 47381, 47389, 47397, 47405, + 47413, 47421, 47428, 47436, 47444, 47452, 47460, 47468, 47476, 47484, + 47492, 47500, 47508, 47516, 47524, 47532, 47540, 47548, 47556, 47564, + 47572, 47580, 47587, 47595, 47602, 47610, 47618, 47626, 47634, 47642, + 47650, 47658, 47666, 47677, 26806, 47682, 47685, 47692, 47696, 47702, + 47706, 47712, 47717, 47723, 47728, 47733, 47737, 47741, 47748, 47756, + 47761, 47766, 47776, 47782, 47795, 47801, 47807, 47813, 47816, 47823, + 47828, 4700, 47834, 4869, 965, 47839, 47842, 47845, 47848, 37889, 37895, + 47851, 37901, 37914, 37920, 37926, 47857, 37932, 37938, 47863, 47869, 10, + 47877, 47884, 47888, 47892, 47900, 38749, 47904, 47908, 47915, 47920, + 47924, 47929, 47935, 47940, 47946, 47951, 47955, 47959, 47963, 47968, + 47972, 47977, 47981, 47985, 47992, 47997, 48001, 48005, 48010, 48014, + 48019, 48023, 48027, 48032, 48038, 18755, 18760, 48043, 48047, 48050, + 48056, 48060, 48064, 25762, 48069, 48073, 48079, 48086, 48092, 48097, + 40820, 48107, 48112, 48120, 48124, 48127, 48131, 38764, 48139, 4738, + 48144, 48149, 48153, 48158, 48162, 48167, 16026, 48178, 48182, 48185, + 48189, 48197, 48202, 48206, 48211, 48216, 48220, 48224, 48228, 48231, + 48235, 48238, 48243, 48248, 48253, 48258, 48263, 48268, 8664, 16042, + 48273, 48276, 48282, 48287, 48293, 48298, 48304, 48309, 48315, 48320, + 48326, 48332, 48338, 48343, 48347, 48351, 48362, 48370, 48377, 48383, + 48388, 48399, 48409, 48415, 48420, 48427, 48436, 48452, 48468, 48478, + 34030, 48485, 48489, 48494, 48499, 48503, 48507, 43960, 48513, 48518, + 48522, 48529, 48534, 48539, 48543, 48546, 48550, 48556, 32825, 48560, + 26120, 48565, 48572, 48580, 48586, 48592, 48599, 48607, 48613, 48617, + 48622, 48628, 48636, 48641, 48645, 48654, 11134, 48662, 48666, 48674, + 48681, 48686, 48691, 48696, 48700, 48703, 48709, 48713, 48716, 48720, + 48727, 48732, 48739, 48743, 48749, 48753, 48759, 48764, 48769, 5107, + 5114, 48774, 48783, 48791, 48796, 48802, 48814, 48827, 48841, 48848, + 48854, 48860, 48865, 48873, 48876, 48878, 48889, 48901, 48912, 48927, + 48944, 48964, 48986, 48993, 49000, 49007, 49013, 49017, 8663, 49020, + 49024, 49028, 49033, 49037, 49041, 49044, 49048, 49062, 28031, 49081, + 49094, 49107, 49120, 28049, 49135, 2808, 49150, 49156, 49160, 49170, + 49174, 49178, 49183, 49187, 49194, 49199, 49203, 49210, 49216, 49221, + 49227, 49237, 49249, 49260, 49265, 49272, 49276, 49280, 49283, 49291, + 19275, 4141, 49296, 18794, 49309, 49316, 49323, 49329, 49333, 49337, + 49342, 49348, 49353, 49359, 49363, 49367, 49370, 49375, 49379, 49384, + 49389, 49394, 49399, 49404, 49409, 49414, 49419, 49424, 8727, 18805, + 49429, 49433, 49439, 49448, 49453, 49462, 49469, 43791, 49475, 49480, + 49484, 49491, 49496, 49503, 49511, 49517, 49521, 49524, 49528, 49533, + 2886, 49540, 49547, 49551, 49554, 49559, 49564, 49570, 49575, 49580, + 49584, 49589, 49599, 49604, 49610, 49615, 49622, 47257, 49628, 49634, + 49642, 49652, 49657, 49662, 49666, 49671, 49676, 8167, 8179, 49681, + 49684, 49691, 49697, 49706, 10268, 41444, 49714, 49718, 49722, 38812, + 49730, 49741, 49749, 44008, 49756, 49761, 49766, 49777, 49784, 49795, + 38836, 26137, 49803, 4652, 49808, 16471, 49814, 34119, 49820, 49825, + 49835, 49844, 49851, 49857, 49861, 49864, 49871, 49877, 49884, 49890, + 49900, 49908, 49914, 49920, 49925, 49929, 49936, 49941, 49947, 49954, + 49960, 49029, 49965, 49969, 16513, 16522, 16531, 16540, 16549, 16578, + 622, 16587, 49975, 49980, 49983, 49989, 49997, 1275, 50002, 50006, 50011, + 50016, 50020, 50025, 50032, 50038, 50042, 50047, 50053, 50057, 37962, + 50062, 50067, 50076, 50083, 50093, 50099, 34163, 50116, 50125, 50133, + 50139, 50144, 50151, 50157, 50165, 50174, 50182, 50190, 50196, 50200, + 50205, 50213, 35311, 38845, 50219, 50238, 19178, 50252, 50268, 50282, + 50288, 50293, 50298, 50303, 50309, 38851, 50314, 50317, 50324, 50331, + 50340, 50345, 50349, 423, 3176, 50356, 50361, 50366, 33219, 50154, 50370, + 50378, 50383, 50391, 50395, 50398, 50403, 50409, 50415, 50420, 50424, + 34236, 50427, 50432, 50436, 50439, 50444, 50448, 50453, 50458, 50462, + 50467, 50471, 50478, 50482, 50486, 25758, 25769, 50491, 50496, 50502, + 50507, 50513, 50519, 32781, 50524, 50528, 50531, 50537, 50542, 50547, + 50552, 50557, 50562, 50567, 50572, 50577, 50583, 50589, 14569, 19485, + 50594, 50599, 50604, 50609, 50614, 50619, 50624, 50629, 452, 68, 37979, + 37984, 37989, 37995, 38000, 38005, 50634, 38009, 50638, 50642, 50646, + 38014, 38020, 50660, 38031, 38036, 50668, 50673, 38042, 50678, 50683, + 50692, 50697, 50702, 50711, 50717, 50723, 50729, 38059, 50742, 50751, + 50757, 38063, 50761, 38068, 50766, 38073, 38078, 50769, 50774, 50778, + 50784, 16279, 50791, 16289, 50798, 50803, 38083, 50807, 50812, 50817, + 50822, 50827, 50831, 50836, 50841, 50847, 50852, 50857, 50863, 50869, + 50874, 50878, 50883, 50888, 50893, 50897, 50902, 50907, 50912, 50918, + 50924, 50930, 50935, 50939, 50944, 50948, 38087, 38092, 38097, 50952, + 50956, 50961, 50965, 50977, 38102, 38108, 38114, 38126, 50983, 31639, + 50987, 50992, 50996, 51001, 51008, 51013, 51018, 51023, 51027, 51031, + 51041, 51046, 51051, 51055, 51065, 51069, 51072, 51080, 51085, 38174, + 51089, 1375, 51095, 51100, 51106, 51114, 51118, 51127, 51135, 51139, + 51143, 51151, 51157, 51165, 51181, 51186, 51190, 51194, 51198, 51203, + 51209, 51224, 38211, 1685, 14601, 51228, 1254, 1269, 51240, 51248, 51255, + 51260, 9230, 51267, 51272, 10765, 978, 2641, 12321, 51279, 10658, 51284, + 51287, 51296, 1162, 51301, 49200, 51308, 51317, 51322, 51326, 51334, + 51341, 27436, 2697, 51349, 12842, 51359, 51365, 2434, 2444, 51374, 51383, + 51393, 51404, 3584, 41841, 51409, 4341, 4352, 9258, 1167, 51413, 51421, + 51428, 51433, 51437, 51441, 51446, 29077, 49535, 12412, 51454, 51463, + 51472, 51480, 51493, 51500, 51511, 51516, 51529, 51542, 51554, 51566, + 51578, 51589, 51602, 51613, 51624, 51634, 51642, 51650, 51662, 51674, + 51685, 51694, 51702, 51709, 51721, 51728, 51734, 51743, 51749, 51756, + 51769, 51774, 51784, 51789, 51795, 51800, 32121, 51804, 48705, 51811, + 51818, 51826, 51833, 2654, 51840, 51851, 51861, 51870, 51878, 51888, + 51896, 51905, 51915, 51924, 51929, 51935, 51941, 4190, 51952, 51962, + 51971, 51980, 51988, 51998, 52006, 52015, 52020, 52025, 52030, 1604, 47, + 52038, 52046, 52057, 52068, 19889, 52078, 52082, 52089, 52095, 52100, + 52104, 52115, 52125, 52134, 52145, 52150, 20318, 20323, 52157, 52166, + 52171, 52181, 52186, 52194, 52202, 52209, 52215, 1566, 271, 52219, 52224, + 52230, 46108, 52235, 52238, 2182, 2663, 52246, 52250, 52253, 1420, 52259, + 16799, 1172, 52264, 52277, 2797, 2818, 52291, 52303, 52315, 2832, 2849, + 2864, 2880, 2897, 52329, 52341, 2912, 52355, 1178, 1184, 1190, 12713, + 52360, 52365, 52370, 52374, 52389, 52404, 52419, 52434, 52449, 52464, + 52479, 52494, 52509, 52524, 52539, 52554, 52569, 52584, 52599, 52614, + 52629, 52644, 52659, 52674, 52689, 52704, 52719, 52734, 52749, 52764, + 52779, 52794, 52809, 52824, 52839, 52854, 52869, 52884, 52899, 52914, + 52929, 52944, 52959, 52974, 52989, 53004, 53019, 53034, 53049, 53064, + 53079, 53094, 53109, 53124, 53139, 53154, 53169, 53184, 53199, 53214, + 53229, 53244, 53259, 53274, 53289, 53304, 53319, 53334, 53349, 53364, + 53379, 53394, 53409, 53424, 53439, 53454, 53469, 53484, 53499, 53514, + 53529, 53544, 53559, 53574, 53589, 53604, 53619, 53634, 53649, 53664, + 53679, 53694, 53709, 53724, 53739, 53754, 53769, 53784, 53799, 53814, + 53829, 53844, 53859, 53874, 53889, 53904, 53919, 53934, 53949, 53964, + 53979, 53994, 54009, 54024, 54039, 54054, 54069, 54084, 54099, 54114, + 54129, 54144, 54159, 54174, 54189, 54204, 54219, 54234, 54249, 54264, + 54279, 54294, 54309, 54324, 54339, 54354, 54369, 54384, 54399, 54414, + 54429, 54444, 54459, 54474, 54489, 54504, 54519, 54534, 54549, 54564, + 54579, 54594, 54609, 54624, 54639, 54654, 54669, 54684, 54699, 54714, + 54729, 54744, 54759, 54774, 54789, 54804, 54819, 54834, 54849, 54864, + 54879, 54894, 54909, 54924, 54939, 54954, 54969, 54984, 54999, 55014, + 55029, 55044, 55059, 55074, 55089, 55104, 55119, 55134, 55149, 55164, + 55179, 55194, 55209, 55224, 55239, 55254, 55269, 55284, 55299, 55314, + 55329, 55344, 55359, 55374, 55389, 55404, 55419, 55434, 55449, 55464, + 55479, 55494, 55509, 55524, 55539, 55554, 55569, 55584, 55599, 55614, + 55629, 55644, 55659, 55674, 55689, 55704, 55719, 55734, 55749, 55764, + 55779, 55794, 55809, 55824, 55839, 55854, 55869, 55884, 55899, 55914, + 55929, 55944, 55959, 55974, 55989, 56004, 56019, 56034, 56049, 56064, + 56079, 56094, 56109, 56124, 56139, 56154, 56169, 56184, 56199, 56214, + 56229, 56244, 56259, 56274, 56289, 56304, 56319, 56334, 56349, 56364, + 56379, 56394, 56409, 56424, 56439, 56454, 56469, 56484, 56499, 56514, + 56529, 56544, 56559, 56574, 56589, 56604, 56619, 56634, 56649, 56664, + 56679, 56694, 56709, 56724, 56739, 56754, 56769, 56784, 56799, 56814, + 56829, 56844, 56859, 56874, 56889, 56904, 56919, 56934, 56949, 56964, + 56979, 56994, 57009, 57024, 57039, 57054, 57069, 57084, 57099, 57114, + 57129, 57144, 57159, 57174, 57189, 57204, 57219, 57234, 57249, 57264, + 57279, 57294, 57309, 57324, 57339, 57354, 57369, 57384, 57399, 57414, + 57429, 57444, 57459, 57474, 57489, 57504, 57519, 57534, 57549, 57564, + 57579, 57594, 57609, 57624, 57639, 57654, 57669, 57684, 57699, 57714, + 57729, 57744, 57759, 57774, 57789, 57804, 57819, 57834, 57849, 57864, + 57879, 57894, 57909, 57924, 57939, 57954, 57969, 57984, 57999, 58014, + 58029, 58044, 58059, 58074, 58089, 58104, 58119, 58134, 58149, 58164, + 58179, 58194, 58209, 58224, 58239, 58254, 58269, 58284, 58299, 58314, + 58329, 58344, 58359, 58374, 58389, 58404, 58419, 58434, 58449, 58464, + 58479, 58494, 58509, 58524, 58539, 58554, 58569, 58584, 58599, 58614, + 58629, 58644, 58659, 58674, 58689, 58704, 58719, 58734, 58749, 58764, + 58779, 58794, 58809, 58824, 58839, 58854, 58869, 58884, 58899, 58914, + 58929, 58944, 58959, 58974, 58989, 59004, 59019, 59034, 59049, 59064, + 59079, 59094, 59109, 59124, 59139, 59154, 59169, 59184, 59199, 59214, + 59229, 59244, 59259, 59274, 59289, 59304, 59319, 59334, 59349, 59364, + 59379, 59394, 59409, 59424, 59439, 59454, 59469, 59484, 59499, 59514, + 59529, 59544, 59559, 59574, 59589, 59604, 59619, 59634, 59649, 59664, + 59679, 59694, 59709, 59724, 59739, 59754, 59769, 59784, 59799, 59814, + 59829, 59844, 59859, 59874, 59889, 59904, 59919, 59934, 59949, 59964, + 59979, 59994, 60009, 60024, 60039, 60054, 60069, 60084, 60099, 60114, + 60129, 60144, 60159, 60174, 60189, 60205, 60221, 60237, 60253, 60269, + 60285, 60301, 60317, 60333, 60349, 60365, 60381, 60397, 60413, 60429, + 60445, 60461, 60477, 60493, 60509, 60525, 60541, 60557, 60573, 60589, + 60605, 60621, 60637, 60653, 60669, 60685, 60701, 60717, 60733, 60749, + 60765, 60781, 60797, 60813, 60829, 60845, 60861, 60877, 60893, 60909, + 60925, 60941, 60957, 60973, 60989, 61005, 61021, 61037, 61053, 61069, + 61085, 61101, 61117, 61133, 61149, 61165, 61181, 61197, 61213, 61229, + 61245, 61261, 61277, 61293, 61309, 61325, 61341, 61357, 61373, 61389, + 61405, 61421, 61437, 61453, 61469, 61485, 61501, 61517, 61533, 61549, + 61565, 61581, 61597, 61613, 61629, 61645, 61661, 61677, 61693, 61709, + 61725, 61741, 61757, 61773, 61789, 61805, 61821, 61837, 61853, 61869, + 61885, 61901, 61917, 61933, 61949, 61965, 61981, 61997, 62013, 62029, + 62045, 62061, 62077, 62093, 62109, 62125, 62141, 62157, 62173, 62189, + 62205, 62221, 62237, 62253, 62269, 62285, 62301, 62317, 62333, 62349, + 62365, 62381, 62397, 62413, 62429, 62445, 62461, 62477, 62493, 62509, + 62525, 62541, 62557, 62573, 62589, 62605, 62621, 62637, 62653, 62669, + 62685, 62701, 62717, 62733, 62749, 62765, 62781, 62797, 62813, 62829, + 62845, 62861, 62877, 62893, 62909, 62925, 62941, 62957, 62973, 62989, + 63005, 63021, 63037, 63053, 63069, 63085, 63101, 63117, 63133, 63149, + 63165, 63181, 63197, 63213, 63229, 63245, 63261, 63277, 63293, 63309, + 63325, 63341, 63357, 63373, 63389, 63405, 63421, 63437, 63453, 63469, + 63485, 63501, 63517, 63533, 63549, 63565, 63581, 63597, 63613, 63629, + 63645, 63661, 63677, 63693, 63709, 63725, 63741, 63757, 63773, 63789, + 63805, 63821, 63837, 63853, 63869, 63885, 63901, 63917, 63933, 63949, + 63965, 63981, 63997, 64013, 64029, 64045, 64061, 64077, 64093, 64109, + 64125, 64141, 64157, 64173, 64189, 64205, 64221, 64237, 64253, 64269, + 64285, 64301, 64317, 64333, 64349, 64365, 64381, 64397, 64413, 64429, + 64445, 64461, 64477, 64493, 64509, 64525, 64541, 64557, 64573, 64589, + 64605, 64621, 64637, 64653, 64669, 64685, 64701, 64717, 64733, 64749, + 64765, 64781, 64797, 64813, 64829, 64845, 64861, 64877, 64893, 64909, + 64925, 64941, 64957, 64973, 64989, 65005, 65021, 65037, 65053, 65069, + 65085, 65101, 65117, 65133, 65149, 65165, 65181, 65197, 65213, 65229, + 65245, 65261, 65277, 65293, 65309, 65325, 65341, 65357, 65373, 65389, + 65405, 65421, 65437, 65453, 65469, 65485, 65501, 65517, 65533, 65549, + 65565, 65581, 65597, 65613, 65629, 65645, 65661, 65677, 65693, 65709, + 65725, 65741, 65757, 65773, 65789, 65805, 65821, 65837, 65853, 65869, + 65885, 65901, 65917, 65933, 65949, 65965, 65981, 65997, 66013, 66029, + 66045, 66061, 66077, 66093, 66109, 66125, 66141, 66157, 66173, 66189, + 66205, 66221, 66237, 66253, 66269, 66285, 66301, 66317, 66333, 66349, + 66365, 66381, 66397, 66413, 66429, 66445, 66461, 66477, 66493, 66509, + 66525, 66541, 66557, 66573, 66589, 66605, 66621, 66637, 66653, 66669, + 66685, 66701, 66717, 66733, 66749, 66765, 66781, 66797, 66813, 66829, + 66845, 66861, 66877, 66893, 66909, 66925, 66941, 66957, 66973, 66989, + 67005, 67021, 67037, 67053, 67069, 67085, 67101, 67117, 67133, 67149, + 67165, 67181, 67197, 67213, 67229, 67245, 67261, 67277, 67293, 67309, + 67325, 67341, 67357, 67373, 67389, 67405, 67421, 67437, 67453, 67469, + 67485, 67501, 67517, 67533, 67549, 67565, 67581, 67597, 67613, 67629, + 67645, 67661, 67677, 67693, 67709, 67725, 67741, 67757, 67773, 67789, + 67805, 67821, 67837, 67853, 67869, 67885, 67901, 67917, 67933, 67949, + 67965, 67981, 67997, 68013, 68029, 68045, 68061, 68077, 68093, 68109, + 68125, 68141, 68157, 68173, 68189, 68205, 68221, 68237, 68253, 68269, + 68285, 68301, 68317, 68333, 68349, 68365, 68381, 68397, 68413, 68429, + 68445, 68461, 68477, 68493, 68509, 68525, 68541, 68557, 68573, 68589, + 68605, 68621, 68637, 68653, 68669, 68685, 68701, 68717, 68733, 68749, + 68765, 68781, 68797, 68813, 68829, 68845, 68861, 68870, 68885, 68899, + 68908, 17701, 68912, 68917, 68923, 68929, 68939, 68947, 17958, 18689, + 9277, 68960, 1428, 1432, 68968, 4270, 33344, 8104, 68974, 68979, 68984, + 68989, 68994, 69000, 69005, 69011, 69016, 69022, 69027, 69032, 69037, + 69042, 69048, 69053, 69058, 69063, 69068, 69073, 69078, 69083, 69089, + 69094, 69100, 69107, 2701, 69112, 69118, 9652, 69122, 69127, 69134, + 69142, 4281, 4286, 4291, 4296, 65, 69146, 69152, 69157, 69162, 69166, + 69171, 69175, 69179, 12785, 69183, 69193, 69206, 69217, 69230, 69237, + 69243, 69251, 69258, 12246, 69267, 69272, 69278, 69284, 69290, 69295, + 69300, 69305, 69310, 69314, 69319, 69324, 69329, 69335, 69341, 69347, + 69352, 69356, 69361, 69366, 69370, 69375, 69380, 69385, 69389, 12801, + 12812, 12817, 1471, 69393, 69399, 1476, 19723, 69404, 19732, 1486, 69409, + 69415, 69420, 1507, 69426, 1513, 1519, 12847, 69431, 69440, 69448, 69456, + 69463, 69467, 69471, 69477, 69482, 37622, 69487, 69494, 69502, 69509, + 69514, 69518, 69522, 69531, 69536, 69541, 69546, 1524, 280, 69551, 69556, + 69560, 19858, 987, 69564, 69571, 69576, 69580, 19916, 1528, 46384, 69583, + 69588, 69598, 69607, 69612, 69616, 69622, 1533, 49481, 69627, 69636, + 69642, 69647, 69652, 13086, 13092, 69658, 69671, 69683, 69700, 69717, + 69734, 69751, 69768, 69785, 69802, 69819, 69836, 69853, 69870, 69887, + 69904, 69921, 69938, 69955, 69972, 69989, 70006, 70023, 70040, 70057, + 70074, 70091, 70108, 70125, 70142, 70159, 70176, 70193, 70210, 70227, + 70244, 70261, 70278, 70295, 70312, 70329, 70346, 70363, 70380, 70397, + 70414, 70431, 70448, 70465, 70482, 70499, 70516, 70527, 70537, 70542, + 1538, 70546, 70551, 70557, 70562, 70567, 70574, 10677, 1543, 70580, + 70589, 33736, 70594, 70605, 13108, 70615, 70620, 70626, 70631, 70638, + 70644, 70649, 1548, 20210, 70654, 70660, 13118, 70666, 70671, 70676, + 70681, 70686, 70691, 70696, 70701, 1553, 4761, 70706, 70711, 70717, + 70722, 70727, 70732, 70737, 70742, 70747, 70752, 70757, 70763, 70769, + 70775, 70780, 70784, 70789, 70794, 70798, 70803, 70808, 70813, 70818, + 70822, 70827, 70833, 70838, 70843, 70847, 70852, 70857, 70863, 70868, + 70873, 70879, 70885, 70890, 70894, 70899, 70904, 70909, 70913, 70918, + 70923, 70928, 70934, 70940, 70945, 70949, 70953, 70958, 70963, 70968, + 35515, 70972, 70977, 70982, 70988, 70993, 70998, 71002, 71007, 71012, + 71018, 71023, 71028, 71034, 71040, 71045, 71049, 71054, 71059, 71063, + 71068, 71073, 71078, 71084, 71090, 71095, 71099, 71104, 71109, 71113, + 71118, 71123, 71128, 71133, 71137, 71140, 71143, 71148, 71153, 38358, + 71160, 71168, 50108, 71174, 3928, 33679, 71187, 71194, 71200, 71206, + 4107, 71211, 13260, 71217, 71227, 71242, 71250, 13265, 71261, 71266, + 71277, 71289, 71301, 71313, 2903, 71325, 71330, 31722, 71342, 71348, + 71354, 71359, 71368, 71375, 71380, 71385, 71390, 71395, 71400, 71405, + 1570, 19350, 71410, 71415, 71420, 71425, 71431, 71436, 71442, 71447, + 71452, 71458, 71463, 71468, 49555, 71472, 71476, 71481, 71485, 20358, + 71490, 71493, 71498, 71506, 71514, 1574, 13301, 13307, 1579, 71522, + 71529, 71534, 71543, 71553, 71560, 71565, 71570, 1584, 71577, 71582, + 20478, 71586, 71591, 71598, 71604, 71608, 71621, 71627, 71638, 71648, + 71655, 20500, 10571, 10578, 4355, 4361, 71662, 1589, 71667, 71676, 71682, + 71690, 71697, 71703, 71710, 71722, 71728, 71733, 71740, 71752, 71763, + 71773, 71782, 71792, 71802, 4249, 71810, 37416, 37425, 20540, 71823, + 71828, 71833, 71838, 71843, 71848, 71853, 1594, 1598, 71858, 71862, + 71865, 71876, 71881, 20566, 1608, 71889, 71894, 71899, 71911, 20599, + 71918, 71921, 71927, 71933, 71938, 71946, 1613, 71951, 71956, 71964, + 71972, 71979, 71988, 71996, 72005, 72009, 1618, 72018, 1623, 25943, + 72023, 72030, 72036, 20686, 72044, 72054, 72060, 72065, 72073, 72080, + 72089, 72097, 72107, 72116, 72126, 72135, 72146, 72156, 72166, 72175, + 72185, 72199, 72212, 72221, 72229, 72239, 72248, 72260, 72271, 72282, + 72292, 19978, 72297, 13453, 72306, 72312, 72317, 72324, 72330, 72337, + 72343, 19567, 72353, 72359, 72364, 72375, 72382, 72389, 72394, 72402, + 13470, 13475, 72410, 72416, 72420, 4339, 4350, 20762, 49658, 72428, + 72434, 72439, 72447, 72454, 14582, 72459, 72465, 72471, 1634, 72476, + 72479, 72485, 72490, 72495, 72500, 72505, 72510, 72515, 72520, 72525, + 72531, 72537, 1333, 72542, 72547, 72552, 72558, 72563, 72568, 72573, + 72578, 72583, 72588, 1643, 18, 72594, 72598, 72603, 72607, 72611, 72615, + 38644, 72620, 28250, 72625, 72630, 72634, 72637, 72641, 72645, 72650, + 72654, 72659, 72663, 72666, 72672, 42331, 42336, 42341, 72675, 72682, + 72688, 72696, 49253, 72706, 72712, 42347, 38908, 38659, 38665, 42363, + 38671, 72717, 72722, 72726, 38941, 72733, 72736, 72740, 72748, 72755, + 72760, 72763, 72768, 72773, 72777, 72781, 72784, 72794, 72806, 72813, + 72819, 38676, 72826, 40627, 72829, 9669, 13815, 72832, 72836, 72841, + 4159, 72845, 72848, 16332, 72855, 72862, 72875, 72890, 72904, 72920, + 72935, 72944, 72952, 72960, 72969, 72973, 72982, 72988, 72993, 73003, + 73016, 73028, 73035, 73040, 73049, 73062, 44055, 73080, 73085, 73092, + 73098, 73103, 850, 73108, 73116, 73123, 73130, 33160, 914, 73136, 73142, + 73147, 73157, 73165, 73171, 73176, 38695, 6858, 38709, 73180, 73190, + 73195, 73203, 73213, 73228, 73234, 73240, 73247, 38719, 73252, 73258, + 37760, 73262, 73266, 73271, 73280, 73287, 73292, 73296, 73301, 73309, + 20543, 73316, 73321, 73325, 6899, 38745, 73329, 73335, 341, 73345, 73352, + 73359, 73365, 73372, 73377, 73386, 15941, 69592, 69602, 73392, 73400, + 73404, 73408, 73412, 73416, 73421, 73425, 73431, 73439, 73444, 73449, + 73456, 73461, 73465, 73470, 73474, 73478, 73484, 73490, 73501, 73507, + 73512, 73516, 73521, 73525, 38869, 73529, 38875, 38881, 73534, 73540, + 73547, 73552, 73556, 37777, 20197, 73559, 73563, 73568, 73575, 73581, + 73585, 73590, 48722, 73596, 73600, 73607, 73611, 73616, 73622, 73628, + 73634, 73646, 73655, 73665, 73671, 73678, 73683, 73688, 73692, 73695, + 73701, 73708, 73713, 73718, 73725, 73732, 73739, 73745, 73750, 73755, + 73763, 38886, 2531, 73768, 73773, 73779, 73784, 73790, 73795, 73800, + 73805, 73811, 38907, 73816, 73822, 73828, 73834, 38977, 73839, 73844, + 73849, 38988, 73854, 73859, 73864, 73870, 73876, 38993, 73881, 73886, + 73891, 39048, 39054, 73896, 73901, 39059, 39081, 34021, 39087, 39091, + 73906, 14258, 73910, 73918, 73924, 73932, 73939, 73945, 73955, 73961, + 73968, 12685, 39105, 73974, 73987, 73996, 74002, 74011, 74017, 74023, + 74030, 28593, 74038, 74045, 74055, 74063, 74066, 39049, 74071, 74078, + 74083, 74087, 74091, 74096, 74100, 4478, 74105, 74110, 74115, 42425, + 42430, 74119, 42444, 74124, 42449, 74129, 74135, 42461, 42467, 42473, + 74140, 74146, 27491, 74157, 74160, 74172, 74180, 39128, 74184, 74193, + 74203, 74212, 39138, 74217, 74224, 74233, 74239, 74247, 74254, 74261, + 6950, 5174, 74266, 39060, 74272, 74275, 74281, 74288, 74293, 74298, + 28497, 74302, 74308, 74314, 74319, 74324, 74328, 74334, 74340, 40511, + 74345, 43649, 45486, 45492, 39169, 39174, 74349, 74353, 74357, 74360, + 74373, 74379, 74383, 74386, 74391, 40893, 74395, 37782, 25884, 74401, + 6879, 6887, 10377, 74404, 74409, 74414, 74419, 74424, 74429, 74434, + 74439, 74444, 74449, 74455, 74460, 74465, 74471, 74476, 74481, 74486, + 74491, 74496, 74501, 74507, 74512, 74518, 74523, 74528, 74533, 74538, + 74543, 74548, 74553, 74558, 74563, 74568, 74574, 74579, 74584, 74589, + 74594, 74599, 74604, 74610, 74615, 74620, 74625, 74630, 74635, 74640, + 74645, 74650, 74655, 74661, 74666, 74671, 74676, 74681, 74687, 74693, + 74698, 74704, 74709, 74714, 74719, 74724, 74729, 1421, 159, 74734, 74738, + 74742, 74746, 30458, 74750, 74754, 74759, 74763, 74768, 74772, 74777, + 74782, 74787, 74792, 74796, 74800, 74805, 74809, 16020, 74814, 74818, + 74825, 74835, 18327, 74844, 74853, 74862, 74866, 74871, 74876, 74880, + 74884, 30238, 3259, 74888, 74894, 21775, 74898, 74907, 74915, 74921, + 74926, 74938, 74950, 74955, 74959, 74964, 74968, 74974, 74980, 74985, + 74995, 75005, 75011, 75019, 75024, 75028, 75034, 75039, 75046, 75052, + 75057, 75064, 75073, 75082, 75090, 75094, 18883, 75097, 75106, 75114, + 75126, 75137, 75148, 75157, 75161, 75170, 75178, 75188, 75196, 75203, + 75213, 75219, 75224, 75232, 75239, 75248, 75254, 75259, 75266, 75272, + 75283, 60, 37559, 75289, 32009, 32019, 75295, 75303, 75310, 75316, 75320, + 75330, 75341, 75349, 75358, 75363, 75368, 75373, 75377, 75381, 75389, + 21722, 75396, 75400, 75406, 75416, 75423, 75430, 75436, 75442, 42524, + 75446, 75448, 75451, 75457, 75461, 75472, 75482, 75488, 75495, 75502, + 15957, 75510, 75516, 75525, 75534, 75540, 11579, 75546, 75552, 75557, + 75562, 75569, 75574, 75581, 75587, 75592, 75600, 75613, 75622, 75631, + 72161, 72171, 75641, 75647, 75656, 75662, 75668, 75675, 75682, 75689, + 75696, 75703, 75708, 75712, 75716, 75719, 75729, 75733, 75745, 75754, + 10038, 75763, 75774, 75779, 75783, 72180, 75789, 75796, 75805, 75813, + 51060, 75821, 75825, 75830, 75835, 75845, 75853, 75865, 75870, 75874, + 75878, 75884, 75892, 75899, 75911, 75919, 75930, 75937, 75943, 75953, + 75959, 75963, 75972, 75981, 75988, 75994, 75999, 76003, 76007, 76011, + 76020, 76029, 76038, 76045, 76051, 76057, 76063, 76068, 76075, 76081, + 76089, 76096, 76102, 15046, 76107, 76113, 76117, 17184, 76121, 76126, + 76136, 76141, 76150, 76156, 76162, 76170, 76177, 76181, 76185, 76192, + 76198, 76206, 76213, 76219, 76230, 76234, 76238, 76242, 76245, 76251, + 76256, 76261, 76265, 76269, 76278, 76286, 76293, 76299, 76306, 29268, + 48863, 76311, 76319, 76323, 76327, 76330, 76338, 76345, 76351, 76360, + 76368, 76374, 76379, 76383, 76388, 76393, 76397, 76401, 76405, 76410, + 76419, 76423, 76430, 45590, 76434, 76440, 76448, 76452, 76458, 76466, + 76472, 76477, 76488, 76496, 76502, 76511, 27638, 76519, 76526, 76533, + 76540, 76547, 76554, 52549, 15772, 76561, 76568, 76573, 42560, 4721, + 76579, 76584, 76589, 76595, 76601, 76607, 76612, 76617, 76622, 76627, + 76633, 76638, 76644, 76649, 76655, 76660, 76665, 76670, 76675, 76680, + 76685, 76690, 76696, 76701, 76707, 76712, 76717, 76722, 76727, 76732, + 76737, 76743, 76748, 76753, 76758, 76763, 76768, 76773, 76778, 76783, + 76788, 76793, 76799, 76804, 76809, 76814, 76819, 76824, 76829, 76834, + 76839, 76845, 76850, 76855, 76860, 76865, 76870, 76875, 76880, 76885, + 76890, 76895, 76900, 76905, 76911, 1883, 305, 76916, 46502, 46507, 76920, + 76925, 9293, 76929, 3628, 76934, 76939, 76943, 76952, 76963, 76980, + 76998, 77006, 75817, 77013, 77016, 77026, 77033, 77042, 77058, 77067, + 77077, 77082, 77095, 77105, 77114, 77122, 77136, 77144, 77153, 77157, + 77160, 77167, 77173, 77184, 77191, 77203, 77214, 77225, 77234, 77241, + 1173, 812, 77251, 2744, 77255, 77260, 77269, 997, 9059, 25320, 77277, + 77285, 77299, 77312, 77316, 77321, 77326, 77331, 77337, 77343, 77348, + 9661, 18370, 77353, 77357, 77361, 77369, 10098, 77374, 77380, 77389, + 77397, 1657, 13314, 1179, 4393, 77401, 77405, 77414, 77424, 2482, 32859, + 77433, 77439, 20450, 32874, 77445, 4558, 13696, 77451, 77458, 71871, + 77462, 77466, 77472, 77477, 77482, 3861, 163, 3887, 77487, 77499, 77503, + 77507, 77513, 77518, 33756, 77522, 13684, 2938, 4, 77527, 77537, 77548, + 77559, 77569, 77575, 77586, 77593, 77599, 77605, 2306, 77610, 77618, + 77625, 77631, 77641, 77651, 77661, 77670, 28580, 1185, 77675, 77679, + 77683, 77689, 77693, 2961, 2967, 9658, 2337, 77697, 77701, 77710, 77718, + 77729, 77737, 77745, 77751, 77756, 77767, 77778, 77786, 77792, 77797, + 11356, 77807, 77815, 77819, 77823, 77828, 77832, 77844, 34219, 18269, + 77851, 77861, 77867, 77873, 7977, 11490, 77883, 77894, 77905, 77915, + 77924, 77928, 77935, 999, 2731, 77945, 77950, 77958, 71587, 77966, 77971, + 77982, 77989, 78003, 16980, 529, 78013, 78020, 78024, 78028, 78036, + 78045, 4433, 78053, 78059, 20495, 78064, 78078, 78085, 78091, 78099, + 78108, 78117, 78124, 78136, 78146, 78154, 78161, 78169, 78176, 4357, 116, + 78184, 78195, 78199, 78211, 78217, 1804, 227, 78222, 10709, 78227, 3006, + 78231, 78238, 78244, 78255, 78265, 78273, 78280, 10049, 78287, 78296, + 78304, 4438, 78317, 4455, 78321, 78326, 78332, 78337, 78342, 78347, 3011, + 573, 78353, 78366, 78370, 78375, 78380, 3016, 1882, 763, 78384, 4459, + 78392, 78398, 78402, 799, 78412, 78421, 78426, 3878, 78430, 78434, 18001, + 18008, 9317, 78442, 4490, 4367, 15644, 78450, 78457, 78462, 28644, 78466, + 78473, 78479, 13952, 78484, 14017, 204, 78489, 78501, 78507, 78515, 3028, + 1699, 78523, 78525, 78530, 78535, 78540, 78546, 78551, 78556, 78561, + 78566, 78571, 78576, 78582, 78587, 78592, 78597, 78602, 78607, 78612, + 78617, 78622, 78628, 78633, 78638, 78643, 78649, 78654, 78660, 78665, + 78670, 78675, 78680, 78685, 78690, 78695, 78701, 78706, 78712, 78717, + 78722, 78727, 78732, 78737, 78742, 78747, 78752, 9730, 9743, 4506, 4511, + 4516, 4521, 26, 78758, 78764, 78769, 78774, 78779, 78785, 78790, 78794, + 78798, 78803, 78809, 78813, 78819, 78824, 78829, 78835, 78840, 78844, + 78849, 78854, 78858, 78861, 78863, 78867, 78870, 78877, 78882, 78886, + 78891, 78895, 78899, 78903, 78909, 78920, 78940, 78959, 78980, 78993, + 79005, 79014, 79018, 79021, 39446, 79024, 39451, 79031, 79036, 39456, + 79045, 79054, 39462, 79059, 39467, 79068, 79073, 13941, 79077, 79082, + 79087, 39472, 79091, 79100, 50719, 79104, 79107, 79111, 9325, 79117, + 79120, 79125, 79130, 79135, 79139, 4179, 39477, 79142, 79146, 79149, + 79160, 79165, 79169, 79175, 79183, 79196, 79200, 79208, 79217, 79223, + 79228, 79234, 79238, 79244, 79250, 79258, 79263, 79267, 79274, 79280, + 79288, 79297, 79305, 39480, 79312, 79322, 79331, 79339, 79350, 79363, + 79368, 79373, 79377, 79386, 79392, 79399, 79412, 79424, 79435, 79447, + 79454, 79463, 79472, 79481, 79488, 79494, 79501, 79509, 79516, 79524, + 79533, 79541, 79548, 79556, 79565, 79573, 79582, 79592, 79601, 79609, + 79616, 79624, 79633, 79641, 79650, 79660, 79669, 79677, 79686, 79696, + 79705, 79715, 79726, 79736, 79745, 79753, 79760, 79768, 79777, 79785, + 79794, 79804, 79813, 79821, 79830, 79840, 79849, 79859, 79870, 79880, + 79889, 79897, 79906, 79916, 79925, 79935, 79946, 79956, 79965, 79975, + 79986, 79996, 80007, 80019, 80030, 80040, 80049, 80057, 80064, 80072, + 80081, 80089, 80098, 80108, 80117, 80125, 80134, 80144, 80153, 80163, + 80174, 80184, 80193, 80201, 80210, 80220, 80229, 80239, 80250, 80260, + 80269, 80279, 80290, 80300, 80311, 80323, 80334, 80344, 80353, 80361, + 80370, 80380, 80389, 80399, 80410, 80420, 80429, 80439, 80450, 80460, + 80471, 80483, 80494, 80504, 80513, 80523, 80534, 80544, 80555, 80567, + 80578, 80588, 80599, 80611, 80622, 80634, 80647, 80659, 80670, 80680, + 80689, 80697, 80704, 80712, 80721, 80729, 80738, 80748, 80757, 80765, + 80774, 80784, 80793, 80803, 80814, 80824, 80833, 80841, 80850, 80860, + 80869, 80879, 80890, 80900, 80909, 80919, 80930, 80940, 80951, 80963, + 80974, 80984, 80993, 81001, 81010, 81020, 81029, 81039, 81050, 81060, + 81069, 81079, 81090, 81100, 81111, 81123, 81134, 81144, 81153, 81163, + 81174, 81184, 81195, 81207, 81218, 81228, 81239, 81251, 81262, 81274, + 81287, 81299, 81310, 81320, 81329, 81337, 81346, 81356, 81365, 81375, + 81386, 81396, 81405, 81415, 81426, 81436, 81447, 81459, 81470, 81480, + 81489, 81499, 81510, 81520, 81531, 81543, 81554, 81564, 81575, 81587, + 81598, 81610, 81623, 81635, 81646, 81656, 81665, 81675, 81686, 81696, + 81707, 81719, 81730, 81740, 81751, 81763, 81774, 81786, 81799, 81811, + 81822, 81832, 81843, 81855, 81866, 81878, 81891, 81903, 81914, 81926, + 81939, 81951, 81964, 81978, 81991, 82003, 82014, 82024, 82033, 82041, + 82048, 82053, 9090, 82060, 82065, 39490, 82071, 82076, 39495, 82082, + 82089, 25442, 31457, 82094, 82100, 82106, 82114, 82120, 82126, 82133, + 82140, 82145, 82150, 82154, 82159, 82163, 82166, 82170, 82175, 82184, + 82193, 82201, 82207, 82219, 82230, 82234, 3321, 9065, 82239, 82242, + 82245, 82247, 82251, 82255, 82259, 82265, 82270, 31520, 82275, 82279, + 82282, 82287, 82291, 82298, 82304, 82308, 7060, 82312, 82317, 39517, + 82321, 82328, 82337, 82345, 82351, 82362, 82370, 82379, 82387, 82394, + 82401, 82407, 82412, 82423, 39522, 82428, 82439, 82451, 82459, 82470, + 82479, 82487, 82498, 82503, 82511, 2696, 82516, 82525, 41914, 82538, + 82542, 82554, 82562, 82567, 82575, 82586, 21940, 82595, 82601, 82608, + 82616, 82622, 39532, 82627, 4484, 68943, 82634, 82637, 82645, 82658, + 82671, 82684, 82697, 82704, 82715, 82724, 82729, 52366, 52371, 82733, + 82737, 82745, 82752, 82761, 82769, 82775, 82784, 82792, 82799, 82807, + 82811, 82820, 82829, 82839, 82852, 82865, 82875, 39537, 82881, 82888, + 82894, 82900, 39543, 82905, 82908, 82912, 82920, 82929, 52137, 82937, + 82946, 82954, 82961, 82969, 82979, 82988, 82997, 41066, 83006, 83017, + 83032, 83042, 10747, 26258, 83051, 83056, 83061, 83065, 19559, 83070, + 83075, 83081, 83086, 83091, 83097, 83102, 83107, 26218, 83112, 83119, + 83127, 83135, 83143, 83148, 83155, 83162, 83167, 1717, 83171, 83175, + 83183, 83191, 39560, 83197, 83203, 83215, 83221, 83228, 83232, 83239, + 83244, 83251, 83257, 83264, 83275, 83285, 83295, 83307, 83313, 83321, + 83330, 83336, 83346, 83356, 39587, 83365, 83374, 83380, 83392, 83403, + 83410, 83415, 83419, 83427, 83438, 83444, 83449, 83454, 83461, 83469, + 83481, 83491, 83500, 83509, 83517, 83524, 41728, 29029, 83530, 83535, + 83539, 83543, 83548, 83556, 83562, 83573, 83586, 83591, 83598, 39592, + 83603, 83615, 83624, 83632, 83642, 83653, 83666, 83673, 83682, 83691, + 83699, 83704, 83710, 83714, 1410, 83719, 83724, 83729, 83734, 83740, + 83745, 83750, 83756, 83762, 83767, 83771, 83776, 83781, 83786, 69527, + 83791, 83796, 83801, 83806, 83812, 83818, 83823, 83827, 83832, 19558, + 83837, 83843, 83848, 83854, 83859, 83864, 83869, 83874, 83878, 83884, + 83889, 83898, 83903, 83908, 83913, 83918, 83922, 83929, 83935, 4836, + 20812, 3286, 83940, 83944, 83949, 83953, 83957, 83961, 56166, 83965, + 83890, 83967, 83977, 39601, 83980, 83985, 83994, 84000, 7019, 39606, + 84004, 84010, 84015, 84021, 84026, 84030, 84037, 84042, 84052, 84061, + 84065, 84071, 84077, 84083, 84087, 84095, 84102, 84110, 84118, 39611, + 84125, 84128, 84139, 84146, 84152, 84157, 84161, 84167, 84175, 84182, + 84187, 84191, 84200, 84208, 84214, 84219, 84226, 84234, 39616, 84241, + 28470, 84253, 84259, 84264, 84270, 84277, 84283, 25906, 33367, 84289, + 84294, 84300, 84304, 84316, 83923, 83930, 26150, 84326, 84331, 84338, + 84344, 84351, 84357, 84368, 84373, 84381, 10447, 84386, 84389, 84395, + 84399, 84403, 84406, 84412, 84418, 39305, 4837, 1425, 16069, 84425, + 84431, 84437, 84443, 84449, 84455, 84461, 84467, 84473, 84478, 84483, + 84488, 84493, 84498, 84503, 84508, 84513, 84518, 84523, 84528, 84533, + 84538, 84544, 84549, 84554, 84560, 84565, 84570, 84576, 84582, 84588, + 84594, 84600, 84606, 84612, 84618, 84624, 84629, 84634, 84640, 84645, + 84650, 84656, 84661, 84666, 84671, 84676, 84681, 84686, 84691, 84696, + 84701, 84706, 84711, 84716, 84722, 84727, 84732, 84737, 84743, 84748, + 84753, 84758, 84763, 84769, 84774, 84779, 84784, 84789, 84794, 84799, + 84804, 84809, 84814, 84819, 84824, 84829, 84834, 84839, 84844, 84849, + 84854, 84859, 84864, 84870, 84875, 84880, 84885, 84890, 84895, 84900, + 84905, 1065, 148, 84910, 84914, 84918, 84923, 84931, 84935, 84947, 84954, + 84962, 84966, 84979, 84987, 84992, 84997, 32072, 85001, 85006, 85010, + 85015, 85019, 85027, 85031, 25450, 85036, 85040, 72424, 85044, 85047, + 85055, 85063, 85071, 85076, 85081, 85088, 85095, 85101, 85107, 85112, + 85119, 85124, 85132, 77304, 85139, 85144, 72190, 85151, 85157, 85162, + 85166, 85173, 85179, 85186, 72217, 14031, 85194, 85199, 85204, 85208, + 85211, 85222, 85231, 85237, 85242, 85246, 85256, 85265, 50510, 85269, + 85273, 85280, 85293, 85299, 85307, 85314, 85323, 85334, 85345, 85356, + 85367, 85376, 85382, 85391, 85399, 85409, 85422, 85430, 85437, 85448, + 85457, 85463, 85468, 85473, 85479, 85489, 85495, 85505, 85513, 85520, + 85530, 85539, 83605, 85547, 85553, 85561, 85567, 75857, 85574, 85579, + 85582, 85586, 85592, 85596, 85599, 85607, 85613, 85619, 85627, 85639, + 85651, 85658, 85663, 85667, 85678, 85686, 85693, 85705, 85713, 85720, + 85728, 85735, 85741, 85746, 85752, 85762, 85771, 85779, 85784, 85794, + 85803, 51398, 85810, 85814, 85819, 85827, 85834, 85840, 85844, 85854, + 85865, 85873, 85880, 85892, 85904, 85913, 82528, 85920, 85930, 85942, + 85953, 85967, 85975, 85985, 85992, 86000, 86013, 86025, 86034, 86042, + 86052, 86063, 86075, 86084, 86094, 86104, 86114, 86123, 86130, 86139, + 86154, 86162, 86172, 86181, 86189, 86202, 68913, 86217, 86227, 86236, + 86248, 86258, 86270, 86281, 86295, 86309, 86323, 86337, 86351, 86365, + 86379, 86393, 86407, 86421, 86435, 86449, 86463, 86477, 86491, 86505, + 86519, 86533, 86547, 86561, 86575, 86589, 86603, 86617, 86631, 86645, + 86659, 86673, 86687, 86701, 86715, 86729, 86743, 86757, 86771, 86785, + 86799, 86813, 86827, 86841, 86855, 86869, 86883, 86897, 86911, 86925, + 86939, 86953, 86967, 86981, 86995, 87009, 87023, 87037, 87051, 87065, + 87079, 87093, 87107, 87121, 87135, 87149, 87163, 87177, 87191, 87205, + 87219, 87233, 87247, 87261, 87275, 87289, 87303, 87317, 87331, 87345, + 87359, 87373, 87387, 87401, 87415, 87429, 87443, 87457, 87471, 87485, + 87499, 87513, 87527, 87541, 87555, 87569, 87583, 87597, 87611, 87625, + 87639, 87653, 87667, 87681, 87695, 87709, 87723, 87737, 87751, 87765, + 87779, 87793, 87807, 87821, 87835, 87849, 87863, 87877, 87891, 87905, + 87919, 87933, 87947, 87961, 87975, 87989, 88003, 88017, 88031, 88045, + 88059, 88073, 88087, 88101, 88115, 88129, 88143, 88157, 88171, 88185, + 88199, 88213, 88227, 88241, 88255, 88269, 88283, 88297, 88311, 88325, + 88339, 88353, 88367, 88381, 88395, 88409, 88423, 88437, 88451, 88465, + 88479, 88493, 88507, 88521, 88535, 88549, 88563, 88577, 88591, 88605, + 88619, 88633, 88647, 88661, 88675, 88689, 88703, 88717, 88731, 88745, + 88759, 88773, 88787, 88801, 88815, 88829, 88843, 88857, 88871, 88885, + 88899, 88913, 88927, 88941, 88955, 88969, 88983, 88997, 89011, 89025, + 89039, 89053, 89067, 89081, 89095, 89109, 89123, 89137, 89151, 89165, + 89179, 89193, 89207, 89221, 89235, 89249, 89263, 89277, 89291, 89305, + 89319, 89333, 89347, 89361, 89375, 89389, 89403, 89417, 89431, 89445, + 89459, 89473, 89487, 89501, 89515, 89529, 89543, 89557, 89571, 89585, + 89599, 89613, 89627, 89641, 89655, 89669, 89683, 89697, 89711, 89725, + 89739, 89753, 89767, 89781, 89795, 89809, 89823, 89837, 89851, 89865, + 89879, 89893, 89907, 89921, 89935, 89949, 89963, 89977, 89991, 90005, + 90019, 90033, 90047, 90061, 90075, 90089, 90103, 90117, 90131, 90145, + 90159, 90173, 90187, 90201, 90215, 90229, 90243, 90257, 90271, 90285, + 90299, 90313, 90327, 90341, 90355, 90369, 90383, 90397, 90411, 90425, + 90439, 90453, 90467, 90481, 90495, 90509, 90523, 90537, 90551, 90565, + 90579, 90593, 90607, 90621, 90635, 90649, 90663, 90677, 90691, 90705, + 90719, 90733, 90747, 90761, 90775, 90789, 90803, 90817, 90831, 90845, + 90859, 90873, 90887, 90901, 90915, 90929, 90943, 90957, 90971, 90985, + 90999, 91013, 91027, 91041, 91055, 91069, 91083, 91097, 91111, 91125, + 91139, 91153, 91167, 91181, 91195, 91209, 91223, 91237, 91251, 91265, + 91279, 91293, 91307, 91321, 91335, 91349, 91363, 91377, 91391, 91405, + 91419, 91433, 91447, 91461, 91475, 91489, 91503, 91517, 91531, 91545, + 91559, 91573, 91587, 91601, 91615, 91629, 91643, 91657, 91671, 91685, + 91699, 91713, 91727, 91741, 91755, 91769, 91783, 91797, 91811, 91825, + 91839, 91853, 91867, 91881, 91895, 91909, 91923, 91937, 91951, 91965, + 91979, 91993, 92007, 92021, 92035, 92049, 92063, 92077, 92091, 92105, + 92119, 92133, 92147, 92161, 92175, 92189, 92203, 92217, 92231, 92245, + 92259, 92273, 92287, 92301, 92315, 92329, 92343, 92357, 92371, 92385, + 92399, 92413, 92427, 92441, 92455, 92469, 92483, 92497, 92511, 92525, + 92539, 92553, 92567, 92581, 92595, 92609, 92623, 92637, 92651, 92665, + 92679, 92693, 92707, 92721, 92735, 92749, 92763, 92777, 92791, 92805, + 92819, 92833, 92847, 92861, 92875, 92889, 92903, 92917, 92931, 92945, + 92959, 92973, 92987, 93001, 93015, 93029, 93043, 93057, 93071, 93085, + 93099, 93113, 93127, 93141, 93155, 93169, 93183, 93197, 93211, 93225, + 93239, 93253, 93267, 93281, 93295, 93309, 93323, 93337, 93351, 93365, + 93379, 93393, 93407, 93421, 93435, 93449, 93463, 93477, 93491, 93505, + 93519, 93533, 93547, 93561, 93575, 93589, 93603, 93617, 93631, 93645, + 93659, 93673, 93687, 93701, 93715, 93729, 93743, 93757, 93771, 93785, + 93799, 93813, 93827, 93841, 93855, 93869, 93883, 93897, 93911, 93925, + 93939, 93953, 93967, 93981, 93995, 94009, 94023, 94037, 94051, 94065, + 94079, 94093, 94107, 94121, 94135, 94149, 94163, 94177, 94191, 94205, + 94219, 94233, 94247, 94261, 94275, 94289, 94303, 94317, 94331, 94345, + 94359, 94373, 94387, 94401, 94415, 94429, 94443, 94457, 94471, 94485, + 94499, 94513, 94527, 94541, 94555, 94569, 94583, 94597, 94611, 94625, + 94639, 94653, 94667, 94681, 94695, 94709, 94723, 94737, 94751, 94765, + 94779, 94793, 94807, 94821, 94835, 94849, 94863, 94877, 94891, 94905, + 94919, 94933, 94947, 94961, 94975, 94989, 95003, 95017, 95031, 95045, + 95059, 95073, 95087, 95101, 95115, 95129, 95143, 95157, 95171, 95185, + 95199, 95213, 95227, 95241, 95255, 95269, 95283, 95297, 95311, 95325, + 95339, 95353, 95367, 95381, 95395, 95409, 95423, 95437, 95451, 95465, + 95479, 95493, 95507, 95521, 95535, 95549, 95563, 95577, 95591, 95605, + 95619, 95633, 95647, 95661, 95675, 95689, 95703, 95717, 95731, 95745, + 95759, 95773, 95787, 95801, 95815, 95829, 95843, 95857, 95871, 95885, + 95899, 95913, 95927, 95941, 95955, 95969, 95983, 95997, 96011, 96025, + 96039, 96053, 96067, 96081, 96095, 96109, 96123, 96137, 96151, 96165, + 96179, 96193, 96207, 96221, 96235, 96249, 96263, 96277, 96291, 96305, + 96319, 96333, 96347, 96361, 96375, 96389, 96403, 96417, 96431, 96445, + 96459, 96473, 96487, 96501, 96515, 96529, 96543, 96557, 96571, 96585, + 96599, 96613, 96627, 96641, 96655, 96669, 96683, 96697, 96711, 96725, + 96739, 96753, 96767, 96781, 96795, 96809, 96823, 96837, 96851, 96865, + 96879, 96893, 96907, 96921, 96935, 96949, 96963, 96977, 96991, 97005, + 97019, 97033, 97042, 97053, 97064, 97074, 97085, 97093, 97101, 97107, + 97117, 97125, 97131, 35391, 97136, 97142, 97151, 97163, 97168, 97175, + 11370, 21960, 97181, 97190, 97195, 97199, 97204, 97211, 97217, 97222, + 97227, 97235, 97243, 97253, 97258, 97266, 14513, 97270, 97276, 97282, + 97288, 97294, 97300, 97306, 97312, 97318, 97324, 97330, 97336, 97342, + 97348, 97354, 97360, 97366, 97372, 97378, 97384, 97390, 97396, 97402, + 97408, 97414, 97420, 97426, 97432, 97438, 97444, 97450, 97456, 97462, + 97468, 97474, 97480, 97486, 97493, 97499, 97505, 97511, 97517, 97523, + 97529, 97535, 97541, 97547, 97553, 97559, 97565, 97571, 97577, 97583, + 97589, 97595, 97601, 97607, 97613, 97619, 97625, 97631, 97637, 97643, + 97649, 97655, 97661, 97667, 97673, 97679, 97685, 97691, 97697, 97703, + 97709, 97715, 97721, 97727, 97733, 97739, 97745, 97751, 97757, 97763, + 97769, 97775, 97781, 97787, 97793, 97800, 97806, 97812, 97818, 97824, + 97830, 97836, 97842, 97848, 97854, 97860, 97866, 97869, 97871, 97886, + 97899, 97906, 97912, 97923, 97928, 97932, 97937, 97944, 97950, 97955, + 97963, 77907, 77917, 97969, 97976, 97986, 12672, 97993, 97998, 35639, + 98007, 98012, 98019, 98029, 98037, 98045, 98054, 98063, 98069, 98075, + 98080, 98087, 98094, 98099, 98103, 98111, 72234, 98116, 98125, 98133, + 98140, 98145, 98149, 98158, 98164, 98167, 98171, 98180, 98190, 84974, + 98199, 98203, 98211, 98215, 98221, 98232, 98242, 21969, 98253, 98262, + 98270, 98278, 98285, 72253, 9895, 98293, 98297, 98306, 98313, 98316, + 98320, 33238, 98323, 98327, 98332, 98349, 98361, 12630, 98373, 98378, + 98383, 98388, 25557, 98392, 98397, 98402, 98408, 98413, 6640, 98418, + 25561, 98423, 98428, 98434, 98441, 98446, 98451, 98457, 98463, 98469, + 98474, 98480, 98484, 98498, 98506, 98514, 98520, 98525, 98532, 98542, + 98551, 98556, 98561, 98566, 98574, 98584, 98595, 98600, 98606, 98611, + 98620, 70662, 4760, 98625, 98643, 98662, 98675, 98689, 98705, 98712, + 98719, 98728, 98735, 98741, 98748, 98753, 98759, 98764, 98770, 98778, + 98784, 98789, 98794, 98810, 12643, 98824, 98831, 98839, 98845, 98849, + 98852, 98858, 98863, 98868, 98876, 98883, 98888, 98897, 98903, 98908, + 98914, 98920, 98929, 98938, 43485, 98943, 98954, 98961, 98969, 98978, + 14104, 98987, 98993, 99001, 99007, 99013, 99019, 99024, 99031, 99037, + 14115, 99042, 99045, 99050, 39643, 99060, 99069, 99074, 99082, 99089, + 99095, 99100, 99108, 99115, 99126, 99142, 99158, 99174, 99190, 99206, + 99222, 99238, 99254, 99270, 99286, 99302, 99318, 99334, 99350, 99366, + 99382, 99398, 99414, 99430, 99446, 99462, 99478, 99494, 99510, 99526, + 99542, 99558, 99574, 99590, 99606, 99622, 99638, 99654, 99670, 99686, + 99702, 99718, 99734, 99750, 99766, 99782, 99798, 99814, 99830, 99846, + 99862, 99878, 99894, 99910, 99926, 99942, 99958, 99974, 99990, 100006, + 100022, 100038, 100054, 100070, 100086, 100102, 100118, 100134, 100150, + 100166, 100182, 100198, 100214, 100230, 100246, 100262, 100278, 100294, + 100310, 100326, 100342, 100358, 100374, 100390, 100406, 100422, 100438, + 100454, 100470, 100486, 100502, 100518, 100534, 100550, 100566, 100582, + 100598, 100614, 100630, 100646, 100662, 100678, 100694, 100710, 100726, + 100742, 100758, 100774, 100790, 100806, 100822, 100838, 100854, 100870, + 100886, 100902, 100918, 100934, 100950, 100966, 100982, 100998, 101014, + 101030, 101046, 101062, 101078, 101094, 101110, 101126, 101142, 101158, + 101174, 101190, 101206, 101222, 101238, 101254, 101270, 101286, 101302, + 101318, 101334, 101350, 101366, 101382, 101398, 101414, 101430, 101446, + 101462, 101478, 101494, 101510, 101526, 101542, 101558, 101574, 101590, + 101606, 101622, 101638, 101654, 101670, 101686, 101702, 101718, 101734, + 101750, 101766, 101782, 101798, 101814, 101830, 101846, 101862, 101878, + 101894, 101910, 101926, 101942, 101958, 101974, 101990, 102006, 102022, + 102038, 102054, 102070, 102086, 102102, 102118, 102134, 102150, 102166, + 102182, 102198, 102214, 102230, 102246, 102262, 102278, 102294, 102310, + 102326, 102342, 102358, 102374, 102390, 102406, 102422, 102438, 102454, + 102470, 102486, 102502, 102518, 102534, 102550, 102566, 102582, 102598, + 102614, 102630, 102646, 102662, 102678, 102694, 102710, 102726, 102742, + 102758, 102774, 102790, 102806, 102822, 102838, 102854, 102870, 102886, + 102902, 102918, 102934, 102950, 102966, 102982, 102998, 103014, 103030, + 103046, 103062, 103078, 103094, 103110, 103126, 103142, 103158, 103174, + 103190, 103206, 103222, 103238, 103254, 103270, 103286, 103302, 103318, + 103334, 103350, 103366, 103382, 103398, 103414, 103430, 103446, 103462, + 103478, 103494, 103510, 103526, 103542, 103558, 103574, 103590, 103606, + 103622, 103638, 103654, 103670, 103686, 103702, 103718, 103734, 103750, + 103766, 103782, 103798, 103814, 103830, 103846, 103862, 103878, 103894, + 103910, 103926, 103942, 103958, 103974, 103990, 104006, 104022, 104038, + 104054, 104070, 104086, 104102, 104118, 104134, 104150, 104166, 104182, + 104198, 104214, 104230, 104246, 104262, 104278, 104294, 104310, 104326, + 104342, 104358, 104374, 104390, 104406, 104422, 104438, 104454, 104470, + 104486, 104502, 104518, 104534, 104550, 104566, 104582, 104598, 104614, + 104630, 104646, 104662, 104678, 104694, 104710, 104726, 104742, 104758, + 104774, 104790, 104806, 104822, 104838, 104854, 104870, 104886, 104902, + 104918, 104934, 104950, 104966, 104982, 104998, 105014, 105030, 105046, + 105062, 105078, 105094, 105110, 105126, 105142, 105158, 105174, 105190, + 105206, 105222, 105238, 105254, 105270, 105286, 105302, 105318, 105334, + 105350, 105366, 105382, 105398, 105414, 105430, 105446, 105462, 105478, + 105494, 105510, 105526, 105542, 105558, 105574, 105590, 105606, 105622, + 105638, 105654, 105670, 105686, 105702, 105718, 105734, 105750, 105766, + 105782, 105798, 105814, 105830, 105846, 105862, 105878, 105894, 105910, + 105926, 105942, 105958, 105974, 105990, 106006, 106022, 106038, 106054, + 106070, 106086, 106102, 106118, 106134, 106150, 106166, 106182, 106198, + 106214, 106230, 106246, 106262, 106278, 106294, 106310, 106326, 106342, + 106358, 106374, 106390, 106406, 106422, 106438, 106454, 106470, 106486, + 106502, 106518, 106534, 106550, 106566, 106582, 106598, 106614, 106630, + 106646, 106662, 106678, 106694, 106710, 106726, 106742, 106758, 106774, + 106790, 106806, 106822, 106838, 106854, 106870, 106886, 106902, 106918, + 106934, 106950, 106966, 106982, 106998, 107014, 107030, 107046, 107062, + 107078, 107094, 107110, 107126, 107142, 107158, 107174, 107190, 107206, + 107222, 107238, 107254, 107270, 107286, 107302, 107318, 107334, 107350, + 107366, 107382, 107398, 107414, 107430, 107446, 107462, 107478, 107494, + 107510, 107526, 107542, 107558, 107574, 107590, 107606, 107622, 107638, + 107654, 107670, 107686, 107702, 107718, 107734, 107750, 107766, 107782, + 107798, 107814, 107830, 107846, 107862, 107878, 107894, 107910, 107926, + 107942, 107958, 107974, 107990, 108006, 108022, 108038, 108054, 108070, + 108086, 108102, 108118, 108134, 108150, 108166, 108182, 108198, 108214, + 108230, 108246, 108262, 108278, 108294, 108310, 108326, 108342, 108358, + 108374, 108390, 108406, 108422, 108438, 108454, 108470, 108486, 108502, + 108518, 108534, 108550, 108566, 108582, 108598, 108614, 108630, 108646, + 108662, 108678, 108694, 108710, 108726, 108742, 108758, 108774, 108790, + 108806, 108822, 108838, 108854, 108870, 108886, 108902, 108918, 108934, + 108950, 108966, 108982, 108998, 109014, 109030, 109046, 109062, 109078, + 109094, 109110, 109126, 109142, 109158, 109174, 109190, 109206, 109222, + 109238, 109254, 109270, 109286, 109302, 109318, 109334, 109350, 109366, + 109382, 109398, 109414, 109430, 109446, 109462, 109478, 109494, 109510, + 109526, 109542, 109558, 109574, 109590, 109606, 109622, 109638, 109654, + 109670, 109686, 109702, 109718, 109734, 109750, 109766, 109782, 109798, + 109814, 109830, 109846, 109862, 109878, 109894, 109910, 109926, 109942, + 109958, 109974, 109990, 110006, 110022, 110038, 110054, 110070, 110086, + 110102, 110118, 110134, 110150, 110166, 110182, 110198, 110214, 110230, + 110246, 110262, 110278, 110294, 110310, 110326, 110342, 110358, 110374, + 110390, 110406, 110422, 110438, 110454, 110470, 110486, 110502, 110518, + 110534, 110550, 110566, 110582, 110598, 110614, 110630, 110646, 110662, + 110678, 110694, 110710, 110726, 110742, 110758, 110774, 110790, 110806, + 110822, 110838, 110854, 110870, 110886, 110902, 110918, 110934, 110950, + 110966, 110982, 110998, 111014, 111030, 111046, 111062, 111078, 111094, + 111110, 111126, 111142, 111158, 111174, 111190, 111206, 111222, 111238, + 111254, 111270, 111286, 111302, 111318, 111334, 111350, 111366, 111382, + 111398, 111414, 111430, 111446, 111462, 111478, 111494, 111510, 111526, + 111542, 111558, 111574, 111590, 111606, 111622, 111638, 111654, 111670, + 111686, 111702, 111718, 111734, 111750, 111766, 111782, 111798, 111814, + 111830, 111846, 111862, 111878, 111894, 111910, 111926, 111942, 111958, + 111974, 111990, 112006, 112022, 112038, 112054, 112070, 112086, 112102, + 112118, 112134, 112150, 112166, 112182, 112198, 112214, 112230, 112246, + 112262, 112278, 112294, 112310, 112326, 112342, 112358, 112374, 112390, + 112406, 112422, 112438, 112454, 112470, 112486, 112502, 112518, 112534, + 112550, 112566, 112582, 112598, 112614, 112630, 112646, 112662, 112678, + 112694, 112710, 112726, 112742, 112758, 112774, 112790, 112806, 112822, + 112838, 112854, 112870, 112886, 112902, 112918, 112934, 112950, 112966, + 112982, 112992, 113001, 113006, 113014, 77227, 113019, 113025, 113030, + 113037, 113046, 113054, 113058, 4338, 113064, 113071, 113077, 113081, + 20561, 46618, 3295, 113086, 113090, 113094, 113101, 113107, 113116, + 113122, 113129, 113133, 113154, 113176, 113192, 113209, 113228, 113237, + 113247, 113255, 113262, 113269, 113275, 33093, 113289, 113293, 113299, + 113307, 113319, 113325, 113333, 113340, 113345, 113350, 113354, 113362, + 113369, 113373, 113379, 113385, 113390, 3972, 52566, 113396, 113400, + 113404, 113408, 113413, 113418, 113423, 113429, 113435, 113441, 113448, + 113454, 113461, 113467, 113473, 113478, 113484, 113489, 113493, 105586, + 113498, 105650, 52581, 113503, 113508, 113516, 113520, 113525, 113532, + 113541, 113548, 113554, 113563, 113567, 113574, 113578, 113581, 113588, + 113594, 113603, 113613, 113623, 113628, 113632, 113639, 113647, 113656, + 113660, 113668, 113674, 113679, 113684, 113690, 113696, 113701, 113705, + 31970, 113711, 113715, 113719, 113722, 113727, 113735, 113745, 113751, + 113756, 113766, 49687, 113774, 113786, 113792, 113799, 113805, 113809, + 113814, 113820, 113832, 113843, 113850, 113856, 113863, 113870, 113882, + 113889, 113895, 25641, 113899, 113907, 113913, 113920, 113926, 113932, + 113938, 113943, 113948, 113953, 113957, 113966, 113974, 113985, 7934, + 113990, 19997, 113996, 114000, 114004, 114008, 114016, 114025, 114029, + 114036, 114045, 114053, 114066, 114072, 106162, 36574, 114077, 114079, + 114084, 114089, 114094, 114099, 114104, 114109, 114114, 114119, 114124, + 114129, 114134, 114139, 114144, 114149, 114155, 114160, 114165, 114170, + 114175, 114180, 114185, 114190, 114195, 114201, 114207, 114213, 114218, + 114223, 114235, 114240, 1935, 54, 114245, 114250, 39653, 114254, 39658, + 39663, 39669, 39674, 114258, 39679, 26827, 114280, 114284, 114288, + 114293, 114297, 39683, 114301, 114309, 114316, 114322, 114332, 39688, + 114339, 114342, 114347, 114351, 114360, 11168, 114368, 39693, 26671, + 114371, 114375, 114383, 1307, 114388, 39704, 114391, 114396, 114401, + 31211, 31221, 43083, 114406, 114411, 114416, 114421, 114427, 114432, + 114441, 114446, 114455, 114463, 114470, 114476, 114481, 114486, 114491, + 114501, 114510, 114518, 114523, 114531, 114535, 114543, 114547, 114554, + 114561, 114569, 114576, 39508, 46333, 114582, 114588, 114593, 114598, + 14548, 11961, 114603, 114608, 114613, 114619, 114626, 114632, 114641, + 114646, 114654, 114664, 114671, 114681, 114687, 114692, 114698, 114702, + 21991, 114709, 44068, 114722, 114727, 114734, 114740, 114755, 37638, + 75635, 114768, 114772, 114781, 114790, 114797, 114803, 114811, 114817, + 114825, 114834, 114842, 114849, 46453, 114855, 114858, 114862, 114866, + 114870, 11982, 114876, 114883, 114889, 114897, 114902, 114906, 29203, + 114912, 114915, 114923, 114930, 114938, 114951, 114965, 114972, 114978, + 114985, 114991, 39718, 114995, 115001, 115009, 115016, 115024, 115032, + 115038, 39723, 115046, 115052, 115057, 115067, 115073, 115082, 37433, + 42431, 115090, 115095, 115100, 115104, 115109, 115113, 115121, 115126, + 17993, 18818, 49709, 115130, 115135, 39728, 18150, 115139, 115151, + 115156, 115160, 115167, 115176, 115180, 115188, 115194, 115199, 115207, + 115215, 115223, 115231, 115239, 115247, 115258, 115264, 9132, 115269, + 115275, 115280, 115285, 115296, 115305, 115317, 115332, 40040, 115338, + 20116, 39732, 115342, 115349, 115355, 115359, 29340, 115366, 115372, + 115379, 48834, 115388, 115394, 115403, 115409, 115414, 115422, 115428, + 115433, 39742, 115438, 115447, 115456, 113838, 115465, 115472, 115478, + 115484, 115493, 115503, 115509, 115517, 115524, 115528, 39747, 115531, + 39753, 1346, 115536, 115544, 115552, 115562, 115571, 115579, 115586, + 115596, 39764, 115600, 115602, 115606, 115611, 115615, 115619, 115625, + 115630, 115634, 115645, 115650, 115656, 115661, 115670, 115675, 3300, + 115679, 115686, 115690, 115699, 115707, 115715, 115722, 115727, 115732, + 74136, 115736, 115739, 115745, 115753, 115759, 115763, 115768, 115775, + 115780, 115785, 115789, 115796, 115802, 115807, 42462, 115811, 115814, + 115819, 115823, 115828, 115835, 115840, 115844, 47803, 115852, 31230, + 31239, 115858, 115864, 115870, 115875, 115879, 115882, 115892, 115901, + 115906, 115912, 115919, 115925, 115929, 115937, 115942, 42468, 85233, + 115946, 115954, 115961, 115967, 115974, 115979, 115986, 115991, 115995, + 116001, 116006, 69129, 116012, 116018, 10386, 116023, 116028, 116032, + 116037, 116042, 116047, 116051, 116056, 116061, 116067, 116072, 116077, + 116083, 116089, 116094, 116098, 116103, 116108, 116113, 116117, 29339, + 116122, 116127, 116133, 116139, 116145, 116150, 116154, 116159, 116164, + 109938, 116169, 116174, 116179, 116184, 110002, 52836, 116189, 39772, + 116197, 116201, 116209, 116217, 116228, 116233, 116237, 27306, 82631, + 116242, 116248, 116253, 4649, 116263, 116270, 116275, 116283, 116292, + 116297, 116301, 116306, 116310, 116318, 116326, 116333, 77493, 116339, + 116347, 116354, 116365, 116371, 116377, 39782, 116380, 116387, 116395, + 116400, 116404, 33612, 71815, 116410, 116415, 116422, 116427, 10275, + 116431, 116439, 116446, 116453, 116462, 116469, 116475, 116489, 116497, + 6724, 116259, 116503, 116508, 116514, 116518, 116521, 116529, 116536, + 116541, 116554, 116561, 116567, 116571, 116579, 116584, 116591, 116597, + 116602, 72093, 116607, 116610, 116619, 116626, 110210, 116632, 116635, + 116643, 116649, 116658, 116668, 116678, 116687, 116698, 116706, 116717, + 116722, 116726, 116731, 116735, 43214, 116743, 18783, 43223, 116748, + 101729, 101745, 101761, 101777, 101793, 116753, 101825, 101841, 101857, + 101873, 101985, 102001, 116757, 102033, 102049, 116761, 116765, 116769, + 116773, 102289, 102321, 116777, 102353, 116781, 116785, 102497, 102513, + 102529, 102545, 116789, 102609, 102625, 116793, 102753, 102769, 102785, + 102801, 102817, 102833, 102849, 102865, 102881, 102897, 103009, 103025, + 103041, 103057, 103073, 103089, 103105, 103121, 103137, 103153, 116797, + 104945, 105057, 105121, 105137, 105153, 105169, 105185, 105201, 105313, + 105329, 105345, 116801, 105393, 116805, 105425, 105441, 105457, 116809, + 116814, 116819, 116824, 116829, 116834, 116839, 116843, 116847, 116852, + 116857, 116861, 116866, 116871, 116875, 116880, 116885, 116890, 116895, + 116899, 116904, 116909, 116913, 116918, 116922, 116926, 116930, 116934, + 116939, 116943, 116947, 116951, 116955, 116959, 116963, 116967, 116971, + 116975, 116980, 116985, 116990, 116995, 117000, 117005, 117010, 117015, + 117020, 117025, 117029, 117033, 117037, 117041, 117045, 117049, 117054, + 117058, 117063, 117067, 117072, 117077, 117081, 117085, 117090, 117094, + 117098, 117102, 117106, 117110, 117114, 117118, 117122, 117126, 117130, + 117134, 117138, 117142, 117146, 117151, 117156, 117160, 117164, 117168, + 117172, 117176, 117180, 117185, 117189, 117193, 117197, 117201, 117205, + 117209, 117214, 117218, 117223, 117227, 117231, 117235, 117239, 117243, + 117247, 117251, 117255, 117259, 117263, 117267, 117272, 117276, 117280, + 117284, 117288, 117292, 117296, 117300, 117304, 117308, 117312, 117316, + 117321, 117325, 117329, 117334, 117339, 117343, 117347, 117351, 117355, + 117359, 117363, 117367, 117371, 117376, 117380, 117385, 117389, 117394, + 117398, 117403, 117407, 117413, 117418, 117422, 117427, 117431, 117436, + 117440, 117445, 117449, 117454, 1429, 117458, 117462, 3042, 1705, 28465, + 1602, 31166, 117466, 3051, 117470, 1276, 117475, 1218, 117479, 117483, + 117487, 117491, 117495, 117499, 3075, 117503, 117511, 117518, 117525, + 117539, 3079, 8044, 117548, 117556, 117563, 117574, 117583, 117587, + 117594, 117606, 117619, 117632, 117643, 117648, 117655, 117667, 117671, + 3083, 14185, 117681, 117686, 117695, 117705, 117710, 117719, 3087, + 117727, 117731, 117736, 117743, 117749, 117754, 117763, 117771, 117783, + 117793, 1223, 15645, 117806, 117810, 117816, 117830, 117842, 117854, + 117862, 117872, 117881, 117890, 117899, 117907, 117918, 117926, 4657, + 117936, 117947, 117956, 117962, 117977, 117984, 117990, 117995, 43357, + 118000, 3111, 15649, 118004, 118009, 118016, 10206, 118025, 118031, 4695, + 118041, 3116, 39144, 118050, 71705, 118057, 118061, 118067, 118078, + 118084, 118089, 118096, 118102, 118110, 118117, 118123, 118134, 118150, + 118160, 118169, 118180, 118189, 118196, 118202, 118212, 118220, 118226, + 118241, 118247, 118252, 118256, 118263, 118271, 118275, 118278, 118284, + 118291, 118297, 118305, 118314, 118322, 118328, 118337, 52139, 118351, + 118356, 118362, 17744, 118367, 118380, 118392, 118401, 118409, 118416, + 118420, 118424, 118427, 118434, 118441, 118449, 118457, 118466, 118474, + 17643, 118482, 118487, 118491, 118503, 118510, 118517, 118526, 954, + 118536, 118545, 118556, 3137, 118560, 118564, 118570, 118583, 118595, + 118605, 118614, 118626, 32128, 118637, 118645, 118654, 118665, 118676, + 118686, 118696, 118704, 118713, 118721, 13604, 118728, 118732, 118735, + 118740, 118745, 118749, 118755, 1228, 118762, 118766, 14281, 118770, + 118774, 118785, 118794, 118802, 118811, 118819, 118835, 118846, 118855, + 118863, 118875, 118886, 118902, 118912, 118933, 118947, 118960, 118968, + 118975, 8090, 118988, 118993, 118999, 6733, 119005, 119008, 119015, + 119025, 9266, 119032, 119037, 119042, 119049, 119057, 119065, 119071, + 119076, 119082, 119086, 119094, 119103, 119111, 119116, 119125, 119132, + 11418, 11427, 119138, 119149, 119155, 119160, 119166, 3153, 3158, 119172, + 1063, 119178, 119185, 119192, 119205, 119215, 119220, 2324, 87, 119228, + 119235, 119240, 119248, 119258, 119267, 119273, 119282, 119290, 119300, + 119304, 119308, 119313, 119317, 119329, 3181, 119337, 119345, 119350, + 119361, 119372, 119384, 119395, 119405, 119414, 26025, 119419, 119425, + 119430, 119440, 119450, 119455, 34346, 119461, 119466, 119475, 26047, + 119479, 26058, 119484, 4783, 8, 119491, 119500, 119507, 119514, 119520, + 119525, 119529, 119535, 34376, 119540, 119545, 72390, 119550, 119555, + 119561, 119567, 119575, 119580, 119588, 119596, 119605, 119612, 119618, + 119625, 119631, 119638, 119643, 47672, 52033, 119649, 119659, 1822, 32, + 119666, 119671, 119684, 119689, 119697, 119702, 119708, 3207, 30907, + 3221, 119713, 119721, 119728, 119733, 119738, 119747, 4340, 4351, 73734, + 119755, 119759, 1629, 1862, 119764, 119769, 119776, 34797, 1866, 331, + 119783, 119789, 119794, 3229, 119798, 119803, 119810, 1870, 119815, + 119821, 119826, 119838, 6978, 119848, 119855, 1877, 119861, 119866, + 119873, 119880, 119895, 119902, 119913, 119918, 119926, 2772, 119930, + 119942, 119947, 119951, 119957, 34218, 2329, 119961, 119972, 119976, + 119980, 119986, 119990, 119999, 120003, 120014, 120018, 2375, 38961, + 120022, 120032, 120040, 3320, 120046, 120055, 120063, 10752, 120068, + 120076, 120081, 120085, 120094, 120101, 120107, 3290, 17808, 120111, + 120124, 44081, 120142, 120147, 120155, 120163, 120173, 11759, 15773, + 120185, 120198, 120205, 120215, 120229, 120236, 120252, 120259, 120265, + 26105, 14980, 120272, 120279, 120289, 120298, 52835, 120310, 120318, + 52970, 120325, 120328, 120334, 120340, 120346, 120352, 120358, 120365, + 120372, 120378, 120384, 120390, 120396, 120402, 120408, 120414, 120420, + 120426, 120432, 120438, 120444, 120450, 120456, 120462, 120468, 120474, + 120480, 120486, 120492, 120498, 120504, 120510, 120516, 120522, 120528, + 120534, 120540, 120546, 120552, 120558, 120564, 120570, 120576, 120582, + 120588, 120594, 120600, 120606, 120612, 120618, 120624, 120630, 120636, + 120642, 120648, 120654, 120660, 120666, 120672, 120678, 120685, 120691, + 120698, 120705, 120711, 120718, 120725, 120731, 120737, 120743, 120749, + 120755, 120761, 120767, 120773, 120779, 120785, 120791, 120797, 120803, + 120809, 120815, 3304, 10720, 120821, 120831, 120837, 120845, 120849, + 117739, 3308, 120853, 114067, 25770, 4701, 4265, 120857, 3314, 120861, + 120871, 120877, 120883, 120889, 120895, 120901, 120907, 120913, 120919, + 120925, 120931, 120937, 120943, 120949, 120955, 120961, 120967, 120973, + 120979, 120985, 120991, 120997, 121003, 121009, 121015, 121021, 121028, + 121035, 121041, 121047, 121053, 121059, 121065, 121071, 1233, 121077, + 121082, 121087, 121092, 121097, 121102, 121107, 121112, 121117, 121121, + 121125, 121129, 121133, 121137, 121141, 121145, 121149, 121153, 121159, + 121165, 121171, 121177, 121181, 121185, 121189, 121193, 121197, 121201, + 121205, 121209, 121213, 121218, 121223, 121228, 121233, 121238, 121243, + 121248, 121253, 121258, 121263, 121268, 121273, 121278, 121283, 121288, + 121293, 121298, 121303, 121308, 121313, 121318, 121323, 121328, 121333, + 121338, 121343, 121348, 121353, 121358, 121363, 121368, 121373, 121378, + 121383, 121388, 121393, 121398, 121403, 121408, 121413, 121418, 121423, + 121428, 121433, 121438, 121443, 121448, 121453, 121458, 121463, 121468, + 121473, 121478, 121483, 121488, 121493, 121498, 121503, 121508, 121513, + 121518, 121523, 121528, 121533, 121538, 121543, 121548, 121553, 121558, + 121563, 121568, 121573, 121578, 121583, 121588, 121593, 121598, 121603, + 121608, 121613, 121618, 121623, 121628, 121633, 121638, 121643, 121648, + 121653, 121658, 121663, 121668, 121673, 121678, 121683, 121688, 121693, + 121698, 121703, 121708, 121713, 121718, 121723, 121728, 121733, 121738, + 121743, 121748, 121753, 121758, 121763, 121768, 121773, 121778, 121783, + 121788, 121793, 121798, 121803, 121808, 121813, 121818, 121823, 121828, + 121833, 121838, 121843, 121848, 121853, 121858, 121863, 121868, 121873, + 121878, 121883, 121888, 121893, 121898, 121903, 121908, 121913, 121918, + 121923, 121928, 121933, 121938, 121943, 121948, 121953, 121958, 121963, + 121968, 121973, 121978, 121983, 121988, 121993, 121998, 122003, 122008, + 122013, 122018, 122023, 122028, 122033, 122038, 122043, 122048, 122053, + 122058, 122063, 122068, 122073, 122078, 122083, 122088, 122093, 122098, + 122103, 122109, 122114, 122119, 122124, 122129, 122134, 122139, 122144, + 122150, 122155, 122160, 122165, 122170, 122175, 122180, 122185, 122190, + 122195, 122200, 122205, 122210, 122215, 122220, 122225, 122230, 122235, + 122240, 122245, 122250, 122255, 122260, 122265, 122270, 122275, 122280, + 122285, 122290, 122295, 122300, 122305, 122310, 122319, 122324, 122333, + 122338, 122347, 122352, 122361, 122366, 122375, 122380, 122389, 122394, + 122403, 122408, 122417, 122422, 122427, 122436, 122440, 122449, 122454, + 122463, 122468, 122477, 122482, 122491, 122496, 122505, 122510, 122519, + 122524, 122533, 122538, 122547, 122552, 122561, 122566, 122575, 122580, + 122585, 122590, 122595, 122600, 122605, 122610, 122614, 122619, 122624, + 122629, 122634, 122639, 122644, 122650, 122655, 122660, 122665, 122671, + 122675, 122680, 122686, 122691, 122696, 122701, 122706, 122711, 122716, + 122721, 122726, 122731, 122736, 122742, 122747, 122752, 122757, 122763, + 122768, 122773, 122778, 122783, 122789, 122794, 122799, 122804, 122809, + 122814, 122820, 122825, 122830, 122835, 122840, 122845, 122850, 122855, + 122860, 122865, 122870, 122875, 122880, 122885, 122890, 122895, 122900, + 122905, 122910, 122915, 122920, 122925, 122930, 122935, 122941, 122947, + 122953, 122958, 122963, 122968, 122973, 122979, 122985, 122991, 122996, + 123001, 123006, 123012, 123017, 123022, 123027, 123032, 123037, 123042, + 123047, 123052, 123057, 123062, 123067, 123072, 123077, 123082, 123087, + 123092, 123098, 123104, 123110, 123115, 123120, 123125, 123130, 123136, + 123142, 123148, 123153, 123158, 123163, 123168, 123173, 123178, 123183, + 123188, 123193, 19475, 123198, 123204, 123209, 123214, 123219, 123224, + 123229, 123235, 123240, 123245, 123250, 123255, 123260, 123266, 123271, + 123276, 123281, 123286, 123291, 123296, 123301, 123306, 123311, 123316, + 123321, 123326, 123331, 123336, 123341, 123346, 123351, 123356, 123361, + 123366, 123371, 123376, 123382, 123387, 123392, 123397, 123402, 123407, + 123412, 123417, 123422, 123427, 123432, 123437, 123442, 123447, 123452, + 123457, 123462, 123467, 123472, 123477, 123482, 123487, 123492, 123497, + 123502, 123507, 123512, 123517, 123522, 123527, 123532, 123537, 123542, + 123547, 123552, 123557, 123562, 123567, 123572, 123577, 123582, 123588, + 123593, 123598, 123603, 123608, 123613, 123618, 123623, 123628, 123633, + 123638, 123643, 123649, 123654, 123660, 123665, 123670, 123675, 123680, + 123685, 123690, 123696, 123701, 123706, 123712, 123717, 123722, 123727, + 123732, 123737, 123743, 123749, 123754, 123759, 14614, 123764, 123769, + 123774, 123779, 123784, 123789, 123794, 123799, 123804, 123809, 123814, + 123819, 123824, 123829, 123834, 123839, 123844, 123849, 123854, 123859, + 123864, 123869, 123874, 123879, 123884, 123889, 123894, 123899, 123904, + 123909, 123914, 123919, 123924, 123929, 123934, 123939, 123944, 123949, + 123954, 123959, 123964, 123969, 123974, 123979, 123984, 123989, 123994, + 123999, 124004, 124009, 124014, 124019, 124024, 124029, 124034, 124039, + 124044, 124049, 124054, 124059, 124064, 124069, 124074, 124079, 124084, + 124090, 124095, 124100, 124105, 124110, 124116, 124121, 124126, 124131, + 124136, 124141, 124146, 124152, 124157, 124162, 124167, 124172, 124177, + 124183, 124188, 124193, 124198, 124203, 124208, 124214, 124219, 124224, + 124229, 124234, 124239, 124245, 124251, 124256, 124261, 124266, 124272, + 124278, 124284, 124289, 124294, 124300, 124306, 124311, 124317, 124323, + 124329, 124334, 124339, 124345, 124350, 124356, 124361, 124367, 124376, + 124381, 124386, 124392, 124397, 124403, 124408, 124413, 124418, 124423, + 124428, 124433, 124438, 124443, 124448, 124453, 124458, 124463, 124468, + 124473, 124478, 124483, 124488, 124493, 124498, 124503, 124508, 124513, + 124518, 124523, 124528, 124533, 124538, 124543, 124548, 124553, 124558, + 124564, 124570, 124576, 124581, 124586, 124591, 124596, 124601, 124606, + 124611, 124616, 124621, 124626, 124631, 124636, 124641, 124646, 124651, + 124656, 124661, 124666, 124671, 124676, 124682, 124688, 124693, 124699, + 124704, 124709, 124715, 124720, 124726, 124731, 124737, 124742, 124748, + 124753, 124759, 124764, 124769, 124774, 124779, 124784, 124789, 124794, + 120872, 120878, 120884, 120890, 124800, 120896, 120902, 124806, 120908, + 120914, 120920, 120926, 120932, 120938, 120944, 120950, 120956, 124812, + 120962, 120968, 120974, 124818, 120980, 120986, 120992, 120998, 124824, + 121004, 121010, 121016, 121036, 124830, 124836, 121042, 124842, 121048, + 121054, 121060, 121066, 121072, 124848, 3331, 3336, 124853, 3351, 3356, + 3361, 124858, 124861, 124867, 124873, 124880, 124885, 124890, 2380, }; /* code->name phrasebook */ #define phrasebook_shift 7 #define phrasebook_short 190 static const unsigned char phrasebook[] = { - 0, 201, 247, 233, 216, 77, 207, 252, 77, 31, 56, 236, 155, 56, 210, 13, - 56, 251, 137, 251, 49, 45, 210, 113, 50, 210, 113, 250, 193, 108, 56, - 242, 74, 228, 87, 232, 80, 201, 63, 202, 23, 17, 191, 77, 17, 107, 17, - 109, 17, 138, 17, 134, 17, 149, 17, 169, 17, 175, 17, 171, 17, 178, 242, - 83, 204, 25, 219, 180, 56, 234, 43, 56, 230, 204, 56, 208, 13, 77, 242, - 72, 250, 182, 8, 6, 1, 65, 8, 6, 1, 250, 120, 8, 6, 1, 247, 193, 8, 6, 1, - 238, 127, 8, 6, 1, 71, 8, 6, 1, 233, 175, 8, 6, 1, 232, 51, 8, 6, 1, 230, - 116, 8, 6, 1, 68, 8, 6, 1, 223, 35, 8, 6, 1, 222, 152, 8, 6, 1, 172, 8, - 6, 1, 218, 168, 8, 6, 1, 215, 61, 8, 6, 1, 74, 8, 6, 1, 210, 236, 8, 6, - 1, 208, 104, 8, 6, 1, 146, 8, 6, 1, 206, 8, 8, 6, 1, 200, 43, 8, 6, 1, + 0, 201, 248, 233, 218, 77, 207, 254, 77, 31, 56, 236, 157, 56, 210, 15, + 56, 251, 139, 251, 51, 45, 210, 115, 50, 210, 115, 250, 195, 108, 56, + 242, 76, 228, 89, 232, 82, 201, 64, 202, 24, 17, 191, 77, 17, 107, 17, + 109, 17, 138, 17, 134, 17, 150, 17, 169, 17, 175, 17, 171, 17, 178, 242, + 85, 204, 26, 219, 182, 56, 234, 45, 56, 230, 206, 56, 208, 15, 77, 242, + 74, 250, 184, 8, 6, 1, 65, 8, 6, 1, 250, 122, 8, 6, 1, 247, 195, 8, 6, 1, + 238, 129, 8, 6, 1, 71, 8, 6, 1, 233, 177, 8, 6, 1, 232, 53, 8, 6, 1, 230, + 118, 8, 6, 1, 68, 8, 6, 1, 223, 37, 8, 6, 1, 222, 154, 8, 6, 1, 172, 8, + 6, 1, 218, 170, 8, 6, 1, 215, 63, 8, 6, 1, 74, 8, 6, 1, 210, 238, 8, 6, + 1, 208, 106, 8, 6, 1, 146, 8, 6, 1, 206, 9, 8, 6, 1, 200, 43, 8, 6, 1, 66, 8, 6, 1, 196, 12, 8, 6, 1, 193, 224, 8, 6, 1, 192, 235, 8, 6, 1, 192, - 159, 8, 6, 1, 191, 166, 45, 51, 248, 53, 207, 19, 202, 23, 50, 51, 248, - 53, 243, 2, 252, 60, 130, 219, 112, 230, 211, 252, 60, 8, 2, 1, 65, 8, 2, - 1, 250, 120, 8, 2, 1, 247, 193, 8, 2, 1, 238, 127, 8, 2, 1, 71, 8, 2, 1, - 233, 175, 8, 2, 1, 232, 51, 8, 2, 1, 230, 116, 8, 2, 1, 68, 8, 2, 1, 223, - 35, 8, 2, 1, 222, 152, 8, 2, 1, 172, 8, 2, 1, 218, 168, 8, 2, 1, 215, 61, - 8, 2, 1, 74, 8, 2, 1, 210, 236, 8, 2, 1, 208, 104, 8, 2, 1, 146, 8, 2, 1, - 206, 8, 8, 2, 1, 200, 43, 8, 2, 1, 66, 8, 2, 1, 196, 12, 8, 2, 1, 193, + 159, 8, 6, 1, 191, 166, 45, 51, 248, 55, 207, 20, 202, 24, 50, 51, 248, + 55, 243, 4, 252, 62, 130, 219, 114, 230, 213, 252, 62, 8, 2, 1, 65, 8, 2, + 1, 250, 122, 8, 2, 1, 247, 195, 8, 2, 1, 238, 129, 8, 2, 1, 71, 8, 2, 1, + 233, 177, 8, 2, 1, 232, 53, 8, 2, 1, 230, 118, 8, 2, 1, 68, 8, 2, 1, 223, + 37, 8, 2, 1, 222, 154, 8, 2, 1, 172, 8, 2, 1, 218, 170, 8, 2, 1, 215, 63, + 8, 2, 1, 74, 8, 2, 1, 210, 238, 8, 2, 1, 208, 106, 8, 2, 1, 146, 8, 2, 1, + 206, 9, 8, 2, 1, 200, 43, 8, 2, 1, 66, 8, 2, 1, 196, 12, 8, 2, 1, 193, 224, 8, 2, 1, 192, 235, 8, 2, 1, 192, 159, 8, 2, 1, 191, 166, 45, 238, - 171, 248, 53, 81, 219, 112, 50, 238, 171, 248, 53, 198, 152, 213, 37, - 201, 247, 223, 93, 233, 216, 77, 247, 24, 56, 209, 8, 56, 238, 170, 56, - 192, 71, 56, 248, 22, 164, 205, 54, 56, 237, 42, 239, 6, 56, 233, 40, - 211, 50, 223, 144, 219, 219, 55, 251, 116, 207, 252, 77, 213, 12, 56, - 202, 32, 228, 88, 207, 78, 56, 217, 146, 237, 125, 56, 209, 80, 56, 200, - 182, 109, 200, 182, 138, 252, 47, 252, 60, 216, 91, 56, 209, 142, 56, 82, - 236, 140, 247, 35, 200, 182, 107, 217, 40, 211, 50, 223, 144, 206, 203, - 55, 251, 116, 207, 252, 77, 193, 246, 232, 118, 91, 208, 22, 193, 246, - 232, 118, 91, 230, 70, 193, 246, 232, 118, 115, 208, 20, 223, 93, 208, - 13, 77, 8, 6, 1, 42, 4, 230, 210, 8, 6, 1, 42, 4, 252, 46, 8, 6, 1, 42, - 4, 243, 1, 8, 6, 1, 42, 4, 198, 152, 8, 6, 1, 42, 4, 237, 42, 8, 6, 1, - 42, 4, 206, 189, 58, 8, 6, 1, 252, 25, 8, 6, 1, 247, 194, 4, 247, 35, 8, - 6, 1, 235, 15, 4, 230, 210, 8, 6, 1, 235, 15, 4, 252, 46, 8, 6, 1, 235, - 15, 4, 243, 1, 8, 6, 1, 235, 15, 4, 237, 42, 8, 6, 1, 228, 74, 4, 230, - 210, 8, 6, 1, 228, 74, 4, 252, 46, 8, 6, 1, 228, 74, 4, 243, 1, 8, 6, 1, - 228, 74, 4, 237, 42, 8, 6, 1, 233, 248, 8, 6, 1, 215, 62, 4, 198, 152, 8, - 6, 1, 187, 4, 230, 210, 8, 6, 1, 187, 4, 252, 46, 8, 6, 1, 187, 4, 243, - 1, 8, 6, 1, 187, 4, 198, 152, 8, 6, 1, 187, 4, 237, 42, 215, 127, 56, 8, - 6, 1, 187, 4, 106, 8, 6, 1, 126, 4, 230, 210, 8, 6, 1, 126, 4, 252, 46, - 8, 6, 1, 126, 4, 243, 1, 8, 6, 1, 126, 4, 237, 42, 8, 6, 1, 192, 160, 4, - 252, 46, 8, 6, 1, 198, 233, 8, 2, 1, 203, 127, 206, 8, 8, 2, 1, 42, 4, - 230, 210, 8, 2, 1, 42, 4, 252, 46, 8, 2, 1, 42, 4, 243, 1, 8, 2, 1, 42, - 4, 198, 152, 8, 2, 1, 42, 4, 237, 42, 8, 2, 1, 42, 4, 206, 189, 58, 8, 2, - 1, 252, 25, 8, 2, 1, 247, 194, 4, 247, 35, 8, 2, 1, 235, 15, 4, 230, 210, - 8, 2, 1, 235, 15, 4, 252, 46, 8, 2, 1, 235, 15, 4, 243, 1, 8, 2, 1, 235, - 15, 4, 237, 42, 8, 2, 1, 228, 74, 4, 230, 210, 8, 2, 1, 228, 74, 4, 252, - 46, 8, 2, 1, 228, 74, 4, 243, 1, 8, 2, 1, 228, 74, 4, 237, 42, 8, 2, 1, - 233, 248, 8, 2, 1, 215, 62, 4, 198, 152, 8, 2, 1, 187, 4, 230, 210, 8, 2, - 1, 187, 4, 252, 46, 8, 2, 1, 187, 4, 243, 1, 8, 2, 1, 187, 4, 198, 152, - 8, 2, 1, 187, 4, 237, 42, 236, 200, 56, 8, 2, 1, 187, 4, 106, 8, 2, 1, - 126, 4, 230, 210, 8, 2, 1, 126, 4, 252, 46, 8, 2, 1, 126, 4, 243, 1, 8, - 2, 1, 126, 4, 237, 42, 8, 2, 1, 192, 160, 4, 252, 46, 8, 2, 1, 198, 233, - 8, 2, 1, 192, 160, 4, 237, 42, 8, 6, 1, 42, 4, 217, 146, 8, 2, 1, 42, 4, - 217, 146, 8, 6, 1, 42, 4, 248, 36, 8, 2, 1, 42, 4, 248, 36, 8, 6, 1, 42, - 4, 211, 138, 8, 2, 1, 42, 4, 211, 138, 8, 6, 1, 247, 194, 4, 252, 46, 8, - 2, 1, 247, 194, 4, 252, 46, 8, 6, 1, 247, 194, 4, 243, 1, 8, 2, 1, 247, - 194, 4, 243, 1, 8, 6, 1, 247, 194, 4, 75, 58, 8, 2, 1, 247, 194, 4, 75, - 58, 8, 6, 1, 247, 194, 4, 247, 92, 8, 2, 1, 247, 194, 4, 247, 92, 8, 6, - 1, 238, 128, 4, 247, 92, 8, 2, 1, 238, 128, 4, 247, 92, 8, 6, 1, 238, - 128, 4, 106, 8, 2, 1, 238, 128, 4, 106, 8, 6, 1, 235, 15, 4, 217, 146, 8, - 2, 1, 235, 15, 4, 217, 146, 8, 6, 1, 235, 15, 4, 248, 36, 8, 2, 1, 235, - 15, 4, 248, 36, 8, 6, 1, 235, 15, 4, 75, 58, 8, 2, 1, 235, 15, 4, 75, 58, - 8, 6, 1, 235, 15, 4, 211, 138, 8, 2, 1, 235, 15, 4, 211, 138, 8, 6, 1, - 235, 15, 4, 247, 92, 8, 2, 1, 235, 15, 4, 247, 92, 8, 6, 1, 232, 52, 4, - 243, 1, 8, 2, 1, 232, 52, 4, 243, 1, 8, 6, 1, 232, 52, 4, 248, 36, 8, 2, - 1, 232, 52, 4, 248, 36, 8, 6, 1, 232, 52, 4, 75, 58, 8, 2, 1, 232, 52, 4, - 75, 58, 8, 6, 1, 232, 52, 4, 247, 35, 8, 2, 1, 232, 52, 4, 247, 35, 8, 6, - 1, 230, 117, 4, 243, 1, 8, 2, 1, 230, 117, 4, 243, 1, 8, 6, 1, 230, 117, - 4, 106, 8, 2, 1, 230, 117, 4, 106, 8, 6, 1, 228, 74, 4, 198, 152, 8, 2, - 1, 228, 74, 4, 198, 152, 8, 6, 1, 228, 74, 4, 217, 146, 8, 2, 1, 228, 74, - 4, 217, 146, 8, 6, 1, 228, 74, 4, 248, 36, 8, 2, 1, 228, 74, 4, 248, 36, - 8, 6, 1, 228, 74, 4, 211, 138, 8, 2, 1, 228, 74, 4, 211, 138, 8, 6, 1, - 228, 74, 4, 75, 58, 8, 2, 1, 236, 139, 68, 8, 6, 34, 223, 197, 8, 2, 34, - 223, 197, 8, 6, 1, 223, 36, 4, 243, 1, 8, 2, 1, 223, 36, 4, 243, 1, 8, 6, - 1, 222, 153, 4, 247, 35, 8, 2, 1, 222, 153, 4, 247, 35, 8, 2, 1, 221, 8, - 8, 6, 1, 220, 143, 4, 252, 46, 8, 2, 1, 220, 143, 4, 252, 46, 8, 6, 1, - 220, 143, 4, 247, 35, 8, 2, 1, 220, 143, 4, 247, 35, 8, 6, 1, 220, 143, - 4, 247, 92, 8, 2, 1, 220, 143, 4, 247, 92, 8, 6, 1, 220, 143, 4, 82, 236, - 140, 8, 2, 1, 220, 143, 4, 82, 236, 140, 8, 6, 1, 220, 143, 4, 106, 8, 2, - 1, 220, 143, 4, 106, 8, 6, 1, 215, 62, 4, 252, 46, 8, 2, 1, 215, 62, 4, - 252, 46, 8, 6, 1, 215, 62, 4, 247, 35, 8, 2, 1, 215, 62, 4, 247, 35, 8, - 6, 1, 215, 62, 4, 247, 92, 8, 2, 1, 215, 62, 4, 247, 92, 8, 2, 1, 215, - 62, 208, 233, 247, 205, 251, 49, 8, 6, 1, 234, 88, 8, 2, 1, 234, 88, 8, - 6, 1, 187, 4, 217, 146, 8, 2, 1, 187, 4, 217, 146, 8, 6, 1, 187, 4, 248, - 36, 8, 2, 1, 187, 4, 248, 36, 8, 6, 1, 187, 4, 55, 252, 46, 8, 2, 1, 187, - 4, 55, 252, 46, 8, 6, 34, 211, 151, 8, 2, 34, 211, 151, 8, 6, 1, 207, - 222, 4, 252, 46, 8, 2, 1, 207, 222, 4, 252, 46, 8, 6, 1, 207, 222, 4, - 247, 35, 8, 2, 1, 207, 222, 4, 247, 35, 8, 6, 1, 207, 222, 4, 247, 92, 8, - 2, 1, 207, 222, 4, 247, 92, 8, 6, 1, 206, 9, 4, 252, 46, 8, 2, 1, 206, 9, - 4, 252, 46, 8, 6, 1, 206, 9, 4, 243, 1, 8, 2, 1, 206, 9, 4, 243, 1, 8, 6, - 1, 206, 9, 4, 247, 35, 8, 2, 1, 206, 9, 4, 247, 35, 8, 6, 1, 206, 9, 4, - 247, 92, 8, 2, 1, 206, 9, 4, 247, 92, 8, 6, 1, 200, 44, 4, 247, 35, 8, 2, - 1, 200, 44, 4, 247, 35, 8, 6, 1, 200, 44, 4, 247, 92, 8, 2, 1, 200, 44, - 4, 247, 92, 8, 6, 1, 200, 44, 4, 106, 8, 2, 1, 200, 44, 4, 106, 8, 6, 1, - 126, 4, 198, 152, 8, 2, 1, 126, 4, 198, 152, 8, 6, 1, 126, 4, 217, 146, - 8, 2, 1, 126, 4, 217, 146, 8, 6, 1, 126, 4, 248, 36, 8, 2, 1, 126, 4, - 248, 36, 8, 6, 1, 126, 4, 206, 189, 58, 8, 2, 1, 126, 4, 206, 189, 58, 8, - 6, 1, 126, 4, 55, 252, 46, 8, 2, 1, 126, 4, 55, 252, 46, 8, 6, 1, 126, 4, - 211, 138, 8, 2, 1, 126, 4, 211, 138, 8, 6, 1, 193, 225, 4, 243, 1, 8, 2, - 1, 193, 225, 4, 243, 1, 8, 6, 1, 192, 160, 4, 243, 1, 8, 2, 1, 192, 160, - 4, 243, 1, 8, 6, 1, 192, 160, 4, 237, 42, 8, 6, 1, 191, 167, 4, 252, 46, - 8, 2, 1, 191, 167, 4, 252, 46, 8, 6, 1, 191, 167, 4, 75, 58, 8, 2, 1, - 191, 167, 4, 75, 58, 8, 6, 1, 191, 167, 4, 247, 92, 8, 2, 1, 191, 167, 4, - 247, 92, 8, 2, 1, 179, 206, 8, 8, 2, 1, 78, 4, 106, 8, 6, 1, 78, 4, 102, - 8, 6, 1, 78, 4, 198, 51, 8, 2, 1, 78, 4, 198, 51, 8, 6, 1, 163, 169, 8, - 2, 1, 163, 169, 8, 6, 1, 211, 77, 74, 8, 6, 1, 247, 194, 4, 102, 8, 2, 1, - 247, 194, 4, 102, 8, 6, 1, 252, 0, 238, 127, 8, 6, 1, 238, 128, 4, 102, - 8, 6, 1, 238, 128, 4, 198, 51, 8, 2, 1, 238, 128, 4, 198, 51, 8, 2, 1, - 153, 237, 106, 8, 6, 1, 207, 18, 71, 8, 6, 1, 205, 86, 8, 6, 1, 211, 77, - 71, 8, 6, 1, 233, 176, 4, 102, 8, 2, 1, 233, 176, 4, 102, 8, 6, 1, 232, - 52, 4, 102, 8, 6, 1, 231, 211, 8, 2, 1, 228, 126, 8, 6, 1, 223, 83, 8, 6, - 1, 228, 74, 4, 106, 8, 6, 1, 222, 153, 4, 102, 8, 2, 1, 222, 153, 4, 102, - 8, 2, 1, 220, 143, 4, 164, 8, 2, 1, 220, 33, 4, 106, 8, 6, 1, 153, 218, - 168, 8, 6, 1, 215, 62, 4, 45, 102, 8, 2, 1, 215, 62, 4, 179, 50, 219, - 212, 8, 6, 1, 187, 4, 82, 198, 152, 8, 6, 1, 187, 4, 228, 187, 8, 2, 1, - 187, 4, 228, 187, 8, 6, 1, 211, 133, 8, 2, 1, 211, 133, 8, 6, 1, 210, - 237, 4, 102, 8, 2, 1, 210, 237, 4, 102, 8, 1, 191, 228, 8, 6, 1, 163, - 109, 8, 2, 1, 163, 109, 8, 6, 1, 234, 12, 8, 1, 207, 18, 234, 13, 219, 4, - 8, 2, 1, 200, 44, 4, 210, 192, 102, 8, 6, 1, 200, 44, 4, 102, 8, 2, 1, - 200, 44, 4, 102, 8, 6, 1, 200, 44, 4, 207, 24, 102, 8, 6, 1, 126, 4, 228, - 187, 8, 2, 1, 126, 4, 228, 187, 8, 6, 1, 196, 70, 8, 6, 1, 196, 13, 4, - 102, 8, 6, 1, 192, 160, 4, 102, 8, 2, 1, 192, 160, 4, 102, 8, 6, 1, 191, - 167, 4, 106, 8, 2, 1, 191, 167, 4, 106, 8, 6, 1, 233, 178, 8, 6, 1, 233, - 179, 207, 17, 8, 2, 1, 233, 179, 207, 17, 8, 2, 1, 233, 179, 4, 199, 215, - 8, 1, 105, 4, 106, 8, 6, 1, 163, 149, 8, 2, 1, 163, 149, 8, 1, 223, 93, - 231, 11, 201, 64, 4, 106, 8, 1, 192, 238, 8, 1, 237, 98, 242, 231, 8, 1, - 220, 3, 242, 231, 8, 1, 251, 150, 242, 231, 8, 1, 207, 24, 242, 231, 8, - 6, 1, 235, 37, 4, 247, 92, 8, 6, 1, 238, 128, 4, 2, 1, 191, 167, 4, 247, - 92, 8, 2, 1, 235, 37, 4, 247, 92, 8, 6, 1, 219, 77, 8, 6, 1, 220, 143, 4, - 2, 1, 223, 35, 8, 2, 1, 219, 77, 8, 6, 1, 213, 158, 8, 6, 1, 215, 62, 4, - 2, 1, 223, 35, 8, 2, 1, 213, 158, 8, 6, 1, 42, 4, 247, 92, 8, 2, 1, 42, - 4, 247, 92, 8, 6, 1, 228, 74, 4, 247, 92, 8, 2, 1, 228, 74, 4, 247, 92, - 8, 6, 1, 187, 4, 247, 92, 8, 2, 1, 187, 4, 247, 92, 8, 6, 1, 126, 4, 247, - 92, 8, 2, 1, 126, 4, 247, 92, 8, 6, 1, 126, 4, 237, 43, 23, 217, 146, 8, - 2, 1, 126, 4, 237, 43, 23, 217, 146, 8, 6, 1, 126, 4, 237, 43, 23, 252, - 46, 8, 2, 1, 126, 4, 237, 43, 23, 252, 46, 8, 6, 1, 126, 4, 237, 43, 23, - 247, 92, 8, 2, 1, 126, 4, 237, 43, 23, 247, 92, 8, 6, 1, 126, 4, 237, 43, - 23, 230, 210, 8, 2, 1, 126, 4, 237, 43, 23, 230, 210, 8, 2, 1, 153, 71, - 8, 6, 1, 42, 4, 237, 43, 23, 217, 146, 8, 2, 1, 42, 4, 237, 43, 23, 217, - 146, 8, 6, 1, 42, 4, 75, 93, 23, 217, 146, 8, 2, 1, 42, 4, 75, 93, 23, - 217, 146, 8, 6, 1, 252, 26, 4, 217, 146, 8, 2, 1, 252, 26, 4, 217, 146, - 8, 6, 1, 232, 52, 4, 106, 8, 2, 1, 232, 52, 4, 106, 8, 6, 1, 232, 52, 4, - 247, 92, 8, 2, 1, 232, 52, 4, 247, 92, 8, 6, 1, 222, 153, 4, 247, 92, 8, - 2, 1, 222, 153, 4, 247, 92, 8, 6, 1, 187, 4, 211, 138, 8, 2, 1, 187, 4, - 211, 138, 8, 6, 1, 187, 4, 211, 139, 23, 217, 146, 8, 2, 1, 187, 4, 211, - 139, 23, 217, 146, 8, 6, 1, 233, 179, 4, 247, 92, 8, 2, 1, 233, 179, 4, - 247, 92, 8, 2, 1, 223, 36, 4, 247, 92, 8, 6, 1, 235, 36, 8, 6, 1, 238, - 128, 4, 2, 1, 191, 166, 8, 2, 1, 235, 36, 8, 6, 1, 232, 52, 4, 252, 46, - 8, 2, 1, 232, 52, 4, 252, 46, 8, 6, 1, 228, 123, 8, 6, 1, 192, 238, 8, 6, - 1, 215, 62, 4, 230, 210, 8, 2, 1, 215, 62, 4, 230, 210, 8, 6, 1, 42, 4, - 206, 189, 93, 23, 252, 46, 8, 2, 1, 42, 4, 206, 189, 93, 23, 252, 46, 8, - 6, 1, 252, 26, 4, 252, 46, 8, 2, 1, 252, 26, 4, 252, 46, 8, 6, 1, 187, 4, - 201, 28, 23, 252, 46, 8, 2, 1, 187, 4, 201, 28, 23, 252, 46, 8, 6, 1, 42, - 4, 55, 230, 210, 8, 2, 1, 42, 4, 55, 230, 210, 8, 6, 1, 42, 4, 223, 93, - 248, 36, 8, 2, 1, 42, 4, 223, 93, 248, 36, 8, 6, 1, 235, 15, 4, 55, 230, - 210, 8, 2, 1, 235, 15, 4, 55, 230, 210, 8, 6, 1, 235, 15, 4, 223, 93, - 248, 36, 8, 2, 1, 235, 15, 4, 223, 93, 248, 36, 8, 6, 1, 228, 74, 4, 55, - 230, 210, 8, 2, 1, 228, 74, 4, 55, 230, 210, 8, 6, 1, 228, 74, 4, 223, - 93, 248, 36, 8, 2, 1, 228, 74, 4, 223, 93, 248, 36, 8, 6, 1, 187, 4, 55, - 230, 210, 8, 2, 1, 187, 4, 55, 230, 210, 8, 6, 1, 187, 4, 223, 93, 248, - 36, 8, 2, 1, 187, 4, 223, 93, 248, 36, 8, 6, 1, 207, 222, 4, 55, 230, - 210, 8, 2, 1, 207, 222, 4, 55, 230, 210, 8, 6, 1, 207, 222, 4, 223, 93, - 248, 36, 8, 2, 1, 207, 222, 4, 223, 93, 248, 36, 8, 6, 1, 126, 4, 55, - 230, 210, 8, 2, 1, 126, 4, 55, 230, 210, 8, 6, 1, 126, 4, 223, 93, 248, - 36, 8, 2, 1, 126, 4, 223, 93, 248, 36, 8, 6, 1, 206, 9, 4, 242, 75, 60, - 8, 2, 1, 206, 9, 4, 242, 75, 60, 8, 6, 1, 200, 44, 4, 242, 75, 60, 8, 2, - 1, 200, 44, 4, 242, 75, 60, 8, 6, 1, 191, 248, 8, 2, 1, 191, 248, 8, 6, - 1, 230, 117, 4, 247, 92, 8, 2, 1, 230, 117, 4, 247, 92, 8, 6, 1, 215, 62, - 4, 179, 50, 219, 212, 8, 2, 1, 238, 128, 4, 238, 175, 8, 6, 1, 211, 19, - 8, 2, 1, 211, 19, 8, 6, 1, 191, 167, 4, 102, 8, 2, 1, 191, 167, 4, 102, - 8, 6, 1, 42, 4, 75, 58, 8, 2, 1, 42, 4, 75, 58, 8, 6, 1, 235, 15, 4, 247, - 35, 8, 2, 1, 235, 15, 4, 247, 35, 8, 6, 1, 187, 4, 237, 43, 23, 217, 146, - 8, 2, 1, 187, 4, 237, 43, 23, 217, 146, 8, 6, 1, 187, 4, 198, 153, 23, - 217, 146, 8, 2, 1, 187, 4, 198, 153, 23, 217, 146, 8, 6, 1, 187, 4, 75, - 58, 8, 2, 1, 187, 4, 75, 58, 8, 6, 1, 187, 4, 75, 93, 23, 217, 146, 8, 2, - 1, 187, 4, 75, 93, 23, 217, 146, 8, 6, 1, 192, 160, 4, 217, 146, 8, 2, 1, - 192, 160, 4, 217, 146, 8, 2, 1, 220, 143, 4, 238, 175, 8, 2, 1, 215, 62, - 4, 238, 175, 8, 2, 1, 200, 44, 4, 238, 175, 8, 2, 1, 236, 139, 223, 35, - 8, 2, 1, 237, 201, 237, 2, 8, 2, 1, 208, 34, 237, 2, 8, 6, 1, 42, 4, 106, - 8, 6, 1, 247, 194, 4, 106, 8, 2, 1, 247, 194, 4, 106, 8, 6, 1, 220, 143, - 4, 164, 8, 6, 1, 200, 44, 4, 237, 39, 106, 8, 2, 1, 206, 9, 4, 200, 146, - 199, 215, 8, 2, 1, 191, 167, 4, 200, 146, 199, 215, 8, 6, 1, 231, 11, - 201, 63, 8, 2, 1, 231, 11, 201, 63, 8, 6, 1, 78, 4, 106, 8, 6, 1, 126, - 164, 8, 6, 1, 153, 196, 12, 8, 6, 1, 235, 15, 4, 106, 8, 2, 1, 235, 15, - 4, 106, 8, 6, 1, 223, 36, 4, 106, 8, 2, 1, 223, 36, 4, 106, 8, 6, 1, 2, - 208, 105, 4, 228, 251, 199, 215, 8, 2, 1, 208, 105, 4, 228, 251, 199, - 215, 8, 6, 1, 207, 222, 4, 106, 8, 2, 1, 207, 222, 4, 106, 8, 6, 1, 192, - 160, 4, 106, 8, 2, 1, 192, 160, 4, 106, 8, 2, 1, 153, 65, 8, 2, 1, 251, - 160, 8, 2, 1, 153, 251, 160, 8, 2, 1, 78, 4, 102, 8, 2, 1, 211, 77, 74, - 8, 2, 1, 247, 194, 4, 238, 175, 8, 2, 1, 238, 128, 4, 199, 215, 8, 2, 1, - 238, 128, 4, 102, 8, 2, 1, 207, 18, 71, 8, 2, 1, 205, 86, 8, 2, 1, 205, - 87, 4, 102, 8, 2, 1, 211, 77, 71, 8, 2, 1, 207, 18, 211, 77, 71, 8, 2, 1, - 207, 18, 211, 77, 235, 15, 4, 102, 8, 2, 1, 242, 219, 207, 18, 211, 77, - 71, 8, 2, 1, 236, 139, 223, 36, 4, 106, 8, 2, 1, 232, 52, 4, 102, 8, 2, - 1, 27, 232, 51, 8, 1, 2, 6, 232, 51, 8, 2, 1, 231, 211, 8, 2, 1, 207, - 140, 228, 187, 8, 2, 1, 153, 230, 116, 8, 2, 1, 230, 117, 4, 102, 8, 2, - 1, 229, 197, 4, 102, 8, 2, 1, 228, 74, 4, 106, 8, 2, 1, 223, 83, 8, 1, 2, - 6, 68, 8, 2, 1, 220, 143, 4, 82, 198, 152, 8, 2, 1, 220, 143, 4, 248, - 231, 8, 2, 1, 220, 143, 4, 207, 24, 102, 8, 2, 1, 219, 162, 8, 2, 1, 153, - 218, 168, 8, 2, 1, 153, 218, 169, 4, 179, 219, 212, 8, 2, 1, 218, 169, 4, - 102, 8, 2, 1, 215, 62, 4, 45, 102, 8, 2, 1, 215, 62, 4, 207, 24, 102, 8, - 1, 2, 6, 215, 61, 8, 2, 1, 249, 82, 74, 8, 1, 2, 6, 211, 151, 8, 2, 1, - 242, 219, 211, 110, 8, 2, 1, 209, 211, 8, 2, 1, 153, 146, 8, 2, 1, 153, - 207, 222, 4, 179, 219, 212, 8, 2, 1, 153, 207, 222, 4, 102, 8, 2, 1, 207, - 222, 4, 179, 219, 212, 8, 2, 1, 207, 222, 4, 199, 215, 8, 2, 1, 207, 222, - 4, 232, 233, 8, 2, 1, 207, 18, 207, 222, 4, 232, 233, 8, 1, 2, 6, 146, 8, - 1, 2, 6, 223, 93, 146, 8, 2, 1, 206, 9, 4, 102, 8, 2, 1, 234, 12, 8, 2, - 1, 236, 139, 223, 36, 4, 201, 28, 23, 102, 8, 2, 1, 201, 187, 207, 18, - 234, 12, 8, 2, 1, 234, 13, 4, 238, 175, 8, 2, 1, 153, 200, 43, 8, 2, 1, - 200, 44, 4, 207, 24, 102, 8, 2, 1, 126, 164, 8, 2, 1, 196, 70, 8, 2, 1, - 196, 13, 4, 102, 8, 2, 1, 153, 196, 12, 8, 2, 1, 153, 193, 224, 8, 2, 1, - 153, 192, 159, 8, 1, 2, 6, 192, 159, 8, 2, 1, 191, 167, 4, 207, 24, 102, - 8, 2, 1, 191, 167, 4, 238, 175, 8, 2, 1, 233, 178, 8, 2, 1, 233, 179, 4, - 238, 175, 8, 1, 231, 11, 201, 63, 8, 1, 209, 219, 195, 20, 232, 104, 8, - 1, 223, 93, 231, 11, 201, 63, 8, 1, 201, 36, 247, 193, 8, 1, 248, 172, - 242, 231, 8, 1, 2, 6, 250, 120, 8, 2, 1, 242, 219, 211, 77, 71, 8, 1, 2, - 6, 232, 52, 4, 102, 8, 1, 2, 6, 230, 116, 8, 2, 1, 223, 36, 4, 238, 212, - 8, 2, 1, 153, 222, 152, 8, 1, 2, 6, 172, 8, 2, 1, 208, 105, 4, 102, 8, 1, - 231, 11, 201, 64, 4, 106, 8, 1, 207, 18, 231, 11, 201, 64, 4, 106, 8, 2, - 1, 235, 37, 237, 2, 8, 2, 1, 237, 70, 237, 2, 8, 2, 1, 235, 37, 237, 3, - 4, 238, 175, 8, 2, 1, 197, 170, 237, 2, 8, 2, 1, 199, 79, 237, 2, 8, 2, - 1, 199, 152, 237, 3, 4, 238, 175, 8, 2, 1, 233, 37, 237, 2, 8, 2, 1, 218, - 227, 237, 2, 8, 2, 1, 218, 170, 237, 2, 8, 1, 248, 172, 210, 12, 8, 1, - 248, 180, 210, 12, 8, 2, 1, 153, 230, 117, 4, 232, 233, 8, 2, 1, 153, - 230, 117, 4, 232, 234, 23, 199, 215, 52, 1, 2, 230, 116, 52, 1, 2, 230, - 117, 4, 102, 52, 1, 2, 223, 35, 52, 1, 2, 146, 52, 1, 2, 153, 146, 52, 1, - 2, 153, 207, 222, 4, 102, 52, 1, 2, 6, 223, 93, 146, 52, 1, 2, 193, 224, - 52, 1, 2, 192, 159, 52, 1, 208, 215, 52, 1, 55, 208, 215, 52, 1, 153, - 242, 74, 52, 1, 251, 49, 52, 1, 207, 18, 242, 74, 52, 1, 50, 132, 206, - 188, 52, 1, 45, 132, 206, 188, 52, 1, 231, 11, 201, 63, 52, 1, 207, 18, - 231, 11, 201, 63, 52, 1, 45, 250, 235, 52, 1, 50, 250, 235, 52, 1, 133, - 250, 235, 52, 1, 144, 250, 235, 52, 1, 243, 2, 252, 60, 247, 92, 52, 1, - 81, 219, 112, 52, 1, 217, 146, 52, 1, 252, 47, 252, 60, 52, 1, 230, 211, - 252, 60, 52, 1, 130, 81, 219, 112, 52, 1, 130, 217, 146, 52, 1, 130, 230, - 211, 252, 60, 52, 1, 130, 252, 47, 252, 60, 52, 1, 197, 238, 242, 83, 52, - 1, 132, 197, 238, 242, 83, 52, 1, 247, 20, 50, 132, 206, 188, 52, 1, 247, - 20, 45, 132, 206, 188, 52, 1, 133, 199, 228, 52, 1, 144, 199, 228, 52, 1, - 108, 56, 52, 1, 216, 35, 56, 248, 36, 75, 58, 206, 189, 58, 211, 138, 2, - 198, 152, 55, 252, 47, 252, 60, 52, 1, 207, 2, 102, 52, 1, 238, 218, 252, - 60, 52, 1, 2, 231, 211, 52, 1, 2, 172, 52, 1, 2, 206, 8, 52, 1, 2, 192, - 235, 52, 1, 2, 207, 18, 231, 11, 201, 63, 52, 1, 233, 200, 163, 164, 52, - 1, 137, 163, 164, 52, 1, 216, 87, 163, 164, 52, 1, 130, 163, 164, 52, 1, - 233, 199, 163, 164, 52, 1, 192, 22, 237, 95, 163, 77, 52, 1, 192, 107, - 237, 95, 163, 77, 52, 1, 195, 18, 52, 1, 196, 109, 52, 1, 55, 251, 49, - 52, 1, 130, 144, 250, 235, 52, 1, 130, 133, 250, 235, 52, 1, 130, 45, - 250, 235, 52, 1, 130, 50, 250, 235, 52, 1, 130, 206, 188, 52, 1, 82, 230, - 211, 252, 60, 52, 1, 82, 55, 230, 211, 252, 60, 52, 1, 82, 55, 252, 47, - 252, 60, 52, 1, 130, 198, 152, 52, 1, 207, 147, 242, 83, 52, 1, 248, 249, - 137, 198, 79, 52, 1, 234, 95, 137, 198, 79, 52, 1, 248, 249, 130, 198, - 79, 52, 1, 234, 95, 130, 198, 79, 52, 1, 203, 104, 52, 1, 211, 77, 203, - 104, 52, 1, 130, 45, 57, 33, 230, 211, 252, 60, 33, 252, 47, 252, 60, 33, - 243, 2, 252, 60, 33, 198, 152, 33, 217, 146, 33, 210, 254, 33, 248, 36, - 33, 75, 58, 33, 237, 42, 33, 228, 251, 58, 33, 206, 189, 58, 33, 55, 252, - 47, 252, 60, 33, 247, 92, 33, 81, 219, 113, 58, 33, 55, 81, 219, 113, 58, - 33, 55, 230, 211, 252, 60, 33, 247, 119, 33, 223, 93, 248, 36, 33, 153, - 242, 75, 58, 33, 242, 75, 58, 33, 207, 18, 242, 75, 58, 33, 242, 75, 93, - 183, 33, 230, 211, 252, 61, 60, 33, 252, 47, 252, 61, 60, 33, 45, 199, - 229, 60, 33, 50, 199, 229, 60, 33, 45, 251, 116, 58, 33, 228, 187, 33, - 45, 132, 206, 189, 60, 33, 133, 199, 229, 60, 33, 144, 199, 229, 60, 33, - 108, 3, 60, 33, 216, 35, 3, 60, 33, 210, 190, 228, 251, 60, 33, 207, 24, - 228, 251, 60, 33, 75, 60, 33, 237, 43, 60, 33, 206, 189, 60, 33, 242, 75, - 60, 33, 247, 35, 33, 211, 138, 33, 81, 219, 113, 60, 33, 248, 29, 60, 33, - 223, 93, 55, 251, 15, 60, 33, 247, 93, 60, 33, 243, 2, 252, 61, 60, 33, - 248, 37, 60, 33, 223, 93, 248, 37, 60, 33, 198, 153, 60, 33, 217, 147, - 60, 33, 130, 219, 112, 33, 55, 130, 219, 112, 33, 198, 153, 210, 255, 33, - 203, 40, 201, 28, 210, 255, 33, 179, 201, 28, 210, 255, 33, 203, 40, 202, - 24, 210, 255, 33, 179, 202, 24, 210, 255, 33, 50, 132, 206, 189, 60, 33, - 223, 93, 248, 29, 60, 33, 51, 60, 33, 205, 62, 60, 33, 192, 236, 58, 33, - 81, 198, 152, 33, 55, 210, 254, 33, 230, 211, 163, 77, 33, 252, 47, 163, - 77, 33, 35, 210, 4, 33, 35, 221, 30, 33, 35, 237, 36, 198, 60, 33, 35, - 191, 233, 33, 248, 29, 58, 33, 234, 43, 3, 60, 33, 55, 81, 219, 113, 60, - 33, 45, 251, 116, 60, 33, 213, 12, 198, 153, 58, 33, 229, 1, 58, 33, 251, - 165, 234, 45, 119, 58, 33, 45, 50, 64, 60, 33, 196, 66, 64, 60, 33, 230, - 217, 222, 196, 33, 50, 250, 236, 58, 33, 45, 132, 206, 189, 58, 33, 233, - 34, 33, 192, 236, 60, 33, 45, 250, 236, 60, 33, 50, 250, 236, 60, 33, 50, - 250, 236, 23, 133, 250, 236, 60, 33, 50, 132, 206, 189, 58, 33, 75, 93, - 183, 33, 250, 194, 60, 33, 55, 206, 189, 60, 33, 191, 21, 58, 33, 55, - 248, 37, 60, 33, 55, 248, 36, 33, 55, 217, 146, 33, 55, 217, 147, 60, 33, - 55, 198, 152, 33, 55, 223, 93, 248, 36, 33, 55, 96, 64, 60, 33, 8, 2, 1, - 65, 33, 8, 2, 1, 71, 33, 8, 2, 1, 68, 33, 8, 2, 1, 74, 33, 8, 2, 1, 66, - 33, 8, 2, 1, 247, 193, 33, 8, 2, 1, 238, 127, 33, 8, 2, 1, 230, 116, 33, - 8, 2, 1, 218, 168, 33, 8, 2, 1, 146, 33, 8, 2, 1, 200, 43, 33, 8, 2, 1, - 196, 12, 33, 8, 2, 1, 192, 235, 35, 6, 1, 229, 185, 35, 2, 1, 229, 185, - 35, 6, 1, 251, 14, 205, 145, 35, 2, 1, 251, 14, 205, 145, 35, 212, 134, - 56, 35, 110, 212, 134, 56, 35, 6, 1, 210, 171, 237, 10, 35, 2, 1, 210, - 171, 237, 10, 35, 191, 233, 35, 2, 207, 18, 218, 206, 202, 197, 113, 35, - 2, 235, 138, 218, 206, 202, 197, 113, 35, 2, 207, 18, 235, 138, 218, 206, - 202, 197, 113, 35, 208, 13, 77, 35, 6, 1, 191, 240, 35, 198, 60, 35, 237, - 36, 198, 60, 35, 6, 1, 251, 161, 4, 198, 60, 35, 251, 94, 199, 108, 35, - 6, 1, 234, 48, 4, 198, 60, 35, 6, 1, 233, 254, 4, 198, 60, 35, 6, 1, 223, - 84, 4, 198, 60, 35, 6, 1, 211, 108, 4, 198, 60, 35, 6, 1, 196, 71, 4, - 198, 60, 35, 6, 1, 211, 111, 4, 198, 60, 35, 2, 1, 223, 84, 4, 237, 36, - 23, 198, 60, 35, 6, 1, 251, 160, 35, 6, 1, 248, 212, 35, 6, 1, 231, 211, - 35, 6, 1, 237, 106, 35, 6, 1, 234, 47, 35, 6, 1, 191, 76, 35, 6, 1, 233, - 253, 35, 6, 1, 199, 15, 35, 6, 1, 223, 83, 35, 6, 1, 222, 72, 35, 6, 1, - 220, 31, 35, 6, 1, 215, 155, 35, 6, 1, 212, 178, 35, 6, 1, 192, 207, 35, - 6, 1, 211, 107, 35, 6, 1, 209, 185, 35, 6, 1, 207, 3, 35, 6, 1, 202, 196, - 35, 6, 1, 199, 166, 35, 6, 1, 196, 70, 35, 6, 1, 209, 211, 35, 6, 1, 243, - 95, 35, 6, 1, 208, 176, 35, 6, 1, 211, 110, 35, 6, 1, 223, 84, 4, 237, - 35, 35, 6, 1, 196, 71, 4, 237, 35, 35, 2, 1, 251, 161, 4, 198, 60, 35, 2, - 1, 234, 48, 4, 198, 60, 35, 2, 1, 233, 254, 4, 198, 60, 35, 2, 1, 223, - 84, 4, 198, 60, 35, 2, 1, 196, 71, 4, 237, 36, 23, 198, 60, 35, 2, 1, - 251, 160, 35, 2, 1, 248, 212, 35, 2, 1, 231, 211, 35, 2, 1, 237, 106, 35, - 2, 1, 234, 47, 35, 2, 1, 191, 76, 35, 2, 1, 233, 253, 35, 2, 1, 199, 15, - 35, 2, 1, 223, 83, 35, 2, 1, 222, 72, 35, 2, 1, 220, 31, 35, 2, 1, 215, - 155, 35, 2, 1, 212, 178, 35, 2, 1, 192, 207, 35, 2, 1, 211, 107, 35, 2, - 1, 209, 185, 35, 2, 1, 207, 3, 35, 2, 1, 53, 202, 196, 35, 2, 1, 202, - 196, 35, 2, 1, 199, 166, 35, 2, 1, 196, 70, 35, 2, 1, 209, 211, 35, 2, 1, - 243, 95, 35, 2, 1, 208, 176, 35, 2, 1, 211, 110, 35, 2, 1, 223, 84, 4, - 237, 35, 35, 2, 1, 196, 71, 4, 237, 35, 35, 2, 1, 211, 108, 4, 198, 60, - 35, 2, 1, 196, 71, 4, 198, 60, 35, 2, 1, 211, 111, 4, 198, 60, 35, 6, - 222, 103, 113, 35, 248, 213, 113, 35, 199, 16, 113, 35, 196, 71, 4, 228, - 251, 113, 35, 196, 71, 4, 252, 47, 23, 228, 251, 113, 35, 196, 71, 4, - 237, 43, 23, 228, 251, 113, 35, 209, 212, 113, 35, 209, 186, 113, 35, - 222, 103, 113, 35, 1, 251, 14, 221, 35, 35, 2, 1, 251, 14, 221, 35, 35, - 1, 201, 73, 35, 2, 1, 201, 73, 35, 1, 237, 10, 35, 2, 1, 237, 10, 35, 1, - 221, 35, 35, 2, 1, 221, 35, 35, 1, 205, 145, 35, 2, 1, 205, 145, 94, 6, - 1, 203, 105, 94, 2, 1, 203, 105, 94, 6, 1, 233, 44, 94, 2, 1, 233, 44, - 94, 6, 1, 221, 195, 94, 2, 1, 221, 195, 94, 6, 1, 228, 242, 94, 2, 1, - 228, 242, 94, 6, 1, 231, 206, 94, 2, 1, 231, 206, 94, 6, 1, 203, 71, 94, - 2, 1, 203, 71, 94, 6, 1, 237, 122, 94, 2, 1, 237, 122, 35, 222, 73, 113, - 35, 207, 4, 113, 35, 218, 206, 202, 197, 113, 35, 1, 191, 240, 35, 6, - 199, 16, 113, 35, 218, 206, 234, 48, 113, 35, 207, 18, 218, 206, 234, 48, - 113, 35, 6, 1, 203, 56, 35, 2, 1, 203, 56, 35, 6, 218, 206, 202, 197, - 113, 35, 6, 1, 205, 142, 35, 2, 1, 205, 142, 35, 207, 4, 4, 201, 28, 113, - 35, 6, 207, 18, 218, 206, 202, 197, 113, 35, 6, 235, 138, 218, 206, 202, - 197, 113, 35, 6, 207, 18, 235, 138, 218, 206, 202, 197, 113, 38, 6, 1, - 223, 227, 4, 230, 210, 38, 6, 1, 223, 88, 38, 6, 1, 236, 192, 38, 6, 1, - 231, 20, 38, 6, 1, 196, 125, 223, 226, 38, 6, 1, 235, 32, 38, 6, 1, 247, - 203, 68, 38, 6, 1, 192, 33, 38, 6, 1, 223, 10, 38, 6, 1, 219, 76, 38, 6, - 1, 213, 150, 38, 6, 1, 197, 155, 38, 6, 1, 221, 103, 38, 6, 1, 228, 74, - 4, 230, 210, 38, 6, 1, 203, 40, 66, 38, 6, 1, 235, 28, 38, 6, 1, 65, 38, - 6, 1, 249, 17, 38, 6, 1, 195, 153, 38, 6, 1, 231, 77, 38, 6, 1, 237, 146, - 38, 6, 1, 223, 226, 38, 6, 1, 191, 62, 38, 6, 1, 191, 87, 38, 6, 1, 68, - 38, 6, 1, 203, 40, 68, 38, 6, 1, 155, 38, 6, 1, 234, 140, 38, 6, 1, 234, - 114, 38, 6, 1, 234, 103, 38, 6, 1, 74, 38, 6, 1, 210, 63, 38, 6, 1, 234, - 34, 38, 6, 1, 234, 22, 38, 6, 1, 199, 145, 38, 6, 1, 66, 38, 6, 1, 234, - 181, 38, 6, 1, 140, 38, 6, 1, 197, 161, 38, 6, 1, 243, 127, 38, 6, 1, - 203, 165, 38, 6, 1, 203, 116, 38, 6, 1, 230, 17, 56, 38, 6, 1, 192, 58, - 38, 6, 1, 202, 32, 56, 38, 6, 1, 71, 38, 6, 1, 191, 225, 38, 6, 1, 170, - 38, 2, 1, 65, 38, 2, 1, 249, 17, 38, 2, 1, 195, 153, 38, 2, 1, 231, 77, - 38, 2, 1, 237, 146, 38, 2, 1, 223, 226, 38, 2, 1, 191, 62, 38, 2, 1, 191, - 87, 38, 2, 1, 68, 38, 2, 1, 203, 40, 68, 38, 2, 1, 155, 38, 2, 1, 234, - 140, 38, 2, 1, 234, 114, 38, 2, 1, 234, 103, 38, 2, 1, 74, 38, 2, 1, 210, - 63, 38, 2, 1, 234, 34, 38, 2, 1, 234, 22, 38, 2, 1, 199, 145, 38, 2, 1, - 66, 38, 2, 1, 234, 181, 38, 2, 1, 140, 38, 2, 1, 197, 161, 38, 2, 1, 243, - 127, 38, 2, 1, 203, 165, 38, 2, 1, 203, 116, 38, 2, 1, 230, 17, 56, 38, - 2, 1, 192, 58, 38, 2, 1, 202, 32, 56, 38, 2, 1, 71, 38, 2, 1, 191, 225, - 38, 2, 1, 170, 38, 2, 1, 223, 227, 4, 230, 210, 38, 2, 1, 223, 88, 38, 2, - 1, 236, 192, 38, 2, 1, 231, 20, 38, 2, 1, 196, 125, 223, 226, 38, 2, 1, - 235, 32, 38, 2, 1, 247, 203, 68, 38, 2, 1, 192, 33, 38, 2, 1, 223, 10, - 38, 2, 1, 219, 76, 38, 2, 1, 213, 150, 38, 2, 1, 197, 155, 38, 2, 1, 221, - 103, 38, 2, 1, 228, 74, 4, 230, 210, 38, 2, 1, 203, 40, 66, 38, 2, 1, - 235, 28, 38, 6, 1, 211, 110, 38, 2, 1, 211, 110, 38, 6, 1, 192, 95, 38, - 2, 1, 192, 95, 38, 6, 1, 223, 81, 71, 38, 2, 1, 223, 81, 71, 38, 6, 1, - 219, 83, 191, 190, 38, 2, 1, 219, 83, 191, 190, 38, 6, 1, 223, 81, 219, - 83, 191, 190, 38, 2, 1, 223, 81, 219, 83, 191, 190, 38, 6, 1, 248, 175, - 191, 190, 38, 2, 1, 248, 175, 191, 190, 38, 6, 1, 223, 81, 248, 175, 191, - 190, 38, 2, 1, 223, 81, 248, 175, 191, 190, 38, 6, 1, 220, 248, 38, 2, 1, - 220, 248, 38, 6, 1, 208, 176, 38, 2, 1, 208, 176, 38, 6, 1, 232, 228, 38, - 2, 1, 232, 228, 38, 6, 1, 223, 37, 38, 2, 1, 223, 37, 38, 6, 1, 223, 38, - 4, 55, 230, 211, 252, 60, 38, 2, 1, 223, 38, 4, 55, 230, 211, 252, 60, - 38, 6, 1, 196, 128, 38, 2, 1, 196, 128, 38, 6, 1, 206, 115, 211, 110, 38, - 2, 1, 206, 115, 211, 110, 38, 6, 1, 211, 111, 4, 198, 122, 38, 2, 1, 211, - 111, 4, 198, 122, 38, 6, 1, 211, 30, 38, 2, 1, 211, 30, 38, 6, 1, 221, - 35, 38, 2, 1, 221, 35, 38, 198, 229, 56, 33, 38, 198, 122, 33, 38, 210, - 191, 33, 38, 237, 213, 209, 75, 33, 38, 208, 170, 209, 75, 33, 38, 209, - 54, 33, 38, 228, 141, 198, 229, 56, 33, 38, 216, 48, 56, 38, 6, 1, 203, - 40, 228, 74, 4, 199, 215, 38, 2, 1, 203, 40, 228, 74, 4, 199, 215, 38, 6, - 1, 204, 21, 56, 38, 2, 1, 204, 21, 56, 38, 6, 1, 234, 35, 4, 198, 182, - 38, 2, 1, 234, 35, 4, 198, 182, 38, 6, 1, 231, 78, 4, 196, 69, 38, 2, 1, - 231, 78, 4, 196, 69, 38, 6, 1, 231, 78, 4, 106, 38, 2, 1, 231, 78, 4, - 106, 38, 6, 1, 231, 78, 4, 82, 102, 38, 2, 1, 231, 78, 4, 82, 102, 38, 6, - 1, 191, 63, 4, 237, 87, 38, 2, 1, 191, 63, 4, 237, 87, 38, 6, 1, 191, 88, - 4, 237, 87, 38, 2, 1, 191, 88, 4, 237, 87, 38, 6, 1, 222, 142, 4, 237, - 87, 38, 2, 1, 222, 142, 4, 237, 87, 38, 6, 1, 222, 142, 4, 81, 106, 38, - 2, 1, 222, 142, 4, 81, 106, 38, 6, 1, 222, 142, 4, 106, 38, 2, 1, 222, - 142, 4, 106, 38, 6, 1, 249, 70, 155, 38, 2, 1, 249, 70, 155, 38, 6, 1, - 234, 104, 4, 237, 87, 38, 2, 1, 234, 104, 4, 237, 87, 38, 6, 34, 234, - 104, 231, 77, 38, 2, 34, 234, 104, 231, 77, 38, 6, 1, 210, 64, 4, 82, - 102, 38, 2, 1, 210, 64, 4, 82, 102, 38, 6, 1, 252, 67, 140, 38, 2, 1, - 252, 67, 140, 38, 6, 1, 234, 23, 4, 237, 87, 38, 2, 1, 234, 23, 4, 237, - 87, 38, 6, 1, 199, 146, 4, 237, 87, 38, 2, 1, 199, 146, 4, 237, 87, 38, - 6, 1, 201, 53, 66, 38, 2, 1, 201, 53, 66, 38, 6, 1, 201, 53, 126, 4, 106, - 38, 2, 1, 201, 53, 126, 4, 106, 38, 6, 1, 230, 105, 4, 237, 87, 38, 2, 1, - 230, 105, 4, 237, 87, 38, 6, 34, 199, 146, 197, 161, 38, 2, 34, 199, 146, - 197, 161, 38, 6, 1, 243, 128, 4, 237, 87, 38, 2, 1, 243, 128, 4, 237, 87, - 38, 6, 1, 243, 128, 4, 81, 106, 38, 2, 1, 243, 128, 4, 81, 106, 38, 6, 1, - 203, 82, 38, 2, 1, 203, 82, 38, 6, 1, 252, 67, 243, 127, 38, 2, 1, 252, - 67, 243, 127, 38, 6, 1, 252, 67, 243, 128, 4, 237, 87, 38, 2, 1, 252, 67, - 243, 128, 4, 237, 87, 38, 1, 210, 179, 38, 6, 1, 191, 63, 4, 248, 36, 38, - 2, 1, 191, 63, 4, 248, 36, 38, 6, 1, 222, 142, 4, 102, 38, 2, 1, 222, - 142, 4, 102, 38, 6, 1, 234, 141, 4, 199, 215, 38, 2, 1, 234, 141, 4, 199, - 215, 38, 6, 1, 234, 104, 4, 102, 38, 2, 1, 234, 104, 4, 102, 38, 6, 1, - 234, 104, 4, 199, 215, 38, 2, 1, 234, 104, 4, 199, 215, 38, 6, 1, 221, - 208, 243, 127, 38, 2, 1, 221, 208, 243, 127, 38, 6, 1, 234, 115, 4, 199, - 215, 38, 2, 1, 234, 115, 4, 199, 215, 38, 2, 1, 210, 179, 38, 6, 1, 42, - 4, 248, 36, 38, 2, 1, 42, 4, 248, 36, 38, 6, 1, 42, 4, 237, 42, 38, 2, 1, - 42, 4, 237, 42, 38, 6, 34, 42, 223, 226, 38, 2, 34, 42, 223, 226, 38, 6, - 1, 223, 227, 4, 248, 36, 38, 2, 1, 223, 227, 4, 248, 36, 38, 6, 1, 205, - 86, 38, 2, 1, 205, 86, 38, 6, 1, 205, 87, 4, 237, 42, 38, 2, 1, 205, 87, - 4, 237, 42, 38, 6, 1, 191, 63, 4, 237, 42, 38, 2, 1, 191, 63, 4, 237, 42, - 38, 6, 1, 191, 88, 4, 237, 42, 38, 2, 1, 191, 88, 4, 237, 42, 38, 6, 1, - 252, 67, 235, 32, 38, 2, 1, 252, 67, 235, 32, 38, 6, 1, 228, 74, 4, 217, - 146, 38, 2, 1, 228, 74, 4, 217, 146, 38, 6, 1, 228, 74, 4, 237, 42, 38, - 2, 1, 228, 74, 4, 237, 42, 38, 6, 1, 187, 4, 237, 42, 38, 2, 1, 187, 4, - 237, 42, 38, 6, 1, 249, 82, 74, 38, 2, 1, 249, 82, 74, 38, 6, 1, 249, 82, - 187, 4, 237, 42, 38, 2, 1, 249, 82, 187, 4, 237, 42, 38, 6, 1, 235, 15, - 4, 237, 42, 38, 2, 1, 235, 15, 4, 237, 42, 38, 6, 1, 126, 4, 217, 146, - 38, 2, 1, 126, 4, 217, 146, 38, 6, 1, 126, 4, 237, 42, 38, 2, 1, 126, 4, - 237, 42, 38, 6, 1, 126, 4, 55, 252, 46, 38, 2, 1, 126, 4, 55, 252, 46, - 38, 6, 1, 243, 128, 4, 237, 42, 38, 2, 1, 243, 128, 4, 237, 42, 38, 6, 1, - 231, 78, 4, 237, 87, 38, 2, 1, 231, 78, 4, 237, 87, 38, 6, 1, 192, 59, 4, - 237, 42, 38, 2, 1, 192, 59, 4, 237, 42, 38, 6, 1, 231, 78, 4, 201, 28, - 23, 102, 38, 2, 1, 231, 78, 4, 201, 28, 23, 102, 38, 6, 1, 230, 105, 4, - 102, 38, 2, 1, 230, 105, 4, 102, 38, 6, 1, 230, 105, 4, 106, 38, 2, 1, - 230, 105, 4, 106, 38, 6, 1, 221, 45, 237, 146, 38, 2, 1, 221, 45, 237, - 146, 38, 6, 1, 221, 45, 236, 192, 38, 2, 1, 221, 45, 236, 192, 38, 6, 1, - 221, 45, 191, 12, 38, 2, 1, 221, 45, 191, 12, 38, 6, 1, 221, 45, 235, 24, - 38, 2, 1, 221, 45, 235, 24, 38, 6, 1, 221, 45, 219, 76, 38, 2, 1, 221, - 45, 219, 76, 38, 6, 1, 221, 45, 213, 150, 38, 2, 1, 221, 45, 213, 150, - 38, 6, 1, 221, 45, 202, 115, 38, 2, 1, 221, 45, 202, 115, 38, 6, 1, 221, - 45, 198, 116, 38, 2, 1, 221, 45, 198, 116, 38, 6, 1, 207, 18, 191, 87, - 38, 2, 1, 207, 18, 191, 87, 38, 6, 1, 234, 141, 4, 102, 38, 2, 1, 234, - 141, 4, 102, 38, 6, 1, 219, 159, 38, 2, 1, 219, 159, 38, 6, 1, 207, 6, - 38, 2, 1, 207, 6, 38, 6, 1, 192, 129, 38, 2, 1, 192, 129, 38, 6, 1, 208, - 96, 38, 2, 1, 208, 96, 38, 6, 1, 193, 125, 38, 2, 1, 193, 125, 38, 6, 1, - 251, 188, 155, 38, 2, 1, 251, 188, 155, 38, 6, 1, 234, 141, 4, 82, 102, - 38, 2, 1, 234, 141, 4, 82, 102, 38, 6, 1, 234, 104, 4, 82, 102, 38, 2, 1, - 234, 104, 4, 82, 102, 38, 6, 1, 210, 64, 4, 237, 87, 38, 2, 1, 210, 64, - 4, 237, 87, 38, 6, 1, 203, 83, 4, 237, 87, 38, 2, 1, 203, 83, 4, 237, 87, - 38, 6, 1, 234, 104, 4, 45, 102, 38, 2, 1, 234, 104, 4, 45, 102, 38, 6, 1, - 235, 16, 38, 2, 1, 235, 16, 38, 6, 1, 237, 195, 38, 2, 1, 237, 195, 38, - 6, 1, 234, 141, 4, 237, 87, 38, 2, 1, 234, 141, 4, 237, 87, 250, 249, 6, - 1, 250, 128, 250, 249, 6, 1, 248, 229, 250, 249, 6, 1, 231, 40, 250, 249, - 6, 1, 238, 32, 250, 249, 6, 1, 234, 195, 250, 249, 6, 1, 191, 123, 250, - 249, 6, 1, 234, 173, 250, 249, 6, 1, 233, 255, 250, 249, 6, 1, 159, 250, - 249, 6, 1, 191, 62, 250, 249, 6, 1, 223, 131, 250, 249, 6, 1, 219, 80, - 250, 249, 6, 1, 192, 212, 250, 249, 6, 1, 247, 160, 250, 249, 6, 1, 221, - 251, 250, 249, 6, 1, 229, 23, 250, 249, 6, 1, 223, 32, 250, 249, 6, 1, - 231, 88, 250, 249, 6, 1, 243, 117, 250, 249, 6, 1, 216, 186, 250, 249, 6, - 1, 192, 33, 250, 249, 6, 1, 212, 253, 250, 249, 6, 1, 203, 165, 250, 249, - 6, 1, 195, 24, 250, 249, 6, 1, 247, 1, 250, 249, 6, 1, 210, 41, 250, 249, - 6, 1, 222, 247, 250, 249, 6, 1, 165, 250, 249, 6, 1, 205, 39, 250, 249, - 6, 1, 195, 74, 250, 249, 6, 1, 198, 119, 250, 249, 6, 1, 207, 71, 250, - 249, 6, 1, 242, 99, 250, 249, 6, 1, 192, 17, 250, 249, 6, 1, 209, 114, - 250, 249, 6, 1, 222, 6, 250, 249, 6, 1, 211, 136, 250, 249, 6, 1, 233, - 46, 250, 249, 52, 1, 45, 132, 206, 188, 250, 249, 251, 49, 250, 249, 234, - 107, 77, 250, 249, 233, 216, 77, 250, 249, 242, 74, 250, 249, 208, 13, - 77, 250, 249, 252, 68, 77, 250, 249, 2, 1, 153, 250, 128, 250, 249, 2, 1, - 250, 128, 250, 249, 2, 1, 248, 229, 250, 249, 2, 1, 231, 40, 250, 249, 2, - 1, 238, 32, 250, 249, 2, 1, 234, 195, 250, 249, 2, 1, 191, 123, 250, 249, - 2, 1, 234, 173, 250, 249, 2, 1, 233, 255, 250, 249, 2, 1, 159, 250, 249, - 2, 1, 191, 62, 250, 249, 2, 1, 223, 131, 250, 249, 2, 1, 219, 80, 250, - 249, 2, 1, 192, 212, 250, 249, 2, 1, 247, 160, 250, 249, 2, 1, 221, 251, - 250, 249, 2, 1, 229, 23, 250, 249, 2, 1, 223, 32, 250, 249, 2, 1, 231, - 88, 250, 249, 2, 1, 243, 117, 250, 249, 2, 1, 216, 186, 250, 249, 2, 1, - 192, 33, 250, 249, 2, 1, 212, 253, 250, 249, 2, 1, 203, 165, 250, 249, 2, - 1, 195, 24, 250, 249, 2, 1, 247, 1, 250, 249, 2, 1, 210, 41, 250, 249, 2, - 1, 222, 247, 250, 249, 2, 1, 165, 250, 249, 2, 1, 205, 39, 250, 249, 2, - 1, 195, 74, 250, 249, 2, 1, 198, 119, 250, 249, 2, 1, 207, 71, 250, 249, - 2, 1, 242, 99, 250, 249, 2, 1, 192, 17, 250, 249, 2, 1, 209, 114, 250, - 249, 2, 1, 222, 6, 250, 249, 2, 1, 211, 136, 250, 249, 2, 1, 233, 46, - 250, 249, 2, 34, 234, 196, 192, 17, 250, 249, 2, 1, 11, 4, 106, 250, 249, - 232, 80, 201, 63, 250, 249, 228, 88, 206, 207, 250, 249, 233, 251, 56, - 219, 223, 250, 249, 233, 251, 56, 250, 249, 235, 110, 56, 136, 252, 61, - 233, 246, 136, 252, 61, 205, 40, 136, 252, 61, 203, 141, 136, 252, 61, - 191, 99, 208, 78, 136, 252, 61, 191, 99, 231, 230, 136, 252, 61, 198, - 134, 136, 252, 61, 207, 15, 136, 252, 61, 191, 97, 136, 252, 61, 210, 97, - 136, 252, 61, 192, 48, 136, 252, 61, 199, 56, 136, 252, 61, 231, 139, - 136, 252, 61, 231, 140, 215, 110, 136, 252, 61, 231, 137, 136, 252, 61, - 208, 80, 210, 130, 136, 252, 61, 199, 103, 231, 158, 136, 252, 61, 210, - 69, 136, 252, 61, 250, 173, 230, 85, 136, 252, 61, 215, 121, 136, 252, - 61, 217, 117, 136, 252, 61, 216, 175, 136, 252, 61, 216, 176, 222, 7, - 136, 252, 61, 237, 222, 136, 252, 61, 208, 91, 136, 252, 61, 199, 103, - 208, 73, 136, 252, 61, 192, 61, 248, 230, 191, 247, 136, 252, 61, 211, - 117, 136, 252, 61, 223, 183, 136, 252, 61, 237, 123, 136, 252, 61, 191, - 19, 136, 87, 217, 34, 243, 10, 136, 209, 62, 203, 85, 136, 209, 62, 230, - 8, 205, 40, 136, 209, 62, 230, 8, 210, 88, 136, 209, 62, 230, 8, 208, 84, - 136, 209, 62, 229, 119, 136, 209, 62, 197, 158, 136, 209, 62, 205, 40, - 136, 209, 62, 210, 88, 136, 209, 62, 208, 84, 136, 209, 62, 229, 7, 136, - 209, 62, 229, 8, 230, 10, 40, 195, 158, 136, 209, 62, 208, 18, 136, 209, - 62, 238, 17, 211, 57, 217, 70, 136, 209, 62, 216, 164, 136, 208, 152, - 217, 67, 136, 209, 62, 207, 161, 136, 208, 152, 210, 99, 136, 209, 62, - 203, 70, 236, 140, 136, 209, 62, 202, 175, 236, 140, 136, 208, 152, 202, - 33, 210, 90, 136, 87, 116, 236, 140, 136, 87, 110, 236, 140, 136, 208, - 152, 212, 131, 230, 84, 136, 209, 62, 208, 85, 208, 78, 136, 1, 251, 192, - 136, 1, 248, 214, 136, 1, 231, 38, 136, 1, 237, 253, 136, 1, 229, 245, - 136, 1, 195, 158, 136, 1, 191, 91, 136, 1, 229, 186, 136, 1, 199, 73, - 136, 1, 191, 250, 136, 1, 53, 222, 106, 136, 1, 222, 106, 136, 1, 220, - 27, 136, 1, 53, 216, 193, 136, 1, 216, 193, 136, 1, 53, 212, 130, 136, 1, - 212, 130, 136, 1, 205, 148, 136, 1, 250, 126, 136, 1, 53, 210, 63, 136, - 1, 210, 63, 136, 1, 53, 197, 163, 136, 1, 197, 163, 136, 1, 208, 42, 136, - 1, 207, 38, 136, 1, 203, 69, 136, 1, 199, 162, 136, 191, 251, 197, 241, + 173, 248, 55, 81, 219, 114, 50, 238, 173, 248, 55, 198, 152, 213, 39, + 201, 248, 223, 95, 233, 218, 77, 247, 26, 56, 209, 10, 56, 238, 172, 56, + 192, 71, 56, 248, 24, 164, 205, 55, 56, 237, 44, 239, 8, 56, 233, 42, + 211, 52, 223, 146, 219, 221, 55, 251, 118, 207, 254, 77, 213, 14, 56, + 202, 33, 228, 90, 207, 79, 56, 217, 148, 237, 127, 56, 209, 82, 56, 200, + 182, 109, 200, 182, 138, 252, 49, 252, 62, 216, 93, 56, 209, 144, 56, 82, + 236, 142, 247, 37, 200, 182, 107, 217, 42, 211, 52, 223, 146, 206, 204, + 55, 251, 118, 207, 254, 77, 193, 246, 232, 120, 91, 208, 24, 193, 246, + 232, 120, 91, 230, 72, 193, 246, 232, 120, 115, 208, 22, 223, 95, 208, + 15, 77, 8, 6, 1, 42, 4, 230, 212, 8, 6, 1, 42, 4, 252, 48, 8, 6, 1, 42, + 4, 243, 3, 8, 6, 1, 42, 4, 198, 152, 8, 6, 1, 42, 4, 237, 44, 8, 6, 1, + 42, 4, 206, 190, 58, 8, 6, 1, 252, 27, 8, 6, 1, 247, 196, 4, 247, 37, 8, + 6, 1, 235, 17, 4, 230, 212, 8, 6, 1, 235, 17, 4, 252, 48, 8, 6, 1, 235, + 17, 4, 243, 3, 8, 6, 1, 235, 17, 4, 237, 44, 8, 6, 1, 228, 76, 4, 230, + 212, 8, 6, 1, 228, 76, 4, 252, 48, 8, 6, 1, 228, 76, 4, 243, 3, 8, 6, 1, + 228, 76, 4, 237, 44, 8, 6, 1, 233, 250, 8, 6, 1, 215, 64, 4, 198, 152, 8, + 6, 1, 187, 4, 230, 212, 8, 6, 1, 187, 4, 252, 48, 8, 6, 1, 187, 4, 243, + 3, 8, 6, 1, 187, 4, 198, 152, 8, 6, 1, 187, 4, 237, 44, 215, 129, 56, 8, + 6, 1, 187, 4, 106, 8, 6, 1, 126, 4, 230, 212, 8, 6, 1, 126, 4, 252, 48, + 8, 6, 1, 126, 4, 243, 3, 8, 6, 1, 126, 4, 237, 44, 8, 6, 1, 192, 160, 4, + 252, 48, 8, 6, 1, 198, 233, 8, 2, 1, 203, 128, 206, 9, 8, 2, 1, 42, 4, + 230, 212, 8, 2, 1, 42, 4, 252, 48, 8, 2, 1, 42, 4, 243, 3, 8, 2, 1, 42, + 4, 198, 152, 8, 2, 1, 42, 4, 237, 44, 8, 2, 1, 42, 4, 206, 190, 58, 8, 2, + 1, 252, 27, 8, 2, 1, 247, 196, 4, 247, 37, 8, 2, 1, 235, 17, 4, 230, 212, + 8, 2, 1, 235, 17, 4, 252, 48, 8, 2, 1, 235, 17, 4, 243, 3, 8, 2, 1, 235, + 17, 4, 237, 44, 8, 2, 1, 228, 76, 4, 230, 212, 8, 2, 1, 228, 76, 4, 252, + 48, 8, 2, 1, 228, 76, 4, 243, 3, 8, 2, 1, 228, 76, 4, 237, 44, 8, 2, 1, + 233, 250, 8, 2, 1, 215, 64, 4, 198, 152, 8, 2, 1, 187, 4, 230, 212, 8, 2, + 1, 187, 4, 252, 48, 8, 2, 1, 187, 4, 243, 3, 8, 2, 1, 187, 4, 198, 152, + 8, 2, 1, 187, 4, 237, 44, 236, 202, 56, 8, 2, 1, 187, 4, 106, 8, 2, 1, + 126, 4, 230, 212, 8, 2, 1, 126, 4, 252, 48, 8, 2, 1, 126, 4, 243, 3, 8, + 2, 1, 126, 4, 237, 44, 8, 2, 1, 192, 160, 4, 252, 48, 8, 2, 1, 198, 233, + 8, 2, 1, 192, 160, 4, 237, 44, 8, 6, 1, 42, 4, 217, 148, 8, 2, 1, 42, 4, + 217, 148, 8, 6, 1, 42, 4, 248, 38, 8, 2, 1, 42, 4, 248, 38, 8, 6, 1, 42, + 4, 211, 140, 8, 2, 1, 42, 4, 211, 140, 8, 6, 1, 247, 196, 4, 252, 48, 8, + 2, 1, 247, 196, 4, 252, 48, 8, 6, 1, 247, 196, 4, 243, 3, 8, 2, 1, 247, + 196, 4, 243, 3, 8, 6, 1, 247, 196, 4, 75, 58, 8, 2, 1, 247, 196, 4, 75, + 58, 8, 6, 1, 247, 196, 4, 247, 94, 8, 2, 1, 247, 196, 4, 247, 94, 8, 6, + 1, 238, 130, 4, 247, 94, 8, 2, 1, 238, 130, 4, 247, 94, 8, 6, 1, 238, + 130, 4, 106, 8, 2, 1, 238, 130, 4, 106, 8, 6, 1, 235, 17, 4, 217, 148, 8, + 2, 1, 235, 17, 4, 217, 148, 8, 6, 1, 235, 17, 4, 248, 38, 8, 2, 1, 235, + 17, 4, 248, 38, 8, 6, 1, 235, 17, 4, 75, 58, 8, 2, 1, 235, 17, 4, 75, 58, + 8, 6, 1, 235, 17, 4, 211, 140, 8, 2, 1, 235, 17, 4, 211, 140, 8, 6, 1, + 235, 17, 4, 247, 94, 8, 2, 1, 235, 17, 4, 247, 94, 8, 6, 1, 232, 54, 4, + 243, 3, 8, 2, 1, 232, 54, 4, 243, 3, 8, 6, 1, 232, 54, 4, 248, 38, 8, 2, + 1, 232, 54, 4, 248, 38, 8, 6, 1, 232, 54, 4, 75, 58, 8, 2, 1, 232, 54, 4, + 75, 58, 8, 6, 1, 232, 54, 4, 247, 37, 8, 2, 1, 232, 54, 4, 247, 37, 8, 6, + 1, 230, 119, 4, 243, 3, 8, 2, 1, 230, 119, 4, 243, 3, 8, 6, 1, 230, 119, + 4, 106, 8, 2, 1, 230, 119, 4, 106, 8, 6, 1, 228, 76, 4, 198, 152, 8, 2, + 1, 228, 76, 4, 198, 152, 8, 6, 1, 228, 76, 4, 217, 148, 8, 2, 1, 228, 76, + 4, 217, 148, 8, 6, 1, 228, 76, 4, 248, 38, 8, 2, 1, 228, 76, 4, 248, 38, + 8, 6, 1, 228, 76, 4, 211, 140, 8, 2, 1, 228, 76, 4, 211, 140, 8, 6, 1, + 228, 76, 4, 75, 58, 8, 2, 1, 236, 141, 68, 8, 6, 34, 223, 199, 8, 2, 34, + 223, 199, 8, 6, 1, 223, 38, 4, 243, 3, 8, 2, 1, 223, 38, 4, 243, 3, 8, 6, + 1, 222, 155, 4, 247, 37, 8, 2, 1, 222, 155, 4, 247, 37, 8, 2, 1, 221, 10, + 8, 6, 1, 220, 145, 4, 252, 48, 8, 2, 1, 220, 145, 4, 252, 48, 8, 6, 1, + 220, 145, 4, 247, 37, 8, 2, 1, 220, 145, 4, 247, 37, 8, 6, 1, 220, 145, + 4, 247, 94, 8, 2, 1, 220, 145, 4, 247, 94, 8, 6, 1, 220, 145, 4, 82, 236, + 142, 8, 2, 1, 220, 145, 4, 82, 236, 142, 8, 6, 1, 220, 145, 4, 106, 8, 2, + 1, 220, 145, 4, 106, 8, 6, 1, 215, 64, 4, 252, 48, 8, 2, 1, 215, 64, 4, + 252, 48, 8, 6, 1, 215, 64, 4, 247, 37, 8, 2, 1, 215, 64, 4, 247, 37, 8, + 6, 1, 215, 64, 4, 247, 94, 8, 2, 1, 215, 64, 4, 247, 94, 8, 2, 1, 215, + 64, 208, 235, 247, 207, 251, 51, 8, 6, 1, 234, 90, 8, 2, 1, 234, 90, 8, + 6, 1, 187, 4, 217, 148, 8, 2, 1, 187, 4, 217, 148, 8, 6, 1, 187, 4, 248, + 38, 8, 2, 1, 187, 4, 248, 38, 8, 6, 1, 187, 4, 55, 252, 48, 8, 2, 1, 187, + 4, 55, 252, 48, 8, 6, 34, 211, 153, 8, 2, 34, 211, 153, 8, 6, 1, 207, + 224, 4, 252, 48, 8, 2, 1, 207, 224, 4, 252, 48, 8, 6, 1, 207, 224, 4, + 247, 37, 8, 2, 1, 207, 224, 4, 247, 37, 8, 6, 1, 207, 224, 4, 247, 94, 8, + 2, 1, 207, 224, 4, 247, 94, 8, 6, 1, 206, 10, 4, 252, 48, 8, 2, 1, 206, + 10, 4, 252, 48, 8, 6, 1, 206, 10, 4, 243, 3, 8, 2, 1, 206, 10, 4, 243, 3, + 8, 6, 1, 206, 10, 4, 247, 37, 8, 2, 1, 206, 10, 4, 247, 37, 8, 6, 1, 206, + 10, 4, 247, 94, 8, 2, 1, 206, 10, 4, 247, 94, 8, 6, 1, 200, 44, 4, 247, + 37, 8, 2, 1, 200, 44, 4, 247, 37, 8, 6, 1, 200, 44, 4, 247, 94, 8, 2, 1, + 200, 44, 4, 247, 94, 8, 6, 1, 200, 44, 4, 106, 8, 2, 1, 200, 44, 4, 106, + 8, 6, 1, 126, 4, 198, 152, 8, 2, 1, 126, 4, 198, 152, 8, 6, 1, 126, 4, + 217, 148, 8, 2, 1, 126, 4, 217, 148, 8, 6, 1, 126, 4, 248, 38, 8, 2, 1, + 126, 4, 248, 38, 8, 6, 1, 126, 4, 206, 190, 58, 8, 2, 1, 126, 4, 206, + 190, 58, 8, 6, 1, 126, 4, 55, 252, 48, 8, 2, 1, 126, 4, 55, 252, 48, 8, + 6, 1, 126, 4, 211, 140, 8, 2, 1, 126, 4, 211, 140, 8, 6, 1, 193, 225, 4, + 243, 3, 8, 2, 1, 193, 225, 4, 243, 3, 8, 6, 1, 192, 160, 4, 243, 3, 8, 2, + 1, 192, 160, 4, 243, 3, 8, 6, 1, 192, 160, 4, 237, 44, 8, 6, 1, 191, 167, + 4, 252, 48, 8, 2, 1, 191, 167, 4, 252, 48, 8, 6, 1, 191, 167, 4, 75, 58, + 8, 2, 1, 191, 167, 4, 75, 58, 8, 6, 1, 191, 167, 4, 247, 94, 8, 2, 1, + 191, 167, 4, 247, 94, 8, 2, 1, 180, 206, 9, 8, 2, 1, 78, 4, 106, 8, 6, 1, + 78, 4, 102, 8, 6, 1, 78, 4, 198, 51, 8, 2, 1, 78, 4, 198, 51, 8, 6, 1, + 163, 169, 8, 2, 1, 163, 169, 8, 6, 1, 211, 79, 74, 8, 6, 1, 247, 196, 4, + 102, 8, 2, 1, 247, 196, 4, 102, 8, 6, 1, 252, 2, 238, 129, 8, 6, 1, 238, + 130, 4, 102, 8, 6, 1, 238, 130, 4, 198, 51, 8, 2, 1, 238, 130, 4, 198, + 51, 8, 2, 1, 154, 237, 108, 8, 6, 1, 207, 19, 71, 8, 6, 1, 205, 87, 8, 6, + 1, 211, 79, 71, 8, 6, 1, 233, 178, 4, 102, 8, 2, 1, 233, 178, 4, 102, 8, + 6, 1, 232, 54, 4, 102, 8, 6, 1, 231, 213, 8, 2, 1, 228, 128, 8, 6, 1, + 223, 85, 8, 6, 1, 228, 76, 4, 106, 8, 6, 1, 222, 155, 4, 102, 8, 2, 1, + 222, 155, 4, 102, 8, 2, 1, 220, 145, 4, 164, 8, 2, 1, 220, 35, 4, 106, 8, + 6, 1, 154, 218, 170, 8, 6, 1, 215, 64, 4, 45, 102, 8, 2, 1, 215, 64, 4, + 180, 50, 219, 214, 8, 6, 1, 187, 4, 82, 198, 152, 8, 6, 1, 187, 4, 228, + 189, 8, 2, 1, 187, 4, 228, 189, 8, 6, 1, 211, 135, 8, 2, 1, 211, 135, 8, + 6, 1, 210, 239, 4, 102, 8, 2, 1, 210, 239, 4, 102, 8, 1, 191, 228, 8, 6, + 1, 163, 109, 8, 2, 1, 163, 109, 8, 6, 1, 234, 14, 8, 1, 207, 19, 234, 15, + 219, 6, 8, 2, 1, 200, 44, 4, 210, 194, 102, 8, 6, 1, 200, 44, 4, 102, 8, + 2, 1, 200, 44, 4, 102, 8, 6, 1, 200, 44, 4, 207, 25, 102, 8, 6, 1, 126, + 4, 228, 189, 8, 2, 1, 126, 4, 228, 189, 8, 6, 1, 196, 70, 8, 6, 1, 196, + 13, 4, 102, 8, 6, 1, 192, 160, 4, 102, 8, 2, 1, 192, 160, 4, 102, 8, 6, + 1, 191, 167, 4, 106, 8, 2, 1, 191, 167, 4, 106, 8, 6, 1, 233, 180, 8, 6, + 1, 233, 181, 207, 18, 8, 2, 1, 233, 181, 207, 18, 8, 2, 1, 233, 181, 4, + 199, 215, 8, 1, 105, 4, 106, 8, 6, 1, 163, 150, 8, 2, 1, 163, 150, 8, 1, + 223, 95, 231, 13, 201, 65, 4, 106, 8, 1, 192, 238, 8, 1, 237, 100, 242, + 233, 8, 1, 220, 5, 242, 233, 8, 1, 251, 152, 242, 233, 8, 1, 207, 25, + 242, 233, 8, 6, 1, 235, 39, 4, 247, 94, 8, 6, 1, 238, 130, 4, 2, 1, 191, + 167, 4, 247, 94, 8, 2, 1, 235, 39, 4, 247, 94, 8, 6, 1, 219, 79, 8, 6, 1, + 220, 145, 4, 2, 1, 223, 37, 8, 2, 1, 219, 79, 8, 6, 1, 213, 160, 8, 6, 1, + 215, 64, 4, 2, 1, 223, 37, 8, 2, 1, 213, 160, 8, 6, 1, 42, 4, 247, 94, 8, + 2, 1, 42, 4, 247, 94, 8, 6, 1, 228, 76, 4, 247, 94, 8, 2, 1, 228, 76, 4, + 247, 94, 8, 6, 1, 187, 4, 247, 94, 8, 2, 1, 187, 4, 247, 94, 8, 6, 1, + 126, 4, 247, 94, 8, 2, 1, 126, 4, 247, 94, 8, 6, 1, 126, 4, 237, 45, 23, + 217, 148, 8, 2, 1, 126, 4, 237, 45, 23, 217, 148, 8, 6, 1, 126, 4, 237, + 45, 23, 252, 48, 8, 2, 1, 126, 4, 237, 45, 23, 252, 48, 8, 6, 1, 126, 4, + 237, 45, 23, 247, 94, 8, 2, 1, 126, 4, 237, 45, 23, 247, 94, 8, 6, 1, + 126, 4, 237, 45, 23, 230, 212, 8, 2, 1, 126, 4, 237, 45, 23, 230, 212, 8, + 2, 1, 154, 71, 8, 6, 1, 42, 4, 237, 45, 23, 217, 148, 8, 2, 1, 42, 4, + 237, 45, 23, 217, 148, 8, 6, 1, 42, 4, 75, 93, 23, 217, 148, 8, 2, 1, 42, + 4, 75, 93, 23, 217, 148, 8, 6, 1, 252, 28, 4, 217, 148, 8, 2, 1, 252, 28, + 4, 217, 148, 8, 6, 1, 232, 54, 4, 106, 8, 2, 1, 232, 54, 4, 106, 8, 6, 1, + 232, 54, 4, 247, 94, 8, 2, 1, 232, 54, 4, 247, 94, 8, 6, 1, 222, 155, 4, + 247, 94, 8, 2, 1, 222, 155, 4, 247, 94, 8, 6, 1, 187, 4, 211, 140, 8, 2, + 1, 187, 4, 211, 140, 8, 6, 1, 187, 4, 211, 141, 23, 217, 148, 8, 2, 1, + 187, 4, 211, 141, 23, 217, 148, 8, 6, 1, 233, 181, 4, 247, 94, 8, 2, 1, + 233, 181, 4, 247, 94, 8, 2, 1, 223, 38, 4, 247, 94, 8, 6, 1, 235, 38, 8, + 6, 1, 238, 130, 4, 2, 1, 191, 166, 8, 2, 1, 235, 38, 8, 6, 1, 232, 54, 4, + 252, 48, 8, 2, 1, 232, 54, 4, 252, 48, 8, 6, 1, 228, 125, 8, 6, 1, 192, + 238, 8, 6, 1, 215, 64, 4, 230, 212, 8, 2, 1, 215, 64, 4, 230, 212, 8, 6, + 1, 42, 4, 206, 190, 93, 23, 252, 48, 8, 2, 1, 42, 4, 206, 190, 93, 23, + 252, 48, 8, 6, 1, 252, 28, 4, 252, 48, 8, 2, 1, 252, 28, 4, 252, 48, 8, + 6, 1, 187, 4, 201, 29, 23, 252, 48, 8, 2, 1, 187, 4, 201, 29, 23, 252, + 48, 8, 6, 1, 42, 4, 55, 230, 212, 8, 2, 1, 42, 4, 55, 230, 212, 8, 6, 1, + 42, 4, 223, 95, 248, 38, 8, 2, 1, 42, 4, 223, 95, 248, 38, 8, 6, 1, 235, + 17, 4, 55, 230, 212, 8, 2, 1, 235, 17, 4, 55, 230, 212, 8, 6, 1, 235, 17, + 4, 223, 95, 248, 38, 8, 2, 1, 235, 17, 4, 223, 95, 248, 38, 8, 6, 1, 228, + 76, 4, 55, 230, 212, 8, 2, 1, 228, 76, 4, 55, 230, 212, 8, 6, 1, 228, 76, + 4, 223, 95, 248, 38, 8, 2, 1, 228, 76, 4, 223, 95, 248, 38, 8, 6, 1, 187, + 4, 55, 230, 212, 8, 2, 1, 187, 4, 55, 230, 212, 8, 6, 1, 187, 4, 223, 95, + 248, 38, 8, 2, 1, 187, 4, 223, 95, 248, 38, 8, 6, 1, 207, 224, 4, 55, + 230, 212, 8, 2, 1, 207, 224, 4, 55, 230, 212, 8, 6, 1, 207, 224, 4, 223, + 95, 248, 38, 8, 2, 1, 207, 224, 4, 223, 95, 248, 38, 8, 6, 1, 126, 4, 55, + 230, 212, 8, 2, 1, 126, 4, 55, 230, 212, 8, 6, 1, 126, 4, 223, 95, 248, + 38, 8, 2, 1, 126, 4, 223, 95, 248, 38, 8, 6, 1, 206, 10, 4, 242, 77, 60, + 8, 2, 1, 206, 10, 4, 242, 77, 60, 8, 6, 1, 200, 44, 4, 242, 77, 60, 8, 2, + 1, 200, 44, 4, 242, 77, 60, 8, 6, 1, 191, 248, 8, 2, 1, 191, 248, 8, 6, + 1, 230, 119, 4, 247, 94, 8, 2, 1, 230, 119, 4, 247, 94, 8, 6, 1, 215, 64, + 4, 180, 50, 219, 214, 8, 2, 1, 238, 130, 4, 238, 177, 8, 6, 1, 211, 21, + 8, 2, 1, 211, 21, 8, 6, 1, 191, 167, 4, 102, 8, 2, 1, 191, 167, 4, 102, + 8, 6, 1, 42, 4, 75, 58, 8, 2, 1, 42, 4, 75, 58, 8, 6, 1, 235, 17, 4, 247, + 37, 8, 2, 1, 235, 17, 4, 247, 37, 8, 6, 1, 187, 4, 237, 45, 23, 217, 148, + 8, 2, 1, 187, 4, 237, 45, 23, 217, 148, 8, 6, 1, 187, 4, 198, 153, 23, + 217, 148, 8, 2, 1, 187, 4, 198, 153, 23, 217, 148, 8, 6, 1, 187, 4, 75, + 58, 8, 2, 1, 187, 4, 75, 58, 8, 6, 1, 187, 4, 75, 93, 23, 217, 148, 8, 2, + 1, 187, 4, 75, 93, 23, 217, 148, 8, 6, 1, 192, 160, 4, 217, 148, 8, 2, 1, + 192, 160, 4, 217, 148, 8, 2, 1, 220, 145, 4, 238, 177, 8, 2, 1, 215, 64, + 4, 238, 177, 8, 2, 1, 200, 44, 4, 238, 177, 8, 2, 1, 236, 141, 223, 37, + 8, 2, 1, 237, 203, 237, 4, 8, 2, 1, 208, 36, 237, 4, 8, 6, 1, 42, 4, 106, + 8, 6, 1, 247, 196, 4, 106, 8, 2, 1, 247, 196, 4, 106, 8, 6, 1, 220, 145, + 4, 164, 8, 6, 1, 200, 44, 4, 237, 41, 106, 8, 2, 1, 206, 10, 4, 200, 146, + 199, 215, 8, 2, 1, 191, 167, 4, 200, 146, 199, 215, 8, 6, 1, 231, 13, + 201, 64, 8, 2, 1, 231, 13, 201, 64, 8, 6, 1, 78, 4, 106, 8, 6, 1, 126, + 164, 8, 6, 1, 154, 196, 12, 8, 6, 1, 235, 17, 4, 106, 8, 2, 1, 235, 17, + 4, 106, 8, 6, 1, 223, 38, 4, 106, 8, 2, 1, 223, 38, 4, 106, 8, 6, 1, 2, + 208, 107, 4, 228, 253, 199, 215, 8, 2, 1, 208, 107, 4, 228, 253, 199, + 215, 8, 6, 1, 207, 224, 4, 106, 8, 2, 1, 207, 224, 4, 106, 8, 6, 1, 192, + 160, 4, 106, 8, 2, 1, 192, 160, 4, 106, 8, 2, 1, 154, 65, 8, 2, 1, 251, + 162, 8, 2, 1, 154, 251, 162, 8, 2, 1, 78, 4, 102, 8, 2, 1, 211, 79, 74, + 8, 2, 1, 247, 196, 4, 238, 177, 8, 2, 1, 238, 130, 4, 199, 215, 8, 2, 1, + 238, 130, 4, 102, 8, 2, 1, 207, 19, 71, 8, 2, 1, 205, 87, 8, 2, 1, 205, + 88, 4, 102, 8, 2, 1, 211, 79, 71, 8, 2, 1, 207, 19, 211, 79, 71, 8, 2, 1, + 207, 19, 211, 79, 235, 17, 4, 102, 8, 2, 1, 242, 221, 207, 19, 211, 79, + 71, 8, 2, 1, 236, 141, 223, 38, 4, 106, 8, 2, 1, 232, 54, 4, 102, 8, 2, + 1, 27, 232, 53, 8, 1, 2, 6, 232, 53, 8, 2, 1, 231, 213, 8, 2, 1, 207, + 142, 228, 189, 8, 2, 1, 154, 230, 118, 8, 2, 1, 230, 119, 4, 102, 8, 2, + 1, 229, 199, 4, 102, 8, 2, 1, 228, 76, 4, 106, 8, 2, 1, 223, 85, 8, 1, 2, + 6, 68, 8, 2, 1, 220, 145, 4, 82, 198, 152, 8, 2, 1, 220, 145, 4, 248, + 233, 8, 2, 1, 220, 145, 4, 207, 25, 102, 8, 2, 1, 219, 164, 8, 2, 1, 154, + 218, 170, 8, 2, 1, 154, 218, 171, 4, 180, 219, 214, 8, 2, 1, 218, 171, 4, + 102, 8, 2, 1, 215, 64, 4, 45, 102, 8, 2, 1, 215, 64, 4, 207, 25, 102, 8, + 1, 2, 6, 215, 63, 8, 2, 1, 249, 84, 74, 8, 1, 2, 6, 211, 153, 8, 2, 1, + 242, 221, 211, 112, 8, 2, 1, 209, 213, 8, 2, 1, 154, 146, 8, 2, 1, 154, + 207, 224, 4, 180, 219, 214, 8, 2, 1, 154, 207, 224, 4, 102, 8, 2, 1, 207, + 224, 4, 180, 219, 214, 8, 2, 1, 207, 224, 4, 199, 215, 8, 2, 1, 207, 224, + 4, 232, 235, 8, 2, 1, 207, 19, 207, 224, 4, 232, 235, 8, 1, 2, 6, 146, 8, + 1, 2, 6, 223, 95, 146, 8, 2, 1, 206, 10, 4, 102, 8, 2, 1, 234, 14, 8, 2, + 1, 236, 141, 223, 38, 4, 201, 29, 23, 102, 8, 2, 1, 201, 188, 207, 19, + 234, 14, 8, 2, 1, 234, 15, 4, 238, 177, 8, 2, 1, 154, 200, 43, 8, 2, 1, + 200, 44, 4, 207, 25, 102, 8, 2, 1, 126, 164, 8, 2, 1, 196, 70, 8, 2, 1, + 196, 13, 4, 102, 8, 2, 1, 154, 196, 12, 8, 2, 1, 154, 193, 224, 8, 2, 1, + 154, 192, 159, 8, 1, 2, 6, 192, 159, 8, 2, 1, 191, 167, 4, 207, 25, 102, + 8, 2, 1, 191, 167, 4, 238, 177, 8, 2, 1, 233, 180, 8, 2, 1, 233, 181, 4, + 238, 177, 8, 1, 231, 13, 201, 64, 8, 1, 209, 221, 195, 20, 232, 106, 8, + 1, 223, 95, 231, 13, 201, 64, 8, 1, 201, 37, 247, 195, 8, 1, 248, 174, + 242, 233, 8, 1, 2, 6, 250, 122, 8, 2, 1, 242, 221, 211, 79, 71, 8, 1, 2, + 6, 232, 54, 4, 102, 8, 1, 2, 6, 230, 118, 8, 2, 1, 223, 38, 4, 238, 214, + 8, 2, 1, 154, 222, 154, 8, 1, 2, 6, 172, 8, 2, 1, 208, 107, 4, 102, 8, 1, + 231, 13, 201, 65, 4, 106, 8, 1, 207, 19, 231, 13, 201, 65, 4, 106, 8, 2, + 1, 235, 39, 237, 4, 8, 2, 1, 237, 72, 237, 4, 8, 2, 1, 235, 39, 237, 5, + 4, 238, 177, 8, 2, 1, 197, 170, 237, 4, 8, 2, 1, 199, 79, 237, 4, 8, 2, + 1, 199, 152, 237, 5, 4, 238, 177, 8, 2, 1, 233, 39, 237, 4, 8, 2, 1, 218, + 229, 237, 4, 8, 2, 1, 218, 172, 237, 4, 8, 1, 248, 174, 210, 14, 8, 1, + 248, 182, 210, 14, 8, 2, 1, 154, 230, 119, 4, 232, 235, 8, 2, 1, 154, + 230, 119, 4, 232, 236, 23, 199, 215, 52, 1, 2, 230, 118, 52, 1, 2, 230, + 119, 4, 102, 52, 1, 2, 223, 37, 52, 1, 2, 146, 52, 1, 2, 154, 146, 52, 1, + 2, 154, 207, 224, 4, 102, 52, 1, 2, 6, 223, 95, 146, 52, 1, 2, 193, 224, + 52, 1, 2, 192, 159, 52, 1, 208, 217, 52, 1, 55, 208, 217, 52, 1, 154, + 242, 76, 52, 1, 251, 51, 52, 1, 207, 19, 242, 76, 52, 1, 50, 132, 206, + 189, 52, 1, 45, 132, 206, 189, 52, 1, 231, 13, 201, 64, 52, 1, 207, 19, + 231, 13, 201, 64, 52, 1, 45, 250, 237, 52, 1, 50, 250, 237, 52, 1, 133, + 250, 237, 52, 1, 144, 250, 237, 52, 1, 243, 4, 252, 62, 247, 94, 52, 1, + 81, 219, 114, 52, 1, 217, 148, 52, 1, 252, 49, 252, 62, 52, 1, 230, 213, + 252, 62, 52, 1, 130, 81, 219, 114, 52, 1, 130, 217, 148, 52, 1, 130, 230, + 213, 252, 62, 52, 1, 130, 252, 49, 252, 62, 52, 1, 197, 238, 242, 85, 52, + 1, 132, 197, 238, 242, 85, 52, 1, 247, 22, 50, 132, 206, 189, 52, 1, 247, + 22, 45, 132, 206, 189, 52, 1, 133, 199, 228, 52, 1, 144, 199, 228, 52, 1, + 108, 56, 52, 1, 216, 37, 56, 248, 38, 75, 58, 206, 190, 58, 211, 140, 2, + 198, 152, 55, 252, 49, 252, 62, 52, 1, 207, 3, 102, 52, 1, 238, 220, 252, + 62, 52, 1, 2, 231, 213, 52, 1, 2, 172, 52, 1, 2, 206, 9, 52, 1, 2, 192, + 235, 52, 1, 2, 207, 19, 231, 13, 201, 64, 52, 1, 233, 202, 163, 164, 52, + 1, 137, 163, 164, 52, 1, 216, 89, 163, 164, 52, 1, 130, 163, 164, 52, 1, + 233, 201, 163, 164, 52, 1, 192, 22, 237, 97, 163, 77, 52, 1, 192, 107, + 237, 97, 163, 77, 52, 1, 195, 18, 52, 1, 196, 109, 52, 1, 55, 251, 51, + 52, 1, 130, 144, 250, 237, 52, 1, 130, 133, 250, 237, 52, 1, 130, 45, + 250, 237, 52, 1, 130, 50, 250, 237, 52, 1, 130, 206, 189, 52, 1, 82, 230, + 213, 252, 62, 52, 1, 82, 55, 230, 213, 252, 62, 52, 1, 82, 55, 252, 49, + 252, 62, 52, 1, 130, 198, 152, 52, 1, 207, 149, 242, 85, 52, 1, 248, 251, + 137, 198, 79, 52, 1, 234, 97, 137, 198, 79, 52, 1, 248, 251, 130, 198, + 79, 52, 1, 234, 97, 130, 198, 79, 52, 1, 203, 105, 52, 1, 211, 79, 203, + 105, 52, 1, 130, 45, 57, 33, 230, 213, 252, 62, 33, 252, 49, 252, 62, 33, + 243, 4, 252, 62, 33, 198, 152, 33, 217, 148, 33, 211, 0, 33, 248, 38, 33, + 75, 58, 33, 237, 44, 33, 228, 253, 58, 33, 206, 190, 58, 33, 55, 252, 49, + 252, 62, 33, 247, 94, 33, 81, 219, 115, 58, 33, 55, 81, 219, 115, 58, 33, + 55, 230, 213, 252, 62, 33, 247, 121, 33, 223, 95, 248, 38, 33, 154, 242, + 77, 58, 33, 242, 77, 58, 33, 207, 19, 242, 77, 58, 33, 242, 77, 93, 179, + 33, 230, 213, 252, 63, 60, 33, 252, 49, 252, 63, 60, 33, 45, 199, 229, + 60, 33, 50, 199, 229, 60, 33, 45, 251, 118, 58, 33, 228, 189, 33, 45, + 132, 206, 190, 60, 33, 133, 199, 229, 60, 33, 144, 199, 229, 60, 33, 108, + 3, 60, 33, 216, 37, 3, 60, 33, 210, 192, 228, 253, 60, 33, 207, 25, 228, + 253, 60, 33, 75, 60, 33, 237, 45, 60, 33, 206, 190, 60, 33, 242, 77, 60, + 33, 247, 37, 33, 211, 140, 33, 81, 219, 115, 60, 33, 248, 31, 60, 33, + 223, 95, 55, 251, 17, 60, 33, 247, 95, 60, 33, 243, 4, 252, 63, 60, 33, + 248, 39, 60, 33, 223, 95, 248, 39, 60, 33, 198, 153, 60, 33, 217, 149, + 60, 33, 130, 219, 114, 33, 55, 130, 219, 114, 33, 198, 153, 211, 1, 33, + 203, 41, 201, 29, 211, 1, 33, 180, 201, 29, 211, 1, 33, 203, 41, 202, 25, + 211, 1, 33, 180, 202, 25, 211, 1, 33, 50, 132, 206, 190, 60, 33, 223, 95, + 248, 31, 60, 33, 51, 60, 33, 205, 63, 60, 33, 192, 236, 58, 33, 81, 198, + 152, 33, 55, 211, 0, 33, 230, 213, 163, 77, 33, 252, 49, 163, 77, 33, 35, + 210, 6, 33, 35, 221, 32, 33, 35, 237, 38, 198, 60, 33, 35, 191, 233, 33, + 248, 31, 58, 33, 234, 45, 3, 60, 33, 55, 81, 219, 115, 60, 33, 45, 251, + 118, 60, 33, 213, 14, 198, 153, 58, 33, 229, 3, 58, 33, 251, 167, 234, + 47, 119, 58, 33, 45, 50, 64, 60, 33, 196, 66, 64, 60, 33, 230, 219, 222, + 198, 33, 50, 250, 238, 58, 33, 45, 132, 206, 190, 58, 33, 233, 36, 33, + 192, 236, 60, 33, 45, 250, 238, 60, 33, 50, 250, 238, 60, 33, 50, 250, + 238, 23, 133, 250, 238, 60, 33, 50, 132, 206, 190, 58, 33, 75, 93, 179, + 33, 250, 196, 60, 33, 55, 206, 190, 60, 33, 191, 21, 58, 33, 55, 248, 39, + 60, 33, 55, 248, 38, 33, 55, 217, 148, 33, 55, 217, 149, 60, 33, 55, 198, + 152, 33, 55, 223, 95, 248, 38, 33, 55, 96, 64, 60, 33, 8, 2, 1, 65, 33, + 8, 2, 1, 71, 33, 8, 2, 1, 68, 33, 8, 2, 1, 74, 33, 8, 2, 1, 66, 33, 8, 2, + 1, 247, 195, 33, 8, 2, 1, 238, 129, 33, 8, 2, 1, 230, 118, 33, 8, 2, 1, + 218, 170, 33, 8, 2, 1, 146, 33, 8, 2, 1, 200, 43, 33, 8, 2, 1, 196, 12, + 33, 8, 2, 1, 192, 235, 35, 6, 1, 229, 187, 35, 2, 1, 229, 187, 35, 6, 1, + 251, 16, 205, 146, 35, 2, 1, 251, 16, 205, 146, 35, 212, 136, 56, 35, + 110, 212, 136, 56, 35, 6, 1, 210, 173, 237, 12, 35, 2, 1, 210, 173, 237, + 12, 35, 191, 233, 35, 2, 207, 19, 218, 208, 202, 198, 113, 35, 2, 235, + 140, 218, 208, 202, 198, 113, 35, 2, 207, 19, 235, 140, 218, 208, 202, + 198, 113, 35, 208, 15, 77, 35, 6, 1, 191, 240, 35, 198, 60, 35, 237, 38, + 198, 60, 35, 6, 1, 251, 163, 4, 198, 60, 35, 251, 96, 199, 108, 35, 6, 1, + 234, 50, 4, 198, 60, 35, 6, 1, 234, 0, 4, 198, 60, 35, 6, 1, 223, 86, 4, + 198, 60, 35, 6, 1, 211, 110, 4, 198, 60, 35, 6, 1, 196, 71, 4, 198, 60, + 35, 6, 1, 211, 113, 4, 198, 60, 35, 2, 1, 223, 86, 4, 237, 38, 23, 198, + 60, 35, 6, 1, 251, 162, 35, 6, 1, 248, 214, 35, 6, 1, 231, 213, 35, 6, 1, + 237, 108, 35, 6, 1, 234, 49, 35, 6, 1, 191, 76, 35, 6, 1, 233, 255, 35, + 6, 1, 199, 15, 35, 6, 1, 223, 85, 35, 6, 1, 222, 74, 35, 6, 1, 220, 33, + 35, 6, 1, 215, 157, 35, 6, 1, 212, 180, 35, 6, 1, 192, 207, 35, 6, 1, + 211, 109, 35, 6, 1, 209, 187, 35, 6, 1, 207, 4, 35, 6, 1, 202, 197, 35, + 6, 1, 199, 166, 35, 6, 1, 196, 70, 35, 6, 1, 209, 213, 35, 6, 1, 243, 97, + 35, 6, 1, 208, 178, 35, 6, 1, 211, 112, 35, 6, 1, 223, 86, 4, 237, 37, + 35, 6, 1, 196, 71, 4, 237, 37, 35, 2, 1, 251, 163, 4, 198, 60, 35, 2, 1, + 234, 50, 4, 198, 60, 35, 2, 1, 234, 0, 4, 198, 60, 35, 2, 1, 223, 86, 4, + 198, 60, 35, 2, 1, 196, 71, 4, 237, 38, 23, 198, 60, 35, 2, 1, 251, 162, + 35, 2, 1, 248, 214, 35, 2, 1, 231, 213, 35, 2, 1, 237, 108, 35, 2, 1, + 234, 49, 35, 2, 1, 191, 76, 35, 2, 1, 233, 255, 35, 2, 1, 199, 15, 35, 2, + 1, 223, 85, 35, 2, 1, 222, 74, 35, 2, 1, 220, 33, 35, 2, 1, 215, 157, 35, + 2, 1, 212, 180, 35, 2, 1, 192, 207, 35, 2, 1, 211, 109, 35, 2, 1, 209, + 187, 35, 2, 1, 207, 4, 35, 2, 1, 53, 202, 197, 35, 2, 1, 202, 197, 35, 2, + 1, 199, 166, 35, 2, 1, 196, 70, 35, 2, 1, 209, 213, 35, 2, 1, 243, 97, + 35, 2, 1, 208, 178, 35, 2, 1, 211, 112, 35, 2, 1, 223, 86, 4, 237, 37, + 35, 2, 1, 196, 71, 4, 237, 37, 35, 2, 1, 211, 110, 4, 198, 60, 35, 2, 1, + 196, 71, 4, 198, 60, 35, 2, 1, 211, 113, 4, 198, 60, 35, 6, 222, 105, + 113, 35, 248, 215, 113, 35, 199, 16, 113, 35, 196, 71, 4, 228, 253, 113, + 35, 196, 71, 4, 252, 49, 23, 228, 253, 113, 35, 196, 71, 4, 237, 45, 23, + 228, 253, 113, 35, 209, 214, 113, 35, 209, 188, 113, 35, 222, 105, 113, + 35, 1, 251, 16, 221, 37, 35, 2, 1, 251, 16, 221, 37, 35, 1, 201, 74, 35, + 2, 1, 201, 74, 35, 1, 237, 12, 35, 2, 1, 237, 12, 35, 1, 221, 37, 35, 2, + 1, 221, 37, 35, 1, 205, 146, 35, 2, 1, 205, 146, 94, 6, 1, 203, 106, 94, + 2, 1, 203, 106, 94, 6, 1, 233, 46, 94, 2, 1, 233, 46, 94, 6, 1, 221, 197, + 94, 2, 1, 221, 197, 94, 6, 1, 228, 244, 94, 2, 1, 228, 244, 94, 6, 1, + 231, 208, 94, 2, 1, 231, 208, 94, 6, 1, 203, 72, 94, 2, 1, 203, 72, 94, + 6, 1, 237, 124, 94, 2, 1, 237, 124, 35, 222, 75, 113, 35, 207, 5, 113, + 35, 218, 208, 202, 198, 113, 35, 1, 191, 240, 35, 6, 199, 16, 113, 35, + 218, 208, 234, 50, 113, 35, 207, 19, 218, 208, 234, 50, 113, 35, 6, 1, + 203, 57, 35, 2, 1, 203, 57, 35, 6, 218, 208, 202, 198, 113, 35, 6, 1, + 205, 143, 35, 2, 1, 205, 143, 35, 207, 5, 4, 201, 29, 113, 35, 6, 207, + 19, 218, 208, 202, 198, 113, 35, 6, 235, 140, 218, 208, 202, 198, 113, + 35, 6, 207, 19, 235, 140, 218, 208, 202, 198, 113, 38, 6, 1, 223, 229, 4, + 230, 212, 38, 6, 1, 223, 90, 38, 6, 1, 236, 194, 38, 6, 1, 231, 22, 38, + 6, 1, 196, 125, 223, 228, 38, 6, 1, 235, 34, 38, 6, 1, 247, 205, 68, 38, + 6, 1, 192, 33, 38, 6, 1, 223, 12, 38, 6, 1, 219, 78, 38, 6, 1, 213, 152, + 38, 6, 1, 197, 155, 38, 6, 1, 221, 105, 38, 6, 1, 228, 76, 4, 230, 212, + 38, 6, 1, 203, 41, 66, 38, 6, 1, 235, 30, 38, 6, 1, 65, 38, 6, 1, 249, + 19, 38, 6, 1, 195, 153, 38, 6, 1, 231, 79, 38, 6, 1, 237, 148, 38, 6, 1, + 223, 228, 38, 6, 1, 191, 62, 38, 6, 1, 191, 87, 38, 6, 1, 68, 38, 6, 1, + 203, 41, 68, 38, 6, 1, 155, 38, 6, 1, 234, 142, 38, 6, 1, 234, 116, 38, + 6, 1, 234, 105, 38, 6, 1, 74, 38, 6, 1, 210, 65, 38, 6, 1, 234, 36, 38, + 6, 1, 234, 24, 38, 6, 1, 199, 145, 38, 6, 1, 66, 38, 6, 1, 234, 183, 38, + 6, 1, 140, 38, 6, 1, 197, 161, 38, 6, 1, 243, 129, 38, 6, 1, 203, 166, + 38, 6, 1, 203, 117, 38, 6, 1, 230, 19, 56, 38, 6, 1, 192, 58, 38, 6, 1, + 202, 33, 56, 38, 6, 1, 71, 38, 6, 1, 191, 225, 38, 6, 1, 170, 38, 2, 1, + 65, 38, 2, 1, 249, 19, 38, 2, 1, 195, 153, 38, 2, 1, 231, 79, 38, 2, 1, + 237, 148, 38, 2, 1, 223, 228, 38, 2, 1, 191, 62, 38, 2, 1, 191, 87, 38, + 2, 1, 68, 38, 2, 1, 203, 41, 68, 38, 2, 1, 155, 38, 2, 1, 234, 142, 38, + 2, 1, 234, 116, 38, 2, 1, 234, 105, 38, 2, 1, 74, 38, 2, 1, 210, 65, 38, + 2, 1, 234, 36, 38, 2, 1, 234, 24, 38, 2, 1, 199, 145, 38, 2, 1, 66, 38, + 2, 1, 234, 183, 38, 2, 1, 140, 38, 2, 1, 197, 161, 38, 2, 1, 243, 129, + 38, 2, 1, 203, 166, 38, 2, 1, 203, 117, 38, 2, 1, 230, 19, 56, 38, 2, 1, + 192, 58, 38, 2, 1, 202, 33, 56, 38, 2, 1, 71, 38, 2, 1, 191, 225, 38, 2, + 1, 170, 38, 2, 1, 223, 229, 4, 230, 212, 38, 2, 1, 223, 90, 38, 2, 1, + 236, 194, 38, 2, 1, 231, 22, 38, 2, 1, 196, 125, 223, 228, 38, 2, 1, 235, + 34, 38, 2, 1, 247, 205, 68, 38, 2, 1, 192, 33, 38, 2, 1, 223, 12, 38, 2, + 1, 219, 78, 38, 2, 1, 213, 152, 38, 2, 1, 197, 155, 38, 2, 1, 221, 105, + 38, 2, 1, 228, 76, 4, 230, 212, 38, 2, 1, 203, 41, 66, 38, 2, 1, 235, 30, + 38, 6, 1, 211, 112, 38, 2, 1, 211, 112, 38, 6, 1, 192, 95, 38, 2, 1, 192, + 95, 38, 6, 1, 223, 83, 71, 38, 2, 1, 223, 83, 71, 38, 6, 1, 219, 85, 191, + 190, 38, 2, 1, 219, 85, 191, 190, 38, 6, 1, 223, 83, 219, 85, 191, 190, + 38, 2, 1, 223, 83, 219, 85, 191, 190, 38, 6, 1, 248, 177, 191, 190, 38, + 2, 1, 248, 177, 191, 190, 38, 6, 1, 223, 83, 248, 177, 191, 190, 38, 2, + 1, 223, 83, 248, 177, 191, 190, 38, 6, 1, 220, 250, 38, 2, 1, 220, 250, + 38, 6, 1, 208, 178, 38, 2, 1, 208, 178, 38, 6, 1, 232, 230, 38, 2, 1, + 232, 230, 38, 6, 1, 223, 39, 38, 2, 1, 223, 39, 38, 6, 1, 223, 40, 4, 55, + 230, 213, 252, 62, 38, 2, 1, 223, 40, 4, 55, 230, 213, 252, 62, 38, 6, 1, + 196, 128, 38, 2, 1, 196, 128, 38, 6, 1, 206, 116, 211, 112, 38, 2, 1, + 206, 116, 211, 112, 38, 6, 1, 211, 113, 4, 198, 122, 38, 2, 1, 211, 113, + 4, 198, 122, 38, 6, 1, 211, 32, 38, 2, 1, 211, 32, 38, 6, 1, 221, 37, 38, + 2, 1, 221, 37, 38, 198, 229, 56, 33, 38, 198, 122, 33, 38, 210, 193, 33, + 38, 237, 215, 209, 77, 33, 38, 208, 172, 209, 77, 33, 38, 209, 56, 33, + 38, 228, 143, 198, 229, 56, 33, 38, 216, 50, 56, 38, 6, 1, 203, 41, 228, + 76, 4, 199, 215, 38, 2, 1, 203, 41, 228, 76, 4, 199, 215, 38, 6, 1, 204, + 22, 56, 38, 2, 1, 204, 22, 56, 38, 6, 1, 234, 37, 4, 198, 182, 38, 2, 1, + 234, 37, 4, 198, 182, 38, 6, 1, 231, 80, 4, 196, 69, 38, 2, 1, 231, 80, + 4, 196, 69, 38, 6, 1, 231, 80, 4, 106, 38, 2, 1, 231, 80, 4, 106, 38, 6, + 1, 231, 80, 4, 82, 102, 38, 2, 1, 231, 80, 4, 82, 102, 38, 6, 1, 191, 63, + 4, 237, 89, 38, 2, 1, 191, 63, 4, 237, 89, 38, 6, 1, 191, 88, 4, 237, 89, + 38, 2, 1, 191, 88, 4, 237, 89, 38, 6, 1, 222, 144, 4, 237, 89, 38, 2, 1, + 222, 144, 4, 237, 89, 38, 6, 1, 222, 144, 4, 81, 106, 38, 2, 1, 222, 144, + 4, 81, 106, 38, 6, 1, 222, 144, 4, 106, 38, 2, 1, 222, 144, 4, 106, 38, + 6, 1, 249, 72, 155, 38, 2, 1, 249, 72, 155, 38, 6, 1, 234, 106, 4, 237, + 89, 38, 2, 1, 234, 106, 4, 237, 89, 38, 6, 34, 234, 106, 231, 79, 38, 2, + 34, 234, 106, 231, 79, 38, 6, 1, 210, 66, 4, 82, 102, 38, 2, 1, 210, 66, + 4, 82, 102, 38, 6, 1, 252, 69, 140, 38, 2, 1, 252, 69, 140, 38, 6, 1, + 234, 25, 4, 237, 89, 38, 2, 1, 234, 25, 4, 237, 89, 38, 6, 1, 199, 146, + 4, 237, 89, 38, 2, 1, 199, 146, 4, 237, 89, 38, 6, 1, 201, 54, 66, 38, 2, + 1, 201, 54, 66, 38, 6, 1, 201, 54, 126, 4, 106, 38, 2, 1, 201, 54, 126, + 4, 106, 38, 6, 1, 230, 107, 4, 237, 89, 38, 2, 1, 230, 107, 4, 237, 89, + 38, 6, 34, 199, 146, 197, 161, 38, 2, 34, 199, 146, 197, 161, 38, 6, 1, + 243, 130, 4, 237, 89, 38, 2, 1, 243, 130, 4, 237, 89, 38, 6, 1, 243, 130, + 4, 81, 106, 38, 2, 1, 243, 130, 4, 81, 106, 38, 6, 1, 203, 83, 38, 2, 1, + 203, 83, 38, 6, 1, 252, 69, 243, 129, 38, 2, 1, 252, 69, 243, 129, 38, 6, + 1, 252, 69, 243, 130, 4, 237, 89, 38, 2, 1, 252, 69, 243, 130, 4, 237, + 89, 38, 1, 210, 181, 38, 6, 1, 191, 63, 4, 248, 38, 38, 2, 1, 191, 63, 4, + 248, 38, 38, 6, 1, 222, 144, 4, 102, 38, 2, 1, 222, 144, 4, 102, 38, 6, + 1, 234, 143, 4, 199, 215, 38, 2, 1, 234, 143, 4, 199, 215, 38, 6, 1, 234, + 106, 4, 102, 38, 2, 1, 234, 106, 4, 102, 38, 6, 1, 234, 106, 4, 199, 215, + 38, 2, 1, 234, 106, 4, 199, 215, 38, 6, 1, 221, 210, 243, 129, 38, 2, 1, + 221, 210, 243, 129, 38, 6, 1, 234, 117, 4, 199, 215, 38, 2, 1, 234, 117, + 4, 199, 215, 38, 2, 1, 210, 181, 38, 6, 1, 42, 4, 248, 38, 38, 2, 1, 42, + 4, 248, 38, 38, 6, 1, 42, 4, 237, 44, 38, 2, 1, 42, 4, 237, 44, 38, 6, + 34, 42, 223, 228, 38, 2, 34, 42, 223, 228, 38, 6, 1, 223, 229, 4, 248, + 38, 38, 2, 1, 223, 229, 4, 248, 38, 38, 6, 1, 205, 87, 38, 2, 1, 205, 87, + 38, 6, 1, 205, 88, 4, 237, 44, 38, 2, 1, 205, 88, 4, 237, 44, 38, 6, 1, + 191, 63, 4, 237, 44, 38, 2, 1, 191, 63, 4, 237, 44, 38, 6, 1, 191, 88, 4, + 237, 44, 38, 2, 1, 191, 88, 4, 237, 44, 38, 6, 1, 252, 69, 235, 34, 38, + 2, 1, 252, 69, 235, 34, 38, 6, 1, 228, 76, 4, 217, 148, 38, 2, 1, 228, + 76, 4, 217, 148, 38, 6, 1, 228, 76, 4, 237, 44, 38, 2, 1, 228, 76, 4, + 237, 44, 38, 6, 1, 187, 4, 237, 44, 38, 2, 1, 187, 4, 237, 44, 38, 6, 1, + 249, 84, 74, 38, 2, 1, 249, 84, 74, 38, 6, 1, 249, 84, 187, 4, 237, 44, + 38, 2, 1, 249, 84, 187, 4, 237, 44, 38, 6, 1, 235, 17, 4, 237, 44, 38, 2, + 1, 235, 17, 4, 237, 44, 38, 6, 1, 126, 4, 217, 148, 38, 2, 1, 126, 4, + 217, 148, 38, 6, 1, 126, 4, 237, 44, 38, 2, 1, 126, 4, 237, 44, 38, 6, 1, + 126, 4, 55, 252, 48, 38, 2, 1, 126, 4, 55, 252, 48, 38, 6, 1, 243, 130, + 4, 237, 44, 38, 2, 1, 243, 130, 4, 237, 44, 38, 6, 1, 231, 80, 4, 237, + 89, 38, 2, 1, 231, 80, 4, 237, 89, 38, 6, 1, 192, 59, 4, 237, 44, 38, 2, + 1, 192, 59, 4, 237, 44, 38, 6, 1, 231, 80, 4, 201, 29, 23, 102, 38, 2, 1, + 231, 80, 4, 201, 29, 23, 102, 38, 6, 1, 230, 107, 4, 102, 38, 2, 1, 230, + 107, 4, 102, 38, 6, 1, 230, 107, 4, 106, 38, 2, 1, 230, 107, 4, 106, 38, + 6, 1, 221, 47, 237, 148, 38, 2, 1, 221, 47, 237, 148, 38, 6, 1, 221, 47, + 236, 194, 38, 2, 1, 221, 47, 236, 194, 38, 6, 1, 221, 47, 191, 12, 38, 2, + 1, 221, 47, 191, 12, 38, 6, 1, 221, 47, 235, 26, 38, 2, 1, 221, 47, 235, + 26, 38, 6, 1, 221, 47, 219, 78, 38, 2, 1, 221, 47, 219, 78, 38, 6, 1, + 221, 47, 213, 152, 38, 2, 1, 221, 47, 213, 152, 38, 6, 1, 221, 47, 202, + 116, 38, 2, 1, 221, 47, 202, 116, 38, 6, 1, 221, 47, 198, 116, 38, 2, 1, + 221, 47, 198, 116, 38, 6, 1, 207, 19, 191, 87, 38, 2, 1, 207, 19, 191, + 87, 38, 6, 1, 234, 143, 4, 102, 38, 2, 1, 234, 143, 4, 102, 38, 6, 1, + 219, 161, 38, 2, 1, 219, 161, 38, 6, 1, 207, 7, 38, 2, 1, 207, 7, 38, 6, + 1, 192, 129, 38, 2, 1, 192, 129, 38, 6, 1, 208, 98, 38, 2, 1, 208, 98, + 38, 6, 1, 193, 125, 38, 2, 1, 193, 125, 38, 6, 1, 251, 190, 155, 38, 2, + 1, 251, 190, 155, 38, 6, 1, 234, 143, 4, 82, 102, 38, 2, 1, 234, 143, 4, + 82, 102, 38, 6, 1, 234, 106, 4, 82, 102, 38, 2, 1, 234, 106, 4, 82, 102, + 38, 6, 1, 210, 66, 4, 237, 89, 38, 2, 1, 210, 66, 4, 237, 89, 38, 6, 1, + 203, 84, 4, 237, 89, 38, 2, 1, 203, 84, 4, 237, 89, 38, 6, 1, 234, 106, + 4, 45, 102, 38, 2, 1, 234, 106, 4, 45, 102, 38, 6, 1, 235, 18, 38, 2, 1, + 235, 18, 38, 6, 1, 237, 197, 38, 2, 1, 237, 197, 38, 6, 1, 234, 143, 4, + 237, 89, 38, 2, 1, 234, 143, 4, 237, 89, 250, 251, 6, 1, 250, 130, 250, + 251, 6, 1, 248, 231, 250, 251, 6, 1, 231, 42, 250, 251, 6, 1, 238, 34, + 250, 251, 6, 1, 234, 197, 250, 251, 6, 1, 191, 123, 250, 251, 6, 1, 234, + 175, 250, 251, 6, 1, 234, 1, 250, 251, 6, 1, 159, 250, 251, 6, 1, 191, + 62, 250, 251, 6, 1, 223, 133, 250, 251, 6, 1, 219, 82, 250, 251, 6, 1, + 192, 212, 250, 251, 6, 1, 247, 162, 250, 251, 6, 1, 221, 253, 250, 251, + 6, 1, 229, 25, 250, 251, 6, 1, 223, 34, 250, 251, 6, 1, 231, 90, 250, + 251, 6, 1, 243, 119, 250, 251, 6, 1, 216, 188, 250, 251, 6, 1, 192, 33, + 250, 251, 6, 1, 212, 255, 250, 251, 6, 1, 203, 166, 250, 251, 6, 1, 195, + 24, 250, 251, 6, 1, 247, 3, 250, 251, 6, 1, 210, 43, 250, 251, 6, 1, 222, + 249, 250, 251, 6, 1, 165, 250, 251, 6, 1, 205, 40, 250, 251, 6, 1, 195, + 74, 250, 251, 6, 1, 198, 119, 250, 251, 6, 1, 207, 72, 250, 251, 6, 1, + 242, 101, 250, 251, 6, 1, 192, 17, 250, 251, 6, 1, 209, 116, 250, 251, 6, + 1, 222, 8, 250, 251, 6, 1, 211, 138, 250, 251, 6, 1, 233, 48, 250, 251, + 52, 1, 45, 132, 206, 189, 250, 251, 251, 51, 250, 251, 234, 109, 77, 250, + 251, 233, 218, 77, 250, 251, 242, 76, 250, 251, 208, 15, 77, 250, 251, + 252, 70, 77, 250, 251, 2, 1, 154, 250, 130, 250, 251, 2, 1, 250, 130, + 250, 251, 2, 1, 248, 231, 250, 251, 2, 1, 231, 42, 250, 251, 2, 1, 238, + 34, 250, 251, 2, 1, 234, 197, 250, 251, 2, 1, 191, 123, 250, 251, 2, 1, + 234, 175, 250, 251, 2, 1, 234, 1, 250, 251, 2, 1, 159, 250, 251, 2, 1, + 191, 62, 250, 251, 2, 1, 223, 133, 250, 251, 2, 1, 219, 82, 250, 251, 2, + 1, 192, 212, 250, 251, 2, 1, 247, 162, 250, 251, 2, 1, 221, 253, 250, + 251, 2, 1, 229, 25, 250, 251, 2, 1, 223, 34, 250, 251, 2, 1, 231, 90, + 250, 251, 2, 1, 243, 119, 250, 251, 2, 1, 216, 188, 250, 251, 2, 1, 192, + 33, 250, 251, 2, 1, 212, 255, 250, 251, 2, 1, 203, 166, 250, 251, 2, 1, + 195, 24, 250, 251, 2, 1, 247, 3, 250, 251, 2, 1, 210, 43, 250, 251, 2, 1, + 222, 249, 250, 251, 2, 1, 165, 250, 251, 2, 1, 205, 40, 250, 251, 2, 1, + 195, 74, 250, 251, 2, 1, 198, 119, 250, 251, 2, 1, 207, 72, 250, 251, 2, + 1, 242, 101, 250, 251, 2, 1, 192, 17, 250, 251, 2, 1, 209, 116, 250, 251, + 2, 1, 222, 8, 250, 251, 2, 1, 211, 138, 250, 251, 2, 1, 233, 48, 250, + 251, 2, 34, 234, 198, 192, 17, 250, 251, 2, 1, 11, 4, 106, 250, 251, 232, + 82, 201, 64, 250, 251, 228, 90, 206, 208, 250, 251, 233, 253, 56, 219, + 225, 250, 251, 233, 253, 56, 250, 251, 235, 112, 56, 136, 252, 63, 233, + 248, 136, 252, 63, 205, 41, 136, 252, 63, 203, 142, 136, 252, 63, 191, + 99, 208, 80, 136, 252, 63, 191, 99, 231, 232, 136, 252, 63, 198, 134, + 136, 252, 63, 207, 16, 136, 252, 63, 191, 97, 136, 252, 63, 210, 99, 136, + 252, 63, 192, 48, 136, 252, 63, 199, 56, 136, 252, 63, 231, 141, 136, + 252, 63, 231, 142, 215, 112, 136, 252, 63, 231, 139, 136, 252, 63, 208, + 82, 210, 132, 136, 252, 63, 199, 103, 231, 160, 136, 252, 63, 210, 71, + 136, 252, 63, 250, 175, 230, 87, 136, 252, 63, 215, 123, 136, 252, 63, + 217, 119, 136, 252, 63, 216, 177, 136, 252, 63, 216, 178, 222, 9, 136, + 252, 63, 237, 224, 136, 252, 63, 208, 93, 136, 252, 63, 199, 103, 208, + 75, 136, 252, 63, 192, 61, 248, 232, 191, 247, 136, 252, 63, 211, 119, + 136, 252, 63, 223, 185, 136, 252, 63, 237, 125, 136, 252, 63, 191, 19, + 136, 87, 217, 36, 243, 12, 136, 209, 64, 203, 86, 136, 209, 64, 230, 10, + 205, 41, 136, 209, 64, 230, 10, 210, 90, 136, 209, 64, 230, 10, 208, 86, + 136, 209, 64, 229, 121, 136, 209, 64, 197, 158, 136, 209, 64, 205, 41, + 136, 209, 64, 210, 90, 136, 209, 64, 208, 86, 136, 209, 64, 229, 9, 136, + 209, 64, 229, 10, 230, 12, 40, 195, 158, 136, 209, 64, 208, 20, 136, 209, + 64, 238, 19, 211, 59, 217, 72, 136, 209, 64, 216, 166, 136, 208, 154, + 217, 69, 136, 209, 64, 207, 163, 136, 208, 154, 210, 101, 136, 209, 64, + 203, 71, 236, 142, 136, 209, 64, 202, 176, 236, 142, 136, 208, 154, 202, + 34, 210, 92, 136, 87, 116, 236, 142, 136, 87, 110, 236, 142, 136, 208, + 154, 212, 133, 230, 86, 136, 209, 64, 208, 87, 208, 80, 136, 1, 251, 194, + 136, 1, 248, 216, 136, 1, 231, 40, 136, 1, 237, 255, 136, 1, 229, 247, + 136, 1, 195, 158, 136, 1, 191, 91, 136, 1, 229, 188, 136, 1, 199, 73, + 136, 1, 191, 250, 136, 1, 53, 222, 108, 136, 1, 222, 108, 136, 1, 220, + 29, 136, 1, 53, 216, 195, 136, 1, 216, 195, 136, 1, 53, 212, 132, 136, 1, + 212, 132, 136, 1, 205, 149, 136, 1, 250, 128, 136, 1, 53, 210, 65, 136, + 1, 210, 65, 136, 1, 53, 197, 163, 136, 1, 197, 163, 136, 1, 208, 44, 136, + 1, 207, 39, 136, 1, 203, 70, 136, 1, 199, 162, 136, 191, 251, 197, 241, 136, 34, 192, 31, 55, 195, 158, 136, 34, 192, 31, 195, 159, 191, 250, - 136, 34, 192, 31, 55, 191, 250, 136, 208, 152, 231, 139, 136, 208, 152, - 231, 137, 9, 31, 56, 9, 3, 205, 141, 9, 232, 157, 217, 51, 9, 3, 205, - 187, 9, 3, 205, 144, 9, 31, 87, 58, 251, 28, 238, 191, 206, 128, 251, 28, - 232, 121, 206, 128, 9, 207, 122, 251, 28, 210, 14, 216, 50, 56, 251, 28, - 210, 14, 199, 96, 198, 230, 56, 252, 2, 56, 9, 242, 74, 9, 237, 209, 204, - 10, 9, 209, 64, 195, 137, 56, 9, 3, 216, 25, 9, 3, 205, 161, 251, 199, - 193, 149, 9, 3, 251, 199, 250, 198, 9, 3, 207, 157, 251, 198, 9, 3, 207, - 167, 251, 170, 251, 105, 9, 3, 199, 206, 9, 2, 137, 199, 219, 9, 2, 137, - 34, 131, 4, 220, 36, 4, 192, 75, 9, 2, 137, 191, 113, 9, 2, 233, 70, 9, - 2, 237, 245, 9, 2, 222, 52, 9, 204, 25, 9, 1, 77, 9, 234, 95, 79, 199, - 54, 77, 9, 197, 225, 75, 208, 152, 77, 9, 208, 13, 77, 9, 1, 222, 56, - 192, 75, 9, 1, 230, 57, 9, 1, 131, 4, 217, 142, 58, 9, 1, 131, 4, 230, - 58, 58, 9, 1, 193, 134, 4, 230, 58, 58, 9, 1, 131, 4, 230, 58, 60, 9, 1, - 99, 4, 230, 58, 58, 9, 1, 251, 192, 9, 1, 248, 245, 9, 1, 199, 115, 217, - 62, 9, 1, 199, 114, 9, 1, 199, 29, 9, 1, 223, 6, 9, 1, 230, 81, 9, 1, - 221, 210, 9, 1, 238, 3, 9, 1, 199, 41, 9, 1, 207, 71, 9, 1, 191, 113, 9, - 1, 205, 46, 9, 1, 203, 109, 9, 1, 205, 192, 9, 1, 238, 26, 9, 1, 199, - 219, 9, 1, 191, 116, 9, 1, 251, 230, 9, 1, 231, 86, 9, 1, 222, 5, 4, 105, - 185, 58, 9, 1, 222, 5, 4, 115, 185, 60, 9, 1, 233, 74, 99, 4, 223, 93, - 196, 12, 9, 1, 233, 74, 99, 4, 105, 185, 58, 9, 1, 233, 74, 99, 4, 115, - 185, 58, 9, 199, 168, 9, 1, 233, 46, 9, 1, 208, 89, 9, 1, 222, 106, 9, 1, - 220, 35, 9, 1, 216, 208, 9, 1, 213, 24, 9, 1, 229, 210, 9, 1, 193, 133, - 9, 1, 131, 217, 99, 9, 1, 192, 75, 9, 233, 68, 9, 237, 243, 9, 222, 50, - 9, 233, 70, 9, 237, 245, 9, 222, 52, 9, 203, 155, 9, 200, 206, 9, 217, - 140, 58, 9, 230, 58, 58, 9, 230, 58, 60, 9, 200, 230, 251, 192, 9, 223, - 93, 237, 245, 9, 87, 213, 25, 231, 57, 9, 190, 237, 9, 18, 3, 2, 196, 13, - 58, 9, 18, 3, 223, 93, 2, 196, 13, 58, 9, 18, 3, 75, 60, 9, 207, 18, 237, - 245, 9, 233, 71, 4, 105, 236, 138, 9, 193, 135, 230, 58, 60, 251, 28, 17, - 191, 77, 251, 28, 17, 107, 251, 28, 17, 109, 251, 28, 17, 138, 251, 28, - 17, 134, 251, 28, 17, 149, 251, 28, 17, 169, 251, 28, 17, 175, 251, 28, - 17, 171, 251, 28, 17, 178, 9, 210, 13, 56, 9, 237, 138, 204, 10, 9, 198, - 229, 204, 10, 9, 232, 226, 209, 60, 201, 102, 9, 1, 236, 139, 248, 245, - 9, 1, 236, 139, 208, 89, 9, 1, 200, 182, 251, 192, 9, 1, 131, 193, 150, - 9, 1, 131, 4, 193, 135, 230, 58, 58, 9, 1, 131, 4, 193, 135, 230, 58, 60, - 9, 1, 137, 230, 57, 9, 1, 137, 230, 58, 251, 192, 9, 1, 137, 230, 58, - 193, 133, 9, 1, 126, 4, 230, 58, 58, 9, 1, 137, 230, 58, 192, 75, 9, 1, - 197, 124, 9, 1, 197, 122, 9, 1, 248, 255, 9, 1, 199, 115, 4, 206, 188, 9, - 1, 199, 115, 4, 115, 185, 93, 235, 118, 9, 1, 210, 41, 9, 1, 199, 112, 9, - 1, 248, 243, 9, 1, 182, 4, 230, 58, 58, 9, 1, 182, 4, 105, 185, 81, 58, - 9, 1, 212, 87, 9, 1, 235, 41, 9, 1, 182, 4, 115, 185, 58, 9, 1, 199, 149, - 9, 1, 199, 147, 9, 1, 237, 186, 9, 1, 238, 4, 4, 206, 188, 9, 1, 238, 4, - 4, 75, 60, 9, 1, 238, 4, 4, 75, 248, 233, 23, 2, 199, 219, 9, 1, 238, 10, - 9, 1, 237, 188, 9, 1, 235, 78, 9, 1, 238, 4, 4, 115, 185, 93, 235, 118, - 9, 1, 238, 4, 4, 232, 128, 185, 58, 9, 1, 206, 101, 9, 1, 207, 72, 4, 2, - 196, 12, 9, 1, 207, 72, 4, 206, 188, 9, 1, 207, 72, 4, 75, 60, 9, 1, 207, - 72, 4, 2, 196, 13, 60, 9, 1, 207, 72, 4, 75, 248, 233, 23, 75, 58, 9, 1, - 207, 72, 4, 105, 185, 58, 9, 1, 223, 3, 9, 1, 207, 72, 4, 232, 128, 185, - 58, 9, 1, 205, 47, 4, 75, 248, 233, 23, 75, 58, 9, 1, 205, 47, 4, 115, - 185, 60, 9, 1, 205, 47, 4, 115, 185, 248, 233, 23, 115, 185, 58, 9, 1, - 205, 193, 4, 105, 185, 60, 9, 1, 205, 193, 4, 115, 185, 58, 9, 1, 199, - 220, 4, 115, 185, 58, 9, 1, 251, 231, 4, 115, 185, 58, 9, 1, 236, 139, - 233, 46, 9, 1, 233, 47, 4, 75, 215, 177, 60, 9, 1, 233, 47, 4, 75, 60, 9, - 1, 195, 146, 9, 1, 233, 47, 4, 115, 185, 60, 9, 1, 210, 39, 9, 1, 208, - 90, 4, 75, 58, 9, 1, 208, 90, 4, 115, 185, 58, 9, 1, 222, 4, 9, 1, 200, - 146, 222, 106, 9, 1, 222, 107, 4, 206, 188, 9, 1, 222, 107, 4, 75, 58, 9, - 1, 214, 70, 9, 1, 222, 107, 4, 115, 185, 60, 9, 1, 231, 227, 9, 1, 231, - 228, 4, 206, 188, 9, 1, 213, 247, 9, 1, 231, 228, 4, 105, 185, 60, 9, 1, - 230, 166, 9, 1, 231, 228, 4, 115, 185, 58, 9, 1, 220, 36, 4, 2, 196, 12, - 9, 1, 220, 36, 4, 75, 58, 9, 1, 220, 36, 4, 115, 185, 58, 9, 1, 220, 36, - 4, 115, 185, 60, 9, 1, 213, 25, 4, 75, 60, 9, 1, 213, 25, 231, 57, 9, 1, - 206, 165, 9, 1, 213, 25, 4, 206, 188, 9, 1, 213, 25, 4, 115, 185, 58, 9, - 1, 229, 211, 236, 170, 9, 1, 199, 150, 4, 75, 58, 9, 1, 229, 211, 4, 99, - 58, 9, 1, 229, 211, 231, 0, 9, 1, 229, 211, 231, 1, 4, 230, 58, 58, 9, 1, - 199, 115, 217, 63, 231, 0, 9, 1, 193, 134, 4, 206, 188, 9, 1, 221, 132, - 211, 151, 9, 1, 211, 151, 9, 1, 66, 9, 1, 191, 225, 9, 1, 221, 132, 191, - 225, 9, 1, 193, 134, 4, 105, 185, 58, 9, 1, 195, 153, 9, 1, 233, 74, 192, + 136, 34, 192, 31, 55, 191, 250, 136, 208, 154, 231, 141, 136, 208, 154, + 231, 139, 9, 31, 56, 9, 3, 205, 142, 9, 232, 159, 217, 53, 9, 3, 205, + 188, 9, 3, 205, 145, 9, 31, 87, 58, 251, 30, 238, 193, 206, 129, 251, 30, + 232, 123, 206, 129, 9, 207, 124, 251, 30, 210, 16, 216, 52, 56, 251, 30, + 210, 16, 199, 96, 198, 230, 56, 252, 4, 56, 9, 242, 76, 9, 237, 211, 204, + 11, 9, 209, 66, 195, 137, 56, 9, 3, 216, 27, 9, 3, 205, 162, 251, 201, + 193, 149, 9, 3, 251, 201, 250, 200, 9, 3, 207, 159, 251, 200, 9, 3, 207, + 169, 251, 172, 251, 107, 9, 3, 199, 206, 9, 2, 137, 199, 219, 9, 2, 137, + 34, 131, 4, 220, 38, 4, 192, 75, 9, 2, 137, 191, 113, 9, 2, 233, 72, 9, + 2, 237, 247, 9, 2, 222, 54, 9, 204, 26, 9, 1, 77, 9, 234, 97, 79, 199, + 54, 77, 9, 197, 225, 75, 208, 154, 77, 9, 208, 15, 77, 9, 1, 222, 58, + 192, 75, 9, 1, 230, 59, 9, 1, 131, 4, 217, 144, 58, 9, 1, 131, 4, 230, + 60, 58, 9, 1, 193, 134, 4, 230, 60, 58, 9, 1, 131, 4, 230, 60, 60, 9, 1, + 99, 4, 230, 60, 58, 9, 1, 251, 194, 9, 1, 248, 247, 9, 1, 199, 115, 217, + 64, 9, 1, 199, 114, 9, 1, 199, 29, 9, 1, 223, 8, 9, 1, 230, 83, 9, 1, + 221, 212, 9, 1, 238, 5, 9, 1, 199, 41, 9, 1, 207, 72, 9, 1, 191, 113, 9, + 1, 205, 47, 9, 1, 203, 110, 9, 1, 205, 193, 9, 1, 238, 28, 9, 1, 199, + 219, 9, 1, 191, 116, 9, 1, 251, 232, 9, 1, 231, 88, 9, 1, 222, 7, 4, 105, + 185, 58, 9, 1, 222, 7, 4, 115, 185, 60, 9, 1, 233, 76, 99, 4, 223, 95, + 196, 12, 9, 1, 233, 76, 99, 4, 105, 185, 58, 9, 1, 233, 76, 99, 4, 115, + 185, 58, 9, 199, 168, 9, 1, 233, 48, 9, 1, 208, 91, 9, 1, 222, 108, 9, 1, + 220, 37, 9, 1, 216, 210, 9, 1, 213, 26, 9, 1, 229, 212, 9, 1, 193, 133, + 9, 1, 131, 217, 101, 9, 1, 192, 75, 9, 233, 70, 9, 237, 245, 9, 222, 52, + 9, 233, 72, 9, 237, 247, 9, 222, 54, 9, 203, 156, 9, 200, 206, 9, 217, + 142, 58, 9, 230, 60, 58, 9, 230, 60, 60, 9, 200, 231, 251, 194, 9, 223, + 95, 237, 247, 9, 87, 213, 27, 231, 59, 9, 190, 237, 9, 18, 3, 2, 196, 13, + 58, 9, 18, 3, 223, 95, 2, 196, 13, 58, 9, 18, 3, 75, 60, 9, 207, 19, 237, + 247, 9, 233, 73, 4, 105, 236, 140, 9, 193, 135, 230, 60, 60, 251, 30, 17, + 191, 77, 251, 30, 17, 107, 251, 30, 17, 109, 251, 30, 17, 138, 251, 30, + 17, 134, 251, 30, 17, 150, 251, 30, 17, 169, 251, 30, 17, 175, 251, 30, + 17, 171, 251, 30, 17, 178, 9, 210, 15, 56, 9, 237, 140, 204, 11, 9, 198, + 229, 204, 11, 9, 232, 228, 209, 62, 201, 103, 9, 1, 236, 141, 248, 247, + 9, 1, 236, 141, 208, 91, 9, 1, 200, 182, 251, 194, 9, 1, 131, 193, 150, + 9, 1, 131, 4, 193, 135, 230, 60, 58, 9, 1, 131, 4, 193, 135, 230, 60, 60, + 9, 1, 137, 230, 59, 9, 1, 137, 230, 60, 251, 194, 9, 1, 137, 230, 60, + 193, 133, 9, 1, 126, 4, 230, 60, 58, 9, 1, 137, 230, 60, 192, 75, 9, 1, + 197, 124, 9, 1, 197, 122, 9, 1, 249, 1, 9, 1, 199, 115, 4, 206, 189, 9, + 1, 199, 115, 4, 115, 185, 93, 235, 120, 9, 1, 210, 43, 9, 1, 199, 112, 9, + 1, 248, 245, 9, 1, 183, 4, 230, 60, 58, 9, 1, 183, 4, 105, 185, 81, 58, + 9, 1, 212, 89, 9, 1, 235, 43, 9, 1, 183, 4, 115, 185, 58, 9, 1, 199, 149, + 9, 1, 199, 147, 9, 1, 237, 188, 9, 1, 238, 6, 4, 206, 189, 9, 1, 238, 6, + 4, 75, 60, 9, 1, 238, 6, 4, 75, 248, 235, 23, 2, 199, 219, 9, 1, 238, 12, + 9, 1, 237, 190, 9, 1, 235, 80, 9, 1, 238, 6, 4, 115, 185, 93, 235, 120, + 9, 1, 238, 6, 4, 232, 130, 185, 58, 9, 1, 206, 102, 9, 1, 207, 73, 4, 2, + 196, 12, 9, 1, 207, 73, 4, 206, 189, 9, 1, 207, 73, 4, 75, 60, 9, 1, 207, + 73, 4, 2, 196, 13, 60, 9, 1, 207, 73, 4, 75, 248, 235, 23, 75, 58, 9, 1, + 207, 73, 4, 105, 185, 58, 9, 1, 223, 5, 9, 1, 207, 73, 4, 232, 130, 185, + 58, 9, 1, 205, 48, 4, 75, 248, 235, 23, 75, 58, 9, 1, 205, 48, 4, 115, + 185, 60, 9, 1, 205, 48, 4, 115, 185, 248, 235, 23, 115, 185, 58, 9, 1, + 205, 194, 4, 105, 185, 60, 9, 1, 205, 194, 4, 115, 185, 58, 9, 1, 199, + 220, 4, 115, 185, 58, 9, 1, 251, 233, 4, 115, 185, 58, 9, 1, 236, 141, + 233, 48, 9, 1, 233, 49, 4, 75, 215, 179, 60, 9, 1, 233, 49, 4, 75, 60, 9, + 1, 195, 146, 9, 1, 233, 49, 4, 115, 185, 60, 9, 1, 210, 41, 9, 1, 208, + 92, 4, 75, 58, 9, 1, 208, 92, 4, 115, 185, 58, 9, 1, 222, 6, 9, 1, 200, + 146, 222, 108, 9, 1, 222, 109, 4, 206, 189, 9, 1, 222, 109, 4, 75, 58, 9, + 1, 214, 72, 9, 1, 222, 109, 4, 115, 185, 60, 9, 1, 231, 229, 9, 1, 231, + 230, 4, 206, 189, 9, 1, 213, 249, 9, 1, 231, 230, 4, 105, 185, 60, 9, 1, + 230, 168, 9, 1, 231, 230, 4, 115, 185, 58, 9, 1, 220, 38, 4, 2, 196, 12, + 9, 1, 220, 38, 4, 75, 58, 9, 1, 220, 38, 4, 115, 185, 58, 9, 1, 220, 38, + 4, 115, 185, 60, 9, 1, 213, 27, 4, 75, 60, 9, 1, 213, 27, 231, 59, 9, 1, + 206, 166, 9, 1, 213, 27, 4, 206, 189, 9, 1, 213, 27, 4, 115, 185, 58, 9, + 1, 229, 213, 236, 172, 9, 1, 199, 150, 4, 75, 58, 9, 1, 229, 213, 4, 99, + 58, 9, 1, 229, 213, 231, 2, 9, 1, 229, 213, 231, 3, 4, 230, 60, 58, 9, 1, + 199, 115, 217, 65, 231, 2, 9, 1, 193, 134, 4, 206, 189, 9, 1, 221, 134, + 211, 153, 9, 1, 211, 153, 9, 1, 66, 9, 1, 191, 225, 9, 1, 221, 134, 191, + 225, 9, 1, 193, 134, 4, 105, 185, 58, 9, 1, 195, 153, 9, 1, 233, 76, 192, 75, 9, 1, 99, 4, 199, 215, 9, 1, 99, 4, 2, 196, 12, 9, 1, 193, 134, 4, - 75, 58, 9, 1, 71, 9, 1, 99, 4, 115, 185, 60, 9, 1, 99, 249, 80, 9, 1, 99, - 249, 81, 4, 230, 58, 58, 9, 232, 80, 201, 63, 9, 1, 252, 25, 9, 2, 137, - 34, 205, 193, 4, 220, 36, 4, 131, 217, 99, 9, 2, 137, 34, 208, 90, 4, - 220, 36, 4, 131, 217, 99, 9, 2, 137, 92, 89, 20, 9, 2, 137, 220, 36, 251, - 192, 9, 2, 137, 223, 6, 9, 2, 137, 115, 236, 138, 9, 2, 137, 205, 46, 9, - 234, 95, 79, 250, 130, 9, 201, 98, 79, 206, 60, 234, 141, 229, 114, 9, 2, - 137, 206, 113, 191, 77, 9, 2, 137, 196, 73, 207, 91, 191, 77, 9, 2, 137, - 236, 139, 229, 236, 79, 221, 210, 9, 2, 137, 92, 76, 20, 9, 2, 130, 205, - 46, 9, 2, 137, 217, 141, 9, 2, 193, 133, 9, 2, 192, 75, 9, 2, 137, 192, - 75, 9, 2, 137, 213, 24, 9, 209, 108, 79, 205, 177, 9, 234, 105, 247, 22, - 130, 201, 63, 9, 234, 105, 247, 22, 137, 201, 63, 9, 206, 113, 137, 201, - 64, 4, 233, 4, 247, 21, 9, 2, 130, 216, 208, 9, 1, 238, 4, 4, 223, 93, - 196, 12, 9, 1, 207, 72, 4, 223, 93, 196, 12, 233, 205, 251, 28, 17, 191, - 77, 233, 205, 251, 28, 17, 107, 233, 205, 251, 28, 17, 109, 233, 205, - 251, 28, 17, 138, 233, 205, 251, 28, 17, 134, 233, 205, 251, 28, 17, 149, - 233, 205, 251, 28, 17, 169, 233, 205, 251, 28, 17, 175, 233, 205, 251, - 28, 17, 171, 233, 205, 251, 28, 17, 178, 9, 1, 203, 110, 4, 75, 60, 9, 1, - 238, 27, 4, 75, 60, 9, 1, 231, 87, 4, 75, 60, 9, 3, 202, 173, 251, 137, - 9, 3, 202, 173, 209, 16, 216, 186, 9, 1, 229, 211, 4, 223, 93, 196, 12, - 200, 63, 234, 95, 79, 210, 127, 200, 63, 200, 177, 232, 80, 201, 63, 200, - 63, 200, 232, 232, 80, 201, 63, 200, 63, 200, 177, 242, 83, 200, 63, 200, - 232, 242, 83, 200, 63, 228, 241, 242, 83, 200, 63, 242, 84, 202, 110, - 219, 224, 200, 63, 242, 84, 202, 110, 183, 200, 63, 200, 177, 242, 84, - 202, 110, 219, 224, 200, 63, 200, 232, 242, 84, 202, 110, 183, 200, 63, - 239, 24, 200, 63, 230, 15, 211, 176, 200, 63, 230, 15, 216, 162, 200, 63, - 230, 15, 250, 195, 200, 63, 252, 68, 77, 200, 63, 1, 251, 202, 200, 63, - 1, 200, 182, 251, 202, 200, 63, 1, 248, 211, 200, 63, 1, 231, 217, 200, - 63, 1, 231, 218, 231, 194, 200, 63, 1, 238, 0, 200, 63, 1, 236, 139, 238, - 1, 206, 181, 200, 63, 1, 229, 245, 200, 63, 1, 193, 133, 200, 63, 1, 191, - 113, 200, 63, 1, 229, 184, 200, 63, 1, 199, 69, 200, 63, 1, 199, 70, 231, - 194, 200, 63, 1, 191, 208, 200, 63, 1, 191, 209, 229, 245, 200, 63, 1, - 222, 75, 200, 63, 1, 220, 34, 200, 63, 1, 216, 46, 200, 63, 1, 212, 130, - 200, 63, 1, 204, 18, 200, 63, 1, 53, 204, 18, 200, 63, 1, 71, 200, 63, 1, - 210, 63, 200, 63, 1, 207, 18, 210, 63, 200, 63, 1, 205, 189, 200, 63, 1, - 208, 83, 200, 63, 1, 206, 181, 200, 63, 1, 203, 69, 200, 63, 1, 199, 159, - 200, 63, 1, 209, 252, 248, 194, 200, 63, 1, 209, 252, 231, 84, 200, 63, - 1, 209, 252, 237, 63, 200, 63, 208, 166, 58, 200, 63, 208, 166, 60, 200, - 63, 208, 166, 235, 137, 200, 63, 191, 0, 58, 200, 63, 191, 0, 60, 200, - 63, 191, 0, 235, 137, 200, 63, 207, 116, 58, 200, 63, 207, 116, 60, 200, - 63, 235, 138, 191, 9, 228, 240, 200, 63, 235, 138, 191, 9, 251, 108, 200, - 63, 229, 250, 58, 200, 63, 229, 250, 60, 200, 63, 229, 249, 235, 137, - 200, 63, 234, 16, 58, 200, 63, 234, 16, 60, 200, 63, 206, 24, 200, 63, - 233, 40, 236, 140, 200, 63, 207, 246, 200, 63, 206, 54, 200, 63, 105, 81, - 185, 58, 200, 63, 105, 81, 185, 60, 200, 63, 115, 185, 58, 200, 63, 115, - 185, 60, 200, 63, 211, 172, 219, 113, 58, 200, 63, 211, 172, 219, 113, - 60, 200, 63, 215, 96, 200, 63, 249, 79, 200, 63, 1, 202, 28, 191, 69, - 200, 63, 1, 202, 28, 221, 201, 200, 63, 1, 202, 28, 233, 59, 9, 1, 248, - 246, 4, 115, 185, 228, 190, 60, 9, 1, 248, 246, 4, 75, 248, 233, 23, 115, - 185, 58, 9, 1, 248, 246, 4, 115, 185, 209, 58, 196, 66, 60, 9, 1, 248, - 246, 4, 115, 185, 209, 58, 196, 66, 248, 233, 23, 105, 185, 58, 9, 1, - 248, 246, 4, 105, 185, 248, 233, 23, 75, 58, 9, 1, 248, 246, 4, 223, 93, - 2, 196, 13, 60, 9, 1, 248, 246, 4, 2, 196, 12, 9, 1, 182, 4, 105, 185, - 58, 9, 1, 182, 4, 115, 185, 209, 58, 196, 66, 60, 9, 1, 238, 4, 4, 105, - 185, 195, 85, 248, 233, 23, 2, 199, 219, 9, 1, 238, 4, 4, 223, 93, 2, - 196, 13, 60, 9, 1, 207, 72, 4, 106, 9, 1, 205, 47, 4, 232, 128, 185, 58, - 9, 1, 251, 231, 4, 105, 185, 58, 9, 1, 251, 231, 4, 115, 185, 209, 58, - 235, 119, 58, 9, 1, 251, 231, 4, 105, 185, 195, 85, 58, 9, 1, 233, 47, 4, - 105, 185, 60, 9, 1, 233, 47, 4, 115, 185, 209, 58, 196, 66, 60, 9, 1, - 222, 5, 4, 75, 58, 9, 1, 222, 5, 4, 115, 185, 58, 9, 1, 222, 5, 4, 115, - 185, 209, 58, 196, 66, 60, 9, 1, 92, 4, 75, 58, 9, 1, 92, 4, 75, 60, 9, - 1, 213, 25, 4, 105, 185, 60, 9, 1, 213, 25, 4, 2, 199, 219, 9, 1, 213, - 25, 4, 2, 196, 12, 9, 1, 220, 36, 4, 164, 9, 1, 207, 72, 4, 105, 185, - 195, 85, 58, 9, 1, 207, 72, 4, 230, 58, 58, 9, 1, 205, 47, 4, 105, 185, - 195, 85, 58, 9, 1, 182, 4, 2, 9, 1, 199, 220, 60, 9, 1, 182, 4, 2, 9, 1, - 199, 220, 23, 105, 236, 138, 9, 1, 205, 47, 4, 2, 9, 1, 199, 220, 23, - 105, 236, 138, 9, 1, 207, 72, 4, 2, 9, 1, 199, 220, 23, 105, 236, 138, 9, - 1, 182, 4, 2, 9, 1, 199, 220, 58, 9, 1, 131, 4, 233, 205, 251, 28, 17, - 105, 58, 9, 1, 131, 4, 233, 205, 251, 28, 17, 115, 58, 9, 1, 233, 74, 99, - 4, 233, 205, 251, 28, 17, 105, 58, 9, 1, 233, 74, 99, 4, 233, 205, 251, - 28, 17, 115, 58, 9, 1, 233, 74, 99, 4, 233, 205, 251, 28, 17, 232, 128, - 60, 9, 1, 193, 134, 4, 233, 205, 251, 28, 17, 105, 58, 9, 1, 193, 134, 4, - 233, 205, 251, 28, 17, 115, 58, 9, 1, 99, 249, 81, 4, 233, 205, 251, 28, - 17, 105, 58, 9, 1, 99, 249, 81, 4, 233, 205, 251, 28, 17, 115, 58, 9, 1, - 182, 4, 233, 205, 251, 28, 17, 232, 128, 60, 9, 1, 205, 47, 4, 233, 205, - 251, 28, 17, 232, 128, 58, 9, 1, 205, 47, 4, 223, 93, 196, 12, 9, 1, 222, - 107, 4, 105, 185, 58, 199, 46, 1, 230, 91, 199, 46, 1, 203, 119, 199, 46, - 1, 213, 23, 199, 46, 1, 207, 178, 199, 46, 1, 249, 151, 199, 46, 1, 219, - 156, 199, 46, 1, 222, 122, 199, 46, 1, 251, 179, 199, 46, 1, 195, 186, - 199, 46, 1, 216, 207, 199, 46, 1, 233, 107, 199, 46, 1, 237, 66, 199, 46, - 1, 199, 48, 199, 46, 1, 220, 122, 199, 46, 1, 231, 236, 199, 46, 1, 231, - 6, 199, 46, 1, 205, 45, 199, 46, 1, 237, 207, 199, 46, 1, 191, 94, 199, - 46, 1, 199, 161, 199, 46, 1, 192, 140, 199, 46, 1, 210, 77, 199, 46, 1, - 223, 15, 199, 46, 1, 243, 130, 199, 46, 1, 197, 131, 199, 46, 1, 229, - 176, 199, 46, 1, 221, 214, 199, 46, 1, 199, 47, 199, 46, 1, 191, 121, - 199, 46, 1, 203, 108, 199, 46, 1, 205, 196, 199, 46, 1, 238, 30, 199, 46, - 1, 159, 199, 46, 1, 191, 7, 199, 46, 1, 251, 227, 199, 46, 1, 231, 85, - 199, 46, 1, 208, 93, 199, 46, 1, 193, 178, 199, 46, 252, 70, 199, 46, - 252, 171, 199, 46, 228, 29, 199, 46, 234, 187, 199, 46, 196, 161, 199, - 46, 211, 86, 199, 46, 234, 198, 199, 46, 233, 195, 199, 46, 211, 171, - 199, 46, 211, 181, 199, 46, 200, 206, 199, 46, 1, 214, 250, 213, 107, 17, - 191, 77, 213, 107, 17, 107, 213, 107, 17, 109, 213, 107, 17, 138, 213, - 107, 17, 134, 213, 107, 17, 149, 213, 107, 17, 169, 213, 107, 17, 175, - 213, 107, 17, 171, 213, 107, 17, 178, 213, 107, 1, 65, 213, 107, 1, 234, - 188, 213, 107, 1, 68, 213, 107, 1, 71, 213, 107, 1, 66, 213, 107, 1, 211, - 87, 213, 107, 1, 74, 213, 107, 1, 238, 18, 213, 107, 1, 215, 61, 213, - 107, 1, 249, 153, 213, 107, 1, 168, 213, 107, 1, 190, 190, 213, 107, 1, - 223, 32, 213, 107, 1, 247, 1, 213, 107, 1, 238, 32, 213, 107, 1, 165, - 213, 107, 1, 206, 109, 213, 107, 1, 188, 213, 107, 1, 231, 182, 213, 107, - 1, 233, 109, 213, 107, 1, 155, 213, 107, 1, 173, 213, 107, 1, 215, 7, - 193, 37, 213, 107, 1, 174, 213, 107, 1, 212, 101, 213, 107, 1, 180, 213, - 107, 1, 140, 213, 107, 1, 193, 190, 213, 107, 1, 170, 213, 107, 1, 212, - 102, 193, 37, 213, 107, 1, 222, 193, 223, 32, 213, 107, 1, 222, 193, 247, - 1, 213, 107, 1, 222, 193, 165, 213, 107, 33, 203, 40, 137, 198, 79, 213, - 107, 33, 203, 40, 130, 198, 79, 213, 107, 33, 203, 40, 206, 180, 198, 79, - 213, 107, 33, 179, 237, 86, 198, 79, 213, 107, 33, 179, 137, 198, 79, - 213, 107, 33, 179, 130, 198, 79, 213, 107, 33, 179, 206, 180, 198, 79, - 213, 107, 33, 214, 213, 77, 213, 107, 33, 55, 75, 58, 213, 107, 137, 163, - 251, 49, 213, 107, 130, 163, 251, 49, 213, 107, 16, 211, 88, 237, 101, - 213, 107, 16, 231, 181, 213, 107, 242, 74, 213, 107, 233, 216, 77, 213, - 107, 220, 94, 213, 107, 237, 233, 213, 107, 236, 142, 56, 213, 107, 199, - 195, 56, 205, 151, 1, 251, 204, 205, 151, 1, 248, 148, 205, 151, 1, 231, - 216, 205, 151, 1, 238, 2, 205, 151, 1, 223, 44, 205, 151, 1, 249, 151, - 205, 151, 1, 191, 80, 205, 151, 1, 223, 53, 205, 151, 1, 198, 125, 205, - 151, 1, 191, 189, 205, 151, 1, 222, 123, 205, 151, 1, 220, 118, 205, 151, - 1, 216, 46, 205, 151, 1, 212, 130, 205, 151, 1, 202, 171, 205, 151, 1, - 223, 162, 205, 151, 1, 233, 23, 205, 151, 1, 197, 166, 205, 151, 1, 208, - 10, 205, 151, 1, 206, 181, 205, 151, 1, 203, 138, 205, 151, 1, 199, 243, - 205, 151, 87, 223, 162, 205, 151, 87, 223, 161, 205, 151, 87, 211, 165, - 205, 151, 87, 238, 16, 205, 151, 52, 1, 234, 52, 191, 189, 205, 151, 87, - 234, 52, 191, 189, 205, 151, 18, 3, 179, 71, 205, 151, 18, 3, 71, 205, - 151, 18, 3, 210, 253, 252, 206, 205, 151, 18, 3, 179, 252, 206, 205, 151, - 18, 3, 252, 206, 205, 151, 18, 3, 210, 253, 65, 205, 151, 18, 3, 179, 65, - 205, 151, 18, 3, 65, 205, 151, 52, 1, 203, 40, 65, 205, 151, 18, 3, 203, - 40, 65, 205, 151, 18, 3, 179, 66, 205, 151, 18, 3, 66, 205, 151, 52, 1, - 68, 205, 151, 18, 3, 179, 68, 205, 151, 18, 3, 68, 205, 151, 18, 3, 74, - 205, 151, 18, 3, 200, 206, 205, 151, 87, 214, 93, 205, 151, 208, 152, - 214, 93, 205, 151, 208, 152, 251, 255, 205, 151, 208, 152, 251, 121, 205, - 151, 208, 152, 249, 57, 205, 151, 208, 152, 250, 174, 205, 151, 208, 152, - 203, 57, 205, 151, 252, 68, 77, 205, 151, 208, 152, 216, 197, 208, 48, - 205, 151, 208, 152, 191, 16, 205, 151, 208, 152, 208, 48, 205, 151, 208, - 152, 191, 119, 205, 151, 208, 152, 197, 54, 205, 151, 208, 152, 250, 255, - 205, 151, 208, 152, 202, 33, 217, 37, 205, 151, 208, 152, 251, 97, 217, - 86, 1, 230, 65, 217, 86, 1, 252, 155, 217, 86, 1, 251, 253, 217, 86, 1, - 252, 42, 217, 86, 1, 251, 245, 217, 86, 1, 196, 36, 217, 86, 1, 250, 123, - 217, 86, 1, 223, 53, 217, 86, 1, 250, 171, 217, 86, 1, 251, 211, 217, 86, - 1, 251, 216, 217, 86, 1, 251, 207, 217, 86, 1, 251, 149, 217, 86, 1, 251, - 132, 217, 86, 1, 250, 219, 217, 86, 1, 223, 162, 217, 86, 1, 251, 65, - 217, 86, 1, 250, 184, 217, 86, 1, 251, 37, 217, 86, 1, 251, 33, 217, 86, - 1, 250, 209, 217, 86, 1, 250, 182, 217, 86, 1, 235, 62, 217, 86, 1, 222, - 114, 217, 86, 1, 251, 230, 217, 86, 252, 3, 77, 217, 86, 195, 22, 77, - 217, 86, 231, 153, 77, 217, 86, 208, 151, 200, 63, 1, 142, 214, 68, 200, - 63, 1, 142, 223, 32, 200, 63, 1, 142, 212, 101, 200, 63, 1, 142, 197, - 132, 200, 63, 1, 142, 213, 79, 200, 63, 1, 142, 213, 61, 200, 63, 1, 142, - 248, 203, 200, 63, 1, 142, 165, 200, 63, 1, 142, 219, 73, 200, 63, 1, - 142, 219, 62, 200, 63, 1, 142, 201, 175, 9, 1, 131, 4, 250, 170, 233, 70, - 9, 1, 131, 4, 250, 170, 198, 54, 50, 233, 70, 9, 1, 131, 4, 50, 82, 106, - 9, 1, 131, 4, 45, 82, 106, 9, 1, 131, 4, 250, 170, 222, 52, 9, 1, 131, 4, - 250, 170, 248, 77, 50, 222, 52, 9, 1, 131, 4, 250, 170, 206, 115, 75, 58, - 9, 1, 131, 4, 250, 170, 50, 206, 115, 236, 140, 9, 1, 131, 4, 250, 170, - 45, 206, 115, 236, 140, 9, 1, 131, 4, 250, 170, 206, 115, 75, 60, 9, 1, - 131, 4, 75, 58, 9, 1, 131, 4, 250, 170, 198, 54, 50, 233, 71, 23, 75, 58, - 9, 1, 131, 4, 50, 82, 201, 28, 23, 75, 58, 9, 1, 131, 4, 250, 170, 248, - 77, 50, 222, 53, 23, 75, 58, 9, 1, 131, 4, 250, 170, 198, 54, 50, 233, - 71, 23, 45, 206, 188, 9, 1, 131, 4, 50, 82, 201, 28, 23, 45, 206, 188, 9, - 1, 131, 4, 250, 170, 248, 77, 50, 222, 53, 23, 45, 206, 188, 9, 1, 131, - 4, 250, 170, 50, 230, 57, 9, 1, 131, 4, 250, 170, 45, 230, 57, 9, 199, - 169, 4, 210, 251, 230, 57, 9, 199, 169, 4, 210, 251, 193, 133, 9, 199, - 169, 4, 105, 185, 60, 9, 1, 199, 4, 192, 75, 9, 249, 72, 206, 115, 236, - 140, 9, 207, 147, 206, 115, 236, 140, 9, 1, 213, 25, 4, 223, 93, 2, 196, - 12, 9, 1, 182, 4, 223, 93, 2, 196, 13, 60, 9, 1, 199, 220, 4, 75, 60, 9, - 1, 199, 220, 4, 115, 185, 60, 9, 1, 222, 5, 4, 105, 185, 195, 85, 60, 9, - 81, 199, 215, 9, 209, 8, 87, 58, 9, 209, 182, 87, 58, 9, 2, 137, 193, 23, - 251, 206, 9, 2, 130, 193, 23, 223, 61, 9, 2, 130, 193, 23, 223, 179, 9, - 2, 130, 193, 23, 199, 173, 9, 217, 142, 193, 179, 9, 200, 182, 131, 215, - 234, 9, 235, 128, 217, 141, 9, 132, 217, 142, 139, 217, 141, 9, 1, 248, - 246, 4, 2, 196, 13, 60, 9, 1, 248, 246, 4, 230, 58, 58, 9, 1, 223, 7, 4, - 105, 185, 58, 9, 1, 199, 220, 4, 105, 185, 58, 9, 1, 233, 47, 4, 75, 248, - 233, 23, 115, 185, 58, 9, 1, 208, 90, 4, 75, 60, 9, 1, 220, 36, 4, 55, - 164, 9, 1, 92, 4, 115, 185, 58, 9, 1, 99, 4, 105, 185, 248, 233, 23, 230, - 58, 58, 9, 1, 99, 4, 105, 185, 248, 233, 23, 75, 58, 9, 1, 207, 72, 4, - 219, 4, 9, 1, 193, 134, 4, 75, 193, 52, 9, 1, 206, 142, 192, 75, 9, 1, - 130, 251, 192, 9, 1, 238, 4, 4, 115, 185, 60, 9, 1, 205, 193, 4, 115, - 185, 60, 9, 1, 231, 228, 4, 223, 93, 106, 9, 1, 201, 53, 193, 133, 9, 1, - 191, 114, 4, 223, 93, 196, 13, 58, 9, 1, 251, 231, 4, 115, 185, 60, 9, 1, - 222, 107, 4, 75, 60, 9, 1, 208, 90, 4, 75, 248, 233, 23, 213, 44, 185, - 58, 9, 1, 248, 246, 4, 2, 92, 58, 9, 1, 210, 42, 4, 2, 92, 58, 9, 1, 199, - 115, 4, 2, 199, 115, 58, 9, 1, 207, 72, 4, 2, 213, 25, 58, 9, 1, 99, 4, - 105, 185, 248, 233, 23, 2, 213, 25, 58, 9, 1, 252, 0, 233, 46, 9, 1, 252, - 0, 208, 89, 9, 1, 252, 0, 213, 24, 9, 1, 210, 42, 4, 2, 196, 12, 9, 1, - 199, 115, 4, 2, 196, 12, 9, 1, 197, 125, 4, 2, 196, 12, 9, 1, 199, 150, - 4, 2, 196, 12, 9, 1, 222, 5, 4, 2, 196, 12, 9, 1, 231, 87, 4, 115, 185, - 58, 9, 1, 252, 0, 208, 90, 4, 115, 185, 58, 9, 1, 223, 7, 4, 115, 185, - 58, 9, 1, 223, 7, 4, 115, 185, 60, 9, 1, 220, 36, 4, 2, 9, 1, 199, 220, - 58, 9, 1, 230, 224, 9, 2, 233, 74, 192, 75, 9, 2, 137, 233, 74, 192, 75, - 9, 2, 137, 99, 249, 81, 4, 105, 185, 60, 9, 2, 137, 193, 23, 205, 182, 9, - 2, 137, 191, 116, 9, 220, 13, 206, 115, 75, 58, 9, 220, 13, 206, 115, 75, - 60, 9, 200, 207, 60, 9, 220, 13, 243, 11, 60, 9, 220, 13, 206, 115, 75, - 223, 118, 243, 11, 60, 9, 2, 130, 193, 133, 9, 2, 137, 193, 23, 251, 30, - 9, 2, 137, 205, 192, 9, 2, 137, 251, 230, 9, 2, 137, 208, 89, 9, 2, 137, - 213, 25, 4, 222, 52, 9, 2, 130, 213, 25, 4, 222, 52, 9, 2, 137, 193, 23, - 250, 181, 9, 2, 137, 193, 23, 250, 218, 9, 2, 137, 193, 23, 251, 131, 9, - 2, 137, 193, 23, 205, 171, 9, 2, 137, 193, 23, 208, 52, 9, 2, 137, 193, - 23, 193, 157, 9, 2, 137, 232, 157, 217, 51, 9, 2, 137, 3, 205, 187, 9, - 236, 218, 234, 95, 79, 250, 130, 9, 153, 237, 246, 60, 9, 238, 171, 233, - 70, 9, 238, 171, 237, 245, 9, 238, 171, 222, 52, 9, 238, 171, 233, 68, 9, - 238, 171, 237, 243, 9, 238, 171, 222, 50, 9, 163, 91, 75, 58, 9, 163, - 105, 185, 58, 9, 163, 219, 5, 58, 9, 163, 91, 75, 60, 9, 163, 105, 185, - 60, 9, 163, 219, 5, 60, 9, 211, 77, 233, 68, 9, 211, 77, 237, 243, 9, - 211, 77, 222, 50, 9, 2, 137, 193, 133, 9, 233, 71, 4, 206, 188, 9, 233, - 71, 4, 75, 58, 9, 222, 53, 4, 75, 60, 9, 45, 250, 236, 58, 9, 50, 250, - 236, 58, 9, 45, 250, 236, 60, 9, 50, 250, 236, 60, 9, 55, 50, 250, 236, - 58, 9, 55, 50, 250, 236, 93, 4, 236, 140, 9, 50, 250, 236, 93, 4, 236, - 140, 9, 237, 246, 4, 236, 140, 9, 87, 202, 206, 213, 25, 231, 57, 100, 3, - 223, 93, 247, 119, 100, 3, 247, 119, 100, 3, 251, 71, 100, 3, 195, 35, - 100, 1, 203, 40, 65, 100, 1, 65, 100, 1, 252, 206, 100, 1, 68, 100, 1, - 223, 199, 100, 1, 66, 100, 1, 196, 30, 100, 1, 117, 146, 100, 1, 117, - 172, 100, 1, 247, 122, 71, 100, 1, 203, 40, 71, 100, 1, 71, 100, 1, 251, - 236, 100, 1, 247, 122, 74, 100, 1, 203, 40, 74, 100, 1, 74, 100, 1, 250, - 163, 100, 1, 155, 100, 1, 221, 215, 100, 1, 231, 240, 100, 1, 231, 91, - 100, 1, 214, 68, 100, 1, 247, 160, 100, 1, 247, 1, 100, 1, 223, 32, 100, - 1, 222, 252, 100, 1, 212, 101, 100, 1, 197, 132, 100, 1, 197, 120, 100, - 1, 237, 191, 100, 1, 237, 175, 100, 1, 213, 79, 100, 1, 190, 190, 100, 1, - 199, 49, 100, 1, 238, 32, 100, 1, 237, 68, 100, 1, 180, 100, 1, 213, 61, - 100, 1, 168, 100, 1, 209, 228, 100, 1, 249, 153, 100, 1, 248, 203, 100, - 1, 174, 100, 1, 170, 100, 1, 165, 100, 1, 206, 109, 100, 1, 173, 100, 1, - 219, 73, 100, 1, 219, 62, 100, 1, 195, 188, 100, 1, 203, 165, 100, 1, - 201, 175, 100, 1, 188, 100, 1, 140, 100, 18, 3, 211, 151, 100, 18, 3, - 211, 85, 100, 3, 212, 141, 100, 3, 250, 145, 100, 18, 3, 252, 206, 100, - 18, 3, 68, 100, 18, 3, 223, 199, 100, 18, 3, 66, 100, 18, 3, 196, 30, - 100, 18, 3, 117, 146, 100, 18, 3, 117, 206, 110, 100, 18, 3, 247, 122, - 71, 100, 18, 3, 203, 40, 71, 100, 18, 3, 71, 100, 18, 3, 251, 236, 100, - 18, 3, 247, 122, 74, 100, 18, 3, 203, 40, 74, 100, 18, 3, 74, 100, 18, 3, - 250, 163, 100, 3, 195, 40, 100, 18, 3, 208, 207, 71, 100, 18, 3, 250, - 140, 100, 211, 113, 100, 201, 38, 3, 196, 154, 100, 201, 38, 3, 251, 73, - 100, 230, 211, 252, 60, 100, 252, 47, 252, 60, 100, 18, 3, 247, 122, 179, - 71, 100, 18, 3, 196, 152, 100, 18, 3, 196, 29, 100, 1, 208, 96, 100, 1, - 221, 193, 100, 1, 231, 66, 100, 1, 191, 123, 100, 1, 237, 180, 100, 1, - 207, 6, 100, 1, 233, 109, 100, 1, 191, 175, 100, 1, 117, 206, 110, 100, - 1, 117, 219, 74, 100, 18, 3, 117, 172, 100, 18, 3, 117, 219, 74, 100, - 237, 238, 100, 55, 237, 238, 100, 17, 191, 77, 100, 17, 107, 100, 17, - 109, 100, 17, 138, 100, 17, 134, 100, 17, 149, 100, 17, 169, 100, 17, - 175, 100, 17, 171, 100, 17, 178, 100, 252, 68, 56, 100, 3, 137, 201, 246, - 236, 140, 100, 1, 247, 122, 65, 100, 1, 211, 151, 100, 1, 211, 85, 100, - 1, 250, 140, 100, 1, 196, 152, 100, 1, 196, 29, 100, 1, 217, 43, 237, - 191, 100, 1, 191, 71, 100, 1, 88, 170, 100, 1, 231, 127, 100, 1, 222, - 230, 100, 1, 231, 11, 201, 63, 100, 1, 237, 181, 100, 1, 249, 53, 248, - 225, 251, 100, 248, 225, 3, 247, 119, 248, 225, 3, 251, 71, 248, 225, 3, - 195, 35, 248, 225, 1, 65, 248, 225, 1, 252, 206, 248, 225, 1, 68, 248, - 225, 1, 223, 199, 248, 225, 1, 66, 248, 225, 1, 196, 30, 248, 225, 1, - 117, 146, 248, 225, 1, 117, 172, 248, 225, 1, 71, 248, 225, 1, 251, 236, - 248, 225, 1, 74, 248, 225, 1, 250, 163, 248, 225, 1, 155, 248, 225, 1, - 221, 215, 248, 225, 1, 231, 240, 248, 225, 1, 231, 91, 248, 225, 1, 214, - 68, 248, 225, 1, 247, 160, 248, 225, 1, 247, 1, 248, 225, 1, 223, 32, - 248, 225, 1, 222, 252, 248, 225, 1, 212, 101, 248, 225, 1, 197, 132, 248, - 225, 1, 197, 120, 248, 225, 1, 237, 191, 248, 225, 1, 237, 175, 248, 225, - 1, 213, 79, 248, 225, 1, 190, 190, 248, 225, 1, 199, 49, 248, 225, 1, - 238, 32, 248, 225, 1, 237, 68, 248, 225, 1, 180, 248, 225, 1, 168, 248, - 225, 1, 209, 228, 248, 225, 1, 249, 153, 248, 225, 1, 248, 203, 248, 225, - 1, 174, 248, 225, 1, 170, 248, 225, 1, 165, 248, 225, 1, 173, 248, 225, - 1, 203, 165, 248, 225, 1, 201, 175, 248, 225, 1, 188, 248, 225, 1, 140, - 248, 225, 3, 212, 141, 248, 225, 3, 250, 145, 248, 225, 18, 3, 252, 206, - 248, 225, 18, 3, 68, 248, 225, 18, 3, 223, 199, 248, 225, 18, 3, 66, 248, - 225, 18, 3, 196, 30, 248, 225, 18, 3, 117, 146, 248, 225, 18, 3, 117, - 206, 110, 248, 225, 18, 3, 71, 248, 225, 18, 3, 251, 236, 248, 225, 18, - 3, 74, 248, 225, 18, 3, 250, 163, 248, 225, 3, 195, 40, 248, 225, 1, 221, - 204, 190, 190, 248, 225, 250, 164, 219, 198, 77, 248, 225, 1, 206, 109, - 248, 225, 1, 207, 6, 248, 225, 1, 191, 175, 248, 225, 1, 117, 206, 110, - 248, 225, 1, 117, 219, 74, 248, 225, 18, 3, 117, 172, 248, 225, 18, 3, - 117, 219, 74, 248, 225, 17, 191, 77, 248, 225, 17, 107, 248, 225, 17, - 109, 248, 225, 17, 138, 248, 225, 17, 134, 248, 225, 17, 149, 248, 225, - 17, 169, 248, 225, 17, 175, 248, 225, 17, 171, 248, 225, 17, 178, 248, - 225, 1, 207, 186, 4, 82, 237, 38, 248, 225, 1, 207, 186, 4, 110, 237, 38, - 248, 225, 206, 36, 77, 248, 225, 206, 36, 56, 248, 225, 238, 170, 212, - 133, 107, 248, 225, 238, 170, 212, 133, 109, 248, 225, 238, 170, 212, - 133, 138, 248, 225, 238, 170, 212, 133, 134, 248, 225, 238, 170, 212, - 133, 91, 219, 181, 199, 39, 199, 34, 237, 99, 248, 225, 238, 170, 237, - 100, 202, 130, 248, 225, 223, 54, 248, 225, 231, 207, 77, 248, 225, 1, - 195, 150, 251, 71, 248, 225, 252, 68, 56, 248, 225, 205, 138, 77, 230, - 144, 3, 252, 41, 248, 167, 230, 144, 3, 248, 167, 230, 144, 3, 195, 35, - 230, 144, 1, 65, 230, 144, 1, 252, 206, 230, 144, 1, 68, 230, 144, 1, - 223, 199, 230, 144, 1, 66, 230, 144, 1, 196, 30, 230, 144, 1, 234, 188, - 230, 144, 1, 251, 236, 230, 144, 1, 211, 87, 230, 144, 1, 250, 163, 230, - 144, 1, 155, 230, 144, 1, 221, 215, 230, 144, 1, 231, 240, 230, 144, 1, - 231, 91, 230, 144, 1, 214, 68, 230, 144, 1, 247, 160, 230, 144, 1, 247, - 1, 230, 144, 1, 223, 32, 230, 144, 1, 222, 252, 230, 144, 1, 212, 101, - 230, 144, 1, 197, 132, 230, 144, 1, 197, 120, 230, 144, 1, 237, 191, 230, - 144, 1, 237, 175, 230, 144, 1, 213, 79, 230, 144, 1, 190, 190, 230, 144, - 1, 199, 49, 230, 144, 1, 238, 32, 230, 144, 1, 237, 68, 230, 144, 1, 180, - 230, 144, 1, 168, 230, 144, 1, 209, 228, 230, 144, 1, 249, 153, 230, 144, - 1, 248, 203, 230, 144, 1, 174, 230, 144, 1, 170, 230, 144, 1, 165, 230, - 144, 1, 173, 230, 144, 1, 219, 73, 230, 144, 1, 195, 188, 230, 144, 1, - 203, 165, 230, 144, 1, 188, 230, 144, 1, 140, 230, 144, 3, 212, 141, 230, - 144, 18, 3, 252, 206, 230, 144, 18, 3, 68, 230, 144, 18, 3, 223, 199, - 230, 144, 18, 3, 66, 230, 144, 18, 3, 196, 30, 230, 144, 18, 3, 234, 188, - 230, 144, 18, 3, 251, 236, 230, 144, 18, 3, 211, 87, 230, 144, 18, 3, - 250, 163, 230, 144, 3, 195, 40, 230, 144, 3, 196, 157, 230, 144, 1, 221, - 193, 230, 144, 1, 231, 66, 230, 144, 1, 191, 123, 230, 144, 1, 206, 109, - 230, 144, 1, 233, 109, 230, 144, 17, 191, 77, 230, 144, 17, 107, 230, - 144, 17, 109, 230, 144, 17, 138, 230, 144, 17, 134, 230, 144, 17, 149, - 230, 144, 17, 169, 230, 144, 17, 175, 230, 144, 17, 171, 230, 144, 17, - 178, 230, 144, 198, 133, 230, 144, 252, 40, 230, 144, 223, 75, 230, 144, - 196, 58, 230, 144, 234, 148, 211, 92, 230, 144, 3, 192, 115, 230, 144, - 252, 68, 56, 230, 161, 3, 247, 119, 230, 161, 3, 251, 71, 230, 161, 3, - 195, 35, 230, 161, 1, 65, 230, 161, 1, 252, 206, 230, 161, 1, 68, 230, - 161, 1, 223, 199, 230, 161, 1, 66, 230, 161, 1, 196, 30, 230, 161, 1, - 117, 146, 230, 161, 1, 117, 172, 230, 161, 18, 247, 122, 71, 230, 161, 1, - 71, 230, 161, 1, 251, 236, 230, 161, 18, 247, 122, 74, 230, 161, 1, 74, - 230, 161, 1, 250, 163, 230, 161, 1, 155, 230, 161, 1, 221, 215, 230, 161, - 1, 231, 240, 230, 161, 1, 231, 91, 230, 161, 1, 214, 68, 230, 161, 1, - 247, 160, 230, 161, 1, 247, 1, 230, 161, 1, 223, 32, 230, 161, 1, 222, - 252, 230, 161, 1, 212, 101, 230, 161, 1, 197, 132, 230, 161, 1, 197, 120, - 230, 161, 1, 237, 191, 230, 161, 1, 237, 175, 230, 161, 1, 213, 79, 230, - 161, 1, 190, 190, 230, 161, 1, 199, 49, 230, 161, 1, 238, 32, 230, 161, - 1, 237, 68, 230, 161, 1, 180, 230, 161, 1, 168, 230, 161, 1, 209, 228, - 230, 161, 1, 249, 153, 230, 161, 1, 248, 203, 230, 161, 1, 174, 230, 161, - 1, 170, 230, 161, 1, 165, 230, 161, 1, 173, 230, 161, 1, 219, 73, 230, - 161, 1, 195, 188, 230, 161, 1, 203, 165, 230, 161, 1, 201, 175, 230, 161, - 1, 188, 230, 161, 1, 140, 230, 161, 3, 212, 141, 230, 161, 3, 250, 145, - 230, 161, 18, 3, 252, 206, 230, 161, 18, 3, 68, 230, 161, 18, 3, 223, - 199, 230, 161, 18, 3, 66, 230, 161, 18, 3, 196, 30, 230, 161, 18, 3, 117, - 146, 230, 161, 18, 3, 117, 206, 110, 230, 161, 18, 3, 247, 122, 71, 230, - 161, 18, 3, 71, 230, 161, 18, 3, 251, 236, 230, 161, 18, 3, 247, 122, 74, - 230, 161, 18, 3, 74, 230, 161, 18, 3, 250, 163, 230, 161, 3, 195, 40, - 230, 161, 211, 113, 230, 161, 1, 117, 206, 110, 230, 161, 1, 117, 219, - 74, 230, 161, 18, 3, 117, 172, 230, 161, 18, 3, 117, 219, 74, 230, 161, - 17, 191, 77, 230, 161, 17, 107, 230, 161, 17, 109, 230, 161, 17, 138, - 230, 161, 17, 134, 230, 161, 17, 149, 230, 161, 17, 169, 230, 161, 17, - 175, 230, 161, 17, 171, 230, 161, 17, 178, 230, 161, 252, 68, 56, 230, - 161, 206, 36, 56, 230, 161, 1, 191, 71, 230, 161, 3, 200, 206, 230, 161, - 3, 203, 155, 230, 161, 3, 217, 139, 230, 161, 3, 198, 224, 212, 142, 58, - 230, 161, 3, 243, 11, 212, 142, 58, 230, 161, 3, 197, 15, 212, 142, 58, - 211, 45, 3, 247, 119, 211, 45, 3, 251, 71, 211, 45, 3, 195, 35, 211, 45, - 1, 65, 211, 45, 1, 252, 206, 211, 45, 1, 68, 211, 45, 1, 223, 199, 211, - 45, 1, 66, 211, 45, 1, 196, 30, 211, 45, 1, 117, 146, 211, 45, 1, 117, - 172, 211, 45, 1, 71, 211, 45, 1, 251, 236, 211, 45, 1, 74, 211, 45, 1, - 250, 163, 211, 45, 1, 155, 211, 45, 1, 221, 215, 211, 45, 1, 231, 240, - 211, 45, 1, 231, 91, 211, 45, 1, 214, 68, 211, 45, 1, 247, 160, 211, 45, - 1, 247, 1, 211, 45, 1, 223, 32, 211, 45, 1, 222, 252, 211, 45, 1, 212, - 101, 211, 45, 1, 197, 132, 211, 45, 1, 197, 120, 211, 45, 1, 237, 191, - 211, 45, 1, 237, 175, 211, 45, 1, 213, 79, 211, 45, 1, 190, 190, 211, 45, - 1, 199, 49, 211, 45, 1, 238, 32, 211, 45, 1, 237, 68, 211, 45, 1, 180, - 211, 45, 1, 168, 211, 45, 1, 209, 228, 211, 45, 1, 249, 153, 211, 45, 1, - 248, 203, 211, 45, 1, 174, 211, 45, 1, 170, 211, 45, 1, 165, 211, 45, 1, - 173, 211, 45, 1, 219, 73, 211, 45, 1, 195, 188, 211, 45, 1, 203, 165, - 211, 45, 1, 201, 175, 211, 45, 1, 188, 211, 45, 1, 140, 211, 45, 3, 212, - 141, 211, 45, 3, 250, 145, 211, 45, 18, 3, 252, 206, 211, 45, 18, 3, 68, - 211, 45, 18, 3, 223, 199, 211, 45, 18, 3, 66, 211, 45, 18, 3, 196, 30, - 211, 45, 18, 3, 117, 146, 211, 45, 18, 3, 117, 206, 110, 211, 45, 18, 3, - 71, 211, 45, 18, 3, 251, 236, 211, 45, 18, 3, 74, 211, 45, 18, 3, 250, - 163, 211, 45, 3, 195, 40, 211, 45, 3, 210, 254, 211, 45, 251, 237, 219, - 198, 77, 211, 45, 250, 164, 219, 198, 77, 211, 45, 1, 206, 109, 211, 45, - 1, 207, 6, 211, 45, 1, 191, 175, 211, 45, 1, 117, 206, 110, 211, 45, 1, - 117, 219, 74, 211, 45, 18, 3, 117, 172, 211, 45, 18, 3, 117, 219, 74, - 211, 45, 17, 191, 77, 211, 45, 17, 107, 211, 45, 17, 109, 211, 45, 17, - 138, 211, 45, 17, 134, 211, 45, 17, 149, 211, 45, 17, 169, 211, 45, 17, - 175, 211, 45, 17, 171, 211, 45, 17, 178, 211, 45, 223, 54, 211, 45, 1, - 193, 190, 211, 45, 232, 118, 91, 208, 22, 211, 45, 232, 118, 91, 230, 70, - 211, 45, 232, 118, 115, 208, 20, 211, 45, 232, 118, 91, 202, 128, 211, - 45, 232, 118, 91, 234, 159, 211, 45, 232, 118, 115, 202, 125, 44, 3, 251, - 71, 44, 3, 195, 35, 44, 1, 65, 44, 1, 252, 206, 44, 1, 68, 44, 1, 223, - 199, 44, 1, 66, 44, 1, 196, 30, 44, 1, 71, 44, 1, 234, 188, 44, 1, 251, - 236, 44, 1, 74, 44, 1, 211, 87, 44, 1, 250, 163, 44, 1, 155, 44, 1, 214, - 68, 44, 1, 247, 160, 44, 1, 223, 32, 44, 1, 212, 101, 44, 1, 197, 132, - 44, 1, 213, 79, 44, 1, 190, 190, 44, 1, 180, 44, 1, 213, 61, 44, 1, 168, - 44, 1, 174, 44, 1, 170, 44, 1, 165, 44, 1, 206, 109, 44, 1, 173, 44, 1, - 219, 73, 44, 1, 219, 62, 44, 1, 195, 188, 44, 1, 203, 165, 44, 1, 201, - 175, 44, 1, 188, 44, 1, 140, 44, 18, 3, 252, 206, 44, 18, 3, 68, 44, 18, - 3, 223, 199, 44, 18, 3, 66, 44, 18, 3, 196, 30, 44, 18, 3, 71, 44, 18, 3, - 234, 188, 44, 18, 3, 251, 236, 44, 18, 3, 74, 44, 18, 3, 211, 87, 44, 18, - 3, 250, 163, 44, 3, 195, 40, 44, 211, 113, 44, 250, 164, 219, 198, 77, + 75, 58, 9, 1, 71, 9, 1, 99, 4, 115, 185, 60, 9, 1, 99, 249, 82, 9, 1, 99, + 249, 83, 4, 230, 60, 58, 9, 232, 82, 201, 64, 9, 1, 252, 27, 9, 2, 137, + 34, 205, 194, 4, 220, 38, 4, 131, 217, 101, 9, 2, 137, 34, 208, 92, 4, + 220, 38, 4, 131, 217, 101, 9, 2, 137, 92, 89, 20, 9, 2, 137, 220, 38, + 251, 194, 9, 2, 137, 223, 8, 9, 2, 137, 115, 236, 140, 9, 2, 137, 205, + 47, 9, 234, 97, 79, 250, 132, 9, 201, 99, 79, 206, 61, 234, 143, 229, + 116, 9, 2, 137, 206, 114, 191, 77, 9, 2, 137, 196, 73, 207, 93, 191, 77, + 9, 2, 137, 236, 141, 229, 238, 79, 221, 212, 9, 2, 137, 92, 76, 20, 9, 2, + 130, 205, 47, 9, 2, 137, 217, 143, 9, 2, 193, 133, 9, 2, 192, 75, 9, 2, + 137, 192, 75, 9, 2, 137, 213, 26, 9, 209, 110, 79, 205, 178, 9, 234, 107, + 247, 24, 130, 201, 64, 9, 234, 107, 247, 24, 137, 201, 64, 9, 206, 114, + 137, 201, 65, 4, 233, 6, 247, 23, 9, 2, 130, 216, 210, 9, 1, 238, 6, 4, + 223, 95, 196, 12, 9, 1, 207, 73, 4, 223, 95, 196, 12, 233, 207, 251, 30, + 17, 191, 77, 233, 207, 251, 30, 17, 107, 233, 207, 251, 30, 17, 109, 233, + 207, 251, 30, 17, 138, 233, 207, 251, 30, 17, 134, 233, 207, 251, 30, 17, + 150, 233, 207, 251, 30, 17, 169, 233, 207, 251, 30, 17, 175, 233, 207, + 251, 30, 17, 171, 233, 207, 251, 30, 17, 178, 9, 1, 203, 111, 4, 75, 60, + 9, 1, 238, 29, 4, 75, 60, 9, 1, 231, 89, 4, 75, 60, 9, 3, 202, 174, 251, + 139, 9, 3, 202, 174, 209, 18, 216, 188, 9, 1, 229, 213, 4, 223, 95, 196, + 12, 200, 63, 234, 97, 79, 210, 129, 200, 63, 200, 177, 232, 82, 201, 64, + 200, 63, 200, 233, 232, 82, 201, 64, 200, 63, 200, 177, 242, 85, 200, 63, + 200, 233, 242, 85, 200, 63, 228, 243, 242, 85, 200, 63, 242, 86, 202, + 111, 219, 226, 200, 63, 242, 86, 202, 111, 179, 200, 63, 200, 177, 242, + 86, 202, 111, 219, 226, 200, 63, 200, 233, 242, 86, 202, 111, 179, 200, + 63, 239, 26, 200, 63, 230, 17, 211, 178, 200, 63, 230, 17, 216, 164, 200, + 63, 230, 17, 250, 197, 200, 63, 252, 70, 77, 200, 63, 1, 251, 204, 200, + 63, 1, 200, 182, 251, 204, 200, 63, 1, 248, 213, 200, 63, 1, 231, 219, + 200, 63, 1, 231, 220, 231, 196, 200, 63, 1, 238, 2, 200, 63, 1, 236, 141, + 238, 3, 206, 182, 200, 63, 1, 229, 247, 200, 63, 1, 193, 133, 200, 63, 1, + 191, 113, 200, 63, 1, 229, 186, 200, 63, 1, 199, 69, 200, 63, 1, 199, 70, + 231, 196, 200, 63, 1, 191, 208, 200, 63, 1, 191, 209, 229, 247, 200, 63, + 1, 222, 77, 200, 63, 1, 220, 36, 200, 63, 1, 216, 48, 200, 63, 1, 212, + 132, 200, 63, 1, 204, 19, 200, 63, 1, 53, 204, 19, 200, 63, 1, 71, 200, + 63, 1, 210, 65, 200, 63, 1, 207, 19, 210, 65, 200, 63, 1, 205, 190, 200, + 63, 1, 208, 85, 200, 63, 1, 206, 182, 200, 63, 1, 203, 70, 200, 63, 1, + 199, 159, 200, 63, 1, 209, 254, 248, 196, 200, 63, 1, 209, 254, 231, 86, + 200, 63, 1, 209, 254, 237, 65, 200, 63, 208, 168, 58, 200, 63, 208, 168, + 60, 200, 63, 208, 168, 235, 139, 200, 63, 191, 0, 58, 200, 63, 191, 0, + 60, 200, 63, 191, 0, 235, 139, 200, 63, 207, 118, 58, 200, 63, 207, 118, + 60, 200, 63, 235, 140, 191, 9, 228, 242, 200, 63, 235, 140, 191, 9, 251, + 110, 200, 63, 229, 252, 58, 200, 63, 229, 252, 60, 200, 63, 229, 251, + 235, 139, 200, 63, 234, 18, 58, 200, 63, 234, 18, 60, 200, 63, 206, 25, + 200, 63, 233, 42, 236, 142, 200, 63, 207, 248, 200, 63, 206, 55, 200, 63, + 105, 81, 185, 58, 200, 63, 105, 81, 185, 60, 200, 63, 115, 185, 58, 200, + 63, 115, 185, 60, 200, 63, 211, 174, 219, 115, 58, 200, 63, 211, 174, + 219, 115, 60, 200, 63, 215, 98, 200, 63, 249, 81, 200, 63, 1, 202, 29, + 191, 69, 200, 63, 1, 202, 29, 221, 203, 200, 63, 1, 202, 29, 233, 61, 9, + 1, 248, 248, 4, 115, 185, 228, 192, 60, 9, 1, 248, 248, 4, 75, 248, 235, + 23, 115, 185, 58, 9, 1, 248, 248, 4, 115, 185, 209, 60, 196, 66, 60, 9, + 1, 248, 248, 4, 115, 185, 209, 60, 196, 66, 248, 235, 23, 105, 185, 58, + 9, 1, 248, 248, 4, 105, 185, 248, 235, 23, 75, 58, 9, 1, 248, 248, 4, + 223, 95, 2, 196, 13, 60, 9, 1, 248, 248, 4, 2, 196, 12, 9, 1, 183, 4, + 105, 185, 58, 9, 1, 183, 4, 115, 185, 209, 60, 196, 66, 60, 9, 1, 238, 6, + 4, 105, 185, 195, 85, 248, 235, 23, 2, 199, 219, 9, 1, 238, 6, 4, 223, + 95, 2, 196, 13, 60, 9, 1, 207, 73, 4, 106, 9, 1, 205, 48, 4, 232, 130, + 185, 58, 9, 1, 251, 233, 4, 105, 185, 58, 9, 1, 251, 233, 4, 115, 185, + 209, 60, 235, 121, 58, 9, 1, 251, 233, 4, 105, 185, 195, 85, 58, 9, 1, + 233, 49, 4, 105, 185, 60, 9, 1, 233, 49, 4, 115, 185, 209, 60, 196, 66, + 60, 9, 1, 222, 7, 4, 75, 58, 9, 1, 222, 7, 4, 115, 185, 58, 9, 1, 222, 7, + 4, 115, 185, 209, 60, 196, 66, 60, 9, 1, 92, 4, 75, 58, 9, 1, 92, 4, 75, + 60, 9, 1, 213, 27, 4, 105, 185, 60, 9, 1, 213, 27, 4, 2, 199, 219, 9, 1, + 213, 27, 4, 2, 196, 12, 9, 1, 220, 38, 4, 164, 9, 1, 207, 73, 4, 105, + 185, 195, 85, 58, 9, 1, 207, 73, 4, 230, 60, 58, 9, 1, 205, 48, 4, 105, + 185, 195, 85, 58, 9, 1, 183, 4, 2, 9, 1, 199, 220, 60, 9, 1, 183, 4, 2, + 9, 1, 199, 220, 23, 105, 236, 140, 9, 1, 205, 48, 4, 2, 9, 1, 199, 220, + 23, 105, 236, 140, 9, 1, 207, 73, 4, 2, 9, 1, 199, 220, 23, 105, 236, + 140, 9, 1, 183, 4, 2, 9, 1, 199, 220, 58, 9, 1, 131, 4, 233, 207, 251, + 30, 17, 105, 58, 9, 1, 131, 4, 233, 207, 251, 30, 17, 115, 58, 9, 1, 233, + 76, 99, 4, 233, 207, 251, 30, 17, 105, 58, 9, 1, 233, 76, 99, 4, 233, + 207, 251, 30, 17, 115, 58, 9, 1, 233, 76, 99, 4, 233, 207, 251, 30, 17, + 232, 130, 60, 9, 1, 193, 134, 4, 233, 207, 251, 30, 17, 105, 58, 9, 1, + 193, 134, 4, 233, 207, 251, 30, 17, 115, 58, 9, 1, 99, 249, 83, 4, 233, + 207, 251, 30, 17, 105, 58, 9, 1, 99, 249, 83, 4, 233, 207, 251, 30, 17, + 115, 58, 9, 1, 183, 4, 233, 207, 251, 30, 17, 232, 130, 60, 9, 1, 205, + 48, 4, 233, 207, 251, 30, 17, 232, 130, 58, 9, 1, 205, 48, 4, 223, 95, + 196, 12, 9, 1, 222, 109, 4, 105, 185, 58, 199, 46, 1, 230, 93, 199, 46, + 1, 203, 120, 199, 46, 1, 213, 25, 199, 46, 1, 207, 180, 199, 46, 1, 249, + 153, 199, 46, 1, 219, 158, 199, 46, 1, 222, 124, 199, 46, 1, 251, 181, + 199, 46, 1, 195, 186, 199, 46, 1, 216, 209, 199, 46, 1, 233, 109, 199, + 46, 1, 237, 68, 199, 46, 1, 199, 48, 199, 46, 1, 220, 124, 199, 46, 1, + 231, 238, 199, 46, 1, 231, 8, 199, 46, 1, 205, 46, 199, 46, 1, 237, 209, + 199, 46, 1, 191, 94, 199, 46, 1, 199, 161, 199, 46, 1, 192, 140, 199, 46, + 1, 210, 79, 199, 46, 1, 223, 17, 199, 46, 1, 243, 132, 199, 46, 1, 197, + 131, 199, 46, 1, 229, 178, 199, 46, 1, 221, 216, 199, 46, 1, 199, 47, + 199, 46, 1, 191, 121, 199, 46, 1, 203, 109, 199, 46, 1, 205, 197, 199, + 46, 1, 238, 32, 199, 46, 1, 159, 199, 46, 1, 191, 7, 199, 46, 1, 251, + 229, 199, 46, 1, 231, 87, 199, 46, 1, 208, 95, 199, 46, 1, 193, 178, 199, + 46, 252, 72, 199, 46, 252, 173, 199, 46, 228, 31, 199, 46, 234, 189, 199, + 46, 196, 161, 199, 46, 211, 88, 199, 46, 234, 200, 199, 46, 233, 197, + 199, 46, 211, 173, 199, 46, 211, 183, 199, 46, 200, 206, 199, 46, 1, 214, + 252, 213, 109, 17, 191, 77, 213, 109, 17, 107, 213, 109, 17, 109, 213, + 109, 17, 138, 213, 109, 17, 134, 213, 109, 17, 150, 213, 109, 17, 169, + 213, 109, 17, 175, 213, 109, 17, 171, 213, 109, 17, 178, 213, 109, 1, 65, + 213, 109, 1, 234, 190, 213, 109, 1, 68, 213, 109, 1, 71, 213, 109, 1, 66, + 213, 109, 1, 211, 89, 213, 109, 1, 74, 213, 109, 1, 238, 20, 213, 109, 1, + 215, 63, 213, 109, 1, 249, 155, 213, 109, 1, 168, 213, 109, 1, 190, 190, + 213, 109, 1, 223, 34, 213, 109, 1, 247, 3, 213, 109, 1, 238, 34, 213, + 109, 1, 165, 213, 109, 1, 206, 110, 213, 109, 1, 188, 213, 109, 1, 231, + 184, 213, 109, 1, 233, 111, 213, 109, 1, 155, 213, 109, 1, 173, 213, 109, + 1, 215, 9, 193, 37, 213, 109, 1, 174, 213, 109, 1, 212, 103, 213, 109, 1, + 181, 213, 109, 1, 140, 213, 109, 1, 193, 190, 213, 109, 1, 170, 213, 109, + 1, 212, 104, 193, 37, 213, 109, 1, 222, 195, 223, 34, 213, 109, 1, 222, + 195, 247, 3, 213, 109, 1, 222, 195, 165, 213, 109, 33, 203, 41, 137, 198, + 79, 213, 109, 33, 203, 41, 130, 198, 79, 213, 109, 33, 203, 41, 206, 181, + 198, 79, 213, 109, 33, 180, 237, 88, 198, 79, 213, 109, 33, 180, 137, + 198, 79, 213, 109, 33, 180, 130, 198, 79, 213, 109, 33, 180, 206, 181, + 198, 79, 213, 109, 33, 214, 215, 77, 213, 109, 33, 55, 75, 58, 213, 109, + 137, 163, 251, 51, 213, 109, 130, 163, 251, 51, 213, 109, 16, 211, 90, + 237, 103, 213, 109, 16, 231, 183, 213, 109, 242, 76, 213, 109, 233, 218, + 77, 213, 109, 220, 96, 213, 109, 237, 235, 213, 109, 236, 144, 56, 213, + 109, 199, 195, 56, 205, 152, 1, 251, 206, 205, 152, 1, 248, 150, 205, + 152, 1, 231, 218, 205, 152, 1, 238, 4, 205, 152, 1, 223, 46, 205, 152, 1, + 249, 153, 205, 152, 1, 191, 80, 205, 152, 1, 223, 55, 205, 152, 1, 198, + 125, 205, 152, 1, 191, 189, 205, 152, 1, 222, 125, 205, 152, 1, 220, 120, + 205, 152, 1, 216, 48, 205, 152, 1, 212, 132, 205, 152, 1, 202, 172, 205, + 152, 1, 223, 164, 205, 152, 1, 233, 25, 205, 152, 1, 197, 166, 205, 152, + 1, 208, 12, 205, 152, 1, 206, 182, 205, 152, 1, 203, 139, 205, 152, 1, + 199, 243, 205, 152, 87, 223, 164, 205, 152, 87, 223, 163, 205, 152, 87, + 211, 167, 205, 152, 87, 238, 18, 205, 152, 52, 1, 234, 54, 191, 189, 205, + 152, 87, 234, 54, 191, 189, 205, 152, 18, 3, 180, 71, 205, 152, 18, 3, + 71, 205, 152, 18, 3, 210, 255, 252, 208, 205, 152, 18, 3, 180, 252, 208, + 205, 152, 18, 3, 252, 208, 205, 152, 18, 3, 210, 255, 65, 205, 152, 18, + 3, 180, 65, 205, 152, 18, 3, 65, 205, 152, 52, 1, 203, 41, 65, 205, 152, + 18, 3, 203, 41, 65, 205, 152, 18, 3, 180, 66, 205, 152, 18, 3, 66, 205, + 152, 52, 1, 68, 205, 152, 18, 3, 180, 68, 205, 152, 18, 3, 68, 205, 152, + 18, 3, 74, 205, 152, 18, 3, 200, 206, 205, 152, 87, 214, 95, 205, 152, + 208, 154, 214, 95, 205, 152, 208, 154, 252, 1, 205, 152, 208, 154, 251, + 123, 205, 152, 208, 154, 249, 59, 205, 152, 208, 154, 250, 176, 205, 152, + 208, 154, 203, 58, 205, 152, 252, 70, 77, 205, 152, 208, 154, 216, 199, + 208, 50, 205, 152, 208, 154, 191, 16, 205, 152, 208, 154, 208, 50, 205, + 152, 208, 154, 191, 119, 205, 152, 208, 154, 197, 54, 205, 152, 208, 154, + 251, 1, 205, 152, 208, 154, 202, 34, 217, 39, 205, 152, 208, 154, 251, + 99, 217, 88, 1, 230, 67, 217, 88, 1, 252, 157, 217, 88, 1, 251, 255, 217, + 88, 1, 252, 44, 217, 88, 1, 251, 247, 217, 88, 1, 196, 36, 217, 88, 1, + 250, 125, 217, 88, 1, 223, 55, 217, 88, 1, 250, 173, 217, 88, 1, 251, + 213, 217, 88, 1, 251, 218, 217, 88, 1, 251, 209, 217, 88, 1, 251, 151, + 217, 88, 1, 251, 134, 217, 88, 1, 250, 221, 217, 88, 1, 223, 164, 217, + 88, 1, 251, 67, 217, 88, 1, 250, 186, 217, 88, 1, 251, 39, 217, 88, 1, + 251, 35, 217, 88, 1, 250, 211, 217, 88, 1, 250, 184, 217, 88, 1, 235, 64, + 217, 88, 1, 222, 116, 217, 88, 1, 251, 232, 217, 88, 252, 5, 77, 217, 88, + 195, 22, 77, 217, 88, 231, 155, 77, 217, 88, 208, 153, 200, 63, 1, 142, + 214, 70, 200, 63, 1, 142, 223, 34, 200, 63, 1, 142, 212, 103, 200, 63, 1, + 142, 197, 132, 200, 63, 1, 142, 213, 81, 200, 63, 1, 142, 213, 63, 200, + 63, 1, 142, 248, 205, 200, 63, 1, 142, 165, 200, 63, 1, 142, 219, 75, + 200, 63, 1, 142, 219, 64, 200, 63, 1, 142, 201, 176, 9, 1, 131, 4, 250, + 172, 233, 72, 9, 1, 131, 4, 250, 172, 198, 54, 50, 233, 72, 9, 1, 131, 4, + 50, 82, 106, 9, 1, 131, 4, 45, 82, 106, 9, 1, 131, 4, 250, 172, 222, 54, + 9, 1, 131, 4, 250, 172, 248, 79, 50, 222, 54, 9, 1, 131, 4, 250, 172, + 206, 116, 75, 58, 9, 1, 131, 4, 250, 172, 50, 206, 116, 236, 142, 9, 1, + 131, 4, 250, 172, 45, 206, 116, 236, 142, 9, 1, 131, 4, 250, 172, 206, + 116, 75, 60, 9, 1, 131, 4, 75, 58, 9, 1, 131, 4, 250, 172, 198, 54, 50, + 233, 73, 23, 75, 58, 9, 1, 131, 4, 50, 82, 201, 29, 23, 75, 58, 9, 1, + 131, 4, 250, 172, 248, 79, 50, 222, 55, 23, 75, 58, 9, 1, 131, 4, 250, + 172, 198, 54, 50, 233, 73, 23, 45, 206, 189, 9, 1, 131, 4, 50, 82, 201, + 29, 23, 45, 206, 189, 9, 1, 131, 4, 250, 172, 248, 79, 50, 222, 55, 23, + 45, 206, 189, 9, 1, 131, 4, 250, 172, 50, 230, 59, 9, 1, 131, 4, 250, + 172, 45, 230, 59, 9, 199, 169, 4, 210, 253, 230, 59, 9, 199, 169, 4, 210, + 253, 193, 133, 9, 199, 169, 4, 105, 185, 60, 9, 1, 199, 4, 192, 75, 9, + 249, 74, 206, 116, 236, 142, 9, 207, 149, 206, 116, 236, 142, 9, 1, 213, + 27, 4, 223, 95, 2, 196, 12, 9, 1, 183, 4, 223, 95, 2, 196, 13, 60, 9, 1, + 199, 220, 4, 75, 60, 9, 1, 199, 220, 4, 115, 185, 60, 9, 1, 222, 7, 4, + 105, 185, 195, 85, 60, 9, 81, 199, 215, 9, 209, 10, 87, 58, 9, 209, 184, + 87, 58, 9, 2, 137, 193, 23, 251, 208, 9, 2, 130, 193, 23, 223, 63, 9, 2, + 130, 193, 23, 223, 181, 9, 2, 130, 193, 23, 199, 173, 9, 217, 144, 193, + 179, 9, 200, 182, 131, 215, 236, 9, 235, 130, 217, 143, 9, 132, 217, 144, + 139, 217, 143, 9, 1, 248, 248, 4, 2, 196, 13, 60, 9, 1, 248, 248, 4, 230, + 60, 58, 9, 1, 223, 9, 4, 105, 185, 58, 9, 1, 199, 220, 4, 105, 185, 58, + 9, 1, 233, 49, 4, 75, 248, 235, 23, 115, 185, 58, 9, 1, 208, 92, 4, 75, + 60, 9, 1, 220, 38, 4, 55, 164, 9, 1, 92, 4, 115, 185, 58, 9, 1, 99, 4, + 105, 185, 248, 235, 23, 230, 60, 58, 9, 1, 99, 4, 105, 185, 248, 235, 23, + 75, 58, 9, 1, 207, 73, 4, 219, 6, 9, 1, 193, 134, 4, 75, 193, 52, 9, 1, + 206, 143, 192, 75, 9, 1, 130, 251, 194, 9, 1, 238, 6, 4, 115, 185, 60, 9, + 1, 205, 194, 4, 115, 185, 60, 9, 1, 231, 230, 4, 223, 95, 106, 9, 1, 201, + 54, 193, 133, 9, 1, 191, 114, 4, 223, 95, 196, 13, 58, 9, 1, 251, 233, 4, + 115, 185, 60, 9, 1, 222, 109, 4, 75, 60, 9, 1, 208, 92, 4, 75, 248, 235, + 23, 213, 46, 185, 58, 9, 1, 248, 248, 4, 2, 92, 58, 9, 1, 210, 44, 4, 2, + 92, 58, 9, 1, 199, 115, 4, 2, 199, 115, 58, 9, 1, 207, 73, 4, 2, 213, 27, + 58, 9, 1, 99, 4, 105, 185, 248, 235, 23, 2, 213, 27, 58, 9, 1, 252, 2, + 233, 48, 9, 1, 252, 2, 208, 91, 9, 1, 252, 2, 213, 26, 9, 1, 210, 44, 4, + 2, 196, 12, 9, 1, 199, 115, 4, 2, 196, 12, 9, 1, 197, 125, 4, 2, 196, 12, + 9, 1, 199, 150, 4, 2, 196, 12, 9, 1, 222, 7, 4, 2, 196, 12, 9, 1, 231, + 89, 4, 115, 185, 58, 9, 1, 252, 2, 208, 92, 4, 115, 185, 58, 9, 1, 223, + 9, 4, 115, 185, 58, 9, 1, 223, 9, 4, 115, 185, 60, 9, 1, 220, 38, 4, 2, + 9, 1, 199, 220, 58, 9, 1, 230, 226, 9, 2, 233, 76, 192, 75, 9, 2, 137, + 233, 76, 192, 75, 9, 2, 137, 99, 249, 83, 4, 105, 185, 60, 9, 2, 137, + 193, 23, 205, 183, 9, 2, 137, 191, 116, 9, 220, 15, 206, 116, 75, 58, 9, + 220, 15, 206, 116, 75, 60, 9, 200, 207, 60, 9, 220, 15, 243, 13, 60, 9, + 220, 15, 206, 116, 75, 223, 120, 243, 13, 60, 9, 2, 130, 193, 133, 9, 2, + 137, 193, 23, 251, 32, 9, 2, 137, 205, 193, 9, 2, 137, 251, 232, 9, 2, + 137, 208, 91, 9, 2, 137, 213, 27, 4, 222, 54, 9, 2, 130, 213, 27, 4, 222, + 54, 9, 2, 137, 193, 23, 250, 183, 9, 2, 137, 193, 23, 250, 220, 9, 2, + 137, 193, 23, 251, 133, 9, 2, 137, 193, 23, 205, 172, 9, 2, 137, 193, 23, + 208, 54, 9, 2, 137, 193, 23, 193, 157, 9, 2, 137, 232, 159, 217, 53, 9, + 2, 137, 3, 205, 188, 9, 236, 220, 234, 97, 79, 250, 132, 9, 154, 237, + 248, 60, 9, 238, 173, 233, 72, 9, 238, 173, 237, 247, 9, 238, 173, 222, + 54, 9, 238, 173, 233, 70, 9, 238, 173, 237, 245, 9, 238, 173, 222, 52, 9, + 163, 91, 75, 58, 9, 163, 105, 185, 58, 9, 163, 219, 7, 58, 9, 163, 91, + 75, 60, 9, 163, 105, 185, 60, 9, 163, 219, 7, 60, 9, 211, 79, 233, 70, 9, + 211, 79, 237, 245, 9, 211, 79, 222, 52, 9, 2, 137, 193, 133, 9, 233, 73, + 4, 206, 189, 9, 233, 73, 4, 75, 58, 9, 222, 55, 4, 75, 60, 9, 45, 250, + 238, 58, 9, 50, 250, 238, 58, 9, 45, 250, 238, 60, 9, 50, 250, 238, 60, + 9, 55, 50, 250, 238, 58, 9, 55, 50, 250, 238, 93, 4, 236, 142, 9, 50, + 250, 238, 93, 4, 236, 142, 9, 237, 248, 4, 236, 142, 9, 87, 202, 207, + 213, 27, 231, 59, 100, 3, 223, 95, 247, 121, 100, 3, 247, 121, 100, 3, + 251, 73, 100, 3, 195, 35, 100, 1, 203, 41, 65, 100, 1, 65, 100, 1, 252, + 208, 100, 1, 68, 100, 1, 223, 201, 100, 1, 66, 100, 1, 196, 30, 100, 1, + 117, 146, 100, 1, 117, 172, 100, 1, 247, 124, 71, 100, 1, 203, 41, 71, + 100, 1, 71, 100, 1, 251, 238, 100, 1, 247, 124, 74, 100, 1, 203, 41, 74, + 100, 1, 74, 100, 1, 250, 165, 100, 1, 155, 100, 1, 221, 217, 100, 1, 231, + 242, 100, 1, 231, 93, 100, 1, 214, 70, 100, 1, 247, 162, 100, 1, 247, 3, + 100, 1, 223, 34, 100, 1, 222, 254, 100, 1, 212, 103, 100, 1, 197, 132, + 100, 1, 197, 120, 100, 1, 237, 193, 100, 1, 237, 177, 100, 1, 213, 81, + 100, 1, 190, 190, 100, 1, 199, 49, 100, 1, 238, 34, 100, 1, 237, 70, 100, + 1, 181, 100, 1, 213, 63, 100, 1, 168, 100, 1, 209, 230, 100, 1, 249, 155, + 100, 1, 248, 205, 100, 1, 174, 100, 1, 170, 100, 1, 165, 100, 1, 206, + 110, 100, 1, 173, 100, 1, 219, 75, 100, 1, 219, 64, 100, 1, 195, 188, + 100, 1, 203, 166, 100, 1, 201, 176, 100, 1, 188, 100, 1, 140, 100, 18, 3, + 211, 153, 100, 18, 3, 211, 87, 100, 3, 212, 143, 100, 3, 250, 147, 100, + 18, 3, 252, 208, 100, 18, 3, 68, 100, 18, 3, 223, 201, 100, 18, 3, 66, + 100, 18, 3, 196, 30, 100, 18, 3, 117, 146, 100, 18, 3, 117, 206, 111, + 100, 18, 3, 247, 124, 71, 100, 18, 3, 203, 41, 71, 100, 18, 3, 71, 100, + 18, 3, 251, 238, 100, 18, 3, 247, 124, 74, 100, 18, 3, 203, 41, 74, 100, + 18, 3, 74, 100, 18, 3, 250, 165, 100, 3, 195, 40, 100, 18, 3, 208, 209, + 71, 100, 18, 3, 250, 142, 100, 211, 115, 100, 201, 39, 3, 196, 154, 100, + 201, 39, 3, 251, 75, 100, 230, 213, 252, 62, 100, 252, 49, 252, 62, 100, + 18, 3, 247, 124, 180, 71, 100, 18, 3, 196, 152, 100, 18, 3, 196, 29, 100, + 1, 208, 98, 100, 1, 221, 195, 100, 1, 231, 68, 100, 1, 191, 123, 100, 1, + 237, 182, 100, 1, 207, 7, 100, 1, 233, 111, 100, 1, 191, 175, 100, 1, + 117, 206, 111, 100, 1, 117, 219, 76, 100, 18, 3, 117, 172, 100, 18, 3, + 117, 219, 76, 100, 237, 240, 100, 55, 237, 240, 100, 17, 191, 77, 100, + 17, 107, 100, 17, 109, 100, 17, 138, 100, 17, 134, 100, 17, 150, 100, 17, + 169, 100, 17, 175, 100, 17, 171, 100, 17, 178, 100, 252, 70, 56, 100, 3, + 137, 201, 247, 236, 142, 100, 1, 247, 124, 65, 100, 1, 211, 153, 100, 1, + 211, 87, 100, 1, 250, 142, 100, 1, 196, 152, 100, 1, 196, 29, 100, 1, + 217, 45, 237, 193, 100, 1, 191, 71, 100, 1, 88, 170, 100, 1, 231, 129, + 100, 1, 222, 232, 100, 1, 231, 13, 201, 64, 100, 1, 237, 183, 100, 1, + 249, 55, 248, 227, 251, 102, 248, 227, 3, 247, 121, 248, 227, 3, 251, 73, + 248, 227, 3, 195, 35, 248, 227, 1, 65, 248, 227, 1, 252, 208, 248, 227, + 1, 68, 248, 227, 1, 223, 201, 248, 227, 1, 66, 248, 227, 1, 196, 30, 248, + 227, 1, 117, 146, 248, 227, 1, 117, 172, 248, 227, 1, 71, 248, 227, 1, + 251, 238, 248, 227, 1, 74, 248, 227, 1, 250, 165, 248, 227, 1, 155, 248, + 227, 1, 221, 217, 248, 227, 1, 231, 242, 248, 227, 1, 231, 93, 248, 227, + 1, 214, 70, 248, 227, 1, 247, 162, 248, 227, 1, 247, 3, 248, 227, 1, 223, + 34, 248, 227, 1, 222, 254, 248, 227, 1, 212, 103, 248, 227, 1, 197, 132, + 248, 227, 1, 197, 120, 248, 227, 1, 237, 193, 248, 227, 1, 237, 177, 248, + 227, 1, 213, 81, 248, 227, 1, 190, 190, 248, 227, 1, 199, 49, 248, 227, + 1, 238, 34, 248, 227, 1, 237, 70, 248, 227, 1, 181, 248, 227, 1, 168, + 248, 227, 1, 209, 230, 248, 227, 1, 249, 155, 248, 227, 1, 248, 205, 248, + 227, 1, 174, 248, 227, 1, 170, 248, 227, 1, 165, 248, 227, 1, 173, 248, + 227, 1, 203, 166, 248, 227, 1, 201, 176, 248, 227, 1, 188, 248, 227, 1, + 140, 248, 227, 3, 212, 143, 248, 227, 3, 250, 147, 248, 227, 18, 3, 252, + 208, 248, 227, 18, 3, 68, 248, 227, 18, 3, 223, 201, 248, 227, 18, 3, 66, + 248, 227, 18, 3, 196, 30, 248, 227, 18, 3, 117, 146, 248, 227, 18, 3, + 117, 206, 111, 248, 227, 18, 3, 71, 248, 227, 18, 3, 251, 238, 248, 227, + 18, 3, 74, 248, 227, 18, 3, 250, 165, 248, 227, 3, 195, 40, 248, 227, 1, + 221, 206, 190, 190, 248, 227, 250, 166, 219, 200, 77, 248, 227, 1, 206, + 110, 248, 227, 1, 207, 7, 248, 227, 1, 191, 175, 248, 227, 1, 117, 206, + 111, 248, 227, 1, 117, 219, 76, 248, 227, 18, 3, 117, 172, 248, 227, 18, + 3, 117, 219, 76, 248, 227, 17, 191, 77, 248, 227, 17, 107, 248, 227, 17, + 109, 248, 227, 17, 138, 248, 227, 17, 134, 248, 227, 17, 150, 248, 227, + 17, 169, 248, 227, 17, 175, 248, 227, 17, 171, 248, 227, 17, 178, 248, + 227, 1, 207, 188, 4, 82, 237, 40, 248, 227, 1, 207, 188, 4, 110, 237, 40, + 248, 227, 206, 37, 77, 248, 227, 206, 37, 56, 248, 227, 238, 172, 212, + 135, 107, 248, 227, 238, 172, 212, 135, 109, 248, 227, 238, 172, 212, + 135, 138, 248, 227, 238, 172, 212, 135, 134, 248, 227, 238, 172, 212, + 135, 91, 219, 183, 199, 39, 199, 34, 237, 101, 248, 227, 238, 172, 237, + 102, 202, 131, 248, 227, 223, 56, 248, 227, 231, 209, 77, 248, 227, 1, + 195, 150, 251, 73, 248, 227, 252, 70, 56, 248, 227, 205, 139, 77, 230, + 146, 3, 252, 43, 248, 169, 230, 146, 3, 248, 169, 230, 146, 3, 195, 35, + 230, 146, 1, 65, 230, 146, 1, 252, 208, 230, 146, 1, 68, 230, 146, 1, + 223, 201, 230, 146, 1, 66, 230, 146, 1, 196, 30, 230, 146, 1, 234, 190, + 230, 146, 1, 251, 238, 230, 146, 1, 211, 89, 230, 146, 1, 250, 165, 230, + 146, 1, 155, 230, 146, 1, 221, 217, 230, 146, 1, 231, 242, 230, 146, 1, + 231, 93, 230, 146, 1, 214, 70, 230, 146, 1, 247, 162, 230, 146, 1, 247, + 3, 230, 146, 1, 223, 34, 230, 146, 1, 222, 254, 230, 146, 1, 212, 103, + 230, 146, 1, 197, 132, 230, 146, 1, 197, 120, 230, 146, 1, 237, 193, 230, + 146, 1, 237, 177, 230, 146, 1, 213, 81, 230, 146, 1, 190, 190, 230, 146, + 1, 199, 49, 230, 146, 1, 238, 34, 230, 146, 1, 237, 70, 230, 146, 1, 181, + 230, 146, 1, 168, 230, 146, 1, 209, 230, 230, 146, 1, 249, 155, 230, 146, + 1, 248, 205, 230, 146, 1, 174, 230, 146, 1, 170, 230, 146, 1, 165, 230, + 146, 1, 173, 230, 146, 1, 219, 75, 230, 146, 1, 195, 188, 230, 146, 1, + 203, 166, 230, 146, 1, 188, 230, 146, 1, 140, 230, 146, 3, 212, 143, 230, + 146, 18, 3, 252, 208, 230, 146, 18, 3, 68, 230, 146, 18, 3, 223, 201, + 230, 146, 18, 3, 66, 230, 146, 18, 3, 196, 30, 230, 146, 18, 3, 234, 190, + 230, 146, 18, 3, 251, 238, 230, 146, 18, 3, 211, 89, 230, 146, 18, 3, + 250, 165, 230, 146, 3, 195, 40, 230, 146, 3, 196, 157, 230, 146, 1, 221, + 195, 230, 146, 1, 231, 68, 230, 146, 1, 191, 123, 230, 146, 1, 206, 110, + 230, 146, 1, 233, 111, 230, 146, 17, 191, 77, 230, 146, 17, 107, 230, + 146, 17, 109, 230, 146, 17, 138, 230, 146, 17, 134, 230, 146, 17, 150, + 230, 146, 17, 169, 230, 146, 17, 175, 230, 146, 17, 171, 230, 146, 17, + 178, 230, 146, 198, 133, 230, 146, 252, 42, 230, 146, 223, 77, 230, 146, + 196, 58, 230, 146, 234, 150, 211, 94, 230, 146, 3, 192, 115, 230, 146, + 252, 70, 56, 230, 163, 3, 247, 121, 230, 163, 3, 251, 73, 230, 163, 3, + 195, 35, 230, 163, 1, 65, 230, 163, 1, 252, 208, 230, 163, 1, 68, 230, + 163, 1, 223, 201, 230, 163, 1, 66, 230, 163, 1, 196, 30, 230, 163, 1, + 117, 146, 230, 163, 1, 117, 172, 230, 163, 18, 247, 124, 71, 230, 163, 1, + 71, 230, 163, 1, 251, 238, 230, 163, 18, 247, 124, 74, 230, 163, 1, 74, + 230, 163, 1, 250, 165, 230, 163, 1, 155, 230, 163, 1, 221, 217, 230, 163, + 1, 231, 242, 230, 163, 1, 231, 93, 230, 163, 1, 214, 70, 230, 163, 1, + 247, 162, 230, 163, 1, 247, 3, 230, 163, 1, 223, 34, 230, 163, 1, 222, + 254, 230, 163, 1, 212, 103, 230, 163, 1, 197, 132, 230, 163, 1, 197, 120, + 230, 163, 1, 237, 193, 230, 163, 1, 237, 177, 230, 163, 1, 213, 81, 230, + 163, 1, 190, 190, 230, 163, 1, 199, 49, 230, 163, 1, 238, 34, 230, 163, + 1, 237, 70, 230, 163, 1, 181, 230, 163, 1, 168, 230, 163, 1, 209, 230, + 230, 163, 1, 249, 155, 230, 163, 1, 248, 205, 230, 163, 1, 174, 230, 163, + 1, 170, 230, 163, 1, 165, 230, 163, 1, 173, 230, 163, 1, 219, 75, 230, + 163, 1, 195, 188, 230, 163, 1, 203, 166, 230, 163, 1, 201, 176, 230, 163, + 1, 188, 230, 163, 1, 140, 230, 163, 3, 212, 143, 230, 163, 3, 250, 147, + 230, 163, 18, 3, 252, 208, 230, 163, 18, 3, 68, 230, 163, 18, 3, 223, + 201, 230, 163, 18, 3, 66, 230, 163, 18, 3, 196, 30, 230, 163, 18, 3, 117, + 146, 230, 163, 18, 3, 117, 206, 111, 230, 163, 18, 3, 247, 124, 71, 230, + 163, 18, 3, 71, 230, 163, 18, 3, 251, 238, 230, 163, 18, 3, 247, 124, 74, + 230, 163, 18, 3, 74, 230, 163, 18, 3, 250, 165, 230, 163, 3, 195, 40, + 230, 163, 211, 115, 230, 163, 1, 117, 206, 111, 230, 163, 1, 117, 219, + 76, 230, 163, 18, 3, 117, 172, 230, 163, 18, 3, 117, 219, 76, 230, 163, + 17, 191, 77, 230, 163, 17, 107, 230, 163, 17, 109, 230, 163, 17, 138, + 230, 163, 17, 134, 230, 163, 17, 150, 230, 163, 17, 169, 230, 163, 17, + 175, 230, 163, 17, 171, 230, 163, 17, 178, 230, 163, 252, 70, 56, 230, + 163, 206, 37, 56, 230, 163, 1, 191, 71, 230, 163, 3, 200, 206, 230, 163, + 3, 203, 156, 230, 163, 3, 217, 141, 230, 163, 3, 198, 224, 212, 144, 58, + 230, 163, 3, 243, 13, 212, 144, 58, 230, 163, 3, 197, 15, 212, 144, 58, + 211, 47, 3, 247, 121, 211, 47, 3, 251, 73, 211, 47, 3, 195, 35, 211, 47, + 1, 65, 211, 47, 1, 252, 208, 211, 47, 1, 68, 211, 47, 1, 223, 201, 211, + 47, 1, 66, 211, 47, 1, 196, 30, 211, 47, 1, 117, 146, 211, 47, 1, 117, + 172, 211, 47, 1, 71, 211, 47, 1, 251, 238, 211, 47, 1, 74, 211, 47, 1, + 250, 165, 211, 47, 1, 155, 211, 47, 1, 221, 217, 211, 47, 1, 231, 242, + 211, 47, 1, 231, 93, 211, 47, 1, 214, 70, 211, 47, 1, 247, 162, 211, 47, + 1, 247, 3, 211, 47, 1, 223, 34, 211, 47, 1, 222, 254, 211, 47, 1, 212, + 103, 211, 47, 1, 197, 132, 211, 47, 1, 197, 120, 211, 47, 1, 237, 193, + 211, 47, 1, 237, 177, 211, 47, 1, 213, 81, 211, 47, 1, 190, 190, 211, 47, + 1, 199, 49, 211, 47, 1, 238, 34, 211, 47, 1, 237, 70, 211, 47, 1, 181, + 211, 47, 1, 168, 211, 47, 1, 209, 230, 211, 47, 1, 249, 155, 211, 47, 1, + 248, 205, 211, 47, 1, 174, 211, 47, 1, 170, 211, 47, 1, 165, 211, 47, 1, + 173, 211, 47, 1, 219, 75, 211, 47, 1, 195, 188, 211, 47, 1, 203, 166, + 211, 47, 1, 201, 176, 211, 47, 1, 188, 211, 47, 1, 140, 211, 47, 3, 212, + 143, 211, 47, 3, 250, 147, 211, 47, 18, 3, 252, 208, 211, 47, 18, 3, 68, + 211, 47, 18, 3, 223, 201, 211, 47, 18, 3, 66, 211, 47, 18, 3, 196, 30, + 211, 47, 18, 3, 117, 146, 211, 47, 18, 3, 117, 206, 111, 211, 47, 18, 3, + 71, 211, 47, 18, 3, 251, 238, 211, 47, 18, 3, 74, 211, 47, 18, 3, 250, + 165, 211, 47, 3, 195, 40, 211, 47, 3, 211, 0, 211, 47, 251, 239, 219, + 200, 77, 211, 47, 250, 166, 219, 200, 77, 211, 47, 1, 206, 110, 211, 47, + 1, 207, 7, 211, 47, 1, 191, 175, 211, 47, 1, 117, 206, 111, 211, 47, 1, + 117, 219, 76, 211, 47, 18, 3, 117, 172, 211, 47, 18, 3, 117, 219, 76, + 211, 47, 17, 191, 77, 211, 47, 17, 107, 211, 47, 17, 109, 211, 47, 17, + 138, 211, 47, 17, 134, 211, 47, 17, 150, 211, 47, 17, 169, 211, 47, 17, + 175, 211, 47, 17, 171, 211, 47, 17, 178, 211, 47, 223, 56, 211, 47, 1, + 193, 190, 211, 47, 232, 120, 91, 208, 24, 211, 47, 232, 120, 91, 230, 72, + 211, 47, 232, 120, 115, 208, 22, 211, 47, 232, 120, 91, 202, 129, 211, + 47, 232, 120, 91, 234, 161, 211, 47, 232, 120, 115, 202, 126, 44, 3, 251, + 73, 44, 3, 195, 35, 44, 1, 65, 44, 1, 252, 208, 44, 1, 68, 44, 1, 223, + 201, 44, 1, 66, 44, 1, 196, 30, 44, 1, 71, 44, 1, 234, 190, 44, 1, 251, + 238, 44, 1, 74, 44, 1, 211, 89, 44, 1, 250, 165, 44, 1, 155, 44, 1, 214, + 70, 44, 1, 247, 162, 44, 1, 223, 34, 44, 1, 212, 103, 44, 1, 197, 132, + 44, 1, 213, 81, 44, 1, 190, 190, 44, 1, 181, 44, 1, 213, 63, 44, 1, 168, + 44, 1, 174, 44, 1, 170, 44, 1, 165, 44, 1, 206, 110, 44, 1, 173, 44, 1, + 219, 75, 44, 1, 219, 64, 44, 1, 195, 188, 44, 1, 203, 166, 44, 1, 201, + 176, 44, 1, 188, 44, 1, 140, 44, 18, 3, 252, 208, 44, 18, 3, 68, 44, 18, + 3, 223, 201, 44, 18, 3, 66, 44, 18, 3, 196, 30, 44, 18, 3, 71, 44, 18, 3, + 234, 190, 44, 18, 3, 251, 238, 44, 18, 3, 74, 44, 18, 3, 211, 89, 44, 18, + 3, 250, 165, 44, 3, 195, 40, 44, 211, 115, 44, 250, 166, 219, 200, 77, 44, 17, 191, 77, 44, 17, 107, 44, 17, 109, 44, 17, 138, 44, 17, 134, 44, - 17, 149, 44, 17, 169, 44, 17, 175, 44, 17, 171, 44, 17, 178, 44, 31, 199, - 95, 44, 31, 91, 228, 140, 44, 31, 91, 189, 44, 237, 204, 56, 44, 215, - 214, 56, 44, 192, 78, 56, 44, 237, 142, 56, 44, 238, 230, 56, 44, 250, - 220, 93, 56, 44, 206, 36, 56, 44, 31, 56, 199, 99, 3, 33, 247, 120, 58, - 199, 99, 3, 247, 119, 199, 99, 3, 251, 71, 199, 99, 3, 195, 35, 199, 99, - 3, 33, 251, 72, 58, 199, 99, 1, 65, 199, 99, 1, 252, 206, 199, 99, 1, 68, - 199, 99, 1, 223, 199, 199, 99, 1, 66, 199, 99, 1, 196, 30, 199, 99, 1, - 117, 146, 199, 99, 1, 117, 172, 199, 99, 1, 71, 199, 99, 1, 234, 188, - 199, 99, 1, 251, 236, 199, 99, 1, 74, 199, 99, 1, 211, 87, 199, 99, 1, - 250, 163, 199, 99, 1, 155, 199, 99, 1, 221, 215, 199, 99, 1, 231, 240, - 199, 99, 1, 231, 91, 199, 99, 1, 214, 68, 199, 99, 1, 247, 160, 199, 99, - 1, 247, 1, 199, 99, 1, 223, 32, 199, 99, 1, 222, 252, 199, 99, 1, 212, - 101, 199, 99, 1, 197, 132, 199, 99, 1, 197, 120, 199, 99, 1, 237, 191, - 199, 99, 1, 237, 175, 199, 99, 1, 213, 79, 199, 99, 1, 190, 190, 199, 99, - 1, 199, 49, 199, 99, 1, 238, 32, 199, 99, 1, 237, 68, 199, 99, 1, 180, - 199, 99, 1, 168, 199, 99, 1, 209, 228, 199, 99, 1, 249, 153, 199, 99, 1, - 248, 203, 199, 99, 1, 174, 199, 99, 1, 170, 199, 99, 1, 165, 199, 99, 1, - 206, 109, 199, 99, 1, 173, 199, 99, 1, 219, 73, 199, 99, 1, 219, 62, 199, - 99, 1, 195, 188, 199, 99, 1, 203, 165, 199, 99, 1, 201, 175, 199, 99, 1, - 188, 199, 99, 1, 140, 199, 99, 3, 212, 141, 199, 99, 3, 250, 145, 199, - 99, 18, 3, 252, 206, 199, 99, 18, 3, 68, 199, 99, 18, 3, 223, 199, 199, + 17, 150, 44, 17, 169, 44, 17, 175, 44, 17, 171, 44, 17, 178, 44, 31, 199, + 95, 44, 31, 91, 228, 142, 44, 31, 91, 189, 44, 237, 206, 56, 44, 215, + 216, 56, 44, 192, 78, 56, 44, 237, 144, 56, 44, 238, 232, 56, 44, 250, + 222, 93, 56, 44, 206, 37, 56, 44, 31, 56, 199, 99, 3, 33, 247, 122, 58, + 199, 99, 3, 247, 121, 199, 99, 3, 251, 73, 199, 99, 3, 195, 35, 199, 99, + 3, 33, 251, 74, 58, 199, 99, 1, 65, 199, 99, 1, 252, 208, 199, 99, 1, 68, + 199, 99, 1, 223, 201, 199, 99, 1, 66, 199, 99, 1, 196, 30, 199, 99, 1, + 117, 146, 199, 99, 1, 117, 172, 199, 99, 1, 71, 199, 99, 1, 234, 190, + 199, 99, 1, 251, 238, 199, 99, 1, 74, 199, 99, 1, 211, 89, 199, 99, 1, + 250, 165, 199, 99, 1, 155, 199, 99, 1, 221, 217, 199, 99, 1, 231, 242, + 199, 99, 1, 231, 93, 199, 99, 1, 214, 70, 199, 99, 1, 247, 162, 199, 99, + 1, 247, 3, 199, 99, 1, 223, 34, 199, 99, 1, 222, 254, 199, 99, 1, 212, + 103, 199, 99, 1, 197, 132, 199, 99, 1, 197, 120, 199, 99, 1, 237, 193, + 199, 99, 1, 237, 177, 199, 99, 1, 213, 81, 199, 99, 1, 190, 190, 199, 99, + 1, 199, 49, 199, 99, 1, 238, 34, 199, 99, 1, 237, 70, 199, 99, 1, 181, + 199, 99, 1, 168, 199, 99, 1, 209, 230, 199, 99, 1, 249, 155, 199, 99, 1, + 248, 205, 199, 99, 1, 174, 199, 99, 1, 170, 199, 99, 1, 165, 199, 99, 1, + 206, 110, 199, 99, 1, 173, 199, 99, 1, 219, 75, 199, 99, 1, 219, 64, 199, + 99, 1, 195, 188, 199, 99, 1, 203, 166, 199, 99, 1, 201, 176, 199, 99, 1, + 188, 199, 99, 1, 140, 199, 99, 3, 212, 143, 199, 99, 3, 250, 147, 199, + 99, 18, 3, 252, 208, 199, 99, 18, 3, 68, 199, 99, 18, 3, 223, 201, 199, 99, 18, 3, 66, 199, 99, 18, 3, 196, 30, 199, 99, 18, 3, 117, 146, 199, - 99, 18, 3, 117, 206, 110, 199, 99, 18, 3, 71, 199, 99, 18, 3, 234, 188, - 199, 99, 18, 3, 251, 236, 199, 99, 18, 3, 74, 199, 99, 18, 3, 211, 87, - 199, 99, 18, 3, 250, 163, 199, 99, 3, 195, 40, 199, 99, 219, 198, 77, - 199, 99, 251, 237, 219, 198, 77, 199, 99, 1, 197, 168, 199, 99, 1, 235, - 35, 199, 99, 1, 206, 90, 199, 99, 1, 214, 232, 209, 46, 199, 99, 1, 117, - 206, 110, 199, 99, 1, 117, 219, 74, 199, 99, 18, 3, 117, 172, 199, 99, - 18, 3, 117, 219, 74, 199, 99, 17, 191, 77, 199, 99, 17, 107, 199, 99, 17, - 109, 199, 99, 17, 138, 199, 99, 17, 134, 199, 99, 17, 149, 199, 99, 17, + 99, 18, 3, 117, 206, 111, 199, 99, 18, 3, 71, 199, 99, 18, 3, 234, 190, + 199, 99, 18, 3, 251, 238, 199, 99, 18, 3, 74, 199, 99, 18, 3, 211, 89, + 199, 99, 18, 3, 250, 165, 199, 99, 3, 195, 40, 199, 99, 219, 200, 77, + 199, 99, 251, 239, 219, 200, 77, 199, 99, 1, 197, 168, 199, 99, 1, 235, + 37, 199, 99, 1, 206, 91, 199, 99, 1, 214, 234, 209, 48, 199, 99, 1, 117, + 206, 111, 199, 99, 1, 117, 219, 76, 199, 99, 18, 3, 117, 172, 199, 99, + 18, 3, 117, 219, 76, 199, 99, 17, 191, 77, 199, 99, 17, 107, 199, 99, 17, + 109, 199, 99, 17, 138, 199, 99, 17, 134, 199, 99, 17, 150, 199, 99, 17, 169, 199, 99, 17, 175, 199, 99, 17, 171, 199, 99, 17, 178, 199, 99, 3, - 202, 210, 199, 99, 232, 118, 17, 191, 78, 40, 211, 155, 208, 253, 79, - 134, 199, 99, 232, 118, 17, 91, 40, 211, 155, 208, 253, 79, 134, 199, 99, - 232, 118, 17, 105, 40, 211, 155, 208, 253, 79, 134, 199, 99, 232, 118, - 17, 115, 40, 211, 155, 208, 253, 79, 134, 199, 99, 232, 118, 17, 91, 40, - 233, 229, 208, 253, 79, 134, 199, 99, 232, 118, 17, 105, 40, 233, 229, - 208, 253, 79, 134, 199, 99, 232, 118, 17, 115, 40, 233, 229, 208, 253, - 79, 134, 199, 99, 3, 197, 48, 222, 81, 3, 201, 246, 247, 119, 222, 81, 3, - 247, 119, 222, 81, 3, 251, 71, 222, 81, 3, 195, 35, 222, 81, 3, 202, 210, - 222, 81, 1, 65, 222, 81, 1, 252, 206, 222, 81, 1, 68, 222, 81, 1, 223, - 199, 222, 81, 1, 66, 222, 81, 1, 196, 30, 222, 81, 1, 117, 146, 222, 81, - 1, 117, 172, 222, 81, 1, 71, 222, 81, 1, 234, 188, 222, 81, 1, 251, 236, - 222, 81, 1, 74, 222, 81, 1, 211, 87, 222, 81, 1, 250, 163, 222, 81, 1, - 155, 222, 81, 1, 221, 215, 222, 81, 1, 231, 240, 222, 81, 1, 231, 91, - 222, 81, 1, 214, 68, 222, 81, 1, 247, 160, 222, 81, 1, 247, 1, 222, 81, - 1, 223, 32, 222, 81, 1, 222, 252, 222, 81, 1, 212, 101, 222, 81, 1, 197, - 132, 222, 81, 1, 197, 120, 222, 81, 1, 237, 191, 222, 81, 1, 237, 175, - 222, 81, 1, 213, 79, 222, 81, 1, 190, 190, 222, 81, 1, 199, 49, 222, 81, - 1, 238, 32, 222, 81, 1, 237, 68, 222, 81, 1, 180, 222, 81, 1, 168, 222, - 81, 1, 209, 228, 222, 81, 1, 249, 153, 222, 81, 1, 248, 203, 222, 81, 1, - 174, 222, 81, 1, 170, 222, 81, 1, 165, 222, 81, 1, 206, 109, 222, 81, 1, - 173, 222, 81, 1, 219, 73, 222, 81, 1, 195, 188, 222, 81, 1, 203, 165, - 222, 81, 1, 201, 175, 222, 81, 1, 188, 222, 81, 1, 140, 222, 81, 3, 212, - 141, 222, 81, 3, 250, 145, 222, 81, 18, 3, 252, 206, 222, 81, 18, 3, 68, - 222, 81, 18, 3, 223, 199, 222, 81, 18, 3, 66, 222, 81, 18, 3, 196, 30, - 222, 81, 18, 3, 117, 146, 222, 81, 18, 3, 117, 206, 110, 222, 81, 18, 3, - 71, 222, 81, 18, 3, 234, 188, 222, 81, 18, 3, 251, 236, 222, 81, 18, 3, - 74, 222, 81, 18, 3, 211, 87, 222, 81, 18, 3, 250, 163, 222, 81, 3, 195, - 40, 222, 81, 219, 198, 77, 222, 81, 251, 237, 219, 198, 77, 222, 81, 1, - 214, 232, 209, 46, 222, 81, 1, 233, 109, 222, 81, 1, 117, 206, 110, 222, - 81, 1, 117, 219, 74, 222, 81, 18, 3, 117, 172, 222, 81, 18, 3, 117, 219, - 74, 222, 81, 17, 191, 77, 222, 81, 17, 107, 222, 81, 17, 109, 222, 81, - 17, 138, 222, 81, 17, 134, 222, 81, 17, 149, 222, 81, 17, 169, 222, 81, - 17, 175, 222, 81, 17, 171, 222, 81, 17, 178, 222, 81, 3, 222, 237, 222, - 81, 3, 196, 75, 222, 81, 3, 33, 251, 72, 93, 183, 142, 3, 33, 251, 72, - 58, 142, 3, 247, 119, 142, 3, 251, 71, 142, 3, 195, 35, 142, 1, 195, 150, - 251, 71, 142, 1, 65, 142, 1, 252, 206, 142, 1, 68, 142, 1, 223, 199, 142, + 202, 211, 199, 99, 232, 120, 17, 191, 78, 40, 211, 157, 208, 255, 79, + 134, 199, 99, 232, 120, 17, 91, 40, 211, 157, 208, 255, 79, 134, 199, 99, + 232, 120, 17, 105, 40, 211, 157, 208, 255, 79, 134, 199, 99, 232, 120, + 17, 115, 40, 211, 157, 208, 255, 79, 134, 199, 99, 232, 120, 17, 91, 40, + 233, 231, 208, 255, 79, 134, 199, 99, 232, 120, 17, 105, 40, 233, 231, + 208, 255, 79, 134, 199, 99, 232, 120, 17, 115, 40, 233, 231, 208, 255, + 79, 134, 199, 99, 3, 197, 48, 222, 83, 3, 201, 247, 247, 121, 222, 83, 3, + 247, 121, 222, 83, 3, 251, 73, 222, 83, 3, 195, 35, 222, 83, 3, 202, 211, + 222, 83, 1, 65, 222, 83, 1, 252, 208, 222, 83, 1, 68, 222, 83, 1, 223, + 201, 222, 83, 1, 66, 222, 83, 1, 196, 30, 222, 83, 1, 117, 146, 222, 83, + 1, 117, 172, 222, 83, 1, 71, 222, 83, 1, 234, 190, 222, 83, 1, 251, 238, + 222, 83, 1, 74, 222, 83, 1, 211, 89, 222, 83, 1, 250, 165, 222, 83, 1, + 155, 222, 83, 1, 221, 217, 222, 83, 1, 231, 242, 222, 83, 1, 231, 93, + 222, 83, 1, 214, 70, 222, 83, 1, 247, 162, 222, 83, 1, 247, 3, 222, 83, + 1, 223, 34, 222, 83, 1, 222, 254, 222, 83, 1, 212, 103, 222, 83, 1, 197, + 132, 222, 83, 1, 197, 120, 222, 83, 1, 237, 193, 222, 83, 1, 237, 177, + 222, 83, 1, 213, 81, 222, 83, 1, 190, 190, 222, 83, 1, 199, 49, 222, 83, + 1, 238, 34, 222, 83, 1, 237, 70, 222, 83, 1, 181, 222, 83, 1, 168, 222, + 83, 1, 209, 230, 222, 83, 1, 249, 155, 222, 83, 1, 248, 205, 222, 83, 1, + 174, 222, 83, 1, 170, 222, 83, 1, 165, 222, 83, 1, 206, 110, 222, 83, 1, + 173, 222, 83, 1, 219, 75, 222, 83, 1, 195, 188, 222, 83, 1, 203, 166, + 222, 83, 1, 201, 176, 222, 83, 1, 188, 222, 83, 1, 140, 222, 83, 3, 212, + 143, 222, 83, 3, 250, 147, 222, 83, 18, 3, 252, 208, 222, 83, 18, 3, 68, + 222, 83, 18, 3, 223, 201, 222, 83, 18, 3, 66, 222, 83, 18, 3, 196, 30, + 222, 83, 18, 3, 117, 146, 222, 83, 18, 3, 117, 206, 111, 222, 83, 18, 3, + 71, 222, 83, 18, 3, 234, 190, 222, 83, 18, 3, 251, 238, 222, 83, 18, 3, + 74, 222, 83, 18, 3, 211, 89, 222, 83, 18, 3, 250, 165, 222, 83, 3, 195, + 40, 222, 83, 219, 200, 77, 222, 83, 251, 239, 219, 200, 77, 222, 83, 1, + 214, 234, 209, 48, 222, 83, 1, 233, 111, 222, 83, 1, 117, 206, 111, 222, + 83, 1, 117, 219, 76, 222, 83, 18, 3, 117, 172, 222, 83, 18, 3, 117, 219, + 76, 222, 83, 17, 191, 77, 222, 83, 17, 107, 222, 83, 17, 109, 222, 83, + 17, 138, 222, 83, 17, 134, 222, 83, 17, 150, 222, 83, 17, 169, 222, 83, + 17, 175, 222, 83, 17, 171, 222, 83, 17, 178, 222, 83, 3, 222, 239, 222, + 83, 3, 196, 75, 222, 83, 3, 33, 251, 74, 93, 179, 142, 3, 33, 251, 74, + 58, 142, 3, 247, 121, 142, 3, 251, 73, 142, 3, 195, 35, 142, 1, 195, 150, + 251, 73, 142, 1, 65, 142, 1, 252, 208, 142, 1, 68, 142, 1, 223, 201, 142, 1, 66, 142, 1, 196, 30, 142, 1, 117, 146, 142, 1, 117, 172, 142, 1, 71, - 142, 1, 234, 188, 142, 1, 251, 236, 142, 1, 74, 142, 1, 211, 87, 142, 1, - 250, 163, 142, 1, 155, 142, 1, 221, 215, 142, 1, 231, 240, 142, 1, 231, - 91, 142, 1, 214, 68, 142, 1, 247, 160, 142, 1, 247, 1, 142, 1, 223, 32, - 142, 1, 222, 252, 142, 1, 212, 101, 142, 1, 197, 132, 142, 1, 197, 120, - 142, 1, 237, 191, 142, 1, 237, 175, 142, 1, 213, 79, 142, 1, 190, 190, - 142, 1, 199, 49, 142, 1, 238, 32, 142, 1, 237, 68, 142, 1, 180, 142, 1, - 213, 61, 142, 1, 168, 142, 1, 209, 228, 142, 1, 249, 153, 142, 1, 248, - 203, 142, 1, 174, 142, 1, 170, 142, 1, 165, 142, 1, 206, 109, 142, 1, - 173, 142, 1, 219, 73, 142, 1, 219, 62, 142, 1, 195, 188, 142, 1, 203, - 165, 142, 1, 201, 175, 142, 1, 188, 142, 1, 140, 142, 1, 197, 101, 142, - 3, 81, 249, 88, 195, 40, 142, 3, 243, 4, 195, 40, 142, 3, 250, 145, 142, - 18, 3, 252, 206, 142, 18, 3, 68, 142, 18, 3, 223, 199, 142, 18, 3, 66, - 142, 18, 3, 196, 30, 142, 18, 3, 117, 146, 142, 18, 3, 117, 206, 110, - 142, 18, 3, 71, 142, 18, 3, 234, 188, 142, 18, 3, 251, 236, 142, 18, 3, - 74, 142, 18, 3, 211, 87, 142, 18, 3, 250, 163, 142, 3, 195, 40, 142, 1, - 75, 207, 45, 142, 3, 210, 130, 142, 1, 243, 84, 218, 168, 142, 1, 243, - 84, 192, 159, 142, 1, 243, 84, 219, 63, 142, 250, 164, 219, 198, 77, 142, - 232, 118, 91, 211, 100, 142, 232, 118, 91, 232, 139, 142, 232, 118, 115, - 234, 155, 142, 232, 118, 91, 197, 35, 142, 232, 118, 91, 199, 86, 142, - 232, 118, 115, 197, 34, 142, 232, 118, 91, 233, 18, 142, 1, 251, 14, 223, - 199, 142, 1, 117, 206, 110, 142, 1, 117, 219, 74, 142, 18, 3, 117, 172, - 142, 18, 3, 117, 219, 74, 142, 17, 191, 77, 142, 17, 107, 142, 17, 109, - 142, 17, 138, 142, 17, 134, 142, 17, 149, 142, 17, 169, 142, 17, 175, - 142, 17, 171, 142, 17, 178, 142, 31, 199, 95, 142, 31, 91, 228, 140, 142, - 31, 91, 189, 142, 232, 118, 91, 208, 22, 142, 232, 118, 91, 230, 70, 142, - 232, 118, 115, 208, 20, 142, 232, 118, 91, 202, 128, 142, 232, 118, 91, - 234, 159, 142, 232, 118, 115, 202, 125, 142, 237, 209, 77, 142, 1, 243, - 84, 213, 80, 142, 1, 243, 84, 215, 61, 142, 1, 243, 84, 206, 110, 142, 1, - 243, 84, 172, 142, 1, 243, 84, 219, 74, 142, 1, 243, 84, 222, 152, 166, - 3, 247, 119, 166, 3, 251, 70, 166, 3, 195, 34, 166, 1, 250, 129, 166, 1, - 252, 159, 166, 1, 252, 5, 166, 1, 252, 20, 166, 1, 223, 43, 166, 1, 223, - 198, 166, 1, 196, 20, 166, 1, 196, 24, 166, 1, 223, 70, 166, 1, 223, 71, - 166, 1, 223, 182, 166, 1, 223, 184, 166, 1, 233, 196, 166, 1, 234, 183, - 166, 1, 251, 219, 166, 1, 210, 241, 166, 1, 211, 80, 166, 1, 250, 148, - 166, 1, 251, 163, 222, 27, 166, 1, 217, 119, 222, 27, 166, 1, 251, 163, - 231, 185, 166, 1, 217, 119, 231, 185, 166, 1, 222, 80, 214, 247, 166, 1, - 205, 132, 231, 185, 166, 1, 251, 163, 247, 68, 166, 1, 217, 119, 247, 68, - 166, 1, 251, 163, 223, 13, 166, 1, 217, 119, 223, 13, 166, 1, 199, 241, - 214, 247, 166, 1, 199, 241, 205, 131, 214, 248, 166, 1, 205, 132, 223, - 13, 166, 1, 251, 163, 197, 128, 166, 1, 217, 119, 197, 128, 166, 1, 251, - 163, 237, 182, 166, 1, 217, 119, 237, 182, 166, 1, 215, 92, 214, 197, - 166, 1, 205, 132, 237, 182, 166, 1, 251, 163, 199, 153, 166, 1, 217, 119, - 199, 153, 166, 1, 251, 163, 237, 202, 166, 1, 217, 119, 237, 202, 166, 1, - 237, 234, 214, 197, 166, 1, 205, 132, 237, 202, 166, 1, 251, 163, 210, - 71, 166, 1, 217, 119, 210, 71, 166, 1, 251, 163, 249, 55, 166, 1, 217, - 119, 249, 55, 166, 1, 217, 19, 166, 1, 251, 143, 249, 55, 166, 1, 192, - 85, 166, 1, 207, 121, 166, 1, 237, 234, 219, 247, 166, 1, 195, 156, 166, - 1, 199, 241, 205, 102, 166, 1, 215, 92, 205, 102, 166, 1, 237, 234, 205, - 102, 166, 1, 229, 251, 166, 1, 215, 92, 219, 247, 166, 1, 233, 61, 166, - 3, 251, 205, 166, 18, 3, 252, 15, 166, 18, 3, 221, 240, 252, 22, 166, 18, - 3, 237, 11, 252, 22, 166, 18, 3, 221, 240, 223, 67, 166, 18, 3, 237, 11, - 223, 67, 166, 18, 3, 221, 240, 210, 219, 166, 18, 3, 237, 11, 210, 219, - 166, 18, 3, 231, 229, 166, 18, 3, 221, 46, 166, 18, 3, 237, 11, 221, 46, - 166, 18, 3, 221, 48, 237, 120, 166, 18, 3, 221, 47, 230, 92, 252, 15, - 166, 18, 3, 221, 47, 230, 92, 237, 11, 252, 15, 166, 18, 3, 221, 47, 230, - 92, 231, 184, 166, 18, 3, 231, 184, 166, 219, 86, 17, 191, 77, 166, 219, - 86, 17, 107, 166, 219, 86, 17, 109, 166, 219, 86, 17, 138, 166, 219, 86, - 17, 134, 166, 219, 86, 17, 149, 166, 219, 86, 17, 169, 166, 219, 86, 17, - 175, 166, 219, 86, 17, 171, 166, 219, 86, 17, 178, 166, 18, 3, 237, 11, - 231, 229, 166, 18, 3, 237, 11, 231, 184, 166, 208, 152, 220, 209, 199, - 44, 246, 240, 221, 68, 222, 102, 199, 44, 246, 240, 221, 184, 221, 209, - 199, 44, 246, 240, 221, 184, 221, 174, 199, 44, 246, 240, 221, 184, 221, - 169, 199, 44, 246, 240, 221, 184, 221, 179, 199, 44, 246, 240, 221, 184, - 207, 143, 199, 44, 246, 240, 213, 250, 213, 237, 199, 44, 246, 240, 243, - 69, 246, 246, 199, 44, 246, 240, 243, 69, 243, 79, 199, 44, 246, 240, - 243, 69, 246, 245, 199, 44, 246, 240, 202, 47, 202, 46, 199, 44, 246, - 240, 243, 69, 243, 65, 199, 44, 246, 240, 192, 13, 192, 20, 199, 44, 246, - 240, 236, 175, 246, 254, 199, 44, 246, 240, 119, 210, 87, 199, 44, 246, - 240, 198, 242, 199, 38, 199, 44, 246, 240, 198, 242, 214, 222, 199, 44, - 246, 240, 198, 242, 209, 188, 199, 44, 246, 240, 213, 44, 214, 102, 199, - 44, 246, 240, 236, 175, 237, 121, 199, 44, 246, 240, 119, 199, 184, 199, - 44, 246, 240, 198, 242, 198, 207, 199, 44, 246, 240, 198, 242, 199, 45, - 199, 44, 246, 240, 198, 242, 198, 236, 199, 44, 246, 240, 213, 44, 212, - 178, 199, 44, 246, 240, 248, 112, 249, 118, 199, 44, 246, 240, 209, 74, - 209, 110, 199, 44, 246, 240, 209, 200, 209, 190, 199, 44, 246, 240, 232, - 176, 233, 109, 199, 44, 246, 240, 209, 200, 209, 221, 199, 44, 246, 240, - 232, 176, 233, 80, 199, 44, 246, 240, 209, 200, 205, 146, 199, 44, 246, - 240, 216, 13, 174, 199, 44, 246, 240, 192, 13, 192, 116, 199, 44, 246, - 240, 206, 163, 206, 61, 199, 44, 246, 240, 206, 68, 199, 44, 246, 240, - 219, 44, 219, 105, 199, 44, 246, 240, 218, 225, 199, 44, 246, 240, 193, - 49, 193, 175, 199, 44, 246, 240, 202, 47, 205, 167, 199, 44, 246, 240, - 202, 47, 206, 32, 199, 44, 246, 240, 202, 47, 200, 251, 199, 44, 246, - 240, 229, 24, 229, 122, 199, 44, 246, 240, 219, 44, 243, 47, 199, 44, - 246, 240, 187, 251, 122, 199, 44, 246, 240, 229, 24, 213, 34, 199, 44, - 246, 240, 210, 194, 199, 44, 246, 240, 205, 126, 65, 199, 44, 246, 240, - 217, 113, 230, 55, 199, 44, 246, 240, 205, 126, 252, 206, 199, 44, 246, - 240, 205, 126, 251, 149, 199, 44, 246, 240, 205, 126, 68, 199, 44, 246, - 240, 205, 126, 223, 199, 199, 44, 246, 240, 205, 126, 196, 152, 199, 44, - 246, 240, 205, 126, 196, 149, 199, 44, 246, 240, 205, 126, 66, 199, 44, - 246, 240, 205, 126, 196, 30, 199, 44, 246, 240, 209, 202, 199, 44, 238, - 170, 16, 249, 119, 199, 44, 246, 240, 205, 126, 71, 199, 44, 246, 240, - 205, 126, 252, 25, 199, 44, 246, 240, 205, 126, 74, 199, 44, 246, 240, - 205, 126, 251, 237, 217, 107, 199, 44, 246, 240, 205, 126, 251, 237, 217, - 108, 199, 44, 246, 240, 220, 39, 199, 44, 246, 240, 217, 104, 199, 44, - 246, 240, 217, 105, 199, 44, 246, 240, 217, 113, 234, 147, 199, 44, 246, - 240, 217, 113, 198, 241, 199, 44, 246, 240, 217, 113, 197, 244, 199, 44, - 246, 240, 217, 113, 243, 132, 199, 44, 246, 240, 199, 36, 199, 44, 246, - 240, 213, 183, 199, 44, 246, 240, 192, 110, 199, 44, 246, 240, 232, 164, + 142, 1, 234, 190, 142, 1, 251, 238, 142, 1, 74, 142, 1, 211, 89, 142, 1, + 250, 165, 142, 1, 155, 142, 1, 221, 217, 142, 1, 231, 242, 142, 1, 231, + 93, 142, 1, 214, 70, 142, 1, 247, 162, 142, 1, 247, 3, 142, 1, 223, 34, + 142, 1, 222, 254, 142, 1, 212, 103, 142, 1, 197, 132, 142, 1, 197, 120, + 142, 1, 237, 193, 142, 1, 237, 177, 142, 1, 213, 81, 142, 1, 190, 190, + 142, 1, 199, 49, 142, 1, 238, 34, 142, 1, 237, 70, 142, 1, 181, 142, 1, + 213, 63, 142, 1, 168, 142, 1, 209, 230, 142, 1, 249, 155, 142, 1, 248, + 205, 142, 1, 174, 142, 1, 170, 142, 1, 165, 142, 1, 206, 110, 142, 1, + 173, 142, 1, 219, 75, 142, 1, 219, 64, 142, 1, 195, 188, 142, 1, 203, + 166, 142, 1, 201, 176, 142, 1, 188, 142, 1, 140, 142, 1, 197, 101, 142, + 3, 81, 249, 90, 195, 40, 142, 3, 243, 6, 195, 40, 142, 3, 250, 147, 142, + 18, 3, 252, 208, 142, 18, 3, 68, 142, 18, 3, 223, 201, 142, 18, 3, 66, + 142, 18, 3, 196, 30, 142, 18, 3, 117, 146, 142, 18, 3, 117, 206, 111, + 142, 18, 3, 71, 142, 18, 3, 234, 190, 142, 18, 3, 251, 238, 142, 18, 3, + 74, 142, 18, 3, 211, 89, 142, 18, 3, 250, 165, 142, 3, 195, 40, 142, 1, + 75, 207, 46, 142, 3, 210, 132, 142, 1, 243, 86, 218, 170, 142, 1, 243, + 86, 192, 159, 142, 1, 243, 86, 219, 65, 142, 250, 166, 219, 200, 77, 142, + 232, 120, 91, 211, 102, 142, 232, 120, 91, 232, 141, 142, 232, 120, 115, + 234, 157, 142, 232, 120, 91, 197, 35, 142, 232, 120, 91, 199, 86, 142, + 232, 120, 115, 197, 34, 142, 232, 120, 91, 233, 20, 142, 1, 251, 16, 223, + 201, 142, 1, 117, 206, 111, 142, 1, 117, 219, 76, 142, 18, 3, 117, 172, + 142, 18, 3, 117, 219, 76, 142, 17, 191, 77, 142, 17, 107, 142, 17, 109, + 142, 17, 138, 142, 17, 134, 142, 17, 150, 142, 17, 169, 142, 17, 175, + 142, 17, 171, 142, 17, 178, 142, 31, 199, 95, 142, 31, 91, 228, 142, 142, + 31, 91, 189, 142, 232, 120, 91, 208, 24, 142, 232, 120, 91, 230, 72, 142, + 232, 120, 115, 208, 22, 142, 232, 120, 91, 202, 129, 142, 232, 120, 91, + 234, 161, 142, 232, 120, 115, 202, 126, 142, 237, 211, 77, 142, 1, 243, + 86, 213, 82, 142, 1, 243, 86, 215, 63, 142, 1, 243, 86, 206, 111, 142, 1, + 243, 86, 172, 142, 1, 243, 86, 219, 76, 142, 1, 243, 86, 222, 154, 166, + 3, 247, 121, 166, 3, 251, 72, 166, 3, 195, 34, 166, 1, 250, 131, 166, 1, + 252, 161, 166, 1, 252, 7, 166, 1, 252, 22, 166, 1, 223, 45, 166, 1, 223, + 200, 166, 1, 196, 20, 166, 1, 196, 24, 166, 1, 223, 72, 166, 1, 223, 73, + 166, 1, 223, 184, 166, 1, 223, 186, 166, 1, 233, 198, 166, 1, 234, 185, + 166, 1, 251, 221, 166, 1, 210, 243, 166, 1, 211, 82, 166, 1, 250, 150, + 166, 1, 251, 165, 222, 29, 166, 1, 217, 121, 222, 29, 166, 1, 251, 165, + 231, 187, 166, 1, 217, 121, 231, 187, 166, 1, 222, 82, 214, 249, 166, 1, + 205, 133, 231, 187, 166, 1, 251, 165, 247, 70, 166, 1, 217, 121, 247, 70, + 166, 1, 251, 165, 223, 15, 166, 1, 217, 121, 223, 15, 166, 1, 199, 241, + 214, 249, 166, 1, 199, 241, 205, 132, 214, 250, 166, 1, 205, 133, 223, + 15, 166, 1, 251, 165, 197, 128, 166, 1, 217, 121, 197, 128, 166, 1, 251, + 165, 237, 184, 166, 1, 217, 121, 237, 184, 166, 1, 215, 94, 214, 199, + 166, 1, 205, 133, 237, 184, 166, 1, 251, 165, 199, 153, 166, 1, 217, 121, + 199, 153, 166, 1, 251, 165, 237, 204, 166, 1, 217, 121, 237, 204, 166, 1, + 237, 236, 214, 199, 166, 1, 205, 133, 237, 204, 166, 1, 251, 165, 210, + 73, 166, 1, 217, 121, 210, 73, 166, 1, 251, 165, 249, 57, 166, 1, 217, + 121, 249, 57, 166, 1, 217, 21, 166, 1, 251, 145, 249, 57, 166, 1, 192, + 85, 166, 1, 207, 123, 166, 1, 237, 236, 219, 249, 166, 1, 195, 156, 166, + 1, 199, 241, 205, 103, 166, 1, 215, 94, 205, 103, 166, 1, 237, 236, 205, + 103, 166, 1, 229, 253, 166, 1, 215, 94, 219, 249, 166, 1, 233, 63, 166, + 3, 251, 207, 166, 18, 3, 252, 17, 166, 18, 3, 221, 242, 252, 24, 166, 18, + 3, 237, 13, 252, 24, 166, 18, 3, 221, 242, 223, 69, 166, 18, 3, 237, 13, + 223, 69, 166, 18, 3, 221, 242, 210, 221, 166, 18, 3, 237, 13, 210, 221, + 166, 18, 3, 231, 231, 166, 18, 3, 221, 48, 166, 18, 3, 237, 13, 221, 48, + 166, 18, 3, 221, 50, 237, 122, 166, 18, 3, 221, 49, 230, 94, 252, 17, + 166, 18, 3, 221, 49, 230, 94, 237, 13, 252, 17, 166, 18, 3, 221, 49, 230, + 94, 231, 186, 166, 18, 3, 231, 186, 166, 219, 88, 17, 191, 77, 166, 219, + 88, 17, 107, 166, 219, 88, 17, 109, 166, 219, 88, 17, 138, 166, 219, 88, + 17, 134, 166, 219, 88, 17, 150, 166, 219, 88, 17, 169, 166, 219, 88, 17, + 175, 166, 219, 88, 17, 171, 166, 219, 88, 17, 178, 166, 18, 3, 237, 13, + 231, 231, 166, 18, 3, 237, 13, 231, 186, 166, 208, 154, 220, 211, 199, + 44, 246, 242, 221, 70, 222, 104, 199, 44, 246, 242, 221, 186, 221, 211, + 199, 44, 246, 242, 221, 186, 221, 176, 199, 44, 246, 242, 221, 186, 221, + 171, 199, 44, 246, 242, 221, 186, 221, 181, 199, 44, 246, 242, 221, 186, + 207, 145, 199, 44, 246, 242, 213, 252, 213, 239, 199, 44, 246, 242, 243, + 71, 246, 248, 199, 44, 246, 242, 243, 71, 243, 81, 199, 44, 246, 242, + 243, 71, 246, 247, 199, 44, 246, 242, 202, 48, 202, 47, 199, 44, 246, + 242, 243, 71, 243, 67, 199, 44, 246, 242, 192, 13, 192, 20, 199, 44, 246, + 242, 236, 177, 247, 0, 199, 44, 246, 242, 119, 210, 89, 199, 44, 246, + 242, 198, 242, 199, 38, 199, 44, 246, 242, 198, 242, 214, 224, 199, 44, + 246, 242, 198, 242, 209, 190, 199, 44, 246, 242, 213, 46, 214, 104, 199, + 44, 246, 242, 236, 177, 237, 123, 199, 44, 246, 242, 119, 199, 184, 199, + 44, 246, 242, 198, 242, 198, 207, 199, 44, 246, 242, 198, 242, 199, 45, + 199, 44, 246, 242, 198, 242, 198, 236, 199, 44, 246, 242, 213, 46, 212, + 180, 199, 44, 246, 242, 248, 114, 249, 120, 199, 44, 246, 242, 209, 76, + 209, 112, 199, 44, 246, 242, 209, 202, 209, 192, 199, 44, 246, 242, 232, + 178, 233, 111, 199, 44, 246, 242, 209, 202, 209, 223, 199, 44, 246, 242, + 232, 178, 233, 82, 199, 44, 246, 242, 209, 202, 205, 147, 199, 44, 246, + 242, 216, 15, 174, 199, 44, 246, 242, 192, 13, 192, 116, 199, 44, 246, + 242, 206, 164, 206, 62, 199, 44, 246, 242, 206, 69, 199, 44, 246, 242, + 219, 46, 219, 107, 199, 44, 246, 242, 218, 227, 199, 44, 246, 242, 193, + 49, 193, 175, 199, 44, 246, 242, 202, 48, 205, 168, 199, 44, 246, 242, + 202, 48, 206, 33, 199, 44, 246, 242, 202, 48, 200, 252, 199, 44, 246, + 242, 229, 26, 229, 124, 199, 44, 246, 242, 219, 46, 243, 49, 199, 44, + 246, 242, 187, 251, 124, 199, 44, 246, 242, 229, 26, 213, 36, 199, 44, + 246, 242, 210, 196, 199, 44, 246, 242, 205, 127, 65, 199, 44, 246, 242, + 217, 115, 230, 57, 199, 44, 246, 242, 205, 127, 252, 208, 199, 44, 246, + 242, 205, 127, 251, 151, 199, 44, 246, 242, 205, 127, 68, 199, 44, 246, + 242, 205, 127, 223, 201, 199, 44, 246, 242, 205, 127, 196, 152, 199, 44, + 246, 242, 205, 127, 196, 149, 199, 44, 246, 242, 205, 127, 66, 199, 44, + 246, 242, 205, 127, 196, 30, 199, 44, 246, 242, 209, 204, 199, 44, 238, + 172, 16, 249, 121, 199, 44, 246, 242, 205, 127, 71, 199, 44, 246, 242, + 205, 127, 252, 27, 199, 44, 246, 242, 205, 127, 74, 199, 44, 246, 242, + 205, 127, 251, 239, 217, 109, 199, 44, 246, 242, 205, 127, 251, 239, 217, + 110, 199, 44, 246, 242, 220, 41, 199, 44, 246, 242, 217, 106, 199, 44, + 246, 242, 217, 107, 199, 44, 246, 242, 217, 115, 234, 149, 199, 44, 246, + 242, 217, 115, 198, 241, 199, 44, 246, 242, 217, 115, 197, 244, 199, 44, + 246, 242, 217, 115, 243, 134, 199, 44, 246, 242, 199, 36, 199, 44, 246, + 242, 213, 185, 199, 44, 246, 242, 192, 110, 199, 44, 246, 242, 232, 166, 199, 44, 17, 191, 77, 199, 44, 17, 107, 199, 44, 17, 109, 199, 44, 17, - 138, 199, 44, 17, 134, 199, 44, 17, 149, 199, 44, 17, 169, 199, 44, 17, - 175, 199, 44, 17, 171, 199, 44, 17, 178, 199, 44, 246, 240, 251, 117, - 199, 44, 246, 240, 221, 180, 220, 17, 1, 221, 67, 220, 17, 1, 221, 184, - 200, 195, 220, 17, 1, 221, 184, 199, 197, 220, 17, 1, 210, 187, 231, 91, - 220, 17, 1, 213, 249, 220, 17, 1, 242, 99, 220, 17, 1, 210, 187, 247, 1, - 220, 17, 1, 202, 47, 199, 197, 220, 17, 1, 210, 187, 222, 252, 220, 17, - 1, 212, 65, 220, 17, 1, 210, 187, 212, 101, 220, 17, 1, 210, 187, 197, - 132, 220, 17, 1, 210, 187, 197, 120, 220, 17, 1, 210, 187, 237, 191, 220, - 17, 1, 210, 187, 237, 175, 220, 17, 1, 210, 187, 213, 79, 220, 17, 1, - 236, 174, 220, 17, 1, 159, 220, 17, 1, 198, 242, 200, 195, 220, 17, 1, - 198, 242, 199, 197, 220, 17, 1, 210, 187, 237, 68, 220, 17, 1, 213, 43, - 220, 17, 1, 248, 111, 220, 17, 1, 209, 73, 220, 17, 1, 209, 200, 200, - 195, 220, 17, 1, 232, 176, 199, 197, 220, 17, 1, 209, 200, 199, 197, 220, - 17, 1, 232, 176, 200, 195, 220, 17, 1, 210, 187, 248, 203, 220, 17, 1, - 216, 12, 220, 17, 1, 192, 12, 220, 17, 1, 219, 44, 219, 105, 220, 17, 1, - 219, 44, 219, 2, 220, 17, 1, 193, 48, 220, 17, 1, 205, 134, 203, 165, - 220, 17, 1, 205, 134, 201, 175, 220, 17, 1, 202, 47, 200, 195, 220, 17, - 1, 229, 24, 200, 195, 220, 17, 1, 210, 187, 219, 73, 220, 17, 1, 74, 220, - 17, 1, 229, 24, 199, 197, 220, 17, 234, 120, 220, 17, 18, 3, 65, 220, 17, - 18, 3, 217, 113, 222, 87, 220, 17, 18, 3, 252, 206, 220, 17, 18, 3, 251, - 149, 220, 17, 18, 3, 68, 220, 17, 18, 3, 223, 199, 220, 17, 18, 3, 192, - 159, 220, 17, 18, 3, 191, 176, 220, 17, 18, 3, 66, 220, 17, 18, 3, 196, - 30, 220, 17, 3, 210, 187, 195, 40, 220, 17, 18, 3, 217, 113, 221, 44, - 220, 17, 204, 20, 3, 219, 43, 220, 17, 204, 20, 3, 212, 65, 220, 17, 18, - 3, 71, 220, 17, 18, 3, 234, 166, 220, 17, 18, 3, 74, 220, 17, 18, 3, 250, - 131, 220, 17, 18, 3, 251, 236, 220, 17, 221, 68, 173, 220, 17, 163, 217, - 113, 234, 147, 220, 17, 163, 217, 113, 198, 241, 220, 17, 163, 217, 113, - 198, 193, 220, 17, 163, 217, 113, 247, 77, 220, 17, 247, 125, 77, 220, - 17, 213, 192, 220, 17, 192, 110, 220, 17, 17, 191, 77, 220, 17, 17, 107, - 220, 17, 17, 109, 220, 17, 17, 138, 220, 17, 17, 134, 220, 17, 17, 149, - 220, 17, 17, 169, 220, 17, 17, 175, 220, 17, 17, 171, 220, 17, 17, 178, - 220, 17, 229, 24, 213, 43, 220, 17, 229, 24, 216, 12, 220, 17, 1, 221, - 185, 231, 3, 220, 17, 1, 221, 185, 212, 65, 86, 5, 211, 113, 86, 87, 230, - 181, 192, 25, 216, 118, 197, 178, 65, 86, 87, 230, 181, 192, 25, 216, - 118, 255, 207, 206, 167, 249, 19, 174, 86, 87, 230, 181, 192, 25, 216, - 118, 255, 207, 230, 181, 197, 153, 174, 86, 87, 89, 192, 25, 216, 118, - 216, 234, 174, 86, 87, 242, 215, 192, 25, 216, 118, 203, 172, 174, 86, - 87, 247, 97, 192, 25, 216, 118, 209, 189, 203, 158, 174, 86, 87, 192, 25, - 216, 118, 197, 153, 203, 158, 174, 86, 87, 205, 100, 203, 157, 86, 87, - 248, 13, 192, 25, 216, 117, 86, 87, 248, 141, 203, 50, 192, 25, 216, 117, - 86, 87, 223, 98, 197, 152, 86, 87, 237, 113, 197, 153, 248, 12, 86, 87, - 203, 157, 86, 87, 212, 70, 203, 157, 86, 87, 197, 153, 203, 157, 86, 87, - 212, 70, 197, 153, 203, 157, 86, 87, 206, 191, 243, 111, 201, 193, 203, - 157, 86, 87, 207, 10, 230, 222, 203, 157, 86, 87, 247, 97, 255, 211, 206, - 73, 216, 233, 179, 247, 128, 86, 87, 230, 181, 197, 152, 86, 219, 27, 3, - 246, 255, 206, 72, 86, 219, 27, 3, 219, 157, 206, 72, 86, 250, 188, 3, - 203, 168, 231, 168, 255, 212, 206, 72, 86, 250, 188, 3, 255, 209, 168, - 86, 250, 188, 3, 205, 69, 197, 147, 86, 3, 207, 115, 236, 189, 231, 167, - 86, 3, 207, 115, 236, 189, 231, 5, 86, 3, 207, 115, 236, 189, 230, 182, - 86, 3, 207, 115, 214, 243, 231, 167, 86, 3, 207, 115, 214, 243, 231, 5, - 86, 3, 207, 115, 236, 189, 207, 115, 214, 242, 86, 17, 191, 77, 86, 17, - 107, 86, 17, 109, 86, 17, 138, 86, 17, 134, 86, 17, 149, 86, 17, 169, 86, - 17, 175, 86, 17, 171, 86, 17, 178, 86, 17, 132, 107, 86, 17, 132, 109, - 86, 17, 132, 138, 86, 17, 132, 134, 86, 17, 132, 149, 86, 17, 132, 169, - 86, 17, 132, 175, 86, 17, 132, 171, 86, 17, 132, 178, 86, 17, 132, 191, - 77, 86, 87, 248, 15, 206, 72, 86, 87, 214, 59, 247, 195, 212, 82, 191, - 10, 86, 87, 247, 97, 255, 211, 206, 73, 247, 196, 216, 62, 247, 128, 86, - 87, 214, 59, 247, 195, 203, 169, 206, 72, 86, 87, 243, 128, 216, 117, 86, - 87, 197, 169, 255, 208, 86, 87, 230, 164, 206, 73, 230, 119, 86, 87, 230, - 164, 206, 73, 230, 125, 86, 87, 251, 123, 221, 202, 230, 119, 86, 87, - 251, 123, 221, 202, 230, 125, 86, 3, 192, 102, 197, 151, 86, 3, 217, 66, - 197, 151, 86, 1, 155, 86, 1, 221, 215, 86, 1, 231, 240, 86, 1, 231, 91, - 86, 1, 214, 68, 86, 1, 247, 160, 86, 1, 247, 1, 86, 1, 223, 32, 86, 1, - 212, 101, 86, 1, 197, 132, 86, 1, 197, 120, 86, 1, 237, 191, 86, 1, 237, - 175, 86, 1, 213, 79, 86, 1, 190, 190, 86, 1, 199, 49, 86, 1, 238, 32, 86, - 1, 237, 68, 86, 1, 180, 86, 1, 168, 86, 1, 209, 228, 86, 1, 249, 153, 86, - 1, 248, 203, 86, 1, 174, 86, 1, 197, 168, 86, 1, 197, 157, 86, 1, 235, - 35, 86, 1, 235, 29, 86, 1, 193, 190, 86, 1, 191, 71, 86, 1, 191, 123, 86, - 1, 255, 214, 86, 1, 170, 86, 1, 165, 86, 1, 173, 86, 1, 203, 165, 86, 1, - 201, 175, 86, 1, 188, 86, 1, 140, 86, 1, 65, 86, 1, 220, 246, 86, 1, 232, - 221, 165, 86, 1, 221, 101, 86, 1, 206, 109, 86, 18, 3, 252, 206, 86, 18, - 3, 68, 86, 18, 3, 223, 199, 86, 18, 3, 66, 86, 18, 3, 196, 30, 86, 18, 3, - 117, 146, 86, 18, 3, 117, 206, 110, 86, 18, 3, 117, 172, 86, 18, 3, 117, - 219, 74, 86, 18, 3, 71, 86, 18, 3, 234, 188, 86, 18, 3, 74, 86, 18, 3, - 211, 87, 86, 3, 206, 173, 201, 5, 214, 69, 206, 162, 86, 3, 206, 167, - 249, 18, 86, 18, 3, 207, 18, 68, 86, 18, 3, 207, 18, 223, 199, 86, 3, - 212, 82, 191, 11, 214, 251, 238, 32, 86, 3, 202, 61, 219, 240, 86, 87, - 230, 72, 86, 87, 210, 178, 86, 3, 219, 243, 206, 72, 86, 3, 192, 107, - 206, 72, 86, 3, 219, 244, 197, 169, 247, 128, 86, 3, 216, 236, 247, 128, - 86, 3, 230, 185, 247, 129, 207, 8, 86, 3, 230, 185, 216, 220, 207, 8, 86, - 3, 223, 93, 216, 236, 247, 128, 86, 200, 239, 3, 219, 244, 197, 169, 247, - 128, 86, 200, 239, 3, 216, 236, 247, 128, 86, 200, 239, 3, 223, 93, 216, - 236, 247, 128, 86, 200, 239, 1, 155, 86, 200, 239, 1, 221, 215, 86, 200, - 239, 1, 231, 240, 86, 200, 239, 1, 231, 91, 86, 200, 239, 1, 214, 68, 86, - 200, 239, 1, 247, 160, 86, 200, 239, 1, 247, 1, 86, 200, 239, 1, 223, 32, - 86, 200, 239, 1, 212, 101, 86, 200, 239, 1, 197, 132, 86, 200, 239, 1, - 197, 120, 86, 200, 239, 1, 237, 191, 86, 200, 239, 1, 237, 175, 86, 200, - 239, 1, 213, 79, 86, 200, 239, 1, 190, 190, 86, 200, 239, 1, 199, 49, 86, - 200, 239, 1, 238, 32, 86, 200, 239, 1, 237, 68, 86, 200, 239, 1, 180, 86, - 200, 239, 1, 168, 86, 200, 239, 1, 209, 228, 86, 200, 239, 1, 249, 153, - 86, 200, 239, 1, 248, 203, 86, 200, 239, 1, 174, 86, 200, 239, 1, 197, - 168, 86, 200, 239, 1, 197, 157, 86, 200, 239, 1, 235, 35, 86, 200, 239, - 1, 235, 29, 86, 200, 239, 1, 193, 190, 86, 200, 239, 1, 191, 71, 86, 200, - 239, 1, 191, 123, 86, 200, 239, 1, 255, 214, 86, 200, 239, 1, 170, 86, - 200, 239, 1, 165, 86, 200, 239, 1, 173, 86, 200, 239, 1, 203, 165, 86, - 200, 239, 1, 201, 175, 86, 200, 239, 1, 188, 86, 200, 239, 1, 140, 86, - 200, 239, 1, 65, 86, 200, 239, 1, 220, 246, 86, 200, 239, 1, 232, 221, - 193, 190, 86, 200, 239, 1, 232, 221, 170, 86, 200, 239, 1, 232, 221, 165, - 86, 220, 233, 206, 69, 221, 215, 86, 220, 233, 206, 69, 221, 216, 247, - 196, 216, 62, 247, 128, 86, 247, 112, 3, 88, 249, 7, 86, 247, 112, 3, - 156, 249, 7, 86, 247, 112, 3, 247, 116, 199, 135, 86, 247, 112, 3, 205, - 99, 255, 213, 86, 16, 235, 105, 248, 10, 86, 16, 207, 114, 206, 174, 86, - 16, 210, 206, 231, 166, 86, 16, 207, 114, 206, 175, 207, 10, 230, 221, - 86, 16, 209, 189, 168, 86, 16, 213, 21, 248, 10, 86, 16, 213, 21, 248, - 11, 212, 70, 255, 210, 86, 16, 213, 21, 248, 11, 230, 183, 255, 210, 86, - 16, 213, 21, 248, 11, 247, 196, 255, 210, 86, 3, 207, 115, 214, 243, 207, - 115, 236, 188, 86, 3, 207, 115, 214, 243, 230, 182, 86, 87, 248, 14, 203, - 50, 231, 54, 216, 118, 207, 9, 86, 87, 216, 14, 192, 25, 231, 54, 216, - 118, 207, 9, 86, 87, 212, 70, 197, 152, 86, 87, 89, 248, 44, 206, 164, - 192, 25, 216, 118, 216, 234, 174, 86, 87, 242, 215, 248, 44, 206, 164, - 192, 25, 216, 118, 203, 172, 174, 206, 207, 200, 155, 56, 219, 223, 200, - 155, 56, 206, 207, 200, 155, 3, 4, 236, 138, 219, 223, 200, 155, 3, 4, - 236, 138, 86, 87, 219, 235, 216, 237, 206, 72, 86, 87, 198, 18, 216, 237, - 206, 72, 80, 1, 155, 80, 1, 221, 215, 80, 1, 231, 240, 80, 1, 231, 91, - 80, 1, 214, 68, 80, 1, 247, 160, 80, 1, 247, 1, 80, 1, 223, 32, 80, 1, - 222, 252, 80, 1, 212, 101, 80, 1, 213, 45, 80, 1, 197, 132, 80, 1, 197, - 120, 80, 1, 237, 191, 80, 1, 237, 175, 80, 1, 213, 79, 80, 1, 190, 190, - 80, 1, 199, 49, 80, 1, 238, 32, 80, 1, 237, 68, 80, 1, 180, 80, 1, 168, - 80, 1, 209, 228, 80, 1, 249, 153, 80, 1, 248, 203, 80, 1, 174, 80, 1, + 138, 199, 44, 17, 134, 199, 44, 17, 150, 199, 44, 17, 169, 199, 44, 17, + 175, 199, 44, 17, 171, 199, 44, 17, 178, 199, 44, 246, 242, 251, 119, + 199, 44, 246, 242, 221, 182, 220, 19, 1, 221, 69, 220, 19, 1, 221, 186, + 200, 195, 220, 19, 1, 221, 186, 199, 197, 220, 19, 1, 210, 189, 231, 93, + 220, 19, 1, 213, 251, 220, 19, 1, 242, 101, 220, 19, 1, 210, 189, 247, 3, + 220, 19, 1, 202, 48, 199, 197, 220, 19, 1, 210, 189, 222, 254, 220, 19, + 1, 212, 67, 220, 19, 1, 210, 189, 212, 103, 220, 19, 1, 210, 189, 197, + 132, 220, 19, 1, 210, 189, 197, 120, 220, 19, 1, 210, 189, 237, 193, 220, + 19, 1, 210, 189, 237, 177, 220, 19, 1, 210, 189, 213, 81, 220, 19, 1, + 236, 176, 220, 19, 1, 159, 220, 19, 1, 198, 242, 200, 195, 220, 19, 1, + 198, 242, 199, 197, 220, 19, 1, 210, 189, 237, 70, 220, 19, 1, 213, 45, + 220, 19, 1, 248, 113, 220, 19, 1, 209, 75, 220, 19, 1, 209, 202, 200, + 195, 220, 19, 1, 232, 178, 199, 197, 220, 19, 1, 209, 202, 199, 197, 220, + 19, 1, 232, 178, 200, 195, 220, 19, 1, 210, 189, 248, 205, 220, 19, 1, + 216, 14, 220, 19, 1, 192, 12, 220, 19, 1, 219, 46, 219, 107, 220, 19, 1, + 219, 46, 219, 4, 220, 19, 1, 193, 48, 220, 19, 1, 205, 135, 203, 166, + 220, 19, 1, 205, 135, 201, 176, 220, 19, 1, 202, 48, 200, 195, 220, 19, + 1, 229, 26, 200, 195, 220, 19, 1, 210, 189, 219, 75, 220, 19, 1, 74, 220, + 19, 1, 229, 26, 199, 197, 220, 19, 234, 122, 220, 19, 18, 3, 65, 220, 19, + 18, 3, 217, 115, 222, 89, 220, 19, 18, 3, 252, 208, 220, 19, 18, 3, 251, + 151, 220, 19, 18, 3, 68, 220, 19, 18, 3, 223, 201, 220, 19, 18, 3, 192, + 159, 220, 19, 18, 3, 191, 176, 220, 19, 18, 3, 66, 220, 19, 18, 3, 196, + 30, 220, 19, 3, 210, 189, 195, 40, 220, 19, 18, 3, 217, 115, 221, 46, + 220, 19, 204, 21, 3, 219, 45, 220, 19, 204, 21, 3, 212, 67, 220, 19, 18, + 3, 71, 220, 19, 18, 3, 234, 168, 220, 19, 18, 3, 74, 220, 19, 18, 3, 250, + 133, 220, 19, 18, 3, 251, 238, 220, 19, 221, 70, 173, 220, 19, 163, 217, + 115, 234, 149, 220, 19, 163, 217, 115, 198, 241, 220, 19, 163, 217, 115, + 198, 193, 220, 19, 163, 217, 115, 247, 79, 220, 19, 247, 127, 77, 220, + 19, 213, 194, 220, 19, 192, 110, 220, 19, 17, 191, 77, 220, 19, 17, 107, + 220, 19, 17, 109, 220, 19, 17, 138, 220, 19, 17, 134, 220, 19, 17, 150, + 220, 19, 17, 169, 220, 19, 17, 175, 220, 19, 17, 171, 220, 19, 17, 178, + 220, 19, 229, 26, 213, 45, 220, 19, 229, 26, 216, 14, 220, 19, 1, 221, + 187, 231, 5, 220, 19, 1, 221, 187, 212, 67, 86, 5, 211, 115, 86, 87, 230, + 183, 192, 25, 216, 120, 197, 178, 65, 86, 87, 230, 183, 192, 25, 216, + 120, 255, 209, 206, 168, 249, 21, 174, 86, 87, 230, 183, 192, 25, 216, + 120, 255, 209, 230, 183, 197, 153, 174, 86, 87, 89, 192, 25, 216, 120, + 216, 236, 174, 86, 87, 242, 217, 192, 25, 216, 120, 203, 173, 174, 86, + 87, 247, 99, 192, 25, 216, 120, 209, 191, 203, 159, 174, 86, 87, 192, 25, + 216, 120, 197, 153, 203, 159, 174, 86, 87, 205, 101, 203, 158, 86, 87, + 248, 15, 192, 25, 216, 119, 86, 87, 248, 143, 203, 51, 192, 25, 216, 119, + 86, 87, 223, 100, 197, 152, 86, 87, 237, 115, 197, 153, 248, 14, 86, 87, + 203, 158, 86, 87, 212, 72, 203, 158, 86, 87, 197, 153, 203, 158, 86, 87, + 212, 72, 197, 153, 203, 158, 86, 87, 206, 192, 243, 113, 201, 194, 203, + 158, 86, 87, 207, 11, 230, 224, 203, 158, 86, 87, 247, 99, 255, 213, 206, + 74, 216, 235, 180, 247, 130, 86, 87, 230, 183, 197, 152, 86, 219, 29, 3, + 247, 1, 206, 73, 86, 219, 29, 3, 219, 159, 206, 73, 86, 250, 190, 3, 203, + 169, 231, 170, 255, 214, 206, 73, 86, 250, 190, 3, 255, 211, 168, 86, + 250, 190, 3, 205, 70, 197, 147, 86, 3, 207, 117, 236, 191, 231, 169, 86, + 3, 207, 117, 236, 191, 231, 7, 86, 3, 207, 117, 236, 191, 230, 184, 86, + 3, 207, 117, 214, 245, 231, 169, 86, 3, 207, 117, 214, 245, 231, 7, 86, + 3, 207, 117, 236, 191, 207, 117, 214, 244, 86, 17, 191, 77, 86, 17, 107, + 86, 17, 109, 86, 17, 138, 86, 17, 134, 86, 17, 150, 86, 17, 169, 86, 17, + 175, 86, 17, 171, 86, 17, 178, 86, 17, 132, 107, 86, 17, 132, 109, 86, + 17, 132, 138, 86, 17, 132, 134, 86, 17, 132, 150, 86, 17, 132, 169, 86, + 17, 132, 175, 86, 17, 132, 171, 86, 17, 132, 178, 86, 17, 132, 191, 77, + 86, 87, 248, 17, 206, 73, 86, 87, 214, 61, 247, 197, 212, 84, 191, 10, + 86, 87, 247, 99, 255, 213, 206, 74, 247, 198, 216, 64, 247, 130, 86, 87, + 214, 61, 247, 197, 203, 170, 206, 73, 86, 87, 243, 130, 216, 119, 86, 87, + 197, 169, 255, 210, 86, 87, 230, 166, 206, 74, 230, 121, 86, 87, 230, + 166, 206, 74, 230, 127, 86, 87, 251, 125, 221, 204, 230, 121, 86, 87, + 251, 125, 221, 204, 230, 127, 86, 3, 192, 102, 197, 151, 86, 3, 217, 68, + 197, 151, 86, 1, 155, 86, 1, 221, 217, 86, 1, 231, 242, 86, 1, 231, 93, + 86, 1, 214, 70, 86, 1, 247, 162, 86, 1, 247, 3, 86, 1, 223, 34, 86, 1, + 212, 103, 86, 1, 197, 132, 86, 1, 197, 120, 86, 1, 237, 193, 86, 1, 237, + 177, 86, 1, 213, 81, 86, 1, 190, 190, 86, 1, 199, 49, 86, 1, 238, 34, 86, + 1, 237, 70, 86, 1, 181, 86, 1, 168, 86, 1, 209, 230, 86, 1, 249, 155, 86, + 1, 248, 205, 86, 1, 174, 86, 1, 197, 168, 86, 1, 197, 157, 86, 1, 235, + 37, 86, 1, 235, 31, 86, 1, 193, 190, 86, 1, 191, 71, 86, 1, 191, 123, 86, + 1, 255, 216, 86, 1, 170, 86, 1, 165, 86, 1, 173, 86, 1, 203, 166, 86, 1, + 201, 176, 86, 1, 188, 86, 1, 140, 86, 1, 65, 86, 1, 220, 248, 86, 1, 232, + 223, 165, 86, 1, 221, 103, 86, 1, 206, 110, 86, 18, 3, 252, 208, 86, 18, + 3, 68, 86, 18, 3, 223, 201, 86, 18, 3, 66, 86, 18, 3, 196, 30, 86, 18, 3, + 117, 146, 86, 18, 3, 117, 206, 111, 86, 18, 3, 117, 172, 86, 18, 3, 117, + 219, 76, 86, 18, 3, 71, 86, 18, 3, 234, 190, 86, 18, 3, 74, 86, 18, 3, + 211, 89, 86, 3, 206, 174, 201, 6, 214, 71, 206, 163, 86, 3, 206, 168, + 249, 20, 86, 18, 3, 207, 19, 68, 86, 18, 3, 207, 19, 223, 201, 86, 3, + 212, 84, 191, 11, 214, 253, 238, 34, 86, 3, 202, 62, 219, 242, 86, 87, + 230, 74, 86, 87, 210, 180, 86, 3, 219, 245, 206, 73, 86, 3, 192, 107, + 206, 73, 86, 3, 219, 246, 197, 169, 247, 130, 86, 3, 216, 238, 247, 130, + 86, 3, 230, 187, 247, 131, 207, 9, 86, 3, 230, 187, 216, 222, 207, 9, 86, + 3, 223, 95, 216, 238, 247, 130, 86, 200, 240, 3, 219, 246, 197, 169, 247, + 130, 86, 200, 240, 3, 216, 238, 247, 130, 86, 200, 240, 3, 223, 95, 216, + 238, 247, 130, 86, 200, 240, 1, 155, 86, 200, 240, 1, 221, 217, 86, 200, + 240, 1, 231, 242, 86, 200, 240, 1, 231, 93, 86, 200, 240, 1, 214, 70, 86, + 200, 240, 1, 247, 162, 86, 200, 240, 1, 247, 3, 86, 200, 240, 1, 223, 34, + 86, 200, 240, 1, 212, 103, 86, 200, 240, 1, 197, 132, 86, 200, 240, 1, + 197, 120, 86, 200, 240, 1, 237, 193, 86, 200, 240, 1, 237, 177, 86, 200, + 240, 1, 213, 81, 86, 200, 240, 1, 190, 190, 86, 200, 240, 1, 199, 49, 86, + 200, 240, 1, 238, 34, 86, 200, 240, 1, 237, 70, 86, 200, 240, 1, 181, 86, + 200, 240, 1, 168, 86, 200, 240, 1, 209, 230, 86, 200, 240, 1, 249, 155, + 86, 200, 240, 1, 248, 205, 86, 200, 240, 1, 174, 86, 200, 240, 1, 197, + 168, 86, 200, 240, 1, 197, 157, 86, 200, 240, 1, 235, 37, 86, 200, 240, + 1, 235, 31, 86, 200, 240, 1, 193, 190, 86, 200, 240, 1, 191, 71, 86, 200, + 240, 1, 191, 123, 86, 200, 240, 1, 255, 216, 86, 200, 240, 1, 170, 86, + 200, 240, 1, 165, 86, 200, 240, 1, 173, 86, 200, 240, 1, 203, 166, 86, + 200, 240, 1, 201, 176, 86, 200, 240, 1, 188, 86, 200, 240, 1, 140, 86, + 200, 240, 1, 65, 86, 200, 240, 1, 220, 248, 86, 200, 240, 1, 232, 223, + 193, 190, 86, 200, 240, 1, 232, 223, 170, 86, 200, 240, 1, 232, 223, 165, + 86, 220, 235, 206, 70, 221, 217, 86, 220, 235, 206, 70, 221, 218, 247, + 198, 216, 64, 247, 130, 86, 247, 114, 3, 88, 249, 9, 86, 247, 114, 3, + 156, 249, 9, 86, 247, 114, 3, 247, 118, 199, 135, 86, 247, 114, 3, 205, + 100, 255, 215, 86, 16, 235, 107, 248, 12, 86, 16, 207, 116, 206, 175, 86, + 16, 210, 208, 231, 168, 86, 16, 207, 116, 206, 176, 207, 11, 230, 223, + 86, 16, 209, 191, 168, 86, 16, 213, 23, 248, 12, 86, 16, 213, 23, 248, + 13, 212, 72, 255, 212, 86, 16, 213, 23, 248, 13, 230, 185, 255, 212, 86, + 16, 213, 23, 248, 13, 247, 198, 255, 212, 86, 3, 207, 117, 214, 245, 207, + 117, 236, 190, 86, 3, 207, 117, 214, 245, 230, 184, 86, 87, 248, 16, 203, + 51, 231, 56, 216, 120, 207, 10, 86, 87, 216, 16, 192, 25, 231, 56, 216, + 120, 207, 10, 86, 87, 212, 72, 197, 152, 86, 87, 89, 248, 46, 206, 165, + 192, 25, 216, 120, 216, 236, 174, 86, 87, 242, 217, 248, 46, 206, 165, + 192, 25, 216, 120, 203, 173, 174, 206, 208, 200, 155, 56, 219, 225, 200, + 155, 56, 206, 208, 200, 155, 3, 4, 236, 140, 219, 225, 200, 155, 3, 4, + 236, 140, 86, 87, 219, 237, 216, 239, 206, 73, 86, 87, 198, 18, 216, 239, + 206, 73, 80, 1, 155, 80, 1, 221, 217, 80, 1, 231, 242, 80, 1, 231, 93, + 80, 1, 214, 70, 80, 1, 247, 162, 80, 1, 247, 3, 80, 1, 223, 34, 80, 1, + 222, 254, 80, 1, 212, 103, 80, 1, 213, 47, 80, 1, 197, 132, 80, 1, 197, + 120, 80, 1, 237, 193, 80, 1, 237, 177, 80, 1, 213, 81, 80, 1, 190, 190, + 80, 1, 199, 49, 80, 1, 238, 34, 80, 1, 237, 70, 80, 1, 181, 80, 1, 168, + 80, 1, 209, 230, 80, 1, 249, 155, 80, 1, 248, 205, 80, 1, 174, 80, 1, 170, 80, 1, 165, 80, 1, 173, 80, 1, 193, 190, 80, 1, 188, 80, 1, 140, 80, - 1, 219, 73, 80, 1, 65, 80, 1, 203, 139, 65, 80, 1, 68, 80, 1, 223, 199, - 80, 1, 66, 80, 1, 196, 30, 80, 1, 71, 80, 1, 215, 232, 71, 80, 1, 74, 80, - 1, 250, 163, 80, 18, 3, 199, 200, 252, 206, 80, 18, 3, 252, 206, 80, 18, - 3, 68, 80, 18, 3, 223, 199, 80, 18, 3, 66, 80, 18, 3, 196, 30, 80, 18, 3, - 71, 80, 18, 3, 251, 236, 80, 18, 3, 215, 232, 223, 199, 80, 18, 3, 215, - 232, 74, 80, 18, 3, 235, 15, 58, 80, 3, 251, 71, 80, 3, 75, 60, 80, 3, - 195, 35, 80, 3, 195, 40, 80, 3, 250, 214, 80, 120, 3, 216, 217, 170, 80, - 120, 3, 216, 217, 165, 80, 120, 3, 216, 217, 193, 190, 80, 120, 3, 216, - 217, 140, 80, 1, 230, 206, 188, 80, 17, 191, 77, 80, 17, 107, 80, 17, - 109, 80, 17, 138, 80, 17, 134, 80, 17, 149, 80, 17, 169, 80, 17, 175, 80, - 17, 171, 80, 17, 178, 80, 3, 219, 83, 205, 53, 80, 3, 205, 53, 80, 16, - 219, 36, 80, 16, 242, 67, 80, 16, 252, 1, 80, 16, 231, 146, 80, 1, 203, - 165, 80, 1, 201, 175, 80, 1, 117, 146, 80, 1, 117, 206, 110, 80, 1, 117, - 172, 80, 1, 117, 219, 74, 80, 18, 3, 117, 146, 80, 18, 3, 117, 206, 110, - 80, 18, 3, 117, 172, 80, 18, 3, 117, 219, 74, 80, 1, 215, 232, 214, 68, - 80, 1, 215, 232, 222, 252, 80, 1, 215, 232, 249, 53, 80, 1, 215, 232, - 249, 48, 80, 120, 3, 215, 232, 216, 217, 180, 80, 120, 3, 215, 232, 216, - 217, 174, 80, 120, 3, 215, 232, 216, 217, 173, 80, 1, 203, 171, 222, 62, - 203, 165, 80, 18, 3, 203, 171, 222, 62, 233, 242, 80, 163, 87, 203, 171, - 222, 62, 230, 5, 80, 163, 87, 203, 171, 222, 62, 222, 23, 209, 199, 80, - 1, 193, 102, 208, 116, 222, 62, 199, 49, 80, 1, 193, 102, 208, 116, 222, - 62, 208, 122, 80, 18, 3, 193, 102, 208, 116, 222, 62, 233, 242, 80, 18, - 3, 193, 102, 208, 116, 222, 62, 196, 152, 80, 3, 193, 102, 208, 116, 222, - 62, 198, 78, 80, 3, 193, 102, 208, 116, 222, 62, 198, 77, 80, 3, 193, - 102, 208, 116, 222, 62, 198, 76, 80, 3, 193, 102, 208, 116, 222, 62, 198, - 75, 80, 3, 193, 102, 208, 116, 222, 62, 198, 74, 80, 1, 234, 202, 208, - 116, 222, 62, 213, 79, 80, 1, 234, 202, 208, 116, 222, 62, 191, 183, 80, - 1, 234, 202, 208, 116, 222, 62, 231, 56, 80, 18, 3, 231, 161, 222, 62, - 68, 80, 18, 3, 222, 28, 211, 151, 80, 18, 3, 222, 28, 66, 80, 18, 3, 222, - 28, 234, 188, 80, 1, 203, 139, 155, 80, 1, 203, 139, 221, 215, 80, 1, - 203, 139, 231, 240, 80, 1, 203, 139, 247, 160, 80, 1, 203, 139, 191, 123, - 80, 1, 203, 139, 212, 101, 80, 1, 203, 139, 238, 32, 80, 1, 203, 139, - 180, 80, 1, 203, 139, 209, 228, 80, 1, 203, 139, 233, 109, 80, 1, 203, - 139, 249, 153, 80, 1, 203, 139, 199, 49, 80, 1, 203, 139, 140, 80, 120, - 3, 203, 139, 216, 217, 193, 190, 80, 18, 3, 203, 139, 252, 206, 80, 18, - 3, 203, 139, 71, 80, 18, 3, 203, 139, 235, 15, 58, 80, 18, 3, 203, 139, - 53, 192, 159, 80, 3, 203, 139, 198, 77, 80, 3, 203, 139, 198, 76, 80, 3, - 203, 139, 198, 74, 80, 3, 203, 139, 198, 73, 80, 3, 203, 139, 238, 247, - 198, 77, 80, 3, 203, 139, 238, 247, 198, 76, 80, 3, 203, 139, 238, 247, - 234, 106, 198, 79, 80, 1, 206, 47, 210, 189, 233, 109, 80, 3, 206, 47, - 210, 189, 198, 74, 80, 203, 139, 17, 191, 77, 80, 203, 139, 17, 107, 80, - 203, 139, 17, 109, 80, 203, 139, 17, 138, 80, 203, 139, 17, 134, 80, 203, - 139, 17, 149, 80, 203, 139, 17, 169, 80, 203, 139, 17, 175, 80, 203, 139, - 17, 171, 80, 203, 139, 17, 178, 80, 3, 221, 206, 198, 78, 80, 3, 221, - 206, 198, 76, 80, 18, 3, 251, 222, 65, 80, 18, 3, 251, 222, 251, 236, 80, - 16, 203, 139, 107, 80, 16, 203, 139, 233, 215, 101, 6, 1, 251, 132, 101, - 6, 1, 249, 101, 101, 6, 1, 231, 210, 101, 6, 1, 236, 150, 101, 6, 1, 234, - 103, 101, 6, 1, 195, 49, 101, 6, 1, 191, 80, 101, 6, 1, 199, 193, 101, 6, - 1, 223, 162, 101, 6, 1, 222, 87, 101, 6, 1, 220, 7, 101, 6, 1, 217, 90, - 101, 6, 1, 214, 216, 101, 6, 1, 211, 104, 101, 6, 1, 210, 131, 101, 6, 1, - 191, 67, 101, 6, 1, 207, 163, 101, 6, 1, 205, 142, 101, 6, 1, 199, 179, - 101, 6, 1, 196, 113, 101, 6, 1, 209, 220, 101, 6, 1, 221, 200, 101, 6, 1, - 231, 82, 101, 6, 1, 208, 81, 101, 6, 1, 203, 69, 101, 6, 1, 243, 81, 101, - 6, 1, 247, 128, 101, 6, 1, 222, 234, 101, 6, 1, 243, 18, 101, 6, 1, 246, - 241, 101, 6, 1, 192, 218, 101, 6, 1, 222, 249, 101, 6, 1, 230, 87, 101, - 6, 1, 229, 245, 101, 6, 1, 229, 145, 101, 6, 1, 193, 125, 101, 6, 1, 230, - 19, 101, 6, 1, 229, 11, 101, 6, 1, 192, 14, 101, 6, 1, 252, 14, 101, 1, - 251, 132, 101, 1, 249, 101, 101, 1, 231, 210, 101, 1, 236, 150, 101, 1, - 234, 103, 101, 1, 195, 49, 101, 1, 191, 80, 101, 1, 199, 193, 101, 1, - 223, 162, 101, 1, 222, 87, 101, 1, 220, 7, 101, 1, 217, 90, 101, 1, 214, - 216, 101, 1, 211, 104, 101, 1, 210, 131, 101, 1, 191, 67, 101, 1, 207, - 163, 101, 1, 205, 142, 101, 1, 199, 179, 101, 1, 196, 113, 101, 1, 209, - 220, 101, 1, 221, 200, 101, 1, 231, 82, 101, 1, 208, 81, 101, 1, 203, 69, - 101, 1, 243, 81, 101, 1, 247, 128, 101, 1, 222, 234, 101, 1, 243, 18, - 101, 1, 246, 241, 101, 1, 192, 218, 101, 1, 222, 249, 101, 1, 230, 87, - 101, 1, 229, 245, 101, 1, 229, 145, 101, 1, 193, 125, 101, 1, 230, 19, - 101, 1, 229, 11, 101, 1, 233, 23, 101, 1, 192, 14, 101, 1, 234, 123, 101, - 1, 153, 231, 210, 101, 1, 251, 230, 101, 210, 128, 204, 10, 52, 1, 101, - 214, 216, 101, 1, 252, 14, 101, 1, 230, 17, 56, 101, 1, 220, 116, 56, 30, - 147, 221, 113, 30, 147, 201, 167, 30, 147, 213, 204, 30, 147, 198, 168, - 30, 147, 201, 156, 30, 147, 206, 239, 30, 147, 216, 77, 30, 147, 209, - 169, 30, 147, 201, 164, 30, 147, 202, 160, 30, 147, 201, 161, 30, 147, - 223, 222, 30, 147, 243, 24, 30, 147, 201, 171, 30, 147, 243, 91, 30, 147, - 221, 188, 30, 147, 199, 7, 30, 147, 209, 209, 30, 147, 229, 142, 30, 147, - 213, 200, 30, 147, 201, 165, 30, 147, 213, 194, 30, 147, 213, 198, 30, - 147, 198, 165, 30, 147, 206, 227, 30, 147, 201, 163, 30, 147, 206, 237, - 30, 147, 222, 68, 30, 147, 216, 70, 30, 147, 222, 71, 30, 147, 209, 164, - 30, 147, 209, 162, 30, 147, 209, 150, 30, 147, 209, 158, 30, 147, 209, - 156, 30, 147, 209, 153, 30, 147, 209, 155, 30, 147, 209, 152, 30, 147, - 209, 157, 30, 147, 209, 167, 30, 147, 209, 168, 30, 147, 209, 151, 30, - 147, 209, 161, 30, 147, 222, 69, 30, 147, 222, 67, 30, 147, 202, 153, 30, - 147, 202, 151, 30, 147, 202, 143, 30, 147, 202, 146, 30, 147, 202, 152, - 30, 147, 202, 148, 30, 147, 202, 147, 30, 147, 202, 145, 30, 147, 202, - 156, 30, 147, 202, 158, 30, 147, 202, 159, 30, 147, 202, 154, 30, 147, - 202, 144, 30, 147, 202, 149, 30, 147, 202, 157, 30, 147, 243, 72, 30, - 147, 243, 70, 30, 147, 247, 14, 30, 147, 247, 12, 30, 147, 210, 149, 30, - 147, 223, 217, 30, 147, 223, 208, 30, 147, 223, 216, 30, 147, 223, 213, - 30, 147, 223, 211, 30, 147, 223, 215, 30, 147, 201, 168, 30, 147, 223, - 220, 30, 147, 223, 221, 30, 147, 223, 209, 30, 147, 223, 214, 30, 147, - 192, 57, 30, 147, 243, 23, 30, 147, 243, 73, 30, 147, 243, 71, 30, 147, - 247, 15, 30, 147, 247, 13, 30, 147, 243, 89, 30, 147, 243, 90, 30, 147, - 243, 74, 30, 147, 247, 16, 30, 147, 209, 207, 30, 147, 222, 70, 30, 147, - 201, 169, 30, 147, 192, 63, 30, 147, 221, 104, 30, 147, 213, 196, 30, - 147, 213, 202, 30, 147, 213, 201, 30, 147, 198, 162, 30, 147, 233, 3, 30, - 222, 174, 233, 3, 30, 222, 174, 65, 30, 222, 174, 252, 25, 30, 222, 174, - 170, 30, 222, 174, 192, 129, 30, 222, 174, 234, 65, 30, 222, 174, 71, 30, - 222, 174, 192, 67, 30, 222, 174, 192, 80, 30, 222, 174, 74, 30, 222, 174, - 193, 190, 30, 222, 174, 193, 176, 30, 222, 174, 211, 151, 30, 222, 174, - 192, 12, 30, 222, 174, 66, 30, 222, 174, 193, 107, 30, 222, 174, 193, - 125, 30, 222, 174, 193, 86, 30, 222, 174, 191, 225, 30, 222, 174, 233, - 242, 30, 222, 174, 192, 33, 30, 222, 174, 68, 30, 222, 174, 255, 202, 30, - 222, 174, 255, 201, 30, 222, 174, 192, 143, 30, 222, 174, 192, 141, 30, - 222, 174, 234, 63, 30, 222, 174, 234, 62, 30, 222, 174, 234, 64, 30, 222, - 174, 192, 66, 30, 222, 174, 192, 65, 30, 222, 174, 212, 10, 30, 222, 174, - 212, 11, 30, 222, 174, 212, 4, 30, 222, 174, 212, 9, 30, 222, 174, 212, - 7, 30, 222, 174, 192, 0, 30, 222, 174, 191, 255, 30, 222, 174, 191, 254, - 30, 222, 174, 192, 1, 30, 222, 174, 192, 2, 30, 222, 174, 196, 226, 30, - 222, 174, 196, 225, 30, 222, 174, 196, 223, 30, 222, 174, 196, 219, 30, - 222, 174, 196, 220, 30, 222, 174, 191, 220, 30, 222, 174, 191, 217, 30, - 222, 174, 191, 218, 30, 222, 174, 191, 212, 30, 222, 174, 191, 213, 30, - 222, 174, 191, 214, 30, 222, 174, 191, 216, 30, 222, 174, 233, 236, 30, - 222, 174, 233, 238, 30, 222, 174, 192, 32, 30, 222, 174, 228, 69, 30, - 222, 174, 228, 61, 30, 222, 174, 228, 64, 30, 222, 174, 228, 62, 30, 222, - 174, 228, 66, 30, 222, 174, 228, 68, 30, 222, 174, 251, 25, 30, 222, 174, - 251, 22, 30, 222, 174, 251, 20, 30, 222, 174, 251, 21, 30, 222, 174, 201, - 172, 30, 222, 174, 255, 203, 30, 222, 174, 192, 142, 30, 222, 174, 192, - 64, 30, 222, 174, 212, 6, 30, 222, 174, 212, 5, 30, 125, 221, 113, 30, - 125, 201, 167, 30, 125, 221, 106, 30, 125, 213, 204, 30, 125, 213, 202, - 30, 125, 213, 201, 30, 125, 198, 168, 30, 125, 206, 239, 30, 125, 206, - 234, 30, 125, 206, 231, 30, 125, 206, 224, 30, 125, 206, 219, 30, 125, - 206, 214, 30, 125, 206, 225, 30, 125, 206, 237, 30, 125, 216, 77, 30, - 125, 209, 169, 30, 125, 209, 158, 30, 125, 202, 160, 30, 125, 201, 161, - 30, 125, 223, 222, 30, 125, 243, 24, 30, 125, 243, 91, 30, 125, 221, 188, - 30, 125, 199, 7, 30, 125, 209, 209, 30, 125, 229, 142, 30, 125, 221, 107, - 30, 125, 221, 105, 30, 125, 213, 200, 30, 125, 213, 194, 30, 125, 213, - 196, 30, 125, 213, 199, 30, 125, 213, 195, 30, 125, 198, 165, 30, 125, - 198, 162, 30, 125, 206, 232, 30, 125, 206, 227, 30, 125, 206, 213, 30, - 125, 206, 212, 30, 125, 201, 163, 30, 125, 206, 229, 30, 125, 206, 228, - 30, 125, 206, 221, 30, 125, 206, 223, 30, 125, 206, 236, 30, 125, 206, - 216, 30, 125, 206, 226, 30, 125, 206, 235, 30, 125, 206, 211, 30, 125, - 216, 73, 30, 125, 216, 68, 30, 125, 216, 70, 30, 125, 216, 67, 30, 125, - 216, 65, 30, 125, 216, 71, 30, 125, 216, 76, 30, 125, 216, 74, 30, 125, - 222, 71, 30, 125, 209, 160, 30, 125, 209, 161, 30, 125, 209, 166, 30, - 125, 222, 69, 30, 125, 202, 153, 30, 125, 202, 143, 30, 125, 202, 146, - 30, 125, 202, 148, 30, 125, 210, 149, 30, 125, 223, 217, 30, 125, 223, - 210, 30, 125, 201, 168, 30, 125, 223, 218, 30, 125, 192, 57, 30, 125, - 192, 51, 30, 125, 192, 52, 30, 125, 209, 207, 30, 125, 222, 70, 30, 125, - 229, 140, 30, 125, 229, 138, 30, 125, 229, 141, 30, 125, 229, 139, 30, - 125, 192, 63, 30, 125, 221, 109, 30, 125, 221, 108, 30, 125, 221, 112, - 30, 125, 221, 110, 30, 125, 221, 111, 30, 125, 201, 165, 36, 5, 140, 36, - 5, 228, 159, 36, 5, 229, 158, 36, 5, 230, 91, 36, 5, 229, 215, 36, 5, - 229, 245, 36, 5, 229, 23, 36, 5, 229, 14, 36, 5, 173, 36, 5, 218, 225, - 36, 5, 219, 146, 36, 5, 220, 125, 36, 5, 219, 228, 36, 5, 219, 238, 36, - 5, 219, 43, 36, 5, 218, 191, 36, 5, 229, 177, 36, 5, 229, 171, 36, 5, - 229, 173, 36, 5, 229, 176, 36, 5, 229, 174, 36, 5, 229, 175, 36, 5, 229, - 172, 36, 5, 229, 170, 36, 5, 174, 36, 5, 215, 155, 36, 5, 216, 100, 36, - 5, 217, 151, 36, 5, 216, 211, 36, 5, 216, 232, 36, 5, 216, 12, 36, 5, - 215, 80, 36, 5, 200, 54, 36, 5, 200, 48, 36, 5, 200, 50, 36, 5, 200, 53, + 1, 219, 75, 80, 1, 65, 80, 1, 203, 140, 65, 80, 1, 68, 80, 1, 223, 201, + 80, 1, 66, 80, 1, 196, 30, 80, 1, 71, 80, 1, 215, 234, 71, 80, 1, 74, 80, + 1, 250, 165, 80, 18, 3, 199, 200, 252, 208, 80, 18, 3, 252, 208, 80, 18, + 3, 68, 80, 18, 3, 223, 201, 80, 18, 3, 66, 80, 18, 3, 196, 30, 80, 18, 3, + 71, 80, 18, 3, 251, 238, 80, 18, 3, 215, 234, 223, 201, 80, 18, 3, 215, + 234, 74, 80, 18, 3, 235, 17, 58, 80, 3, 251, 73, 80, 3, 75, 60, 80, 3, + 195, 35, 80, 3, 195, 40, 80, 3, 250, 216, 80, 120, 3, 216, 219, 170, 80, + 120, 3, 216, 219, 165, 80, 120, 3, 216, 219, 193, 190, 80, 120, 3, 216, + 219, 140, 80, 1, 230, 208, 188, 80, 17, 191, 77, 80, 17, 107, 80, 17, + 109, 80, 17, 138, 80, 17, 134, 80, 17, 150, 80, 17, 169, 80, 17, 175, 80, + 17, 171, 80, 17, 178, 80, 3, 219, 85, 205, 54, 80, 3, 205, 54, 80, 16, + 219, 38, 80, 16, 242, 69, 80, 16, 252, 3, 80, 16, 231, 148, 80, 1, 203, + 166, 80, 1, 201, 176, 80, 1, 117, 146, 80, 1, 117, 206, 111, 80, 1, 117, + 172, 80, 1, 117, 219, 76, 80, 18, 3, 117, 146, 80, 18, 3, 117, 206, 111, + 80, 18, 3, 117, 172, 80, 18, 3, 117, 219, 76, 80, 1, 215, 234, 214, 70, + 80, 1, 215, 234, 222, 254, 80, 1, 215, 234, 249, 55, 80, 1, 215, 234, + 249, 50, 80, 120, 3, 215, 234, 216, 219, 181, 80, 120, 3, 215, 234, 216, + 219, 174, 80, 120, 3, 215, 234, 216, 219, 173, 80, 1, 203, 172, 222, 64, + 203, 166, 80, 18, 3, 203, 172, 222, 64, 233, 244, 80, 163, 87, 203, 172, + 222, 64, 230, 7, 80, 163, 87, 203, 172, 222, 64, 222, 25, 209, 201, 80, + 1, 193, 102, 208, 118, 222, 64, 199, 49, 80, 1, 193, 102, 208, 118, 222, + 64, 208, 124, 80, 18, 3, 193, 102, 208, 118, 222, 64, 233, 244, 80, 18, + 3, 193, 102, 208, 118, 222, 64, 196, 152, 80, 3, 193, 102, 208, 118, 222, + 64, 198, 78, 80, 3, 193, 102, 208, 118, 222, 64, 198, 77, 80, 3, 193, + 102, 208, 118, 222, 64, 198, 76, 80, 3, 193, 102, 208, 118, 222, 64, 198, + 75, 80, 3, 193, 102, 208, 118, 222, 64, 198, 74, 80, 1, 234, 204, 208, + 118, 222, 64, 213, 81, 80, 1, 234, 204, 208, 118, 222, 64, 191, 183, 80, + 1, 234, 204, 208, 118, 222, 64, 231, 58, 80, 18, 3, 231, 163, 222, 64, + 68, 80, 18, 3, 222, 30, 211, 153, 80, 18, 3, 222, 30, 66, 80, 18, 3, 222, + 30, 234, 190, 80, 1, 203, 140, 155, 80, 1, 203, 140, 221, 217, 80, 1, + 203, 140, 231, 242, 80, 1, 203, 140, 247, 162, 80, 1, 203, 140, 191, 123, + 80, 1, 203, 140, 212, 103, 80, 1, 203, 140, 238, 34, 80, 1, 203, 140, + 181, 80, 1, 203, 140, 209, 230, 80, 1, 203, 140, 233, 111, 80, 1, 203, + 140, 249, 155, 80, 1, 203, 140, 199, 49, 80, 1, 203, 140, 140, 80, 120, + 3, 203, 140, 216, 219, 193, 190, 80, 18, 3, 203, 140, 252, 208, 80, 18, + 3, 203, 140, 71, 80, 18, 3, 203, 140, 235, 17, 58, 80, 18, 3, 203, 140, + 53, 192, 159, 80, 3, 203, 140, 198, 77, 80, 3, 203, 140, 198, 76, 80, 3, + 203, 140, 198, 74, 80, 3, 203, 140, 198, 73, 80, 3, 203, 140, 238, 249, + 198, 77, 80, 3, 203, 140, 238, 249, 198, 76, 80, 3, 203, 140, 238, 249, + 234, 108, 198, 79, 80, 1, 206, 48, 210, 191, 233, 111, 80, 3, 206, 48, + 210, 191, 198, 74, 80, 203, 140, 17, 191, 77, 80, 203, 140, 17, 107, 80, + 203, 140, 17, 109, 80, 203, 140, 17, 138, 80, 203, 140, 17, 134, 80, 203, + 140, 17, 150, 80, 203, 140, 17, 169, 80, 203, 140, 17, 175, 80, 203, 140, + 17, 171, 80, 203, 140, 17, 178, 80, 3, 221, 208, 198, 78, 80, 3, 221, + 208, 198, 76, 80, 18, 3, 251, 224, 65, 80, 18, 3, 251, 224, 251, 238, 80, + 16, 203, 140, 107, 80, 16, 203, 140, 233, 217, 101, 6, 1, 251, 134, 101, + 6, 1, 249, 103, 101, 6, 1, 231, 212, 101, 6, 1, 236, 152, 101, 6, 1, 234, + 105, 101, 6, 1, 195, 49, 101, 6, 1, 191, 80, 101, 6, 1, 199, 193, 101, 6, + 1, 223, 164, 101, 6, 1, 222, 89, 101, 6, 1, 220, 9, 101, 6, 1, 217, 92, + 101, 6, 1, 214, 218, 101, 6, 1, 211, 106, 101, 6, 1, 210, 133, 101, 6, 1, + 191, 67, 101, 6, 1, 207, 165, 101, 6, 1, 205, 143, 101, 6, 1, 199, 179, + 101, 6, 1, 196, 113, 101, 6, 1, 209, 222, 101, 6, 1, 221, 202, 101, 6, 1, + 231, 84, 101, 6, 1, 208, 83, 101, 6, 1, 203, 70, 101, 6, 1, 243, 83, 101, + 6, 1, 247, 130, 101, 6, 1, 222, 236, 101, 6, 1, 243, 20, 101, 6, 1, 246, + 243, 101, 6, 1, 192, 218, 101, 6, 1, 222, 251, 101, 6, 1, 230, 89, 101, + 6, 1, 229, 247, 101, 6, 1, 229, 147, 101, 6, 1, 193, 125, 101, 6, 1, 230, + 21, 101, 6, 1, 229, 13, 101, 6, 1, 192, 14, 101, 6, 1, 252, 16, 101, 1, + 251, 134, 101, 1, 249, 103, 101, 1, 231, 212, 101, 1, 236, 152, 101, 1, + 234, 105, 101, 1, 195, 49, 101, 1, 191, 80, 101, 1, 199, 193, 101, 1, + 223, 164, 101, 1, 222, 89, 101, 1, 220, 9, 101, 1, 217, 92, 101, 1, 214, + 218, 101, 1, 211, 106, 101, 1, 210, 133, 101, 1, 191, 67, 101, 1, 207, + 165, 101, 1, 205, 143, 101, 1, 199, 179, 101, 1, 196, 113, 101, 1, 209, + 222, 101, 1, 221, 202, 101, 1, 231, 84, 101, 1, 208, 83, 101, 1, 203, 70, + 101, 1, 243, 83, 101, 1, 247, 130, 101, 1, 222, 236, 101, 1, 243, 20, + 101, 1, 246, 243, 101, 1, 192, 218, 101, 1, 222, 251, 101, 1, 230, 89, + 101, 1, 229, 247, 101, 1, 229, 147, 101, 1, 193, 125, 101, 1, 230, 21, + 101, 1, 229, 13, 101, 1, 233, 25, 101, 1, 192, 14, 101, 1, 234, 125, 101, + 1, 154, 231, 212, 101, 1, 251, 232, 101, 210, 130, 204, 11, 52, 1, 101, + 214, 218, 101, 1, 252, 16, 101, 1, 230, 19, 56, 101, 1, 220, 118, 56, 30, + 147, 221, 115, 30, 147, 201, 168, 30, 147, 213, 206, 30, 147, 198, 168, + 30, 147, 201, 157, 30, 147, 206, 240, 30, 147, 216, 79, 30, 147, 209, + 171, 30, 147, 201, 165, 30, 147, 202, 161, 30, 147, 201, 162, 30, 147, + 223, 224, 30, 147, 243, 26, 30, 147, 201, 172, 30, 147, 243, 93, 30, 147, + 221, 190, 30, 147, 199, 7, 30, 147, 209, 211, 30, 147, 229, 144, 30, 147, + 213, 202, 30, 147, 201, 166, 30, 147, 213, 196, 30, 147, 213, 200, 30, + 147, 198, 165, 30, 147, 206, 228, 30, 147, 201, 164, 30, 147, 206, 238, + 30, 147, 222, 70, 30, 147, 216, 72, 30, 147, 222, 73, 30, 147, 209, 166, + 30, 147, 209, 164, 30, 147, 209, 152, 30, 147, 209, 160, 30, 147, 209, + 158, 30, 147, 209, 155, 30, 147, 209, 157, 30, 147, 209, 154, 30, 147, + 209, 159, 30, 147, 209, 169, 30, 147, 209, 170, 30, 147, 209, 153, 30, + 147, 209, 163, 30, 147, 222, 71, 30, 147, 222, 69, 30, 147, 202, 154, 30, + 147, 202, 152, 30, 147, 202, 144, 30, 147, 202, 147, 30, 147, 202, 153, + 30, 147, 202, 149, 30, 147, 202, 148, 30, 147, 202, 146, 30, 147, 202, + 157, 30, 147, 202, 159, 30, 147, 202, 160, 30, 147, 202, 155, 30, 147, + 202, 145, 30, 147, 202, 150, 30, 147, 202, 158, 30, 147, 243, 74, 30, + 147, 243, 72, 30, 147, 247, 16, 30, 147, 247, 14, 30, 147, 210, 151, 30, + 147, 223, 219, 30, 147, 223, 210, 30, 147, 223, 218, 30, 147, 223, 215, + 30, 147, 223, 213, 30, 147, 223, 217, 30, 147, 201, 169, 30, 147, 223, + 222, 30, 147, 223, 223, 30, 147, 223, 211, 30, 147, 223, 216, 30, 147, + 192, 57, 30, 147, 243, 25, 30, 147, 243, 75, 30, 147, 243, 73, 30, 147, + 247, 17, 30, 147, 247, 15, 30, 147, 243, 91, 30, 147, 243, 92, 30, 147, + 243, 76, 30, 147, 247, 18, 30, 147, 209, 209, 30, 147, 222, 72, 30, 147, + 201, 170, 30, 147, 192, 63, 30, 147, 221, 106, 30, 147, 213, 198, 30, + 147, 213, 204, 30, 147, 213, 203, 30, 147, 198, 162, 30, 147, 233, 5, 30, + 222, 176, 233, 5, 30, 222, 176, 65, 30, 222, 176, 252, 27, 30, 222, 176, + 170, 30, 222, 176, 192, 129, 30, 222, 176, 234, 67, 30, 222, 176, 71, 30, + 222, 176, 192, 67, 30, 222, 176, 192, 80, 30, 222, 176, 74, 30, 222, 176, + 193, 190, 30, 222, 176, 193, 176, 30, 222, 176, 211, 153, 30, 222, 176, + 192, 12, 30, 222, 176, 66, 30, 222, 176, 193, 107, 30, 222, 176, 193, + 125, 30, 222, 176, 193, 86, 30, 222, 176, 191, 225, 30, 222, 176, 233, + 244, 30, 222, 176, 192, 33, 30, 222, 176, 68, 30, 222, 176, 255, 204, 30, + 222, 176, 255, 203, 30, 222, 176, 192, 143, 30, 222, 176, 192, 141, 30, + 222, 176, 234, 65, 30, 222, 176, 234, 64, 30, 222, 176, 234, 66, 30, 222, + 176, 192, 66, 30, 222, 176, 192, 65, 30, 222, 176, 212, 12, 30, 222, 176, + 212, 13, 30, 222, 176, 212, 6, 30, 222, 176, 212, 11, 30, 222, 176, 212, + 9, 30, 222, 176, 192, 0, 30, 222, 176, 191, 255, 30, 222, 176, 191, 254, + 30, 222, 176, 192, 1, 30, 222, 176, 192, 2, 30, 222, 176, 196, 226, 30, + 222, 176, 196, 225, 30, 222, 176, 196, 223, 30, 222, 176, 196, 219, 30, + 222, 176, 196, 220, 30, 222, 176, 191, 220, 30, 222, 176, 191, 217, 30, + 222, 176, 191, 218, 30, 222, 176, 191, 212, 30, 222, 176, 191, 213, 30, + 222, 176, 191, 214, 30, 222, 176, 191, 216, 30, 222, 176, 233, 238, 30, + 222, 176, 233, 240, 30, 222, 176, 192, 32, 30, 222, 176, 228, 71, 30, + 222, 176, 228, 63, 30, 222, 176, 228, 66, 30, 222, 176, 228, 64, 30, 222, + 176, 228, 68, 30, 222, 176, 228, 70, 30, 222, 176, 251, 27, 30, 222, 176, + 251, 24, 30, 222, 176, 251, 22, 30, 222, 176, 251, 23, 30, 222, 176, 201, + 173, 30, 222, 176, 255, 205, 30, 222, 176, 192, 142, 30, 222, 176, 192, + 64, 30, 222, 176, 212, 8, 30, 222, 176, 212, 7, 30, 125, 221, 115, 30, + 125, 201, 168, 30, 125, 221, 108, 30, 125, 213, 206, 30, 125, 213, 204, + 30, 125, 213, 203, 30, 125, 198, 168, 30, 125, 206, 240, 30, 125, 206, + 235, 30, 125, 206, 232, 30, 125, 206, 225, 30, 125, 206, 220, 30, 125, + 206, 215, 30, 125, 206, 226, 30, 125, 206, 238, 30, 125, 216, 79, 30, + 125, 209, 171, 30, 125, 209, 160, 30, 125, 202, 161, 30, 125, 201, 162, + 30, 125, 223, 224, 30, 125, 243, 26, 30, 125, 243, 93, 30, 125, 221, 190, + 30, 125, 199, 7, 30, 125, 209, 211, 30, 125, 229, 144, 30, 125, 221, 109, + 30, 125, 221, 107, 30, 125, 213, 202, 30, 125, 213, 196, 30, 125, 213, + 198, 30, 125, 213, 201, 30, 125, 213, 197, 30, 125, 198, 165, 30, 125, + 198, 162, 30, 125, 206, 233, 30, 125, 206, 228, 30, 125, 206, 214, 30, + 125, 206, 213, 30, 125, 201, 164, 30, 125, 206, 230, 30, 125, 206, 229, + 30, 125, 206, 222, 30, 125, 206, 224, 30, 125, 206, 237, 30, 125, 206, + 217, 30, 125, 206, 227, 30, 125, 206, 236, 30, 125, 206, 212, 30, 125, + 216, 75, 30, 125, 216, 70, 30, 125, 216, 72, 30, 125, 216, 69, 30, 125, + 216, 67, 30, 125, 216, 73, 30, 125, 216, 78, 30, 125, 216, 76, 30, 125, + 222, 73, 30, 125, 209, 162, 30, 125, 209, 163, 30, 125, 209, 168, 30, + 125, 222, 71, 30, 125, 202, 154, 30, 125, 202, 144, 30, 125, 202, 147, + 30, 125, 202, 149, 30, 125, 210, 151, 30, 125, 223, 219, 30, 125, 223, + 212, 30, 125, 201, 169, 30, 125, 223, 220, 30, 125, 192, 57, 30, 125, + 192, 51, 30, 125, 192, 52, 30, 125, 209, 209, 30, 125, 222, 72, 30, 125, + 229, 142, 30, 125, 229, 140, 30, 125, 229, 143, 30, 125, 229, 141, 30, + 125, 192, 63, 30, 125, 221, 111, 30, 125, 221, 110, 30, 125, 221, 114, + 30, 125, 221, 112, 30, 125, 221, 113, 30, 125, 201, 166, 36, 5, 140, 36, + 5, 228, 161, 36, 5, 229, 160, 36, 5, 230, 93, 36, 5, 229, 217, 36, 5, + 229, 247, 36, 5, 229, 25, 36, 5, 229, 16, 36, 5, 173, 36, 5, 218, 227, + 36, 5, 219, 148, 36, 5, 220, 127, 36, 5, 219, 230, 36, 5, 219, 240, 36, + 5, 219, 45, 36, 5, 218, 193, 36, 5, 229, 179, 36, 5, 229, 173, 36, 5, + 229, 175, 36, 5, 229, 178, 36, 5, 229, 176, 36, 5, 229, 177, 36, 5, 229, + 174, 36, 5, 229, 172, 36, 5, 174, 36, 5, 215, 157, 36, 5, 216, 102, 36, + 5, 217, 153, 36, 5, 216, 213, 36, 5, 216, 234, 36, 5, 216, 14, 36, 5, + 215, 82, 36, 5, 200, 54, 36, 5, 200, 48, 36, 5, 200, 50, 36, 5, 200, 53, 36, 5, 200, 51, 36, 5, 200, 52, 36, 5, 200, 49, 36, 5, 200, 47, 36, 5, - 165, 36, 5, 206, 68, 36, 5, 207, 1, 36, 5, 207, 178, 36, 5, 207, 84, 36, - 5, 207, 113, 36, 5, 206, 162, 36, 5, 206, 26, 36, 5, 188, 36, 5, 201, 4, - 36, 5, 202, 222, 36, 5, 205, 197, 36, 5, 205, 50, 36, 5, 205, 68, 36, 5, - 202, 46, 36, 5, 200, 150, 36, 5, 203, 165, 36, 5, 203, 5, 36, 5, 203, 81, - 36, 5, 203, 160, 36, 5, 203, 111, 36, 5, 203, 113, 36, 5, 203, 56, 36, 5, - 202, 240, 36, 5, 208, 96, 36, 5, 208, 33, 36, 5, 208, 57, 36, 5, 208, 95, - 36, 5, 208, 74, 36, 5, 208, 75, 36, 5, 208, 45, 36, 5, 208, 44, 36, 5, - 207, 240, 36, 5, 207, 236, 36, 5, 207, 239, 36, 5, 207, 237, 36, 5, 207, - 238, 36, 5, 208, 71, 36, 5, 208, 63, 36, 5, 208, 66, 36, 5, 208, 70, 36, - 5, 208, 67, 36, 5, 208, 68, 36, 5, 208, 65, 36, 5, 208, 62, 36, 5, 208, - 58, 36, 5, 208, 61, 36, 5, 208, 59, 36, 5, 208, 60, 36, 5, 249, 153, 36, - 5, 248, 10, 36, 5, 248, 188, 36, 5, 249, 151, 36, 5, 249, 1, 36, 5, 249, - 17, 36, 5, 248, 111, 36, 5, 247, 210, 36, 5, 195, 188, 36, 5, 193, 249, + 165, 36, 5, 206, 69, 36, 5, 207, 2, 36, 5, 207, 180, 36, 5, 207, 86, 36, + 5, 207, 115, 36, 5, 206, 163, 36, 5, 206, 27, 36, 5, 188, 36, 5, 201, 5, + 36, 5, 202, 223, 36, 5, 205, 198, 36, 5, 205, 51, 36, 5, 205, 69, 36, 5, + 202, 47, 36, 5, 200, 150, 36, 5, 203, 166, 36, 5, 203, 6, 36, 5, 203, 82, + 36, 5, 203, 161, 36, 5, 203, 112, 36, 5, 203, 114, 36, 5, 203, 57, 36, 5, + 202, 241, 36, 5, 208, 98, 36, 5, 208, 35, 36, 5, 208, 59, 36, 5, 208, 97, + 36, 5, 208, 76, 36, 5, 208, 77, 36, 5, 208, 47, 36, 5, 208, 46, 36, 5, + 207, 242, 36, 5, 207, 238, 36, 5, 207, 241, 36, 5, 207, 239, 36, 5, 207, + 240, 36, 5, 208, 73, 36, 5, 208, 65, 36, 5, 208, 68, 36, 5, 208, 72, 36, + 5, 208, 69, 36, 5, 208, 70, 36, 5, 208, 67, 36, 5, 208, 64, 36, 5, 208, + 60, 36, 5, 208, 63, 36, 5, 208, 61, 36, 5, 208, 62, 36, 5, 249, 155, 36, + 5, 248, 12, 36, 5, 248, 190, 36, 5, 249, 153, 36, 5, 249, 3, 36, 5, 249, + 19, 36, 5, 248, 113, 36, 5, 247, 212, 36, 5, 195, 188, 36, 5, 193, 249, 36, 5, 195, 69, 36, 5, 195, 187, 36, 5, 195, 148, 36, 5, 195, 153, 36, 5, 195, 24, 36, 5, 193, 238, 36, 5, 190, 190, 36, 5, 197, 94, 36, 5, 198, 193, 36, 5, 199, 245, 36, 5, 199, 121, 36, 5, 199, 145, 36, 5, 159, 36, - 5, 197, 43, 36, 5, 247, 160, 36, 5, 238, 195, 36, 5, 243, 29, 36, 5, 247, - 159, 36, 5, 247, 34, 36, 5, 247, 42, 36, 5, 242, 99, 36, 5, 238, 151, 36, - 5, 192, 220, 36, 5, 192, 188, 36, 5, 192, 207, 36, 5, 192, 219, 36, 5, - 192, 213, 36, 5, 192, 214, 36, 5, 192, 196, 36, 5, 192, 195, 36, 5, 192, - 181, 36, 5, 192, 177, 36, 5, 192, 180, 36, 5, 192, 178, 36, 5, 192, 179, - 36, 5, 180, 36, 5, 212, 178, 36, 5, 213, 219, 36, 5, 214, 250, 36, 5, - 214, 110, 36, 5, 214, 121, 36, 5, 213, 43, 36, 5, 212, 110, 36, 5, 212, - 101, 36, 5, 212, 58, 36, 5, 212, 81, 36, 5, 212, 100, 36, 5, 212, 89, 36, - 5, 212, 90, 36, 5, 212, 65, 36, 5, 212, 48, 36, 5, 231, 11, 65, 36, 5, - 231, 11, 66, 36, 5, 231, 11, 68, 36, 5, 231, 11, 252, 206, 36, 5, 231, - 11, 234, 188, 36, 5, 231, 11, 71, 36, 5, 231, 11, 74, 36, 5, 231, 11, - 193, 190, 36, 5, 155, 36, 5, 220, 232, 36, 5, 221, 166, 36, 5, 222, 127, - 36, 5, 222, 13, 36, 5, 222, 22, 36, 5, 221, 67, 36, 5, 221, 62, 36, 5, - 220, 179, 36, 5, 220, 172, 36, 5, 220, 178, 36, 5, 220, 173, 36, 5, 220, - 174, 36, 5, 220, 165, 36, 5, 220, 159, 36, 5, 220, 161, 36, 5, 220, 164, - 36, 5, 220, 162, 36, 5, 220, 163, 36, 5, 220, 160, 36, 5, 220, 158, 36, - 5, 220, 154, 36, 5, 220, 157, 36, 5, 220, 155, 36, 5, 220, 156, 36, 5, - 193, 190, 36, 5, 193, 0, 36, 5, 193, 86, 36, 5, 193, 181, 36, 5, 193, - 114, 36, 5, 193, 125, 36, 5, 193, 48, 36, 5, 193, 40, 36, 5, 209, 219, - 65, 36, 5, 209, 219, 66, 36, 5, 209, 219, 68, 36, 5, 209, 219, 252, 206, - 36, 5, 209, 219, 234, 188, 36, 5, 209, 219, 71, 36, 5, 209, 219, 74, 36, + 5, 197, 43, 36, 5, 247, 162, 36, 5, 238, 197, 36, 5, 243, 31, 36, 5, 247, + 161, 36, 5, 247, 36, 36, 5, 247, 44, 36, 5, 242, 101, 36, 5, 238, 153, + 36, 5, 192, 220, 36, 5, 192, 188, 36, 5, 192, 207, 36, 5, 192, 219, 36, + 5, 192, 213, 36, 5, 192, 214, 36, 5, 192, 196, 36, 5, 192, 195, 36, 5, + 192, 181, 36, 5, 192, 177, 36, 5, 192, 180, 36, 5, 192, 178, 36, 5, 192, + 179, 36, 5, 181, 36, 5, 212, 180, 36, 5, 213, 221, 36, 5, 214, 252, 36, + 5, 214, 112, 36, 5, 214, 123, 36, 5, 213, 45, 36, 5, 212, 112, 36, 5, + 212, 103, 36, 5, 212, 60, 36, 5, 212, 83, 36, 5, 212, 102, 36, 5, 212, + 91, 36, 5, 212, 92, 36, 5, 212, 67, 36, 5, 212, 50, 36, 5, 231, 13, 65, + 36, 5, 231, 13, 66, 36, 5, 231, 13, 68, 36, 5, 231, 13, 252, 208, 36, 5, + 231, 13, 234, 190, 36, 5, 231, 13, 71, 36, 5, 231, 13, 74, 36, 5, 231, + 13, 193, 190, 36, 5, 155, 36, 5, 220, 234, 36, 5, 221, 168, 36, 5, 222, + 129, 36, 5, 222, 15, 36, 5, 222, 24, 36, 5, 221, 69, 36, 5, 221, 64, 36, + 5, 220, 181, 36, 5, 220, 174, 36, 5, 220, 180, 36, 5, 220, 175, 36, 5, + 220, 176, 36, 5, 220, 167, 36, 5, 220, 161, 36, 5, 220, 163, 36, 5, 220, + 166, 36, 5, 220, 164, 36, 5, 220, 165, 36, 5, 220, 162, 36, 5, 220, 160, + 36, 5, 220, 156, 36, 5, 220, 159, 36, 5, 220, 157, 36, 5, 220, 158, 36, + 5, 193, 190, 36, 5, 193, 0, 36, 5, 193, 86, 36, 5, 193, 181, 36, 5, 193, + 114, 36, 5, 193, 125, 36, 5, 193, 48, 36, 5, 193, 40, 36, 5, 209, 221, + 65, 36, 5, 209, 221, 66, 36, 5, 209, 221, 68, 36, 5, 209, 221, 252, 208, + 36, 5, 209, 221, 234, 190, 36, 5, 209, 221, 71, 36, 5, 209, 221, 74, 36, 5, 191, 123, 36, 5, 190, 251, 36, 5, 191, 30, 36, 5, 191, 121, 36, 5, 191, 84, 36, 5, 191, 87, 36, 5, 191, 7, 36, 5, 190, 238, 36, 5, 191, 71, 36, 5, 191, 48, 36, 5, 191, 57, 36, 5, 191, 70, 36, 5, 191, 61, 36, 5, 191, 62, 36, 5, 191, 54, 36, 5, 191, 39, 36, 5, 170, 36, 5, 191, 225, 36, 5, 192, 33, 36, 5, 192, 140, 36, 5, 192, 77, 36, 5, 192, 80, 36, 5, 192, - 12, 36, 5, 191, 252, 36, 5, 238, 32, 36, 5, 235, 89, 36, 5, 237, 44, 36, - 5, 238, 31, 36, 5, 237, 131, 36, 5, 237, 146, 36, 5, 236, 174, 36, 5, - 235, 46, 36, 5, 237, 191, 36, 5, 237, 156, 36, 5, 237, 168, 36, 5, 237, - 190, 36, 5, 237, 178, 36, 5, 237, 179, 36, 5, 237, 161, 36, 5, 237, 147, - 36, 5, 223, 32, 36, 5, 222, 182, 36, 5, 222, 244, 36, 5, 223, 31, 36, 5, - 223, 8, 36, 5, 223, 10, 36, 5, 222, 201, 36, 5, 222, 160, 36, 5, 231, - 240, 36, 5, 230, 179, 36, 5, 231, 53, 36, 5, 231, 237, 36, 5, 231, 157, - 36, 5, 231, 165, 36, 5, 231, 3, 36, 5, 231, 2, 36, 5, 230, 135, 36, 5, - 230, 131, 36, 5, 230, 134, 36, 5, 230, 132, 36, 5, 230, 133, 36, 5, 231, - 127, 36, 5, 231, 107, 36, 5, 231, 117, 36, 5, 231, 126, 36, 5, 231, 121, - 36, 5, 231, 122, 36, 5, 231, 111, 36, 5, 231, 96, 36, 5, 199, 49, 36, 5, + 12, 36, 5, 191, 252, 36, 5, 238, 34, 36, 5, 235, 91, 36, 5, 237, 46, 36, + 5, 238, 33, 36, 5, 237, 133, 36, 5, 237, 148, 36, 5, 236, 176, 36, 5, + 235, 48, 36, 5, 237, 193, 36, 5, 237, 158, 36, 5, 237, 170, 36, 5, 237, + 192, 36, 5, 237, 180, 36, 5, 237, 181, 36, 5, 237, 163, 36, 5, 237, 149, + 36, 5, 223, 34, 36, 5, 222, 184, 36, 5, 222, 246, 36, 5, 223, 33, 36, 5, + 223, 10, 36, 5, 223, 12, 36, 5, 222, 203, 36, 5, 222, 162, 36, 5, 231, + 242, 36, 5, 230, 181, 36, 5, 231, 55, 36, 5, 231, 239, 36, 5, 231, 159, + 36, 5, 231, 167, 36, 5, 231, 5, 36, 5, 231, 4, 36, 5, 230, 137, 36, 5, + 230, 133, 36, 5, 230, 136, 36, 5, 230, 134, 36, 5, 230, 135, 36, 5, 231, + 129, 36, 5, 231, 109, 36, 5, 231, 119, 36, 5, 231, 128, 36, 5, 231, 123, + 36, 5, 231, 124, 36, 5, 231, 113, 36, 5, 231, 98, 36, 5, 199, 49, 36, 5, 198, 213, 36, 5, 199, 11, 36, 5, 199, 48, 36, 5, 199, 31, 36, 5, 199, 33, - 36, 5, 198, 241, 36, 5, 198, 204, 36, 5, 247, 1, 36, 5, 243, 48, 36, 5, - 243, 95, 36, 5, 247, 0, 36, 5, 243, 123, 36, 5, 243, 127, 36, 5, 243, 68, - 36, 5, 243, 37, 36, 5, 209, 228, 36, 5, 209, 191, 36, 5, 209, 211, 36, 5, - 209, 227, 36, 5, 209, 213, 36, 5, 209, 214, 36, 5, 209, 199, 36, 5, 209, - 187, 36, 5, 197, 168, 36, 5, 197, 140, 36, 5, 197, 146, 36, 5, 197, 167, + 36, 5, 198, 241, 36, 5, 198, 204, 36, 5, 247, 3, 36, 5, 243, 50, 36, 5, + 243, 97, 36, 5, 247, 2, 36, 5, 243, 125, 36, 5, 243, 129, 36, 5, 243, 70, + 36, 5, 243, 39, 36, 5, 209, 230, 36, 5, 209, 193, 36, 5, 209, 213, 36, 5, + 209, 229, 36, 5, 209, 215, 36, 5, 209, 216, 36, 5, 209, 201, 36, 5, 209, + 189, 36, 5, 197, 168, 36, 5, 197, 140, 36, 5, 197, 146, 36, 5, 197, 167, 36, 5, 197, 160, 36, 5, 197, 161, 36, 5, 197, 144, 36, 5, 197, 138, 36, 5, 196, 240, 36, 5, 196, 232, 36, 5, 196, 236, 36, 5, 196, 239, 36, 5, 196, 237, 36, 5, 196, 238, 36, 5, 196, 234, 36, 5, 196, 233, 36, 5, 233, - 109, 36, 5, 232, 86, 36, 5, 233, 23, 36, 5, 233, 108, 36, 5, 233, 52, 36, - 5, 233, 59, 36, 5, 232, 175, 36, 5, 232, 62, 36, 5, 168, 36, 5, 208, 165, - 36, 5, 209, 185, 36, 5, 210, 220, 36, 5, 210, 49, 36, 5, 210, 63, 36, 5, - 209, 73, 36, 5, 208, 122, 36, 5, 206, 16, 36, 5, 215, 68, 36, 5, 232, 56, - 36, 33, 231, 153, 23, 18, 219, 198, 77, 36, 33, 18, 219, 198, 77, 36, 33, - 231, 153, 77, 36, 205, 54, 77, 36, 193, 22, 36, 232, 80, 201, 63, 36, - 242, 74, 36, 204, 25, 36, 242, 83, 36, 208, 228, 242, 83, 36, 208, 13, - 77, 36, 210, 128, 204, 10, 36, 17, 107, 36, 17, 109, 36, 17, 138, 36, 17, - 134, 36, 17, 149, 36, 17, 169, 36, 17, 175, 36, 17, 171, 36, 17, 178, 36, - 31, 199, 95, 36, 31, 197, 32, 36, 31, 198, 249, 36, 31, 232, 135, 36, 31, - 233, 15, 36, 31, 202, 120, 36, 31, 203, 241, 36, 31, 234, 153, 36, 31, - 213, 169, 36, 31, 228, 140, 36, 31, 199, 96, 189, 36, 5, 205, 59, 215, - 80, 36, 5, 215, 76, 36, 5, 215, 77, 36, 5, 215, 78, 36, 5, 205, 59, 247, - 210, 36, 5, 247, 207, 36, 5, 247, 208, 36, 5, 247, 209, 36, 5, 205, 59, - 232, 62, 36, 5, 232, 58, 36, 5, 232, 59, 36, 5, 232, 60, 36, 5, 205, 59, - 208, 122, 36, 5, 208, 118, 36, 5, 208, 119, 36, 5, 208, 120, 36, 198, 80, - 87, 192, 15, 36, 198, 80, 87, 237, 89, 36, 198, 80, 87, 206, 194, 36, - 198, 80, 87, 203, 40, 206, 194, 36, 198, 80, 87, 237, 18, 36, 198, 80, - 87, 221, 250, 36, 198, 80, 87, 243, 76, 36, 198, 80, 87, 229, 147, 36, - 198, 80, 87, 237, 88, 36, 198, 80, 87, 220, 195, 103, 1, 65, 103, 1, 71, - 103, 1, 68, 103, 1, 74, 103, 1, 66, 103, 1, 196, 12, 103, 1, 231, 240, - 103, 1, 155, 103, 1, 231, 165, 103, 1, 231, 53, 103, 1, 231, 3, 103, 1, - 230, 179, 103, 1, 230, 138, 103, 1, 140, 103, 1, 229, 245, 103, 1, 229, - 158, 103, 1, 229, 23, 103, 1, 228, 159, 103, 1, 228, 126, 103, 1, 173, - 103, 1, 219, 238, 103, 1, 219, 146, 103, 1, 219, 43, 103, 1, 218, 225, - 103, 1, 218, 192, 103, 1, 174, 103, 1, 216, 232, 103, 1, 216, 100, 103, - 1, 216, 12, 103, 1, 215, 155, 103, 1, 180, 103, 1, 229, 47, 103, 1, 214, - 237, 103, 1, 214, 121, 103, 1, 213, 219, 103, 1, 213, 43, 103, 1, 212, - 178, 103, 1, 212, 112, 103, 1, 208, 32, 103, 1, 208, 16, 103, 1, 208, 9, - 103, 1, 207, 255, 103, 1, 207, 244, 103, 1, 207, 242, 103, 1, 188, 103, - 1, 206, 8, 103, 1, 205, 68, 103, 1, 202, 222, 103, 1, 202, 46, 103, 1, - 201, 4, 103, 1, 200, 158, 103, 1, 238, 32, 103, 1, 190, 190, 103, 1, 237, - 146, 103, 1, 199, 145, 103, 1, 237, 44, 103, 1, 198, 193, 103, 1, 236, - 174, 103, 1, 235, 89, 103, 1, 235, 57, 103, 1, 236, 186, 103, 1, 198, - 115, 103, 1, 198, 114, 103, 1, 198, 103, 103, 1, 198, 102, 103, 1, 198, - 101, 103, 1, 198, 100, 103, 1, 197, 168, 103, 1, 197, 161, 103, 1, 197, - 146, 103, 1, 197, 144, 103, 1, 197, 140, 103, 1, 197, 139, 103, 1, 193, - 190, 103, 1, 193, 125, 103, 1, 193, 86, 103, 1, 193, 48, 103, 1, 193, 0, - 103, 1, 192, 243, 103, 1, 170, 103, 1, 192, 80, 103, 1, 192, 33, 103, 1, - 192, 12, 103, 1, 191, 225, 103, 1, 191, 184, 103, 1, 215, 87, 103, 2, 1, - 192, 80, 103, 2, 1, 192, 33, 103, 2, 1, 192, 12, 103, 2, 1, 191, 225, - 103, 2, 1, 191, 184, 103, 2, 1, 215, 87, 21, 22, 228, 88, 21, 22, 71, 21, - 22, 252, 170, 21, 22, 68, 21, 22, 223, 199, 21, 22, 74, 21, 22, 211, 87, - 21, 22, 192, 158, 211, 87, 21, 22, 98, 234, 188, 21, 22, 98, 68, 21, 22, - 65, 21, 22, 252, 206, 21, 22, 193, 125, 21, 22, 193, 103, 193, 125, 21, - 22, 193, 86, 21, 22, 193, 103, 193, 86, 21, 22, 193, 70, 21, 22, 193, - 103, 193, 70, 21, 22, 193, 48, 21, 22, 193, 103, 193, 48, 21, 22, 193, - 29, 21, 22, 193, 103, 193, 29, 21, 22, 214, 209, 193, 29, 21, 22, 193, - 190, 21, 22, 193, 103, 193, 190, 21, 22, 193, 181, 21, 22, 193, 103, 193, - 181, 21, 22, 214, 209, 193, 181, 21, 22, 251, 236, 21, 22, 192, 158, 193, - 224, 21, 22, 231, 11, 201, 63, 21, 22, 53, 252, 46, 21, 22, 53, 230, 210, - 21, 22, 53, 248, 77, 132, 206, 188, 21, 22, 53, 198, 54, 132, 206, 188, - 21, 22, 53, 50, 132, 206, 188, 21, 22, 53, 206, 188, 21, 22, 53, 55, 252, - 46, 21, 22, 53, 55, 203, 40, 81, 201, 15, 21, 22, 53, 82, 236, 140, 21, - 22, 53, 203, 40, 228, 241, 106, 21, 22, 53, 209, 81, 21, 22, 53, 144, - 199, 228, 21, 22, 234, 103, 21, 22, 223, 162, 21, 22, 211, 104, 21, 22, - 251, 132, 21, 22, 210, 63, 21, 22, 210, 218, 21, 22, 209, 185, 21, 22, - 209, 145, 21, 22, 209, 73, 21, 22, 209, 37, 21, 22, 192, 158, 209, 37, - 21, 22, 98, 229, 215, 21, 22, 98, 229, 158, 21, 22, 168, 21, 22, 210, - 220, 21, 22, 208, 120, 21, 22, 193, 103, 208, 120, 21, 22, 208, 118, 21, - 22, 193, 103, 208, 118, 21, 22, 208, 117, 21, 22, 193, 103, 208, 117, 21, - 22, 208, 115, 21, 22, 193, 103, 208, 115, 21, 22, 208, 114, 21, 22, 193, - 103, 208, 114, 21, 22, 208, 122, 21, 22, 193, 103, 208, 122, 21, 22, 208, - 121, 21, 22, 193, 103, 208, 121, 21, 22, 192, 158, 208, 121, 21, 22, 210, - 236, 21, 22, 193, 103, 210, 236, 21, 22, 98, 230, 116, 21, 22, 199, 145, - 21, 22, 199, 242, 21, 22, 198, 193, 21, 22, 198, 170, 21, 22, 159, 21, - 22, 198, 59, 21, 22, 192, 158, 198, 59, 21, 22, 98, 237, 131, 21, 22, 98, - 237, 44, 21, 22, 190, 190, 21, 22, 199, 245, 21, 22, 197, 41, 21, 22, - 193, 103, 197, 41, 21, 22, 197, 19, 21, 22, 193, 103, 197, 19, 21, 22, - 197, 18, 21, 22, 193, 103, 197, 18, 21, 22, 109, 21, 22, 193, 103, 109, - 21, 22, 197, 9, 21, 22, 193, 103, 197, 9, 21, 22, 197, 43, 21, 22, 193, - 103, 197, 43, 21, 22, 197, 42, 21, 22, 193, 103, 197, 42, 21, 22, 214, - 209, 197, 42, 21, 22, 200, 43, 21, 22, 197, 127, 21, 22, 197, 111, 21, - 22, 197, 109, 21, 22, 197, 132, 21, 22, 222, 22, 21, 22, 222, 121, 21, - 22, 221, 166, 21, 22, 221, 145, 21, 22, 221, 67, 21, 22, 221, 41, 21, 22, - 192, 158, 221, 41, 21, 22, 155, 21, 22, 222, 127, 21, 22, 220, 174, 21, - 22, 193, 103, 220, 174, 21, 22, 220, 172, 21, 22, 193, 103, 220, 172, 21, - 22, 220, 171, 21, 22, 193, 103, 220, 171, 21, 22, 220, 169, 21, 22, 193, - 103, 220, 169, 21, 22, 220, 168, 21, 22, 193, 103, 220, 168, 21, 22, 220, - 179, 21, 22, 193, 103, 220, 179, 21, 22, 220, 178, 21, 22, 193, 103, 220, - 178, 21, 22, 214, 209, 220, 178, 21, 22, 222, 152, 21, 22, 220, 180, 21, - 22, 202, 1, 222, 6, 21, 22, 202, 1, 221, 146, 21, 22, 202, 1, 221, 56, - 21, 22, 202, 1, 222, 104, 21, 22, 247, 42, 21, 22, 247, 158, 21, 22, 243, - 29, 21, 22, 243, 19, 21, 22, 242, 99, 21, 22, 239, 18, 21, 22, 192, 158, - 239, 18, 21, 22, 247, 160, 21, 22, 247, 159, 21, 22, 238, 149, 21, 22, - 193, 103, 238, 149, 21, 22, 238, 147, 21, 22, 193, 103, 238, 147, 21, 22, - 238, 146, 21, 22, 193, 103, 238, 146, 21, 22, 238, 145, 21, 22, 193, 103, - 238, 145, 21, 22, 238, 144, 21, 22, 193, 103, 238, 144, 21, 22, 238, 151, - 21, 22, 193, 103, 238, 151, 21, 22, 238, 150, 21, 22, 193, 103, 238, 150, - 21, 22, 214, 209, 238, 150, 21, 22, 247, 193, 21, 22, 205, 101, 199, 51, - 21, 22, 216, 232, 21, 22, 217, 150, 21, 22, 216, 100, 21, 22, 216, 61, - 21, 22, 216, 12, 21, 22, 215, 211, 21, 22, 192, 158, 215, 211, 21, 22, - 174, 21, 22, 217, 151, 21, 22, 215, 78, 21, 22, 193, 103, 215, 78, 21, - 22, 215, 76, 21, 22, 193, 103, 215, 76, 21, 22, 215, 75, 21, 22, 193, - 103, 215, 75, 21, 22, 215, 74, 21, 22, 193, 103, 215, 74, 21, 22, 215, - 73, 21, 22, 193, 103, 215, 73, 21, 22, 215, 80, 21, 22, 193, 103, 215, - 80, 21, 22, 215, 79, 21, 22, 193, 103, 215, 79, 21, 22, 214, 209, 215, - 79, 21, 22, 218, 168, 21, 22, 193, 103, 218, 168, 21, 22, 216, 104, 21, - 22, 250, 180, 218, 168, 21, 22, 205, 101, 218, 168, 21, 22, 214, 121, 21, - 22, 214, 249, 21, 22, 213, 219, 21, 22, 213, 186, 21, 22, 213, 43, 21, - 22, 213, 26, 21, 22, 192, 158, 213, 26, 21, 22, 180, 21, 22, 214, 250, - 21, 22, 212, 108, 21, 22, 193, 103, 212, 108, 21, 22, 212, 110, 21, 22, - 193, 103, 212, 110, 21, 22, 212, 109, 21, 22, 193, 103, 212, 109, 21, 22, - 214, 209, 212, 109, 21, 22, 215, 61, 21, 22, 98, 214, 70, 21, 22, 213, - 225, 21, 22, 219, 238, 21, 22, 220, 124, 21, 22, 219, 146, 21, 22, 219, - 128, 21, 22, 219, 43, 21, 22, 219, 8, 21, 22, 192, 158, 219, 8, 21, 22, - 173, 21, 22, 220, 125, 21, 22, 218, 189, 21, 22, 193, 103, 218, 189, 21, + 111, 36, 5, 232, 88, 36, 5, 233, 25, 36, 5, 233, 110, 36, 5, 233, 54, 36, + 5, 233, 61, 36, 5, 232, 177, 36, 5, 232, 64, 36, 5, 168, 36, 5, 208, 167, + 36, 5, 209, 187, 36, 5, 210, 222, 36, 5, 210, 51, 36, 5, 210, 65, 36, 5, + 209, 75, 36, 5, 208, 124, 36, 5, 206, 17, 36, 5, 215, 70, 36, 5, 232, 58, + 36, 33, 231, 155, 23, 18, 219, 200, 77, 36, 33, 18, 219, 200, 77, 36, 33, + 231, 155, 77, 36, 205, 55, 77, 36, 193, 22, 36, 232, 82, 201, 64, 36, + 242, 76, 36, 204, 26, 36, 242, 85, 36, 208, 230, 242, 85, 36, 208, 15, + 77, 36, 210, 130, 204, 11, 36, 17, 107, 36, 17, 109, 36, 17, 138, 36, 17, + 134, 36, 17, 150, 36, 17, 169, 36, 17, 175, 36, 17, 171, 36, 17, 178, 36, + 31, 199, 95, 36, 31, 197, 32, 36, 31, 198, 249, 36, 31, 232, 137, 36, 31, + 233, 17, 36, 31, 202, 121, 36, 31, 203, 242, 36, 31, 234, 155, 36, 31, + 213, 171, 36, 31, 228, 142, 36, 31, 199, 96, 189, 36, 5, 205, 60, 215, + 82, 36, 5, 215, 78, 36, 5, 215, 79, 36, 5, 215, 80, 36, 5, 205, 60, 247, + 212, 36, 5, 247, 209, 36, 5, 247, 210, 36, 5, 247, 211, 36, 5, 205, 60, + 232, 64, 36, 5, 232, 60, 36, 5, 232, 61, 36, 5, 232, 62, 36, 5, 205, 60, + 208, 124, 36, 5, 208, 120, 36, 5, 208, 121, 36, 5, 208, 122, 36, 198, 80, + 87, 192, 15, 36, 198, 80, 87, 237, 91, 36, 198, 80, 87, 206, 195, 36, + 198, 80, 87, 203, 41, 206, 195, 36, 198, 80, 87, 237, 20, 36, 198, 80, + 87, 221, 252, 36, 198, 80, 87, 243, 78, 36, 198, 80, 87, 229, 149, 36, + 198, 80, 87, 237, 90, 36, 198, 80, 87, 220, 197, 103, 1, 65, 103, 1, 71, + 103, 1, 68, 103, 1, 74, 103, 1, 66, 103, 1, 196, 12, 103, 1, 231, 242, + 103, 1, 155, 103, 1, 231, 167, 103, 1, 231, 55, 103, 1, 231, 5, 103, 1, + 230, 181, 103, 1, 230, 140, 103, 1, 140, 103, 1, 229, 247, 103, 1, 229, + 160, 103, 1, 229, 25, 103, 1, 228, 161, 103, 1, 228, 128, 103, 1, 173, + 103, 1, 219, 240, 103, 1, 219, 148, 103, 1, 219, 45, 103, 1, 218, 227, + 103, 1, 218, 194, 103, 1, 174, 103, 1, 216, 234, 103, 1, 216, 102, 103, + 1, 216, 14, 103, 1, 215, 157, 103, 1, 181, 103, 1, 229, 49, 103, 1, 214, + 239, 103, 1, 214, 123, 103, 1, 213, 221, 103, 1, 213, 45, 103, 1, 212, + 180, 103, 1, 212, 114, 103, 1, 208, 34, 103, 1, 208, 18, 103, 1, 208, 11, + 103, 1, 208, 1, 103, 1, 207, 246, 103, 1, 207, 244, 103, 1, 188, 103, 1, + 206, 9, 103, 1, 205, 69, 103, 1, 202, 223, 103, 1, 202, 47, 103, 1, 201, + 5, 103, 1, 200, 158, 103, 1, 238, 34, 103, 1, 190, 190, 103, 1, 237, 148, + 103, 1, 199, 145, 103, 1, 237, 46, 103, 1, 198, 193, 103, 1, 236, 176, + 103, 1, 235, 91, 103, 1, 235, 59, 103, 1, 236, 188, 103, 1, 198, 115, + 103, 1, 198, 114, 103, 1, 198, 103, 103, 1, 198, 102, 103, 1, 198, 101, + 103, 1, 198, 100, 103, 1, 197, 168, 103, 1, 197, 161, 103, 1, 197, 146, + 103, 1, 197, 144, 103, 1, 197, 140, 103, 1, 197, 139, 103, 1, 193, 190, + 103, 1, 193, 125, 103, 1, 193, 86, 103, 1, 193, 48, 103, 1, 193, 0, 103, + 1, 192, 243, 103, 1, 170, 103, 1, 192, 80, 103, 1, 192, 33, 103, 1, 192, + 12, 103, 1, 191, 225, 103, 1, 191, 184, 103, 1, 215, 89, 103, 2, 1, 192, + 80, 103, 2, 1, 192, 33, 103, 2, 1, 192, 12, 103, 2, 1, 191, 225, 103, 2, + 1, 191, 184, 103, 2, 1, 215, 89, 21, 22, 228, 90, 21, 22, 71, 21, 22, + 252, 172, 21, 22, 68, 21, 22, 223, 201, 21, 22, 74, 21, 22, 211, 89, 21, + 22, 192, 158, 211, 89, 21, 22, 98, 234, 190, 21, 22, 98, 68, 21, 22, 65, + 21, 22, 252, 208, 21, 22, 193, 125, 21, 22, 193, 103, 193, 125, 21, 22, + 193, 86, 21, 22, 193, 103, 193, 86, 21, 22, 193, 70, 21, 22, 193, 103, + 193, 70, 21, 22, 193, 48, 21, 22, 193, 103, 193, 48, 21, 22, 193, 29, 21, + 22, 193, 103, 193, 29, 21, 22, 214, 211, 193, 29, 21, 22, 193, 190, 21, + 22, 193, 103, 193, 190, 21, 22, 193, 181, 21, 22, 193, 103, 193, 181, 21, + 22, 214, 211, 193, 181, 21, 22, 251, 238, 21, 22, 192, 158, 193, 224, 21, + 22, 231, 13, 201, 64, 21, 22, 53, 252, 48, 21, 22, 53, 230, 212, 21, 22, + 53, 248, 79, 132, 206, 189, 21, 22, 53, 198, 54, 132, 206, 189, 21, 22, + 53, 50, 132, 206, 189, 21, 22, 53, 206, 189, 21, 22, 53, 55, 252, 48, 21, + 22, 53, 55, 203, 41, 81, 201, 16, 21, 22, 53, 82, 236, 142, 21, 22, 53, + 203, 41, 228, 243, 106, 21, 22, 53, 209, 83, 21, 22, 53, 144, 199, 228, + 21, 22, 234, 105, 21, 22, 223, 164, 21, 22, 211, 106, 21, 22, 251, 134, + 21, 22, 210, 65, 21, 22, 210, 220, 21, 22, 209, 187, 21, 22, 209, 147, + 21, 22, 209, 75, 21, 22, 209, 39, 21, 22, 192, 158, 209, 39, 21, 22, 98, + 229, 217, 21, 22, 98, 229, 160, 21, 22, 168, 21, 22, 210, 222, 21, 22, + 208, 122, 21, 22, 193, 103, 208, 122, 21, 22, 208, 120, 21, 22, 193, 103, + 208, 120, 21, 22, 208, 119, 21, 22, 193, 103, 208, 119, 21, 22, 208, 117, + 21, 22, 193, 103, 208, 117, 21, 22, 208, 116, 21, 22, 193, 103, 208, 116, + 21, 22, 208, 124, 21, 22, 193, 103, 208, 124, 21, 22, 208, 123, 21, 22, + 193, 103, 208, 123, 21, 22, 192, 158, 208, 123, 21, 22, 210, 238, 21, 22, + 193, 103, 210, 238, 21, 22, 98, 230, 118, 21, 22, 199, 145, 21, 22, 199, + 242, 21, 22, 198, 193, 21, 22, 198, 170, 21, 22, 159, 21, 22, 198, 59, + 21, 22, 192, 158, 198, 59, 21, 22, 98, 237, 133, 21, 22, 98, 237, 46, 21, + 22, 190, 190, 21, 22, 199, 245, 21, 22, 197, 41, 21, 22, 193, 103, 197, + 41, 21, 22, 197, 19, 21, 22, 193, 103, 197, 19, 21, 22, 197, 18, 21, 22, + 193, 103, 197, 18, 21, 22, 109, 21, 22, 193, 103, 109, 21, 22, 197, 9, + 21, 22, 193, 103, 197, 9, 21, 22, 197, 43, 21, 22, 193, 103, 197, 43, 21, + 22, 197, 42, 21, 22, 193, 103, 197, 42, 21, 22, 214, 211, 197, 42, 21, + 22, 200, 43, 21, 22, 197, 127, 21, 22, 197, 111, 21, 22, 197, 109, 21, + 22, 197, 132, 21, 22, 222, 24, 21, 22, 222, 123, 21, 22, 221, 168, 21, + 22, 221, 147, 21, 22, 221, 69, 21, 22, 221, 43, 21, 22, 192, 158, 221, + 43, 21, 22, 155, 21, 22, 222, 129, 21, 22, 220, 176, 21, 22, 193, 103, + 220, 176, 21, 22, 220, 174, 21, 22, 193, 103, 220, 174, 21, 22, 220, 173, + 21, 22, 193, 103, 220, 173, 21, 22, 220, 171, 21, 22, 193, 103, 220, 171, + 21, 22, 220, 170, 21, 22, 193, 103, 220, 170, 21, 22, 220, 181, 21, 22, + 193, 103, 220, 181, 21, 22, 220, 180, 21, 22, 193, 103, 220, 180, 21, 22, + 214, 211, 220, 180, 21, 22, 222, 154, 21, 22, 220, 182, 21, 22, 202, 2, + 222, 8, 21, 22, 202, 2, 221, 148, 21, 22, 202, 2, 221, 58, 21, 22, 202, + 2, 222, 106, 21, 22, 247, 44, 21, 22, 247, 160, 21, 22, 243, 31, 21, 22, + 243, 21, 21, 22, 242, 101, 21, 22, 239, 20, 21, 22, 192, 158, 239, 20, + 21, 22, 247, 162, 21, 22, 247, 161, 21, 22, 238, 151, 21, 22, 193, 103, + 238, 151, 21, 22, 238, 149, 21, 22, 193, 103, 238, 149, 21, 22, 238, 148, + 21, 22, 193, 103, 238, 148, 21, 22, 238, 147, 21, 22, 193, 103, 238, 147, + 21, 22, 238, 146, 21, 22, 193, 103, 238, 146, 21, 22, 238, 153, 21, 22, + 193, 103, 238, 153, 21, 22, 238, 152, 21, 22, 193, 103, 238, 152, 21, 22, + 214, 211, 238, 152, 21, 22, 247, 195, 21, 22, 205, 102, 199, 51, 21, 22, + 216, 234, 21, 22, 217, 152, 21, 22, 216, 102, 21, 22, 216, 63, 21, 22, + 216, 14, 21, 22, 215, 213, 21, 22, 192, 158, 215, 213, 21, 22, 174, 21, + 22, 217, 153, 21, 22, 215, 80, 21, 22, 193, 103, 215, 80, 21, 22, 215, + 78, 21, 22, 193, 103, 215, 78, 21, 22, 215, 77, 21, 22, 193, 103, 215, + 77, 21, 22, 215, 76, 21, 22, 193, 103, 215, 76, 21, 22, 215, 75, 21, 22, + 193, 103, 215, 75, 21, 22, 215, 82, 21, 22, 193, 103, 215, 82, 21, 22, + 215, 81, 21, 22, 193, 103, 215, 81, 21, 22, 214, 211, 215, 81, 21, 22, + 218, 170, 21, 22, 193, 103, 218, 170, 21, 22, 216, 106, 21, 22, 250, 182, + 218, 170, 21, 22, 205, 102, 218, 170, 21, 22, 214, 123, 21, 22, 214, 251, + 21, 22, 213, 221, 21, 22, 213, 188, 21, 22, 213, 45, 21, 22, 213, 28, 21, + 22, 192, 158, 213, 28, 21, 22, 181, 21, 22, 214, 252, 21, 22, 212, 110, + 21, 22, 193, 103, 212, 110, 21, 22, 212, 112, 21, 22, 193, 103, 212, 112, + 21, 22, 212, 111, 21, 22, 193, 103, 212, 111, 21, 22, 214, 211, 212, 111, + 21, 22, 215, 63, 21, 22, 98, 214, 72, 21, 22, 213, 227, 21, 22, 219, 240, + 21, 22, 220, 126, 21, 22, 219, 148, 21, 22, 219, 130, 21, 22, 219, 45, + 21, 22, 219, 10, 21, 22, 192, 158, 219, 10, 21, 22, 173, 21, 22, 220, + 127, 21, 22, 218, 191, 21, 22, 193, 103, 218, 191, 21, 22, 218, 190, 21, + 22, 193, 103, 218, 190, 21, 22, 218, 189, 21, 22, 193, 103, 218, 189, 21, 22, 218, 188, 21, 22, 193, 103, 218, 188, 21, 22, 218, 187, 21, 22, 193, - 103, 218, 187, 21, 22, 218, 186, 21, 22, 193, 103, 218, 186, 21, 22, 218, - 185, 21, 22, 193, 103, 218, 185, 21, 22, 218, 191, 21, 22, 193, 103, 218, - 191, 21, 22, 218, 190, 21, 22, 193, 103, 218, 190, 21, 22, 172, 21, 22, - 193, 103, 172, 21, 22, 216, 217, 172, 21, 22, 205, 68, 21, 22, 205, 195, - 21, 22, 202, 222, 21, 22, 202, 193, 21, 22, 202, 46, 21, 22, 202, 16, 21, - 22, 192, 158, 202, 16, 21, 22, 188, 21, 22, 205, 197, 21, 22, 200, 145, - 21, 22, 193, 103, 200, 145, 21, 22, 200, 139, 21, 22, 193, 103, 200, 139, - 21, 22, 200, 138, 21, 22, 193, 103, 200, 138, 21, 22, 200, 133, 21, 22, - 193, 103, 200, 133, 21, 22, 200, 132, 21, 22, 193, 103, 200, 132, 21, 22, - 200, 150, 21, 22, 193, 103, 200, 150, 21, 22, 200, 149, 21, 22, 193, 103, - 200, 149, 21, 22, 214, 209, 200, 149, 21, 22, 206, 8, 21, 22, 250, 180, - 206, 8, 21, 22, 200, 151, 21, 22, 248, 136, 206, 8, 21, 22, 215, 203, - 202, 114, 21, 22, 214, 209, 202, 101, 21, 22, 214, 209, 206, 6, 21, 22, - 214, 209, 201, 192, 21, 22, 214, 209, 201, 7, 21, 22, 214, 209, 202, 100, - 21, 22, 214, 209, 205, 71, 21, 22, 203, 113, 21, 22, 203, 81, 21, 22, - 203, 76, 21, 22, 203, 56, 21, 22, 203, 48, 21, 22, 203, 165, 21, 22, 203, - 160, 21, 22, 202, 237, 21, 22, 193, 103, 202, 237, 21, 22, 202, 236, 21, - 22, 193, 103, 202, 236, 21, 22, 202, 235, 21, 22, 193, 103, 202, 235, 21, - 22, 202, 234, 21, 22, 193, 103, 202, 234, 21, 22, 202, 233, 21, 22, 193, - 103, 202, 233, 21, 22, 202, 240, 21, 22, 193, 103, 202, 240, 21, 22, 202, - 239, 21, 22, 193, 103, 202, 239, 21, 22, 203, 167, 21, 22, 192, 80, 21, - 22, 192, 138, 21, 22, 192, 33, 21, 22, 192, 23, 21, 22, 192, 12, 21, 22, - 191, 246, 21, 22, 192, 158, 191, 246, 21, 22, 170, 21, 22, 192, 140, 21, - 22, 191, 181, 21, 22, 193, 103, 191, 181, 21, 22, 191, 180, 21, 22, 193, - 103, 191, 180, 21, 22, 191, 179, 21, 22, 193, 103, 191, 179, 21, 22, 191, - 178, 21, 22, 193, 103, 191, 178, 21, 22, 191, 177, 21, 22, 193, 103, 191, - 177, 21, 22, 191, 183, 21, 22, 193, 103, 191, 183, 21, 22, 191, 182, 21, - 22, 193, 103, 191, 182, 21, 22, 214, 209, 191, 182, 21, 22, 192, 159, 21, - 22, 248, 186, 192, 159, 21, 22, 193, 103, 192, 159, 21, 22, 205, 101, - 192, 33, 21, 22, 207, 113, 21, 22, 207, 221, 207, 113, 21, 22, 193, 103, - 219, 238, 21, 22, 207, 177, 21, 22, 207, 1, 21, 22, 206, 195, 21, 22, - 206, 162, 21, 22, 206, 134, 21, 22, 193, 103, 219, 43, 21, 22, 165, 21, - 22, 207, 178, 21, 22, 193, 103, 173, 21, 22, 206, 25, 21, 22, 193, 103, - 206, 25, 21, 22, 146, 21, 22, 193, 103, 146, 21, 22, 216, 217, 146, 21, - 22, 233, 59, 21, 22, 233, 106, 21, 22, 233, 23, 21, 22, 233, 8, 21, 22, - 232, 175, 21, 22, 232, 162, 21, 22, 233, 109, 21, 22, 233, 108, 21, 22, - 232, 61, 21, 22, 193, 103, 232, 61, 21, 22, 233, 175, 21, 22, 199, 33, - 21, 22, 215, 59, 199, 33, 21, 22, 199, 11, 21, 22, 215, 59, 199, 11, 21, - 22, 199, 5, 21, 22, 215, 59, 199, 5, 21, 22, 198, 241, 21, 22, 198, 235, - 21, 22, 199, 49, 21, 22, 199, 48, 21, 22, 198, 203, 21, 22, 193, 103, - 198, 203, 21, 22, 199, 51, 21, 22, 197, 118, 21, 22, 197, 116, 21, 22, - 197, 115, 21, 22, 197, 120, 21, 22, 197, 121, 21, 22, 197, 2, 21, 22, - 197, 1, 21, 22, 197, 0, 21, 22, 197, 4, 21, 22, 212, 129, 229, 245, 21, - 22, 212, 129, 229, 158, 21, 22, 212, 129, 229, 130, 21, 22, 212, 129, - 229, 23, 21, 22, 212, 129, 228, 252, 21, 22, 212, 129, 140, 21, 22, 212, - 129, 230, 91, 21, 22, 212, 129, 230, 116, 21, 22, 212, 128, 230, 116, 21, - 22, 229, 113, 21, 22, 208, 92, 21, 22, 208, 57, 21, 22, 208, 51, 21, 22, - 208, 45, 21, 22, 208, 40, 21, 22, 208, 96, 21, 22, 208, 95, 21, 22, 208, - 104, 21, 22, 198, 111, 21, 22, 198, 109, 21, 22, 198, 108, 21, 22, 198, - 112, 21, 22, 193, 103, 207, 113, 21, 22, 193, 103, 207, 1, 21, 22, 193, - 103, 206, 162, 21, 22, 193, 103, 165, 21, 22, 214, 66, 21, 22, 214, 16, - 21, 22, 214, 12, 21, 22, 213, 249, 21, 22, 213, 244, 21, 22, 214, 68, 21, - 22, 214, 67, 21, 22, 214, 70, 21, 22, 213, 72, 21, 22, 205, 101, 203, - 113, 21, 22, 205, 101, 203, 81, 21, 22, 205, 101, 203, 56, 21, 22, 205, - 101, 203, 165, 21, 22, 193, 27, 199, 33, 21, 22, 193, 27, 199, 11, 21, - 22, 193, 27, 198, 241, 21, 22, 193, 27, 199, 49, 21, 22, 193, 27, 199, - 51, 21, 22, 219, 153, 21, 22, 219, 152, 21, 22, 219, 151, 21, 22, 219, - 150, 21, 22, 219, 159, 21, 22, 219, 158, 21, 22, 219, 160, 21, 22, 199, - 50, 199, 33, 21, 22, 199, 50, 199, 11, 21, 22, 199, 50, 199, 5, 21, 22, - 199, 50, 198, 241, 21, 22, 199, 50, 198, 235, 21, 22, 199, 50, 199, 49, - 21, 22, 199, 50, 199, 48, 21, 22, 199, 50, 199, 51, 21, 22, 251, 220, - 250, 120, 21, 22, 248, 136, 71, 21, 22, 248, 136, 68, 21, 22, 248, 136, - 74, 21, 22, 248, 136, 65, 21, 22, 248, 136, 193, 125, 21, 22, 248, 136, - 193, 86, 21, 22, 248, 136, 193, 48, 21, 22, 248, 136, 193, 190, 21, 22, - 248, 136, 214, 121, 21, 22, 248, 136, 213, 219, 21, 22, 248, 136, 213, - 43, 21, 22, 248, 136, 180, 21, 22, 248, 136, 222, 22, 21, 22, 248, 136, - 221, 166, 21, 22, 248, 136, 221, 67, 21, 22, 248, 136, 155, 21, 22, 205, - 101, 229, 245, 21, 22, 205, 101, 229, 158, 21, 22, 205, 101, 229, 23, 21, - 22, 205, 101, 140, 21, 22, 98, 231, 59, 21, 22, 98, 231, 63, 21, 22, 98, - 231, 77, 21, 22, 98, 231, 76, 21, 22, 98, 231, 65, 21, 22, 98, 231, 91, - 21, 22, 98, 206, 68, 21, 22, 98, 206, 162, 21, 22, 98, 207, 113, 21, 22, - 98, 207, 84, 21, 22, 98, 207, 1, 21, 22, 98, 165, 21, 22, 98, 193, 0, 21, - 22, 98, 193, 48, 21, 22, 98, 193, 125, 21, 22, 98, 193, 114, 21, 22, 98, - 193, 86, 21, 22, 98, 193, 190, 21, 22, 98, 228, 118, 21, 22, 98, 228, - 119, 21, 22, 98, 228, 122, 21, 22, 98, 228, 121, 21, 22, 98, 228, 120, - 21, 22, 98, 228, 125, 21, 22, 98, 198, 213, 21, 22, 98, 198, 241, 21, 22, - 98, 199, 33, 21, 22, 98, 199, 31, 21, 22, 98, 199, 11, 21, 22, 98, 199, - 49, 21, 22, 98, 197, 99, 21, 22, 98, 197, 109, 21, 22, 98, 197, 127, 21, - 22, 98, 197, 126, 21, 22, 98, 197, 111, 21, 22, 98, 197, 132, 21, 22, 98, - 208, 165, 21, 22, 98, 209, 73, 21, 22, 98, 210, 63, 21, 22, 98, 210, 49, - 21, 22, 98, 209, 185, 21, 22, 98, 168, 21, 22, 98, 210, 236, 21, 22, 98, - 230, 179, 21, 22, 98, 231, 3, 21, 22, 98, 231, 165, 21, 22, 98, 231, 157, - 21, 22, 98, 231, 53, 21, 22, 98, 231, 240, 21, 22, 98, 221, 175, 21, 22, - 98, 221, 183, 21, 22, 98, 221, 197, 21, 22, 98, 221, 196, 21, 22, 98, - 221, 190, 21, 22, 98, 221, 215, 21, 22, 98, 221, 96, 21, 22, 98, 221, 97, - 21, 22, 98, 221, 100, 21, 22, 98, 221, 99, 21, 22, 98, 221, 98, 21, 22, - 98, 221, 101, 21, 22, 98, 221, 102, 21, 22, 98, 212, 178, 21, 22, 98, - 213, 43, 21, 22, 98, 214, 121, 21, 22, 98, 214, 110, 21, 22, 98, 213, - 219, 21, 22, 98, 180, 21, 22, 98, 215, 155, 21, 22, 98, 216, 12, 21, 22, - 98, 216, 232, 21, 22, 98, 216, 211, 21, 22, 98, 216, 100, 21, 22, 98, - 174, 21, 22, 98, 191, 225, 21, 22, 98, 192, 12, 21, 22, 98, 192, 80, 21, - 22, 98, 192, 77, 21, 22, 98, 192, 33, 21, 22, 98, 170, 21, 22, 98, 222, - 182, 21, 22, 205, 101, 222, 182, 21, 22, 98, 222, 201, 21, 22, 98, 223, - 10, 21, 22, 98, 223, 8, 21, 22, 98, 222, 244, 21, 22, 205, 101, 222, 244, - 21, 22, 98, 223, 32, 21, 22, 98, 222, 215, 21, 22, 98, 222, 219, 21, 22, - 98, 222, 229, 21, 22, 98, 222, 228, 21, 22, 98, 222, 227, 21, 22, 98, - 222, 230, 21, 22, 98, 218, 225, 21, 22, 98, 219, 43, 21, 22, 98, 219, - 238, 21, 22, 98, 219, 228, 21, 22, 98, 219, 146, 21, 22, 98, 173, 21, 22, - 98, 236, 179, 21, 22, 98, 236, 180, 21, 22, 98, 236, 185, 21, 22, 98, - 236, 184, 21, 22, 98, 236, 181, 21, 22, 98, 236, 186, 21, 22, 98, 219, - 149, 21, 22, 98, 219, 151, 21, 22, 98, 219, 155, 21, 22, 98, 219, 154, - 21, 22, 98, 219, 153, 21, 22, 98, 219, 159, 21, 22, 98, 198, 106, 21, 22, - 98, 198, 108, 21, 22, 98, 198, 111, 21, 22, 98, 198, 110, 21, 22, 98, - 198, 109, 21, 22, 98, 198, 112, 21, 22, 98, 198, 101, 21, 22, 98, 198, - 102, 21, 22, 98, 198, 114, 21, 22, 98, 198, 113, 21, 22, 98, 198, 103, - 21, 22, 98, 198, 115, 21, 22, 98, 190, 251, 21, 22, 98, 191, 7, 21, 22, - 98, 191, 87, 21, 22, 98, 191, 84, 21, 22, 98, 191, 30, 21, 22, 98, 191, - 123, 21, 22, 98, 191, 166, 21, 22, 98, 89, 191, 166, 21, 22, 98, 235, 22, - 21, 22, 98, 235, 23, 21, 22, 98, 235, 32, 21, 22, 98, 235, 31, 21, 22, - 98, 235, 26, 21, 22, 98, 235, 35, 21, 22, 98, 201, 4, 21, 22, 98, 202, - 46, 21, 22, 98, 205, 68, 21, 22, 98, 205, 50, 21, 22, 98, 202, 222, 21, - 22, 98, 188, 21, 22, 98, 203, 5, 21, 22, 98, 203, 56, 21, 22, 98, 203, - 113, 21, 22, 98, 203, 111, 21, 22, 98, 203, 81, 21, 22, 98, 203, 165, 21, - 22, 98, 203, 167, 21, 22, 98, 197, 140, 21, 22, 98, 197, 144, 21, 22, 98, - 197, 161, 21, 22, 98, 197, 160, 21, 22, 98, 197, 146, 21, 22, 98, 197, - 168, 21, 22, 98, 243, 48, 21, 22, 98, 243, 68, 21, 22, 98, 243, 127, 21, - 22, 98, 243, 123, 21, 22, 98, 243, 95, 21, 22, 98, 247, 1, 21, 22, 98, - 197, 102, 21, 22, 98, 197, 103, 21, 22, 98, 197, 106, 21, 22, 98, 197, - 105, 21, 22, 98, 197, 104, 21, 22, 98, 197, 107, 21, 22, 243, 96, 56, 21, - 22, 232, 80, 201, 63, 21, 22, 208, 88, 21, 22, 214, 64, 21, 22, 213, 69, - 21, 22, 213, 68, 21, 22, 213, 67, 21, 22, 213, 66, 21, 22, 213, 71, 21, - 22, 213, 70, 21, 22, 193, 27, 198, 201, 21, 22, 193, 27, 198, 200, 21, - 22, 193, 27, 198, 199, 21, 22, 193, 27, 198, 198, 21, 22, 193, 27, 198, - 197, 21, 22, 193, 27, 198, 204, 21, 22, 193, 27, 198, 203, 21, 22, 193, - 27, 53, 199, 51, 21, 22, 248, 136, 193, 224, 211, 140, 201, 248, 77, 211, - 140, 1, 248, 239, 211, 140, 1, 218, 211, 211, 140, 1, 233, 56, 211, 140, - 1, 205, 179, 211, 140, 1, 213, 166, 211, 140, 1, 196, 165, 211, 140, 1, - 238, 5, 211, 140, 1, 198, 139, 211, 140, 1, 242, 86, 211, 140, 1, 247, - 29, 211, 140, 1, 215, 137, 211, 140, 1, 230, 234, 211, 140, 1, 214, 54, - 211, 140, 1, 201, 54, 211, 140, 1, 206, 55, 211, 140, 1, 251, 232, 211, - 140, 1, 211, 91, 211, 140, 1, 196, 62, 211, 140, 1, 234, 215, 211, 140, - 1, 223, 87, 211, 140, 1, 234, 216, 211, 140, 1, 211, 56, 211, 140, 1, - 196, 136, 211, 140, 1, 223, 205, 211, 140, 1, 234, 213, 211, 140, 1, 210, - 38, 211, 140, 233, 55, 77, 211, 140, 207, 18, 233, 55, 77, 206, 44, 1, - 233, 45, 233, 36, 233, 60, 233, 175, 206, 44, 1, 196, 12, 206, 44, 1, - 196, 47, 196, 63, 66, 206, 44, 1, 191, 228, 206, 44, 1, 192, 159, 206, - 44, 1, 193, 224, 206, 44, 1, 198, 206, 198, 205, 198, 233, 206, 44, 1, - 233, 248, 206, 44, 1, 251, 90, 65, 206, 44, 1, 211, 37, 74, 206, 44, 1, - 252, 64, 65, 206, 44, 1, 252, 9, 206, 44, 1, 219, 15, 74, 206, 44, 1, - 203, 33, 74, 206, 44, 1, 74, 206, 44, 1, 211, 151, 206, 44, 1, 211, 104, - 206, 44, 1, 207, 154, 207, 169, 207, 69, 146, 206, 44, 1, 222, 39, 206, - 44, 1, 247, 25, 206, 44, 1, 222, 40, 222, 152, 206, 44, 1, 232, 51, 206, - 44, 1, 234, 88, 206, 44, 1, 231, 160, 230, 122, 232, 51, 206, 44, 1, 231, - 200, 206, 44, 1, 192, 248, 192, 239, 193, 224, 206, 44, 1, 230, 82, 230, - 116, 206, 44, 1, 230, 86, 230, 116, 206, 44, 1, 219, 17, 230, 116, 206, - 44, 1, 203, 36, 230, 116, 206, 44, 1, 214, 203, 212, 91, 214, 204, 215, - 61, 206, 44, 1, 203, 34, 215, 61, 206, 44, 1, 235, 135, 206, 44, 1, 223, - 65, 223, 69, 223, 55, 68, 206, 44, 1, 71, 206, 44, 1, 222, 255, 223, 35, - 206, 44, 1, 231, 141, 206, 44, 1, 219, 18, 252, 25, 206, 44, 1, 203, 38, - 65, 206, 44, 1, 223, 47, 234, 61, 206, 44, 1, 209, 247, 210, 18, 210, - 236, 206, 44, 1, 251, 185, 234, 59, 206, 44, 1, 201, 254, 206, 8, 206, - 44, 1, 202, 198, 219, 14, 206, 8, 206, 44, 1, 203, 32, 206, 8, 206, 44, - 1, 247, 193, 206, 44, 1, 191, 166, 206, 44, 1, 198, 120, 198, 132, 196, - 242, 200, 43, 206, 44, 1, 203, 31, 200, 43, 206, 44, 1, 238, 127, 206, - 44, 1, 248, 217, 248, 220, 248, 142, 250, 120, 206, 44, 1, 203, 37, 250, - 120, 206, 44, 1, 235, 134, 206, 44, 1, 211, 70, 206, 44, 1, 234, 167, - 234, 174, 71, 206, 44, 1, 217, 79, 217, 91, 218, 168, 206, 44, 1, 219, - 16, 218, 168, 206, 44, 1, 203, 35, 218, 168, 206, 44, 1, 219, 253, 220, - 101, 219, 26, 172, 206, 44, 1, 235, 136, 206, 44, 1, 223, 135, 206, 44, - 1, 223, 136, 206, 44, 1, 238, 19, 238, 25, 238, 127, 206, 44, 1, 211, 28, - 233, 247, 74, 206, 44, 1, 234, 211, 206, 44, 1, 223, 85, 206, 44, 1, 238, - 148, 206, 44, 1, 247, 143, 206, 44, 1, 247, 41, 206, 44, 1, 201, 108, - 206, 44, 1, 219, 13, 206, 44, 1, 203, 30, 206, 44, 1, 228, 25, 206, 44, - 1, 208, 104, 206, 44, 1, 192, 235, 206, 44, 202, 170, 208, 151, 206, 44, - 215, 129, 208, 151, 206, 44, 238, 218, 208, 151, 206, 44, 250, 252, 113, - 206, 44, 197, 45, 113, 206, 44, 248, 237, 113, 206, 44, 1, 222, 152, 206, - 44, 1, 203, 167, 206, 44, 1, 211, 87, 206, 44, 1, 232, 110, 247, 81, 211, - 36, 206, 44, 1, 232, 110, 247, 81, 223, 68, 206, 44, 1, 232, 110, 247, - 81, 234, 173, 206, 44, 1, 232, 110, 247, 81, 252, 63, 206, 44, 1, 232, - 110, 247, 81, 252, 9, 199, 222, 1, 65, 199, 222, 1, 68, 199, 222, 1, 66, - 199, 222, 1, 155, 199, 222, 1, 231, 240, 199, 222, 1, 214, 68, 199, 222, - 1, 190, 190, 199, 222, 1, 238, 32, 199, 222, 1, 180, 199, 222, 1, 168, - 199, 222, 1, 249, 153, 199, 222, 1, 174, 199, 222, 1, 170, 199, 222, 1, - 165, 199, 222, 1, 173, 199, 222, 1, 193, 190, 199, 222, 1, 188, 199, 222, - 1, 140, 199, 222, 18, 3, 68, 199, 222, 18, 3, 66, 199, 222, 3, 195, 40, - 199, 222, 3, 210, 169, 199, 222, 1, 251, 14, 165, 230, 23, 1, 65, 230, - 23, 1, 68, 230, 23, 1, 66, 230, 23, 1, 155, 230, 23, 1, 231, 240, 230, - 23, 1, 214, 68, 230, 23, 1, 190, 190, 230, 23, 1, 238, 32, 230, 23, 1, - 180, 230, 23, 1, 168, 230, 23, 1, 249, 153, 230, 23, 1, 174, 230, 23, 1, - 170, 230, 23, 1, 165, 230, 23, 1, 173, 230, 23, 1, 193, 190, 230, 23, 1, - 188, 230, 23, 1, 140, 230, 23, 18, 3, 68, 230, 23, 18, 3, 66, 230, 23, 3, - 210, 169, 209, 204, 202, 170, 208, 151, 209, 204, 55, 208, 151, 248, 0, - 1, 65, 248, 0, 1, 68, 248, 0, 1, 66, 248, 0, 1, 155, 248, 0, 1, 231, 240, - 248, 0, 1, 214, 68, 248, 0, 1, 190, 190, 248, 0, 1, 238, 32, 248, 0, 1, - 180, 248, 0, 1, 168, 248, 0, 1, 249, 153, 248, 0, 1, 174, 248, 0, 1, 170, - 248, 0, 1, 165, 248, 0, 1, 173, 248, 0, 1, 193, 190, 248, 0, 1, 188, 248, - 0, 1, 140, 248, 0, 18, 3, 68, 248, 0, 18, 3, 66, 199, 221, 1, 65, 199, - 221, 1, 68, 199, 221, 1, 66, 199, 221, 1, 155, 199, 221, 1, 231, 240, - 199, 221, 1, 214, 68, 199, 221, 1, 190, 190, 199, 221, 1, 238, 32, 199, - 221, 1, 180, 199, 221, 1, 168, 199, 221, 1, 249, 153, 199, 221, 1, 174, - 199, 221, 1, 170, 199, 221, 1, 173, 199, 221, 1, 193, 190, 199, 221, 1, - 188, 199, 221, 18, 3, 68, 199, 221, 18, 3, 66, 95, 1, 155, 95, 1, 221, - 215, 95, 1, 221, 67, 95, 1, 221, 183, 95, 1, 213, 249, 95, 1, 247, 160, - 95, 1, 247, 1, 95, 1, 242, 99, 95, 1, 243, 68, 95, 1, 212, 65, 95, 1, - 238, 32, 95, 1, 197, 120, 95, 1, 236, 174, 95, 1, 197, 115, 95, 1, 213, - 49, 95, 1, 190, 190, 95, 1, 199, 49, 95, 1, 159, 95, 1, 198, 241, 95, 1, - 213, 43, 95, 1, 249, 153, 95, 1, 209, 228, 95, 1, 209, 73, 95, 1, 209, - 199, 95, 1, 216, 12, 95, 1, 192, 12, 95, 1, 206, 162, 95, 1, 219, 43, 95, - 1, 195, 24, 95, 1, 203, 165, 95, 1, 201, 134, 95, 1, 188, 95, 1, 140, 95, - 1, 173, 95, 1, 208, 96, 95, 223, 149, 18, 208, 82, 95, 223, 149, 18, 208, - 95, 95, 223, 149, 18, 208, 57, 95, 223, 149, 18, 208, 51, 95, 223, 149, - 18, 208, 33, 95, 223, 149, 18, 208, 0, 95, 223, 149, 18, 207, 244, 95, - 223, 149, 18, 207, 243, 95, 223, 149, 18, 206, 17, 95, 223, 149, 18, 206, - 10, 95, 223, 149, 18, 218, 183, 95, 223, 149, 18, 218, 171, 95, 223, 149, - 18, 208, 75, 95, 223, 149, 18, 208, 88, 95, 223, 149, 18, 208, 41, 196, - 255, 107, 95, 223, 149, 18, 208, 41, 196, 255, 109, 95, 223, 149, 18, - 208, 77, 95, 18, 223, 133, 251, 37, 95, 18, 223, 133, 252, 206, 95, 18, - 3, 252, 206, 95, 18, 3, 68, 95, 18, 3, 223, 199, 95, 18, 3, 192, 159, 95, - 18, 3, 191, 176, 95, 18, 3, 66, 95, 18, 3, 196, 30, 95, 18, 3, 196, 168, - 95, 18, 3, 211, 151, 95, 18, 3, 170, 95, 18, 3, 223, 226, 95, 18, 3, 71, - 95, 18, 3, 252, 25, 95, 18, 3, 251, 236, 95, 18, 3, 211, 87, 95, 18, 3, - 250, 163, 95, 3, 213, 184, 95, 3, 207, 106, 95, 3, 191, 187, 95, 3, 215, - 91, 95, 3, 197, 229, 95, 3, 249, 90, 95, 3, 206, 151, 95, 3, 198, 90, 95, - 3, 222, 95, 95, 3, 251, 238, 95, 3, 205, 143, 205, 135, 95, 3, 195, 37, - 95, 3, 242, 90, 95, 3, 249, 60, 95, 3, 221, 205, 95, 3, 249, 85, 95, 3, - 247, 131, 209, 146, 220, 186, 95, 3, 219, 205, 198, 59, 95, 3, 248, 205, - 95, 3, 209, 201, 215, 148, 95, 3, 221, 39, 95, 238, 170, 16, 206, 241, - 95, 3, 250, 144, 95, 3, 250, 166, 95, 17, 191, 77, 95, 17, 107, 95, 17, - 109, 95, 17, 138, 95, 17, 134, 95, 17, 149, 95, 17, 169, 95, 17, 175, 95, - 17, 171, 95, 17, 178, 95, 16, 219, 205, 250, 168, 202, 19, 95, 16, 219, - 205, 250, 168, 215, 112, 95, 16, 219, 205, 250, 168, 209, 145, 95, 16, - 219, 205, 250, 168, 248, 240, 95, 16, 219, 205, 250, 168, 247, 236, 95, - 16, 219, 205, 250, 168, 208, 245, 95, 16, 219, 205, 250, 168, 208, 239, - 95, 16, 219, 205, 250, 168, 208, 237, 95, 16, 219, 205, 250, 168, 208, - 243, 95, 16, 219, 205, 250, 168, 208, 241, 104, 248, 158, 104, 234, 120, - 104, 242, 74, 104, 232, 80, 201, 63, 104, 242, 83, 104, 232, 128, 236, - 138, 104, 198, 88, 202, 32, 228, 88, 104, 202, 214, 5, 248, 73, 217, 51, - 104, 217, 87, 242, 74, 104, 217, 87, 232, 80, 201, 63, 104, 213, 164, - 104, 232, 109, 67, 205, 35, 107, 104, 232, 109, 67, 205, 35, 109, 104, - 232, 109, 67, 205, 35, 138, 104, 18, 204, 10, 104, 232, 109, 67, 205, 35, - 134, 104, 17, 191, 77, 104, 17, 107, 104, 17, 109, 104, 17, 138, 104, 17, - 134, 104, 17, 149, 104, 17, 169, 104, 17, 175, 104, 17, 171, 104, 17, - 178, 104, 1, 65, 104, 1, 71, 104, 1, 68, 104, 1, 74, 104, 1, 66, 104, 1, - 211, 151, 104, 1, 196, 152, 104, 1, 234, 188, 104, 1, 180, 104, 1, 251, - 122, 104, 1, 249, 153, 104, 1, 168, 104, 1, 208, 96, 104, 1, 231, 240, - 104, 1, 174, 104, 1, 173, 104, 1, 188, 104, 1, 203, 165, 104, 1, 190, - 190, 104, 1, 238, 32, 104, 1, 247, 1, 104, 1, 223, 32, 104, 1, 170, 104, - 1, 165, 104, 1, 193, 190, 104, 1, 233, 109, 104, 1, 155, 104, 1, 221, - 215, 104, 1, 197, 168, 104, 1, 191, 123, 104, 1, 230, 91, 104, 1, 190, - 255, 104, 1, 219, 159, 104, 1, 191, 57, 104, 1, 243, 95, 104, 1, 198, 88, - 179, 18, 56, 104, 1, 198, 88, 71, 104, 1, 198, 88, 68, 104, 1, 198, 88, - 74, 104, 1, 198, 88, 66, 104, 1, 198, 88, 211, 151, 104, 1, 198, 88, 196, - 152, 104, 1, 198, 88, 251, 122, 104, 1, 198, 88, 249, 153, 104, 1, 198, - 88, 168, 104, 1, 198, 88, 208, 96, 104, 1, 198, 88, 231, 240, 104, 1, - 198, 88, 174, 104, 1, 198, 88, 190, 190, 104, 1, 198, 88, 238, 32, 104, - 1, 198, 88, 247, 1, 104, 1, 198, 88, 223, 32, 104, 1, 198, 88, 197, 168, - 104, 1, 198, 88, 170, 104, 1, 198, 88, 193, 190, 104, 1, 198, 88, 155, - 104, 1, 198, 88, 231, 237, 104, 1, 198, 88, 230, 91, 104, 1, 198, 88, - 222, 243, 104, 1, 198, 88, 213, 209, 104, 1, 198, 88, 235, 35, 104, 1, - 202, 214, 71, 104, 1, 202, 214, 68, 104, 1, 202, 214, 223, 44, 104, 1, - 202, 214, 196, 152, 104, 1, 202, 214, 66, 104, 1, 202, 214, 251, 122, - 104, 1, 202, 214, 155, 104, 1, 202, 214, 231, 240, 104, 1, 202, 214, 140, - 104, 1, 202, 214, 168, 104, 1, 202, 214, 203, 165, 104, 1, 202, 214, 190, - 190, 104, 1, 202, 214, 238, 32, 104, 1, 202, 214, 223, 32, 104, 1, 202, - 214, 233, 109, 104, 1, 202, 214, 231, 237, 104, 1, 202, 214, 230, 91, - 104, 1, 202, 214, 197, 168, 104, 1, 202, 214, 191, 123, 104, 1, 202, 214, - 207, 178, 104, 1, 202, 214, 247, 1, 104, 1, 202, 214, 191, 71, 104, 1, - 217, 87, 68, 104, 1, 217, 87, 155, 104, 1, 217, 87, 165, 104, 1, 217, 87, - 233, 109, 104, 1, 217, 87, 191, 71, 104, 1, 247, 2, 4, 105, 236, 138, - 104, 1, 251, 184, 231, 220, 251, 72, 107, 104, 1, 251, 184, 231, 220, - 195, 36, 107, 104, 1, 251, 184, 231, 220, 237, 247, 104, 1, 251, 184, - 231, 220, 196, 163, 104, 1, 251, 184, 231, 220, 223, 93, 196, 163, 104, - 1, 251, 184, 231, 220, 249, 104, 104, 1, 251, 184, 231, 220, 115, 249, - 104, 104, 1, 251, 184, 231, 220, 65, 104, 1, 251, 184, 231, 220, 68, 104, - 1, 251, 184, 231, 220, 155, 104, 1, 251, 184, 231, 220, 214, 68, 104, 1, - 251, 184, 231, 220, 247, 160, 104, 1, 251, 184, 231, 220, 197, 132, 104, - 1, 251, 184, 231, 220, 197, 120, 104, 1, 251, 184, 231, 220, 237, 191, - 104, 1, 251, 184, 231, 220, 213, 79, 104, 1, 251, 184, 231, 220, 190, - 190, 104, 1, 251, 184, 231, 220, 238, 32, 104, 1, 251, 184, 231, 220, - 168, 104, 1, 251, 184, 231, 220, 209, 228, 104, 1, 251, 184, 231, 220, - 201, 175, 104, 1, 251, 184, 231, 220, 191, 71, 104, 1, 251, 184, 231, - 220, 191, 123, 104, 1, 251, 184, 231, 220, 251, 245, 104, 1, 198, 88, - 251, 184, 231, 220, 190, 190, 104, 1, 198, 88, 251, 184, 231, 220, 191, - 71, 104, 1, 217, 87, 251, 184, 231, 220, 231, 91, 104, 1, 217, 87, 251, - 184, 231, 220, 214, 68, 104, 1, 217, 87, 251, 184, 231, 220, 247, 160, - 104, 1, 217, 87, 251, 184, 231, 220, 222, 252, 104, 1, 217, 87, 251, 184, - 231, 220, 197, 132, 104, 1, 217, 87, 251, 184, 231, 220, 237, 175, 104, - 1, 217, 87, 251, 184, 231, 220, 190, 190, 104, 1, 217, 87, 251, 184, 231, - 220, 237, 68, 104, 1, 217, 87, 251, 184, 231, 220, 201, 175, 104, 1, 217, - 87, 251, 184, 231, 220, 238, 142, 104, 1, 217, 87, 251, 184, 231, 220, - 191, 71, 104, 1, 217, 87, 251, 184, 231, 220, 191, 123, 104, 1, 251, 184, - 231, 220, 132, 66, 104, 1, 251, 184, 231, 220, 132, 170, 104, 1, 217, 87, - 251, 184, 231, 220, 248, 203, 104, 1, 251, 184, 231, 220, 238, 20, 104, - 1, 217, 87, 251, 184, 231, 220, 219, 159, 21, 22, 210, 242, 21, 22, 250, - 131, 21, 22, 252, 160, 21, 22, 193, 128, 21, 22, 208, 251, 21, 22, 210, - 72, 21, 22, 208, 113, 21, 22, 199, 154, 21, 22, 222, 29, 21, 22, 220, - 176, 21, 22, 217, 21, 21, 22, 212, 250, 21, 22, 214, 198, 21, 22, 219, - 248, 21, 22, 201, 252, 21, 22, 205, 103, 21, 22, 203, 18, 21, 22, 203, - 117, 21, 22, 202, 232, 21, 22, 191, 234, 21, 22, 192, 86, 21, 22, 207, - 122, 21, 22, 212, 107, 21, 22, 211, 128, 212, 107, 21, 22, 212, 106, 21, - 22, 211, 128, 212, 106, 21, 22, 212, 105, 21, 22, 211, 128, 212, 105, 21, - 22, 212, 104, 21, 22, 211, 128, 212, 104, 21, 22, 206, 22, 21, 22, 206, - 21, 21, 22, 206, 20, 21, 22, 206, 19, 21, 22, 206, 18, 21, 22, 206, 26, - 21, 22, 211, 128, 210, 236, 21, 22, 211, 128, 200, 43, 21, 22, 211, 128, - 222, 152, 21, 22, 211, 128, 247, 193, 21, 22, 211, 128, 218, 168, 21, 22, - 211, 128, 215, 61, 21, 22, 211, 128, 206, 8, 21, 22, 211, 128, 203, 167, - 21, 22, 234, 202, 193, 224, 21, 22, 193, 102, 193, 224, 21, 22, 53, 2, - 206, 188, 21, 22, 53, 207, 147, 236, 140, 21, 22, 207, 221, 206, 23, 21, - 22, 193, 103, 219, 8, 21, 22, 193, 103, 220, 125, 21, 22, 198, 202, 21, + 103, 218, 187, 21, 22, 218, 193, 21, 22, 193, 103, 218, 193, 21, 22, 218, + 192, 21, 22, 193, 103, 218, 192, 21, 22, 172, 21, 22, 193, 103, 172, 21, + 22, 216, 219, 172, 21, 22, 205, 69, 21, 22, 205, 196, 21, 22, 202, 223, + 21, 22, 202, 194, 21, 22, 202, 47, 21, 22, 202, 17, 21, 22, 192, 158, + 202, 17, 21, 22, 188, 21, 22, 205, 198, 21, 22, 200, 145, 21, 22, 193, + 103, 200, 145, 21, 22, 200, 139, 21, 22, 193, 103, 200, 139, 21, 22, 200, + 138, 21, 22, 193, 103, 200, 138, 21, 22, 200, 133, 21, 22, 193, 103, 200, + 133, 21, 22, 200, 132, 21, 22, 193, 103, 200, 132, 21, 22, 200, 150, 21, + 22, 193, 103, 200, 150, 21, 22, 200, 149, 21, 22, 193, 103, 200, 149, 21, + 22, 214, 211, 200, 149, 21, 22, 206, 9, 21, 22, 250, 182, 206, 9, 21, 22, + 200, 151, 21, 22, 248, 138, 206, 9, 21, 22, 215, 205, 202, 115, 21, 22, + 214, 211, 202, 102, 21, 22, 214, 211, 206, 7, 21, 22, 214, 211, 201, 193, + 21, 22, 214, 211, 201, 8, 21, 22, 214, 211, 202, 101, 21, 22, 214, 211, + 205, 72, 21, 22, 203, 114, 21, 22, 203, 82, 21, 22, 203, 77, 21, 22, 203, + 57, 21, 22, 203, 49, 21, 22, 203, 166, 21, 22, 203, 161, 21, 22, 202, + 238, 21, 22, 193, 103, 202, 238, 21, 22, 202, 237, 21, 22, 193, 103, 202, + 237, 21, 22, 202, 236, 21, 22, 193, 103, 202, 236, 21, 22, 202, 235, 21, + 22, 193, 103, 202, 235, 21, 22, 202, 234, 21, 22, 193, 103, 202, 234, 21, + 22, 202, 241, 21, 22, 193, 103, 202, 241, 21, 22, 202, 240, 21, 22, 193, + 103, 202, 240, 21, 22, 203, 168, 21, 22, 192, 80, 21, 22, 192, 138, 21, + 22, 192, 33, 21, 22, 192, 23, 21, 22, 192, 12, 21, 22, 191, 246, 21, 22, + 192, 158, 191, 246, 21, 22, 170, 21, 22, 192, 140, 21, 22, 191, 181, 21, + 22, 193, 103, 191, 181, 21, 22, 191, 180, 21, 22, 193, 103, 191, 180, 21, + 22, 191, 179, 21, 22, 193, 103, 191, 179, 21, 22, 191, 178, 21, 22, 193, + 103, 191, 178, 21, 22, 191, 177, 21, 22, 193, 103, 191, 177, 21, 22, 191, + 183, 21, 22, 193, 103, 191, 183, 21, 22, 191, 182, 21, 22, 193, 103, 191, + 182, 21, 22, 214, 211, 191, 182, 21, 22, 192, 159, 21, 22, 248, 188, 192, + 159, 21, 22, 193, 103, 192, 159, 21, 22, 205, 102, 192, 33, 21, 22, 207, + 115, 21, 22, 207, 223, 207, 115, 21, 22, 193, 103, 219, 240, 21, 22, 207, + 179, 21, 22, 207, 2, 21, 22, 206, 196, 21, 22, 206, 163, 21, 22, 206, + 135, 21, 22, 193, 103, 219, 45, 21, 22, 165, 21, 22, 207, 180, 21, 22, + 193, 103, 173, 21, 22, 206, 26, 21, 22, 193, 103, 206, 26, 21, 22, 146, + 21, 22, 193, 103, 146, 21, 22, 216, 219, 146, 21, 22, 233, 61, 21, 22, + 233, 108, 21, 22, 233, 25, 21, 22, 233, 10, 21, 22, 232, 177, 21, 22, + 232, 164, 21, 22, 233, 111, 21, 22, 233, 110, 21, 22, 232, 63, 21, 22, + 193, 103, 232, 63, 21, 22, 233, 177, 21, 22, 199, 33, 21, 22, 215, 61, + 199, 33, 21, 22, 199, 11, 21, 22, 215, 61, 199, 11, 21, 22, 199, 5, 21, + 22, 215, 61, 199, 5, 21, 22, 198, 241, 21, 22, 198, 235, 21, 22, 199, 49, + 21, 22, 199, 48, 21, 22, 198, 203, 21, 22, 193, 103, 198, 203, 21, 22, + 199, 51, 21, 22, 197, 118, 21, 22, 197, 116, 21, 22, 197, 115, 21, 22, + 197, 120, 21, 22, 197, 121, 21, 22, 197, 2, 21, 22, 197, 1, 21, 22, 197, + 0, 21, 22, 197, 4, 21, 22, 212, 131, 229, 247, 21, 22, 212, 131, 229, + 160, 21, 22, 212, 131, 229, 132, 21, 22, 212, 131, 229, 25, 21, 22, 212, + 131, 228, 254, 21, 22, 212, 131, 140, 21, 22, 212, 131, 230, 93, 21, 22, + 212, 131, 230, 118, 21, 22, 212, 130, 230, 118, 21, 22, 229, 115, 21, 22, + 208, 94, 21, 22, 208, 59, 21, 22, 208, 53, 21, 22, 208, 47, 21, 22, 208, + 42, 21, 22, 208, 98, 21, 22, 208, 97, 21, 22, 208, 106, 21, 22, 198, 111, + 21, 22, 198, 109, 21, 22, 198, 108, 21, 22, 198, 112, 21, 22, 193, 103, + 207, 115, 21, 22, 193, 103, 207, 2, 21, 22, 193, 103, 206, 163, 21, 22, + 193, 103, 165, 21, 22, 214, 68, 21, 22, 214, 18, 21, 22, 214, 14, 21, 22, + 213, 251, 21, 22, 213, 246, 21, 22, 214, 70, 21, 22, 214, 69, 21, 22, + 214, 72, 21, 22, 213, 74, 21, 22, 205, 102, 203, 114, 21, 22, 205, 102, + 203, 82, 21, 22, 205, 102, 203, 57, 21, 22, 205, 102, 203, 166, 21, 22, + 193, 27, 199, 33, 21, 22, 193, 27, 199, 11, 21, 22, 193, 27, 198, 241, + 21, 22, 193, 27, 199, 49, 21, 22, 193, 27, 199, 51, 21, 22, 219, 155, 21, + 22, 219, 154, 21, 22, 219, 153, 21, 22, 219, 152, 21, 22, 219, 161, 21, + 22, 219, 160, 21, 22, 219, 162, 21, 22, 199, 50, 199, 33, 21, 22, 199, + 50, 199, 11, 21, 22, 199, 50, 199, 5, 21, 22, 199, 50, 198, 241, 21, 22, + 199, 50, 198, 235, 21, 22, 199, 50, 199, 49, 21, 22, 199, 50, 199, 48, + 21, 22, 199, 50, 199, 51, 21, 22, 251, 222, 250, 122, 21, 22, 248, 138, + 71, 21, 22, 248, 138, 68, 21, 22, 248, 138, 74, 21, 22, 248, 138, 65, 21, + 22, 248, 138, 193, 125, 21, 22, 248, 138, 193, 86, 21, 22, 248, 138, 193, + 48, 21, 22, 248, 138, 193, 190, 21, 22, 248, 138, 214, 123, 21, 22, 248, + 138, 213, 221, 21, 22, 248, 138, 213, 45, 21, 22, 248, 138, 181, 21, 22, + 248, 138, 222, 24, 21, 22, 248, 138, 221, 168, 21, 22, 248, 138, 221, 69, + 21, 22, 248, 138, 155, 21, 22, 205, 102, 229, 247, 21, 22, 205, 102, 229, + 160, 21, 22, 205, 102, 229, 25, 21, 22, 205, 102, 140, 21, 22, 98, 231, + 61, 21, 22, 98, 231, 65, 21, 22, 98, 231, 79, 21, 22, 98, 231, 78, 21, + 22, 98, 231, 67, 21, 22, 98, 231, 93, 21, 22, 98, 206, 69, 21, 22, 98, + 206, 163, 21, 22, 98, 207, 115, 21, 22, 98, 207, 86, 21, 22, 98, 207, 2, + 21, 22, 98, 165, 21, 22, 98, 193, 0, 21, 22, 98, 193, 48, 21, 22, 98, + 193, 125, 21, 22, 98, 193, 114, 21, 22, 98, 193, 86, 21, 22, 98, 193, + 190, 21, 22, 98, 228, 120, 21, 22, 98, 228, 121, 21, 22, 98, 228, 124, + 21, 22, 98, 228, 123, 21, 22, 98, 228, 122, 21, 22, 98, 228, 127, 21, 22, + 98, 198, 213, 21, 22, 98, 198, 241, 21, 22, 98, 199, 33, 21, 22, 98, 199, + 31, 21, 22, 98, 199, 11, 21, 22, 98, 199, 49, 21, 22, 98, 197, 99, 21, + 22, 98, 197, 109, 21, 22, 98, 197, 127, 21, 22, 98, 197, 126, 21, 22, 98, + 197, 111, 21, 22, 98, 197, 132, 21, 22, 98, 208, 167, 21, 22, 98, 209, + 75, 21, 22, 98, 210, 65, 21, 22, 98, 210, 51, 21, 22, 98, 209, 187, 21, + 22, 98, 168, 21, 22, 98, 210, 238, 21, 22, 98, 230, 181, 21, 22, 98, 231, + 5, 21, 22, 98, 231, 167, 21, 22, 98, 231, 159, 21, 22, 98, 231, 55, 21, + 22, 98, 231, 242, 21, 22, 98, 221, 177, 21, 22, 98, 221, 185, 21, 22, 98, + 221, 199, 21, 22, 98, 221, 198, 21, 22, 98, 221, 192, 21, 22, 98, 221, + 217, 21, 22, 98, 221, 98, 21, 22, 98, 221, 99, 21, 22, 98, 221, 102, 21, + 22, 98, 221, 101, 21, 22, 98, 221, 100, 21, 22, 98, 221, 103, 21, 22, 98, + 221, 104, 21, 22, 98, 212, 180, 21, 22, 98, 213, 45, 21, 22, 98, 214, + 123, 21, 22, 98, 214, 112, 21, 22, 98, 213, 221, 21, 22, 98, 181, 21, 22, + 98, 215, 157, 21, 22, 98, 216, 14, 21, 22, 98, 216, 234, 21, 22, 98, 216, + 213, 21, 22, 98, 216, 102, 21, 22, 98, 174, 21, 22, 98, 191, 225, 21, 22, + 98, 192, 12, 21, 22, 98, 192, 80, 21, 22, 98, 192, 77, 21, 22, 98, 192, + 33, 21, 22, 98, 170, 21, 22, 98, 222, 184, 21, 22, 205, 102, 222, 184, + 21, 22, 98, 222, 203, 21, 22, 98, 223, 12, 21, 22, 98, 223, 10, 21, 22, + 98, 222, 246, 21, 22, 205, 102, 222, 246, 21, 22, 98, 223, 34, 21, 22, + 98, 222, 217, 21, 22, 98, 222, 221, 21, 22, 98, 222, 231, 21, 22, 98, + 222, 230, 21, 22, 98, 222, 229, 21, 22, 98, 222, 232, 21, 22, 98, 218, + 227, 21, 22, 98, 219, 45, 21, 22, 98, 219, 240, 21, 22, 98, 219, 230, 21, + 22, 98, 219, 148, 21, 22, 98, 173, 21, 22, 98, 236, 181, 21, 22, 98, 236, + 182, 21, 22, 98, 236, 187, 21, 22, 98, 236, 186, 21, 22, 98, 236, 183, + 21, 22, 98, 236, 188, 21, 22, 98, 219, 151, 21, 22, 98, 219, 153, 21, 22, + 98, 219, 157, 21, 22, 98, 219, 156, 21, 22, 98, 219, 155, 21, 22, 98, + 219, 161, 21, 22, 98, 198, 106, 21, 22, 98, 198, 108, 21, 22, 98, 198, + 111, 21, 22, 98, 198, 110, 21, 22, 98, 198, 109, 21, 22, 98, 198, 112, + 21, 22, 98, 198, 101, 21, 22, 98, 198, 102, 21, 22, 98, 198, 114, 21, 22, + 98, 198, 113, 21, 22, 98, 198, 103, 21, 22, 98, 198, 115, 21, 22, 98, + 190, 251, 21, 22, 98, 191, 7, 21, 22, 98, 191, 87, 21, 22, 98, 191, 84, + 21, 22, 98, 191, 30, 21, 22, 98, 191, 123, 21, 22, 98, 191, 166, 21, 22, + 98, 89, 191, 166, 21, 22, 98, 235, 24, 21, 22, 98, 235, 25, 21, 22, 98, + 235, 34, 21, 22, 98, 235, 33, 21, 22, 98, 235, 28, 21, 22, 98, 235, 37, + 21, 22, 98, 201, 5, 21, 22, 98, 202, 47, 21, 22, 98, 205, 69, 21, 22, 98, + 205, 51, 21, 22, 98, 202, 223, 21, 22, 98, 188, 21, 22, 98, 203, 6, 21, + 22, 98, 203, 57, 21, 22, 98, 203, 114, 21, 22, 98, 203, 112, 21, 22, 98, + 203, 82, 21, 22, 98, 203, 166, 21, 22, 98, 203, 168, 21, 22, 98, 197, + 140, 21, 22, 98, 197, 144, 21, 22, 98, 197, 161, 21, 22, 98, 197, 160, + 21, 22, 98, 197, 146, 21, 22, 98, 197, 168, 21, 22, 98, 243, 50, 21, 22, + 98, 243, 70, 21, 22, 98, 243, 129, 21, 22, 98, 243, 125, 21, 22, 98, 243, + 97, 21, 22, 98, 247, 3, 21, 22, 98, 197, 102, 21, 22, 98, 197, 103, 21, + 22, 98, 197, 106, 21, 22, 98, 197, 105, 21, 22, 98, 197, 104, 21, 22, 98, + 197, 107, 21, 22, 243, 98, 56, 21, 22, 232, 82, 201, 64, 21, 22, 208, 90, + 21, 22, 214, 66, 21, 22, 213, 71, 21, 22, 213, 70, 21, 22, 213, 69, 21, + 22, 213, 68, 21, 22, 213, 73, 21, 22, 213, 72, 21, 22, 193, 27, 198, 201, + 21, 22, 193, 27, 198, 200, 21, 22, 193, 27, 198, 199, 21, 22, 193, 27, + 198, 198, 21, 22, 193, 27, 198, 197, 21, 22, 193, 27, 198, 204, 21, 22, + 193, 27, 198, 203, 21, 22, 193, 27, 53, 199, 51, 21, 22, 248, 138, 193, + 224, 211, 142, 201, 249, 77, 211, 142, 1, 248, 241, 211, 142, 1, 218, + 213, 211, 142, 1, 233, 58, 211, 142, 1, 205, 180, 211, 142, 1, 213, 168, + 211, 142, 1, 196, 165, 211, 142, 1, 238, 7, 211, 142, 1, 198, 139, 211, + 142, 1, 242, 88, 211, 142, 1, 247, 31, 211, 142, 1, 215, 139, 211, 142, + 1, 230, 236, 211, 142, 1, 214, 56, 211, 142, 1, 201, 55, 211, 142, 1, + 206, 56, 211, 142, 1, 251, 234, 211, 142, 1, 211, 93, 211, 142, 1, 196, + 62, 211, 142, 1, 234, 217, 211, 142, 1, 223, 89, 211, 142, 1, 234, 218, + 211, 142, 1, 211, 58, 211, 142, 1, 196, 136, 211, 142, 1, 223, 207, 211, + 142, 1, 234, 215, 211, 142, 1, 210, 40, 211, 142, 233, 57, 77, 211, 142, + 207, 19, 233, 57, 77, 206, 45, 1, 233, 47, 233, 38, 233, 62, 233, 177, + 206, 45, 1, 196, 12, 206, 45, 1, 196, 47, 196, 63, 66, 206, 45, 1, 191, + 228, 206, 45, 1, 192, 159, 206, 45, 1, 193, 224, 206, 45, 1, 198, 206, + 198, 205, 198, 233, 206, 45, 1, 233, 250, 206, 45, 1, 251, 92, 65, 206, + 45, 1, 211, 39, 74, 206, 45, 1, 252, 66, 65, 206, 45, 1, 252, 11, 206, + 45, 1, 219, 17, 74, 206, 45, 1, 203, 34, 74, 206, 45, 1, 74, 206, 45, 1, + 211, 153, 206, 45, 1, 211, 106, 206, 45, 1, 207, 156, 207, 171, 207, 70, + 146, 206, 45, 1, 222, 41, 206, 45, 1, 247, 27, 206, 45, 1, 222, 42, 222, + 154, 206, 45, 1, 232, 53, 206, 45, 1, 234, 90, 206, 45, 1, 231, 162, 230, + 124, 232, 53, 206, 45, 1, 231, 202, 206, 45, 1, 192, 248, 192, 239, 193, + 224, 206, 45, 1, 230, 84, 230, 118, 206, 45, 1, 230, 88, 230, 118, 206, + 45, 1, 219, 19, 230, 118, 206, 45, 1, 203, 37, 230, 118, 206, 45, 1, 214, + 205, 212, 93, 214, 206, 215, 63, 206, 45, 1, 203, 35, 215, 63, 206, 45, + 1, 235, 137, 206, 45, 1, 223, 67, 223, 71, 223, 57, 68, 206, 45, 1, 71, + 206, 45, 1, 223, 1, 223, 37, 206, 45, 1, 231, 143, 206, 45, 1, 219, 20, + 252, 27, 206, 45, 1, 203, 39, 65, 206, 45, 1, 223, 49, 234, 63, 206, 45, + 1, 209, 249, 210, 20, 210, 238, 206, 45, 1, 251, 187, 234, 61, 206, 45, + 1, 201, 255, 206, 9, 206, 45, 1, 202, 199, 219, 16, 206, 9, 206, 45, 1, + 203, 33, 206, 9, 206, 45, 1, 247, 195, 206, 45, 1, 191, 166, 206, 45, 1, + 198, 120, 198, 132, 196, 242, 200, 43, 206, 45, 1, 203, 32, 200, 43, 206, + 45, 1, 238, 129, 206, 45, 1, 248, 219, 248, 222, 248, 144, 250, 122, 206, + 45, 1, 203, 38, 250, 122, 206, 45, 1, 235, 136, 206, 45, 1, 211, 72, 206, + 45, 1, 234, 169, 234, 176, 71, 206, 45, 1, 217, 81, 217, 93, 218, 170, + 206, 45, 1, 219, 18, 218, 170, 206, 45, 1, 203, 36, 218, 170, 206, 45, 1, + 219, 255, 220, 103, 219, 28, 172, 206, 45, 1, 235, 138, 206, 45, 1, 223, + 137, 206, 45, 1, 223, 138, 206, 45, 1, 238, 21, 238, 27, 238, 129, 206, + 45, 1, 211, 30, 233, 249, 74, 206, 45, 1, 234, 213, 206, 45, 1, 223, 87, + 206, 45, 1, 238, 150, 206, 45, 1, 247, 145, 206, 45, 1, 247, 43, 206, 45, + 1, 201, 109, 206, 45, 1, 219, 15, 206, 45, 1, 203, 31, 206, 45, 1, 228, + 27, 206, 45, 1, 208, 106, 206, 45, 1, 192, 235, 206, 45, 202, 171, 208, + 153, 206, 45, 215, 131, 208, 153, 206, 45, 238, 220, 208, 153, 206, 45, + 250, 254, 113, 206, 45, 197, 45, 113, 206, 45, 248, 239, 113, 206, 45, 1, + 222, 154, 206, 45, 1, 203, 168, 206, 45, 1, 211, 89, 206, 45, 1, 232, + 112, 247, 83, 211, 38, 206, 45, 1, 232, 112, 247, 83, 223, 70, 206, 45, + 1, 232, 112, 247, 83, 234, 175, 206, 45, 1, 232, 112, 247, 83, 252, 65, + 206, 45, 1, 232, 112, 247, 83, 252, 11, 199, 222, 1, 65, 199, 222, 1, 68, + 199, 222, 1, 66, 199, 222, 1, 155, 199, 222, 1, 231, 242, 199, 222, 1, + 214, 70, 199, 222, 1, 190, 190, 199, 222, 1, 238, 34, 199, 222, 1, 181, + 199, 222, 1, 168, 199, 222, 1, 249, 155, 199, 222, 1, 174, 199, 222, 1, + 170, 199, 222, 1, 165, 199, 222, 1, 173, 199, 222, 1, 193, 190, 199, 222, + 1, 188, 199, 222, 1, 140, 199, 222, 18, 3, 68, 199, 222, 18, 3, 66, 199, + 222, 3, 195, 40, 199, 222, 3, 210, 171, 199, 222, 1, 251, 16, 165, 230, + 25, 1, 65, 230, 25, 1, 68, 230, 25, 1, 66, 230, 25, 1, 155, 230, 25, 1, + 231, 242, 230, 25, 1, 214, 70, 230, 25, 1, 190, 190, 230, 25, 1, 238, 34, + 230, 25, 1, 181, 230, 25, 1, 168, 230, 25, 1, 249, 155, 230, 25, 1, 174, + 230, 25, 1, 170, 230, 25, 1, 165, 230, 25, 1, 173, 230, 25, 1, 193, 190, + 230, 25, 1, 188, 230, 25, 1, 140, 230, 25, 18, 3, 68, 230, 25, 18, 3, 66, + 230, 25, 3, 210, 171, 209, 206, 202, 171, 208, 153, 209, 206, 55, 208, + 153, 248, 2, 1, 65, 248, 2, 1, 68, 248, 2, 1, 66, 248, 2, 1, 155, 248, 2, + 1, 231, 242, 248, 2, 1, 214, 70, 248, 2, 1, 190, 190, 248, 2, 1, 238, 34, + 248, 2, 1, 181, 248, 2, 1, 168, 248, 2, 1, 249, 155, 248, 2, 1, 174, 248, + 2, 1, 170, 248, 2, 1, 165, 248, 2, 1, 173, 248, 2, 1, 193, 190, 248, 2, + 1, 188, 248, 2, 1, 140, 248, 2, 18, 3, 68, 248, 2, 18, 3, 66, 199, 221, + 1, 65, 199, 221, 1, 68, 199, 221, 1, 66, 199, 221, 1, 155, 199, 221, 1, + 231, 242, 199, 221, 1, 214, 70, 199, 221, 1, 190, 190, 199, 221, 1, 238, + 34, 199, 221, 1, 181, 199, 221, 1, 168, 199, 221, 1, 249, 155, 199, 221, + 1, 174, 199, 221, 1, 170, 199, 221, 1, 173, 199, 221, 1, 193, 190, 199, + 221, 1, 188, 199, 221, 18, 3, 68, 199, 221, 18, 3, 66, 95, 1, 155, 95, 1, + 221, 217, 95, 1, 221, 69, 95, 1, 221, 185, 95, 1, 213, 251, 95, 1, 247, + 162, 95, 1, 247, 3, 95, 1, 242, 101, 95, 1, 243, 70, 95, 1, 212, 67, 95, + 1, 238, 34, 95, 1, 197, 120, 95, 1, 236, 176, 95, 1, 197, 115, 95, 1, + 213, 51, 95, 1, 190, 190, 95, 1, 199, 49, 95, 1, 159, 95, 1, 198, 241, + 95, 1, 213, 45, 95, 1, 249, 155, 95, 1, 209, 230, 95, 1, 209, 75, 95, 1, + 209, 201, 95, 1, 216, 14, 95, 1, 192, 12, 95, 1, 206, 163, 95, 1, 219, + 45, 95, 1, 195, 24, 95, 1, 203, 166, 95, 1, 201, 135, 95, 1, 188, 95, 1, + 140, 95, 1, 173, 95, 1, 208, 98, 95, 223, 151, 18, 208, 84, 95, 223, 151, + 18, 208, 97, 95, 223, 151, 18, 208, 59, 95, 223, 151, 18, 208, 53, 95, + 223, 151, 18, 208, 35, 95, 223, 151, 18, 208, 2, 95, 223, 151, 18, 207, + 246, 95, 223, 151, 18, 207, 245, 95, 223, 151, 18, 206, 18, 95, 223, 151, + 18, 206, 11, 95, 223, 151, 18, 218, 185, 95, 223, 151, 18, 218, 173, 95, + 223, 151, 18, 208, 77, 95, 223, 151, 18, 208, 90, 95, 223, 151, 18, 208, + 43, 196, 255, 107, 95, 223, 151, 18, 208, 43, 196, 255, 109, 95, 223, + 151, 18, 208, 79, 95, 18, 223, 135, 251, 39, 95, 18, 223, 135, 252, 208, + 95, 18, 3, 252, 208, 95, 18, 3, 68, 95, 18, 3, 223, 201, 95, 18, 3, 192, + 159, 95, 18, 3, 191, 176, 95, 18, 3, 66, 95, 18, 3, 196, 30, 95, 18, 3, + 196, 168, 95, 18, 3, 211, 153, 95, 18, 3, 170, 95, 18, 3, 223, 228, 95, + 18, 3, 71, 95, 18, 3, 252, 27, 95, 18, 3, 251, 238, 95, 18, 3, 211, 89, + 95, 18, 3, 250, 165, 95, 3, 213, 186, 95, 3, 207, 108, 95, 3, 191, 187, + 95, 3, 215, 93, 95, 3, 197, 229, 95, 3, 249, 92, 95, 3, 206, 152, 95, 3, + 198, 90, 95, 3, 222, 97, 95, 3, 251, 240, 95, 3, 205, 144, 205, 136, 95, + 3, 195, 37, 95, 3, 242, 92, 95, 3, 249, 62, 95, 3, 221, 207, 95, 3, 249, + 87, 95, 3, 247, 133, 209, 148, 220, 188, 95, 3, 219, 207, 198, 59, 95, 3, + 248, 207, 95, 3, 209, 203, 215, 150, 95, 3, 221, 41, 95, 238, 172, 16, + 206, 242, 95, 3, 250, 146, 95, 3, 250, 168, 95, 17, 191, 77, 95, 17, 107, + 95, 17, 109, 95, 17, 138, 95, 17, 134, 95, 17, 150, 95, 17, 169, 95, 17, + 175, 95, 17, 171, 95, 17, 178, 95, 16, 219, 207, 250, 170, 202, 20, 95, + 16, 219, 207, 250, 170, 215, 114, 95, 16, 219, 207, 250, 170, 209, 147, + 95, 16, 219, 207, 250, 170, 248, 242, 95, 16, 219, 207, 250, 170, 247, + 238, 95, 16, 219, 207, 250, 170, 208, 247, 95, 16, 219, 207, 250, 170, + 208, 241, 95, 16, 219, 207, 250, 170, 208, 239, 95, 16, 219, 207, 250, + 170, 208, 245, 95, 16, 219, 207, 250, 170, 208, 243, 104, 248, 160, 104, + 234, 122, 104, 242, 76, 104, 232, 82, 201, 64, 104, 242, 85, 104, 232, + 130, 236, 140, 104, 198, 88, 202, 33, 228, 90, 104, 202, 215, 5, 248, 75, + 217, 53, 104, 217, 89, 242, 76, 104, 217, 89, 232, 82, 201, 64, 104, 213, + 166, 104, 232, 111, 67, 205, 36, 107, 104, 232, 111, 67, 205, 36, 109, + 104, 232, 111, 67, 205, 36, 138, 104, 18, 204, 11, 104, 232, 111, 67, + 205, 36, 134, 104, 17, 191, 77, 104, 17, 107, 104, 17, 109, 104, 17, 138, + 104, 17, 134, 104, 17, 150, 104, 17, 169, 104, 17, 175, 104, 17, 171, + 104, 17, 178, 104, 1, 65, 104, 1, 71, 104, 1, 68, 104, 1, 74, 104, 1, 66, + 104, 1, 211, 153, 104, 1, 196, 152, 104, 1, 234, 190, 104, 1, 181, 104, + 1, 251, 124, 104, 1, 249, 155, 104, 1, 168, 104, 1, 208, 98, 104, 1, 231, + 242, 104, 1, 174, 104, 1, 173, 104, 1, 188, 104, 1, 203, 166, 104, 1, + 190, 190, 104, 1, 238, 34, 104, 1, 247, 3, 104, 1, 223, 34, 104, 1, 170, + 104, 1, 165, 104, 1, 193, 190, 104, 1, 233, 111, 104, 1, 155, 104, 1, + 221, 217, 104, 1, 197, 168, 104, 1, 191, 123, 104, 1, 230, 93, 104, 1, + 190, 255, 104, 1, 219, 161, 104, 1, 191, 57, 104, 1, 243, 97, 104, 1, + 198, 88, 180, 18, 56, 104, 1, 198, 88, 71, 104, 1, 198, 88, 68, 104, 1, + 198, 88, 74, 104, 1, 198, 88, 66, 104, 1, 198, 88, 211, 153, 104, 1, 198, + 88, 196, 152, 104, 1, 198, 88, 251, 124, 104, 1, 198, 88, 249, 155, 104, + 1, 198, 88, 168, 104, 1, 198, 88, 208, 98, 104, 1, 198, 88, 231, 242, + 104, 1, 198, 88, 174, 104, 1, 198, 88, 190, 190, 104, 1, 198, 88, 238, + 34, 104, 1, 198, 88, 247, 3, 104, 1, 198, 88, 223, 34, 104, 1, 198, 88, + 197, 168, 104, 1, 198, 88, 170, 104, 1, 198, 88, 193, 190, 104, 1, 198, + 88, 155, 104, 1, 198, 88, 231, 239, 104, 1, 198, 88, 230, 93, 104, 1, + 198, 88, 222, 245, 104, 1, 198, 88, 213, 211, 104, 1, 198, 88, 235, 37, + 104, 1, 202, 215, 71, 104, 1, 202, 215, 68, 104, 1, 202, 215, 223, 46, + 104, 1, 202, 215, 196, 152, 104, 1, 202, 215, 66, 104, 1, 202, 215, 251, + 124, 104, 1, 202, 215, 155, 104, 1, 202, 215, 231, 242, 104, 1, 202, 215, + 140, 104, 1, 202, 215, 168, 104, 1, 202, 215, 203, 166, 104, 1, 202, 215, + 190, 190, 104, 1, 202, 215, 238, 34, 104, 1, 202, 215, 223, 34, 104, 1, + 202, 215, 233, 111, 104, 1, 202, 215, 231, 239, 104, 1, 202, 215, 230, + 93, 104, 1, 202, 215, 197, 168, 104, 1, 202, 215, 191, 123, 104, 1, 202, + 215, 207, 180, 104, 1, 202, 215, 247, 3, 104, 1, 202, 215, 191, 71, 104, + 1, 217, 89, 68, 104, 1, 217, 89, 155, 104, 1, 217, 89, 165, 104, 1, 217, + 89, 233, 111, 104, 1, 217, 89, 191, 71, 104, 1, 247, 4, 4, 105, 236, 140, + 104, 1, 251, 186, 231, 222, 251, 74, 107, 104, 1, 251, 186, 231, 222, + 195, 36, 107, 104, 1, 251, 186, 231, 222, 237, 249, 104, 1, 251, 186, + 231, 222, 196, 163, 104, 1, 251, 186, 231, 222, 223, 95, 196, 163, 104, + 1, 251, 186, 231, 222, 249, 106, 104, 1, 251, 186, 231, 222, 115, 249, + 106, 104, 1, 251, 186, 231, 222, 65, 104, 1, 251, 186, 231, 222, 68, 104, + 1, 251, 186, 231, 222, 155, 104, 1, 251, 186, 231, 222, 214, 70, 104, 1, + 251, 186, 231, 222, 247, 162, 104, 1, 251, 186, 231, 222, 197, 132, 104, + 1, 251, 186, 231, 222, 197, 120, 104, 1, 251, 186, 231, 222, 237, 193, + 104, 1, 251, 186, 231, 222, 213, 81, 104, 1, 251, 186, 231, 222, 190, + 190, 104, 1, 251, 186, 231, 222, 238, 34, 104, 1, 251, 186, 231, 222, + 168, 104, 1, 251, 186, 231, 222, 209, 230, 104, 1, 251, 186, 231, 222, + 201, 176, 104, 1, 251, 186, 231, 222, 191, 71, 104, 1, 251, 186, 231, + 222, 191, 123, 104, 1, 251, 186, 231, 222, 251, 247, 104, 1, 198, 88, + 251, 186, 231, 222, 190, 190, 104, 1, 198, 88, 251, 186, 231, 222, 191, + 71, 104, 1, 217, 89, 251, 186, 231, 222, 231, 93, 104, 1, 217, 89, 251, + 186, 231, 222, 214, 70, 104, 1, 217, 89, 251, 186, 231, 222, 247, 162, + 104, 1, 217, 89, 251, 186, 231, 222, 222, 254, 104, 1, 217, 89, 251, 186, + 231, 222, 197, 132, 104, 1, 217, 89, 251, 186, 231, 222, 237, 177, 104, + 1, 217, 89, 251, 186, 231, 222, 190, 190, 104, 1, 217, 89, 251, 186, 231, + 222, 237, 70, 104, 1, 217, 89, 251, 186, 231, 222, 201, 176, 104, 1, 217, + 89, 251, 186, 231, 222, 238, 144, 104, 1, 217, 89, 251, 186, 231, 222, + 191, 71, 104, 1, 217, 89, 251, 186, 231, 222, 191, 123, 104, 1, 251, 186, + 231, 222, 132, 66, 104, 1, 251, 186, 231, 222, 132, 170, 104, 1, 217, 89, + 251, 186, 231, 222, 248, 205, 104, 1, 251, 186, 231, 222, 238, 22, 104, + 1, 217, 89, 251, 186, 231, 222, 219, 161, 21, 22, 210, 244, 21, 22, 250, + 133, 21, 22, 252, 162, 21, 22, 193, 128, 21, 22, 208, 253, 21, 22, 210, + 74, 21, 22, 208, 115, 21, 22, 199, 154, 21, 22, 222, 31, 21, 22, 220, + 178, 21, 22, 217, 23, 21, 22, 212, 252, 21, 22, 214, 200, 21, 22, 219, + 250, 21, 22, 201, 253, 21, 22, 205, 104, 21, 22, 203, 19, 21, 22, 203, + 118, 21, 22, 202, 233, 21, 22, 191, 234, 21, 22, 192, 86, 21, 22, 207, + 124, 21, 22, 212, 109, 21, 22, 211, 130, 212, 109, 21, 22, 212, 108, 21, + 22, 211, 130, 212, 108, 21, 22, 212, 107, 21, 22, 211, 130, 212, 107, 21, + 22, 212, 106, 21, 22, 211, 130, 212, 106, 21, 22, 206, 23, 21, 22, 206, + 22, 21, 22, 206, 21, 21, 22, 206, 20, 21, 22, 206, 19, 21, 22, 206, 27, + 21, 22, 211, 130, 210, 238, 21, 22, 211, 130, 200, 43, 21, 22, 211, 130, + 222, 154, 21, 22, 211, 130, 247, 195, 21, 22, 211, 130, 218, 170, 21, 22, + 211, 130, 215, 63, 21, 22, 211, 130, 206, 9, 21, 22, 211, 130, 203, 168, + 21, 22, 234, 204, 193, 224, 21, 22, 193, 102, 193, 224, 21, 22, 53, 2, + 206, 189, 21, 22, 53, 207, 149, 236, 142, 21, 22, 207, 223, 206, 24, 21, + 22, 193, 103, 219, 10, 21, 22, 193, 103, 220, 127, 21, 22, 198, 202, 21, 22, 198, 204, 21, 22, 197, 112, 21, 22, 197, 114, 21, 22, 197, 119, 21, - 22, 198, 105, 21, 22, 198, 107, 21, 22, 205, 101, 202, 237, 21, 22, 205, - 101, 203, 48, 21, 22, 205, 101, 228, 252, 21, 22, 98, 230, 130, 21, 22, - 98, 237, 103, 231, 157, 21, 22, 98, 231, 237, 21, 22, 98, 230, 135, 21, - 22, 205, 101, 222, 162, 21, 22, 98, 222, 160, 21, 22, 249, 5, 237, 103, - 172, 21, 22, 249, 5, 237, 103, 146, 21, 22, 98, 237, 98, 206, 8, 219, - 122, 195, 1, 219, 175, 219, 122, 1, 155, 219, 122, 1, 221, 215, 219, 122, - 1, 231, 240, 219, 122, 1, 231, 91, 219, 122, 1, 214, 68, 219, 122, 1, - 247, 160, 219, 122, 1, 247, 1, 219, 122, 1, 223, 32, 219, 122, 1, 222, - 252, 219, 122, 1, 192, 108, 219, 122, 1, 190, 190, 219, 122, 1, 199, 49, - 219, 122, 1, 238, 32, 219, 122, 1, 237, 68, 219, 122, 1, 180, 219, 122, - 1, 168, 219, 122, 1, 209, 228, 219, 122, 1, 249, 153, 219, 122, 1, 248, - 203, 219, 122, 1, 174, 219, 122, 1, 170, 219, 122, 1, 165, 219, 122, 1, - 173, 219, 122, 1, 193, 190, 219, 122, 1, 203, 165, 219, 122, 1, 201, 175, - 219, 122, 1, 188, 219, 122, 1, 140, 219, 122, 1, 230, 126, 219, 122, 1, - 198, 26, 219, 122, 18, 3, 65, 219, 122, 18, 3, 68, 219, 122, 18, 3, 66, - 219, 122, 18, 3, 234, 188, 219, 122, 18, 3, 251, 236, 219, 122, 18, 3, - 211, 87, 219, 122, 18, 3, 250, 163, 219, 122, 18, 3, 71, 219, 122, 18, 3, - 74, 219, 122, 200, 239, 1, 170, 219, 122, 200, 239, 1, 165, 219, 122, - 200, 239, 1, 193, 190, 219, 122, 2, 1, 155, 219, 122, 2, 1, 214, 68, 219, - 122, 2, 1, 251, 71, 219, 122, 2, 1, 190, 190, 219, 122, 2, 1, 180, 219, - 122, 2, 1, 168, 219, 122, 2, 1, 174, 219, 122, 2, 1, 165, 219, 122, 2, 1, - 173, 219, 122, 3, 215, 134, 219, 122, 3, 222, 1, 219, 122, 3, 205, 198, - 219, 122, 3, 219, 8, 219, 122, 233, 216, 77, 219, 122, 208, 13, 77, 219, - 122, 17, 191, 77, 219, 122, 17, 107, 219, 122, 17, 109, 219, 122, 17, - 138, 219, 122, 17, 134, 219, 122, 17, 149, 219, 122, 17, 169, 219, 122, - 17, 175, 219, 122, 17, 171, 219, 122, 17, 178, 54, 219, 239, 1, 155, 54, - 219, 239, 1, 192, 220, 54, 219, 239, 1, 214, 68, 54, 219, 239, 1, 197, - 168, 54, 219, 239, 1, 188, 54, 219, 239, 1, 170, 54, 219, 239, 1, 190, - 190, 54, 219, 239, 1, 199, 49, 54, 219, 239, 1, 173, 54, 219, 239, 1, - 168, 54, 219, 239, 1, 209, 228, 54, 219, 239, 1, 174, 54, 219, 239, 1, - 233, 109, 54, 219, 239, 1, 195, 188, 54, 219, 239, 1, 140, 54, 219, 239, - 1, 208, 96, 54, 219, 239, 1, 221, 215, 54, 219, 239, 1, 197, 157, 54, - 219, 239, 1, 180, 54, 219, 239, 1, 65, 54, 219, 239, 1, 68, 54, 219, 239, - 1, 234, 188, 54, 219, 239, 1, 234, 173, 54, 219, 239, 1, 66, 54, 219, - 239, 1, 211, 87, 54, 219, 239, 1, 74, 54, 219, 239, 1, 196, 152, 54, 219, - 239, 1, 71, 54, 219, 239, 1, 250, 161, 54, 219, 239, 1, 251, 236, 54, - 219, 239, 1, 198, 77, 54, 219, 239, 1, 198, 76, 54, 219, 239, 1, 198, 75, - 54, 219, 239, 1, 198, 74, 54, 219, 239, 1, 198, 73, 214, 80, 54, 218, - 219, 1, 137, 208, 96, 214, 80, 54, 218, 219, 1, 130, 208, 96, 214, 80, - 54, 218, 219, 1, 137, 155, 214, 80, 54, 218, 219, 1, 137, 192, 220, 214, - 80, 54, 218, 219, 1, 137, 214, 68, 214, 80, 54, 218, 219, 1, 130, 155, - 214, 80, 54, 218, 219, 1, 130, 192, 220, 214, 80, 54, 218, 219, 1, 130, - 214, 68, 214, 80, 54, 218, 219, 1, 137, 197, 168, 214, 80, 54, 218, 219, - 1, 137, 188, 214, 80, 54, 218, 219, 1, 137, 170, 214, 80, 54, 218, 219, - 1, 130, 197, 168, 214, 80, 54, 218, 219, 1, 130, 188, 214, 80, 54, 218, - 219, 1, 130, 170, 214, 80, 54, 218, 219, 1, 137, 190, 190, 214, 80, 54, - 218, 219, 1, 137, 199, 49, 214, 80, 54, 218, 219, 1, 137, 180, 214, 80, - 54, 218, 219, 1, 130, 190, 190, 214, 80, 54, 218, 219, 1, 130, 199, 49, - 214, 80, 54, 218, 219, 1, 130, 180, 214, 80, 54, 218, 219, 1, 137, 168, - 214, 80, 54, 218, 219, 1, 137, 209, 228, 214, 80, 54, 218, 219, 1, 137, - 174, 214, 80, 54, 218, 219, 1, 130, 168, 214, 80, 54, 218, 219, 1, 130, - 209, 228, 214, 80, 54, 218, 219, 1, 130, 174, 214, 80, 54, 218, 219, 1, - 137, 233, 109, 214, 80, 54, 218, 219, 1, 137, 195, 188, 214, 80, 54, 218, - 219, 1, 137, 173, 214, 80, 54, 218, 219, 1, 130, 233, 109, 214, 80, 54, - 218, 219, 1, 130, 195, 188, 214, 80, 54, 218, 219, 1, 130, 173, 214, 80, - 54, 218, 219, 1, 137, 140, 214, 80, 54, 218, 219, 1, 137, 238, 32, 214, - 80, 54, 218, 219, 1, 137, 249, 153, 214, 80, 54, 218, 219, 1, 130, 140, - 214, 80, 54, 218, 219, 1, 130, 238, 32, 214, 80, 54, 218, 219, 1, 130, - 249, 153, 214, 80, 54, 218, 219, 1, 137, 220, 181, 214, 80, 54, 218, 219, - 1, 137, 192, 185, 214, 80, 54, 218, 219, 1, 130, 220, 181, 214, 80, 54, - 218, 219, 1, 130, 192, 185, 214, 80, 54, 218, 219, 1, 137, 200, 251, 214, - 80, 54, 218, 219, 1, 130, 200, 251, 214, 80, 54, 218, 219, 18, 3, 18, - 203, 28, 214, 80, 54, 218, 219, 18, 3, 252, 206, 214, 80, 54, 218, 219, - 18, 3, 223, 199, 214, 80, 54, 218, 219, 18, 3, 66, 214, 80, 54, 218, 219, - 18, 3, 196, 30, 214, 80, 54, 218, 219, 18, 3, 71, 214, 80, 54, 218, 219, - 18, 3, 252, 25, 214, 80, 54, 218, 219, 18, 3, 74, 214, 80, 54, 218, 219, - 18, 3, 211, 182, 214, 80, 54, 218, 219, 18, 3, 196, 152, 214, 80, 54, - 218, 219, 18, 3, 250, 131, 214, 80, 54, 218, 219, 18, 3, 252, 160, 214, - 80, 54, 218, 219, 18, 3, 196, 21, 214, 80, 54, 218, 219, 18, 3, 210, 242, - 214, 80, 54, 218, 219, 18, 3, 211, 179, 214, 80, 54, 218, 219, 18, 3, - 196, 144, 214, 80, 54, 218, 219, 18, 3, 223, 44, 214, 80, 54, 218, 219, - 1, 53, 196, 12, 214, 80, 54, 218, 219, 1, 53, 214, 70, 214, 80, 54, 218, - 219, 1, 53, 215, 61, 214, 80, 54, 218, 219, 1, 53, 218, 168, 214, 80, 54, - 218, 219, 1, 53, 222, 152, 214, 80, 54, 218, 219, 1, 53, 238, 127, 214, - 80, 54, 218, 219, 1, 53, 250, 120, 214, 80, 54, 218, 219, 163, 217, 55, - 214, 80, 54, 218, 219, 163, 217, 54, 214, 80, 54, 218, 219, 17, 191, 77, - 214, 80, 54, 218, 219, 17, 107, 214, 80, 54, 218, 219, 17, 109, 214, 80, - 54, 218, 219, 17, 138, 214, 80, 54, 218, 219, 17, 134, 214, 80, 54, 218, - 219, 17, 149, 214, 80, 54, 218, 219, 17, 169, 214, 80, 54, 218, 219, 17, - 175, 214, 80, 54, 218, 219, 17, 171, 214, 80, 54, 218, 219, 17, 178, 214, - 80, 54, 218, 219, 128, 17, 107, 214, 80, 54, 218, 219, 3, 220, 107, 214, - 80, 54, 218, 219, 3, 220, 106, 95, 16, 210, 84, 95, 16, 215, 113, 221, - 58, 95, 16, 209, 146, 221, 58, 95, 16, 248, 241, 221, 58, 95, 16, 247, - 237, 221, 58, 95, 16, 208, 246, 221, 58, 95, 16, 208, 240, 221, 58, 95, - 16, 208, 238, 221, 58, 95, 16, 208, 244, 221, 58, 95, 16, 208, 242, 221, - 58, 95, 16, 237, 232, 221, 58, 95, 16, 237, 228, 221, 58, 95, 16, 237, - 227, 221, 58, 95, 16, 237, 230, 221, 58, 95, 16, 237, 229, 221, 58, 95, - 16, 237, 226, 221, 58, 95, 16, 197, 51, 95, 16, 215, 113, 206, 149, 95, - 16, 209, 146, 206, 149, 95, 16, 248, 241, 206, 149, 95, 16, 247, 237, - 206, 149, 95, 16, 208, 246, 206, 149, 95, 16, 208, 240, 206, 149, 95, 16, - 208, 238, 206, 149, 95, 16, 208, 244, 206, 149, 95, 16, 208, 242, 206, - 149, 95, 16, 237, 232, 206, 149, 95, 16, 237, 228, 206, 149, 95, 16, 237, - 227, 206, 149, 95, 16, 237, 230, 206, 149, 95, 16, 237, 229, 206, 149, - 95, 16, 237, 226, 206, 149, 248, 1, 1, 155, 248, 1, 1, 231, 240, 248, 1, - 1, 214, 68, 248, 1, 1, 214, 11, 248, 1, 1, 168, 248, 1, 1, 249, 153, 248, - 1, 1, 174, 248, 1, 1, 215, 166, 248, 1, 1, 190, 190, 248, 1, 1, 238, 32, - 248, 1, 1, 180, 248, 1, 1, 212, 244, 248, 1, 1, 247, 160, 248, 1, 1, 223, - 32, 248, 1, 1, 212, 101, 248, 1, 1, 212, 92, 248, 1, 1, 170, 248, 1, 1, - 165, 248, 1, 1, 173, 248, 1, 1, 195, 188, 248, 1, 1, 188, 248, 1, 1, 65, - 248, 1, 1, 140, 248, 1, 18, 3, 68, 248, 1, 18, 3, 66, 248, 1, 18, 3, 71, - 248, 1, 18, 3, 74, 248, 1, 18, 3, 252, 25, 248, 1, 210, 184, 248, 1, 234, - 95, 79, 205, 53, 54, 128, 1, 137, 155, 54, 128, 1, 137, 221, 215, 54, - 128, 1, 137, 220, 165, 54, 128, 1, 130, 155, 54, 128, 1, 130, 220, 165, - 54, 128, 1, 130, 221, 215, 54, 128, 1, 214, 68, 54, 128, 1, 137, 247, - 160, 54, 128, 1, 137, 247, 1, 54, 128, 1, 130, 247, 160, 54, 128, 1, 130, - 188, 54, 128, 1, 130, 247, 1, 54, 128, 1, 212, 101, 54, 128, 1, 207, 129, - 54, 128, 1, 137, 207, 127, 54, 128, 1, 238, 32, 54, 128, 1, 130, 207, - 127, 54, 128, 1, 207, 138, 54, 128, 1, 137, 190, 190, 54, 128, 1, 137, + 22, 198, 105, 21, 22, 198, 107, 21, 22, 205, 102, 202, 238, 21, 22, 205, + 102, 203, 49, 21, 22, 205, 102, 228, 254, 21, 22, 98, 230, 132, 21, 22, + 98, 237, 105, 231, 159, 21, 22, 98, 231, 239, 21, 22, 98, 230, 137, 21, + 22, 205, 102, 222, 164, 21, 22, 98, 222, 162, 21, 22, 249, 7, 237, 105, + 172, 21, 22, 249, 7, 237, 105, 146, 21, 22, 98, 237, 100, 206, 9, 219, + 124, 195, 1, 219, 177, 219, 124, 1, 155, 219, 124, 1, 221, 217, 219, 124, + 1, 231, 242, 219, 124, 1, 231, 93, 219, 124, 1, 214, 70, 219, 124, 1, + 247, 162, 219, 124, 1, 247, 3, 219, 124, 1, 223, 34, 219, 124, 1, 222, + 254, 219, 124, 1, 192, 108, 219, 124, 1, 190, 190, 219, 124, 1, 199, 49, + 219, 124, 1, 238, 34, 219, 124, 1, 237, 70, 219, 124, 1, 181, 219, 124, + 1, 168, 219, 124, 1, 209, 230, 219, 124, 1, 249, 155, 219, 124, 1, 248, + 205, 219, 124, 1, 174, 219, 124, 1, 170, 219, 124, 1, 165, 219, 124, 1, + 173, 219, 124, 1, 193, 190, 219, 124, 1, 203, 166, 219, 124, 1, 201, 176, + 219, 124, 1, 188, 219, 124, 1, 140, 219, 124, 1, 230, 128, 219, 124, 1, + 198, 26, 219, 124, 18, 3, 65, 219, 124, 18, 3, 68, 219, 124, 18, 3, 66, + 219, 124, 18, 3, 234, 190, 219, 124, 18, 3, 251, 238, 219, 124, 18, 3, + 211, 89, 219, 124, 18, 3, 250, 165, 219, 124, 18, 3, 71, 219, 124, 18, 3, + 74, 219, 124, 200, 240, 1, 170, 219, 124, 200, 240, 1, 165, 219, 124, + 200, 240, 1, 193, 190, 219, 124, 2, 1, 155, 219, 124, 2, 1, 214, 70, 219, + 124, 2, 1, 251, 73, 219, 124, 2, 1, 190, 190, 219, 124, 2, 1, 181, 219, + 124, 2, 1, 168, 219, 124, 2, 1, 174, 219, 124, 2, 1, 165, 219, 124, 2, 1, + 173, 219, 124, 3, 215, 136, 219, 124, 3, 222, 3, 219, 124, 3, 205, 199, + 219, 124, 3, 219, 10, 219, 124, 233, 218, 77, 219, 124, 208, 15, 77, 219, + 124, 17, 191, 77, 219, 124, 17, 107, 219, 124, 17, 109, 219, 124, 17, + 138, 219, 124, 17, 134, 219, 124, 17, 150, 219, 124, 17, 169, 219, 124, + 17, 175, 219, 124, 17, 171, 219, 124, 17, 178, 54, 219, 241, 1, 155, 54, + 219, 241, 1, 192, 220, 54, 219, 241, 1, 214, 70, 54, 219, 241, 1, 197, + 168, 54, 219, 241, 1, 188, 54, 219, 241, 1, 170, 54, 219, 241, 1, 190, + 190, 54, 219, 241, 1, 199, 49, 54, 219, 241, 1, 173, 54, 219, 241, 1, + 168, 54, 219, 241, 1, 209, 230, 54, 219, 241, 1, 174, 54, 219, 241, 1, + 233, 111, 54, 219, 241, 1, 195, 188, 54, 219, 241, 1, 140, 54, 219, 241, + 1, 208, 98, 54, 219, 241, 1, 221, 217, 54, 219, 241, 1, 197, 157, 54, + 219, 241, 1, 181, 54, 219, 241, 1, 65, 54, 219, 241, 1, 68, 54, 219, 241, + 1, 234, 190, 54, 219, 241, 1, 234, 175, 54, 219, 241, 1, 66, 54, 219, + 241, 1, 211, 89, 54, 219, 241, 1, 74, 54, 219, 241, 1, 196, 152, 54, 219, + 241, 1, 71, 54, 219, 241, 1, 250, 163, 54, 219, 241, 1, 251, 238, 54, + 219, 241, 1, 198, 77, 54, 219, 241, 1, 198, 76, 54, 219, 241, 1, 198, 75, + 54, 219, 241, 1, 198, 74, 54, 219, 241, 1, 198, 73, 214, 82, 54, 218, + 221, 1, 137, 208, 98, 214, 82, 54, 218, 221, 1, 130, 208, 98, 214, 82, + 54, 218, 221, 1, 137, 155, 214, 82, 54, 218, 221, 1, 137, 192, 220, 214, + 82, 54, 218, 221, 1, 137, 214, 70, 214, 82, 54, 218, 221, 1, 130, 155, + 214, 82, 54, 218, 221, 1, 130, 192, 220, 214, 82, 54, 218, 221, 1, 130, + 214, 70, 214, 82, 54, 218, 221, 1, 137, 197, 168, 214, 82, 54, 218, 221, + 1, 137, 188, 214, 82, 54, 218, 221, 1, 137, 170, 214, 82, 54, 218, 221, + 1, 130, 197, 168, 214, 82, 54, 218, 221, 1, 130, 188, 214, 82, 54, 218, + 221, 1, 130, 170, 214, 82, 54, 218, 221, 1, 137, 190, 190, 214, 82, 54, + 218, 221, 1, 137, 199, 49, 214, 82, 54, 218, 221, 1, 137, 181, 214, 82, + 54, 218, 221, 1, 130, 190, 190, 214, 82, 54, 218, 221, 1, 130, 199, 49, + 214, 82, 54, 218, 221, 1, 130, 181, 214, 82, 54, 218, 221, 1, 137, 168, + 214, 82, 54, 218, 221, 1, 137, 209, 230, 214, 82, 54, 218, 221, 1, 137, + 174, 214, 82, 54, 218, 221, 1, 130, 168, 214, 82, 54, 218, 221, 1, 130, + 209, 230, 214, 82, 54, 218, 221, 1, 130, 174, 214, 82, 54, 218, 221, 1, + 137, 233, 111, 214, 82, 54, 218, 221, 1, 137, 195, 188, 214, 82, 54, 218, + 221, 1, 137, 173, 214, 82, 54, 218, 221, 1, 130, 233, 111, 214, 82, 54, + 218, 221, 1, 130, 195, 188, 214, 82, 54, 218, 221, 1, 130, 173, 214, 82, + 54, 218, 221, 1, 137, 140, 214, 82, 54, 218, 221, 1, 137, 238, 34, 214, + 82, 54, 218, 221, 1, 137, 249, 155, 214, 82, 54, 218, 221, 1, 130, 140, + 214, 82, 54, 218, 221, 1, 130, 238, 34, 214, 82, 54, 218, 221, 1, 130, + 249, 155, 214, 82, 54, 218, 221, 1, 137, 220, 183, 214, 82, 54, 218, 221, + 1, 137, 192, 185, 214, 82, 54, 218, 221, 1, 130, 220, 183, 214, 82, 54, + 218, 221, 1, 130, 192, 185, 214, 82, 54, 218, 221, 1, 137, 200, 252, 214, + 82, 54, 218, 221, 1, 130, 200, 252, 214, 82, 54, 218, 221, 18, 3, 18, + 203, 29, 214, 82, 54, 218, 221, 18, 3, 252, 208, 214, 82, 54, 218, 221, + 18, 3, 223, 201, 214, 82, 54, 218, 221, 18, 3, 66, 214, 82, 54, 218, 221, + 18, 3, 196, 30, 214, 82, 54, 218, 221, 18, 3, 71, 214, 82, 54, 218, 221, + 18, 3, 252, 27, 214, 82, 54, 218, 221, 18, 3, 74, 214, 82, 54, 218, 221, + 18, 3, 211, 184, 214, 82, 54, 218, 221, 18, 3, 196, 152, 214, 82, 54, + 218, 221, 18, 3, 250, 133, 214, 82, 54, 218, 221, 18, 3, 252, 162, 214, + 82, 54, 218, 221, 18, 3, 196, 21, 214, 82, 54, 218, 221, 18, 3, 210, 244, + 214, 82, 54, 218, 221, 18, 3, 211, 181, 214, 82, 54, 218, 221, 18, 3, + 196, 144, 214, 82, 54, 218, 221, 18, 3, 223, 46, 214, 82, 54, 218, 221, + 1, 53, 196, 12, 214, 82, 54, 218, 221, 1, 53, 214, 72, 214, 82, 54, 218, + 221, 1, 53, 215, 63, 214, 82, 54, 218, 221, 1, 53, 218, 170, 214, 82, 54, + 218, 221, 1, 53, 222, 154, 214, 82, 54, 218, 221, 1, 53, 238, 129, 214, + 82, 54, 218, 221, 1, 53, 250, 122, 214, 82, 54, 218, 221, 163, 217, 57, + 214, 82, 54, 218, 221, 163, 217, 56, 214, 82, 54, 218, 221, 17, 191, 77, + 214, 82, 54, 218, 221, 17, 107, 214, 82, 54, 218, 221, 17, 109, 214, 82, + 54, 218, 221, 17, 138, 214, 82, 54, 218, 221, 17, 134, 214, 82, 54, 218, + 221, 17, 150, 214, 82, 54, 218, 221, 17, 169, 214, 82, 54, 218, 221, 17, + 175, 214, 82, 54, 218, 221, 17, 171, 214, 82, 54, 218, 221, 17, 178, 214, + 82, 54, 218, 221, 128, 17, 107, 214, 82, 54, 218, 221, 3, 220, 109, 214, + 82, 54, 218, 221, 3, 220, 108, 95, 16, 210, 86, 95, 16, 215, 115, 221, + 60, 95, 16, 209, 148, 221, 60, 95, 16, 248, 243, 221, 60, 95, 16, 247, + 239, 221, 60, 95, 16, 208, 248, 221, 60, 95, 16, 208, 242, 221, 60, 95, + 16, 208, 240, 221, 60, 95, 16, 208, 246, 221, 60, 95, 16, 208, 244, 221, + 60, 95, 16, 237, 234, 221, 60, 95, 16, 237, 230, 221, 60, 95, 16, 237, + 229, 221, 60, 95, 16, 237, 232, 221, 60, 95, 16, 237, 231, 221, 60, 95, + 16, 237, 228, 221, 60, 95, 16, 197, 51, 95, 16, 215, 115, 206, 150, 95, + 16, 209, 148, 206, 150, 95, 16, 248, 243, 206, 150, 95, 16, 247, 239, + 206, 150, 95, 16, 208, 248, 206, 150, 95, 16, 208, 242, 206, 150, 95, 16, + 208, 240, 206, 150, 95, 16, 208, 246, 206, 150, 95, 16, 208, 244, 206, + 150, 95, 16, 237, 234, 206, 150, 95, 16, 237, 230, 206, 150, 95, 16, 237, + 229, 206, 150, 95, 16, 237, 232, 206, 150, 95, 16, 237, 231, 206, 150, + 95, 16, 237, 228, 206, 150, 248, 3, 1, 155, 248, 3, 1, 231, 242, 248, 3, + 1, 214, 70, 248, 3, 1, 214, 13, 248, 3, 1, 168, 248, 3, 1, 249, 155, 248, + 3, 1, 174, 248, 3, 1, 215, 168, 248, 3, 1, 190, 190, 248, 3, 1, 238, 34, + 248, 3, 1, 181, 248, 3, 1, 212, 246, 248, 3, 1, 247, 162, 248, 3, 1, 223, + 34, 248, 3, 1, 212, 103, 248, 3, 1, 212, 94, 248, 3, 1, 170, 248, 3, 1, + 165, 248, 3, 1, 173, 248, 3, 1, 195, 188, 248, 3, 1, 188, 248, 3, 1, 65, + 248, 3, 1, 140, 248, 3, 18, 3, 68, 248, 3, 18, 3, 66, 248, 3, 18, 3, 71, + 248, 3, 18, 3, 74, 248, 3, 18, 3, 252, 27, 248, 3, 210, 186, 248, 3, 234, + 97, 79, 205, 54, 54, 128, 1, 137, 155, 54, 128, 1, 137, 221, 217, 54, + 128, 1, 137, 220, 167, 54, 128, 1, 130, 155, 54, 128, 1, 130, 220, 167, + 54, 128, 1, 130, 221, 217, 54, 128, 1, 214, 70, 54, 128, 1, 137, 247, + 162, 54, 128, 1, 137, 247, 3, 54, 128, 1, 130, 247, 162, 54, 128, 1, 130, + 188, 54, 128, 1, 130, 247, 3, 54, 128, 1, 212, 103, 54, 128, 1, 207, 131, + 54, 128, 1, 137, 207, 129, 54, 128, 1, 238, 34, 54, 128, 1, 130, 207, + 129, 54, 128, 1, 207, 140, 54, 128, 1, 137, 190, 190, 54, 128, 1, 137, 199, 49, 54, 128, 1, 130, 190, 190, 54, 128, 1, 130, 199, 49, 54, 128, 1, - 180, 54, 128, 1, 249, 153, 54, 128, 1, 137, 168, 54, 128, 1, 137, 209, - 228, 54, 128, 1, 137, 233, 109, 54, 128, 1, 130, 168, 54, 128, 1, 130, - 233, 109, 54, 128, 1, 130, 209, 228, 54, 128, 1, 174, 54, 128, 1, 130, - 170, 54, 128, 1, 137, 170, 54, 128, 1, 165, 54, 128, 1, 206, 57, 54, 128, - 1, 173, 54, 128, 1, 218, 218, 54, 128, 1, 193, 190, 54, 128, 1, 137, 203, - 165, 54, 128, 1, 137, 201, 175, 54, 128, 1, 137, 188, 54, 128, 1, 137, - 140, 54, 128, 1, 219, 73, 54, 128, 1, 65, 54, 128, 1, 130, 140, 54, 128, - 1, 68, 54, 128, 1, 223, 199, 54, 128, 1, 66, 54, 128, 1, 196, 30, 54, - 128, 1, 234, 188, 54, 128, 1, 211, 87, 54, 128, 1, 220, 107, 54, 128, 1, - 230, 206, 188, 54, 128, 120, 3, 216, 217, 165, 54, 128, 120, 3, 216, 217, - 173, 54, 128, 120, 3, 220, 126, 199, 190, 220, 96, 54, 128, 3, 217, 113, - 222, 84, 220, 96, 54, 128, 120, 3, 53, 214, 68, 54, 128, 120, 3, 130, - 168, 54, 128, 120, 3, 137, 207, 128, 211, 57, 130, 168, 54, 128, 120, 3, - 174, 54, 128, 120, 3, 249, 153, 54, 128, 120, 3, 188, 54, 128, 3, 205, - 172, 54, 128, 18, 3, 65, 54, 128, 18, 3, 217, 113, 205, 122, 54, 128, 18, - 3, 252, 206, 54, 128, 18, 3, 199, 200, 252, 206, 54, 128, 18, 3, 68, 54, - 128, 18, 3, 223, 199, 54, 128, 18, 3, 196, 152, 54, 128, 18, 3, 196, 29, + 181, 54, 128, 1, 249, 155, 54, 128, 1, 137, 168, 54, 128, 1, 137, 209, + 230, 54, 128, 1, 137, 233, 111, 54, 128, 1, 130, 168, 54, 128, 1, 130, + 233, 111, 54, 128, 1, 130, 209, 230, 54, 128, 1, 174, 54, 128, 1, 130, + 170, 54, 128, 1, 137, 170, 54, 128, 1, 165, 54, 128, 1, 206, 58, 54, 128, + 1, 173, 54, 128, 1, 218, 220, 54, 128, 1, 193, 190, 54, 128, 1, 137, 203, + 166, 54, 128, 1, 137, 201, 176, 54, 128, 1, 137, 188, 54, 128, 1, 137, + 140, 54, 128, 1, 219, 75, 54, 128, 1, 65, 54, 128, 1, 130, 140, 54, 128, + 1, 68, 54, 128, 1, 223, 201, 54, 128, 1, 66, 54, 128, 1, 196, 30, 54, + 128, 1, 234, 190, 54, 128, 1, 211, 89, 54, 128, 1, 220, 109, 54, 128, 1, + 230, 208, 188, 54, 128, 120, 3, 216, 219, 165, 54, 128, 120, 3, 216, 219, + 173, 54, 128, 120, 3, 220, 128, 199, 190, 220, 98, 54, 128, 3, 217, 115, + 222, 86, 220, 98, 54, 128, 120, 3, 53, 214, 70, 54, 128, 120, 3, 130, + 168, 54, 128, 120, 3, 137, 207, 130, 211, 59, 130, 168, 54, 128, 120, 3, + 174, 54, 128, 120, 3, 249, 155, 54, 128, 120, 3, 188, 54, 128, 3, 205, + 173, 54, 128, 18, 3, 65, 54, 128, 18, 3, 217, 115, 205, 123, 54, 128, 18, + 3, 252, 208, 54, 128, 18, 3, 199, 200, 252, 208, 54, 128, 18, 3, 68, 54, + 128, 18, 3, 223, 201, 54, 128, 18, 3, 196, 152, 54, 128, 18, 3, 196, 29, 54, 128, 18, 3, 66, 54, 128, 18, 3, 196, 30, 54, 128, 18, 3, 74, 54, 128, - 18, 3, 211, 183, 60, 54, 128, 18, 3, 210, 242, 54, 128, 18, 3, 71, 54, - 128, 18, 3, 252, 25, 54, 128, 18, 3, 211, 87, 54, 128, 18, 3, 251, 236, - 54, 128, 18, 3, 128, 251, 236, 54, 128, 18, 3, 211, 183, 58, 54, 128, 3, - 217, 113, 222, 83, 54, 128, 3, 198, 78, 54, 128, 3, 198, 77, 54, 128, 3, - 221, 171, 198, 76, 54, 128, 3, 221, 171, 198, 75, 54, 128, 3, 221, 171, - 198, 74, 54, 128, 3, 207, 186, 230, 90, 54, 128, 3, 217, 113, 205, 152, - 54, 128, 3, 221, 170, 222, 64, 54, 128, 33, 238, 198, 236, 140, 54, 128, - 228, 243, 17, 191, 77, 54, 128, 228, 243, 17, 107, 54, 128, 228, 243, 17, - 109, 54, 128, 228, 243, 17, 138, 54, 128, 228, 243, 17, 134, 54, 128, - 228, 243, 17, 149, 54, 128, 228, 243, 17, 169, 54, 128, 228, 243, 17, - 175, 54, 128, 228, 243, 17, 171, 54, 128, 228, 243, 17, 178, 54, 128, + 18, 3, 211, 185, 60, 54, 128, 18, 3, 210, 244, 54, 128, 18, 3, 71, 54, + 128, 18, 3, 252, 27, 54, 128, 18, 3, 211, 89, 54, 128, 18, 3, 251, 238, + 54, 128, 18, 3, 128, 251, 238, 54, 128, 18, 3, 211, 185, 58, 54, 128, 3, + 217, 115, 222, 85, 54, 128, 3, 198, 78, 54, 128, 3, 198, 77, 54, 128, 3, + 221, 173, 198, 76, 54, 128, 3, 221, 173, 198, 75, 54, 128, 3, 221, 173, + 198, 74, 54, 128, 3, 207, 188, 230, 92, 54, 128, 3, 217, 115, 205, 153, + 54, 128, 3, 221, 172, 222, 66, 54, 128, 33, 238, 200, 236, 142, 54, 128, + 228, 245, 17, 191, 77, 54, 128, 228, 245, 17, 107, 54, 128, 228, 245, 17, + 109, 54, 128, 228, 245, 17, 138, 54, 128, 228, 245, 17, 134, 54, 128, + 228, 245, 17, 150, 54, 128, 228, 245, 17, 169, 54, 128, 228, 245, 17, + 175, 54, 128, 228, 245, 17, 171, 54, 128, 228, 245, 17, 178, 54, 128, 128, 17, 191, 77, 54, 128, 128, 17, 107, 54, 128, 128, 17, 109, 54, 128, - 128, 17, 138, 54, 128, 128, 17, 134, 54, 128, 128, 17, 149, 54, 128, 128, + 128, 17, 138, 54, 128, 128, 17, 134, 54, 128, 128, 17, 150, 54, 128, 128, 17, 169, 54, 128, 128, 17, 175, 54, 128, 128, 17, 171, 54, 128, 128, 17, - 178, 54, 128, 3, 193, 80, 54, 128, 3, 193, 79, 54, 128, 3, 205, 107, 54, - 128, 3, 221, 246, 54, 128, 3, 228, 170, 54, 128, 3, 236, 157, 54, 128, 3, - 207, 18, 206, 122, 207, 138, 54, 128, 3, 217, 113, 192, 109, 54, 128, 3, - 222, 120, 54, 128, 3, 222, 119, 54, 128, 3, 205, 117, 54, 128, 3, 205, - 116, 54, 128, 3, 230, 26, 54, 128, 3, 247, 157, 33, 235, 128, 243, 2, - 252, 60, 33, 237, 41, 33, 223, 139, 33, 235, 119, 57, 33, 197, 225, 236, - 140, 33, 192, 233, 60, 33, 193, 72, 219, 113, 60, 33, 211, 77, 87, 60, - 33, 55, 211, 77, 87, 60, 33, 156, 247, 23, 201, 28, 60, 33, 201, 14, 247, - 23, 201, 28, 60, 33, 210, 115, 58, 33, 55, 210, 115, 58, 33, 210, 115, - 60, 33, 210, 115, 210, 255, 33, 8, 2, 1, 193, 225, 60, 33, 8, 2, 1, 153, - 193, 225, 60, 33, 45, 210, 114, 93, 219, 224, 33, 50, 210, 114, 93, 183, - 33, 45, 210, 114, 248, 233, 219, 224, 33, 50, 210, 114, 248, 233, 183, - 33, 51, 248, 51, 58, 33, 31, 3, 58, 33, 223, 93, 55, 251, 15, 58, 33, + 178, 54, 128, 3, 193, 80, 54, 128, 3, 193, 79, 54, 128, 3, 205, 108, 54, + 128, 3, 221, 248, 54, 128, 3, 228, 172, 54, 128, 3, 236, 159, 54, 128, 3, + 207, 19, 206, 123, 207, 140, 54, 128, 3, 217, 115, 192, 109, 54, 128, 3, + 222, 122, 54, 128, 3, 222, 121, 54, 128, 3, 205, 118, 54, 128, 3, 205, + 117, 54, 128, 3, 230, 28, 54, 128, 3, 247, 159, 33, 235, 130, 243, 4, + 252, 62, 33, 237, 43, 33, 223, 141, 33, 235, 121, 57, 33, 197, 225, 236, + 142, 33, 192, 233, 60, 33, 193, 72, 219, 115, 60, 33, 211, 79, 87, 60, + 33, 55, 211, 79, 87, 60, 33, 156, 247, 25, 201, 29, 60, 33, 201, 15, 247, + 25, 201, 29, 60, 33, 210, 117, 58, 33, 55, 210, 117, 58, 33, 210, 117, + 60, 33, 210, 117, 211, 1, 33, 8, 2, 1, 193, 225, 60, 33, 8, 2, 1, 154, + 193, 225, 60, 33, 45, 210, 116, 93, 219, 226, 33, 50, 210, 116, 93, 179, + 33, 45, 210, 116, 248, 235, 219, 226, 33, 50, 210, 116, 248, 235, 179, + 33, 51, 248, 53, 58, 33, 31, 3, 58, 33, 223, 95, 55, 251, 17, 58, 33, 108, 3, 58, 33, 55, 108, 3, 58, 33, 55, 108, 3, 60, 33, 197, 225, 252, - 47, 252, 60, 33, 8, 2, 1, 223, 115, 232, 51, 33, 8, 2, 1, 223, 115, 146, - 33, 8, 2, 1, 223, 115, 200, 43, 148, 3, 196, 123, 206, 244, 148, 3, 196, - 123, 247, 121, 148, 3, 247, 38, 148, 3, 200, 173, 148, 3, 248, 155, 148, - 1, 251, 214, 148, 1, 251, 215, 199, 123, 148, 1, 223, 194, 148, 1, 223, - 195, 199, 123, 148, 1, 196, 126, 148, 1, 196, 127, 199, 123, 148, 1, 207, - 186, 207, 51, 148, 1, 207, 186, 207, 52, 199, 123, 148, 1, 220, 126, 219, - 199, 148, 1, 220, 126, 219, 200, 199, 123, 148, 1, 234, 145, 148, 1, 251, - 233, 148, 1, 211, 123, 148, 1, 211, 124, 199, 123, 148, 1, 155, 148, 1, - 222, 142, 217, 116, 148, 1, 231, 240, 148, 1, 231, 241, 230, 241, 148, 1, - 214, 68, 148, 1, 247, 160, 148, 1, 247, 161, 220, 112, 148, 1, 223, 32, - 148, 1, 223, 33, 223, 0, 148, 1, 212, 101, 148, 1, 199, 252, 220, 2, 148, - 1, 199, 252, 215, 108, 217, 116, 148, 1, 238, 33, 215, 108, 251, 162, - 148, 1, 238, 33, 215, 108, 217, 116, 148, 1, 215, 7, 207, 141, 148, 1, - 190, 190, 148, 1, 199, 252, 199, 158, 148, 1, 238, 32, 148, 1, 238, 33, - 217, 138, 148, 1, 180, 148, 1, 168, 148, 1, 210, 221, 222, 76, 148, 1, - 249, 153, 148, 1, 249, 154, 222, 2, 148, 1, 174, 148, 1, 170, 148, 1, - 165, 148, 1, 173, 148, 1, 193, 190, 148, 1, 205, 207, 205, 184, 148, 1, - 205, 207, 205, 129, 148, 1, 188, 148, 1, 140, 148, 3, 207, 41, 148, 18, - 3, 199, 123, 148, 18, 3, 196, 122, 148, 18, 3, 196, 123, 205, 125, 148, - 18, 3, 200, 208, 148, 18, 3, 200, 209, 223, 185, 148, 18, 3, 207, 186, - 207, 51, 148, 18, 3, 207, 186, 207, 52, 199, 123, 148, 18, 3, 220, 126, - 219, 199, 148, 18, 3, 220, 126, 219, 200, 199, 123, 148, 18, 3, 199, 201, - 148, 18, 3, 199, 202, 207, 51, 148, 18, 3, 199, 202, 199, 123, 148, 18, - 3, 199, 202, 207, 52, 199, 123, 148, 18, 3, 210, 16, 148, 18, 3, 210, 17, - 199, 123, 148, 252, 37, 252, 36, 148, 1, 222, 107, 205, 124, 148, 1, 221, - 177, 205, 124, 148, 1, 196, 235, 205, 124, 148, 1, 234, 182, 205, 124, - 148, 1, 195, 154, 205, 124, 148, 1, 191, 109, 205, 124, 148, 1, 250, 185, - 205, 124, 148, 1, 251, 14, 222, 202, 148, 17, 191, 77, 148, 17, 107, 148, - 17, 109, 148, 17, 138, 148, 17, 134, 148, 17, 149, 148, 17, 169, 148, 17, - 175, 148, 17, 171, 148, 17, 178, 148, 210, 145, 148, 210, 175, 148, 193, - 64, 148, 247, 94, 210, 168, 148, 247, 94, 202, 190, 148, 247, 94, 210, - 112, 148, 210, 174, 148, 37, 16, 236, 148, 148, 37, 16, 237, 102, 148, - 37, 16, 235, 71, 148, 37, 16, 237, 236, 148, 37, 16, 237, 237, 200, 173, - 148, 37, 16, 236, 242, 148, 37, 16, 238, 24, 148, 37, 16, 237, 77, 148, - 37, 16, 238, 6, 148, 37, 16, 237, 237, 231, 159, 148, 37, 16, 33, 199, - 116, 148, 37, 16, 33, 234, 92, 148, 37, 16, 33, 221, 253, 148, 37, 16, - 33, 221, 255, 148, 37, 16, 33, 223, 5, 148, 37, 16, 33, 221, 254, 4, 223, - 5, 148, 37, 16, 33, 222, 0, 4, 223, 5, 148, 37, 16, 33, 248, 226, 148, - 37, 16, 33, 230, 247, 148, 37, 16, 206, 206, 211, 77, 235, 82, 148, 37, - 16, 206, 206, 211, 77, 238, 22, 148, 37, 16, 206, 206, 242, 219, 197, 80, - 148, 37, 16, 206, 206, 242, 219, 199, 211, 148, 37, 16, 219, 222, 211, - 77, 210, 160, 148, 37, 16, 219, 222, 211, 77, 208, 149, 148, 37, 16, 219, - 222, 242, 219, 209, 104, 148, 37, 16, 219, 222, 242, 219, 209, 86, 148, - 37, 16, 219, 222, 211, 77, 209, 132, 148, 210, 146, 220, 19, 148, 210, - 176, 220, 19, 200, 197, 3, 210, 142, 200, 197, 3, 210, 156, 200, 197, 3, - 210, 152, 200, 197, 1, 65, 200, 197, 1, 68, 200, 197, 1, 66, 200, 197, 1, - 252, 25, 200, 197, 1, 74, 200, 197, 1, 71, 200, 197, 1, 233, 242, 200, - 197, 1, 155, 200, 197, 1, 208, 96, 200, 197, 1, 231, 240, 200, 197, 1, - 214, 68, 200, 197, 1, 247, 160, 200, 197, 1, 223, 32, 200, 197, 1, 191, - 123, 200, 197, 1, 212, 101, 200, 197, 1, 190, 190, 200, 197, 1, 238, 32, - 200, 197, 1, 180, 200, 197, 1, 168, 200, 197, 1, 233, 109, 200, 197, 1, - 195, 188, 200, 197, 1, 249, 153, 200, 197, 1, 174, 200, 197, 1, 170, 200, + 49, 252, 62, 33, 8, 2, 1, 223, 117, 232, 53, 33, 8, 2, 1, 223, 117, 146, + 33, 8, 2, 1, 223, 117, 200, 43, 149, 3, 196, 123, 206, 245, 149, 3, 196, + 123, 247, 123, 149, 3, 247, 40, 149, 3, 200, 173, 149, 3, 248, 157, 149, + 1, 251, 216, 149, 1, 251, 217, 199, 123, 149, 1, 223, 196, 149, 1, 223, + 197, 199, 123, 149, 1, 196, 126, 149, 1, 196, 127, 199, 123, 149, 1, 207, + 188, 207, 52, 149, 1, 207, 188, 207, 53, 199, 123, 149, 1, 220, 128, 219, + 201, 149, 1, 220, 128, 219, 202, 199, 123, 149, 1, 234, 147, 149, 1, 251, + 235, 149, 1, 211, 125, 149, 1, 211, 126, 199, 123, 149, 1, 155, 149, 1, + 222, 144, 217, 118, 149, 1, 231, 242, 149, 1, 231, 243, 230, 243, 149, 1, + 214, 70, 149, 1, 247, 162, 149, 1, 247, 163, 220, 114, 149, 1, 223, 34, + 149, 1, 223, 35, 223, 2, 149, 1, 212, 103, 149, 1, 199, 252, 220, 4, 149, + 1, 199, 252, 215, 110, 217, 118, 149, 1, 238, 35, 215, 110, 251, 164, + 149, 1, 238, 35, 215, 110, 217, 118, 149, 1, 215, 9, 207, 143, 149, 1, + 190, 190, 149, 1, 199, 252, 199, 158, 149, 1, 238, 34, 149, 1, 238, 35, + 217, 140, 149, 1, 181, 149, 1, 168, 149, 1, 210, 223, 222, 78, 149, 1, + 249, 155, 149, 1, 249, 156, 222, 4, 149, 1, 174, 149, 1, 170, 149, 1, + 165, 149, 1, 173, 149, 1, 193, 190, 149, 1, 205, 208, 205, 185, 149, 1, + 205, 208, 205, 130, 149, 1, 188, 149, 1, 140, 149, 3, 207, 42, 149, 18, + 3, 199, 123, 149, 18, 3, 196, 122, 149, 18, 3, 196, 123, 205, 126, 149, + 18, 3, 200, 208, 149, 18, 3, 200, 209, 223, 187, 149, 18, 3, 207, 188, + 207, 52, 149, 18, 3, 207, 188, 207, 53, 199, 123, 149, 18, 3, 220, 128, + 219, 201, 149, 18, 3, 220, 128, 219, 202, 199, 123, 149, 18, 3, 199, 201, + 149, 18, 3, 199, 202, 207, 52, 149, 18, 3, 199, 202, 199, 123, 149, 18, + 3, 199, 202, 207, 53, 199, 123, 149, 18, 3, 210, 18, 149, 18, 3, 210, 19, + 199, 123, 149, 252, 39, 252, 38, 149, 1, 222, 109, 205, 125, 149, 1, 221, + 179, 205, 125, 149, 1, 196, 235, 205, 125, 149, 1, 234, 184, 205, 125, + 149, 1, 195, 154, 205, 125, 149, 1, 191, 109, 205, 125, 149, 1, 250, 187, + 205, 125, 149, 1, 251, 16, 222, 204, 149, 17, 191, 77, 149, 17, 107, 149, + 17, 109, 149, 17, 138, 149, 17, 134, 149, 17, 150, 149, 17, 169, 149, 17, + 175, 149, 17, 171, 149, 17, 178, 149, 210, 147, 149, 210, 177, 149, 193, + 64, 149, 247, 96, 210, 170, 149, 247, 96, 202, 191, 149, 247, 96, 210, + 114, 149, 210, 176, 149, 37, 16, 236, 150, 149, 37, 16, 237, 104, 149, + 37, 16, 235, 73, 149, 37, 16, 237, 238, 149, 37, 16, 237, 239, 200, 173, + 149, 37, 16, 236, 244, 149, 37, 16, 238, 26, 149, 37, 16, 237, 79, 149, + 37, 16, 238, 8, 149, 37, 16, 237, 239, 231, 161, 149, 37, 16, 33, 199, + 116, 149, 37, 16, 33, 234, 94, 149, 37, 16, 33, 221, 255, 149, 37, 16, + 33, 222, 1, 149, 37, 16, 33, 223, 7, 149, 37, 16, 33, 222, 0, 4, 223, 7, + 149, 37, 16, 33, 222, 2, 4, 223, 7, 149, 37, 16, 33, 248, 228, 149, 37, + 16, 33, 230, 249, 149, 37, 16, 206, 207, 211, 79, 235, 84, 149, 37, 16, + 206, 207, 211, 79, 238, 24, 149, 37, 16, 206, 207, 242, 221, 197, 80, + 149, 37, 16, 206, 207, 242, 221, 199, 211, 149, 37, 16, 219, 224, 211, + 79, 210, 162, 149, 37, 16, 219, 224, 211, 79, 208, 151, 149, 37, 16, 219, + 224, 242, 221, 209, 106, 149, 37, 16, 219, 224, 242, 221, 209, 88, 149, + 37, 16, 219, 224, 211, 79, 209, 134, 149, 210, 148, 220, 21, 149, 210, + 178, 220, 21, 200, 197, 3, 210, 144, 200, 197, 3, 210, 158, 200, 197, 3, + 210, 154, 200, 197, 1, 65, 200, 197, 1, 68, 200, 197, 1, 66, 200, 197, 1, + 252, 27, 200, 197, 1, 74, 200, 197, 1, 71, 200, 197, 1, 233, 244, 200, + 197, 1, 155, 200, 197, 1, 208, 98, 200, 197, 1, 231, 242, 200, 197, 1, + 214, 70, 200, 197, 1, 247, 162, 200, 197, 1, 223, 34, 200, 197, 1, 191, + 123, 200, 197, 1, 212, 103, 200, 197, 1, 190, 190, 200, 197, 1, 238, 34, + 200, 197, 1, 181, 200, 197, 1, 168, 200, 197, 1, 233, 111, 200, 197, 1, + 195, 188, 200, 197, 1, 249, 155, 200, 197, 1, 174, 200, 197, 1, 170, 200, 197, 1, 165, 200, 197, 1, 173, 200, 197, 1, 193, 190, 200, 197, 1, 188, - 200, 197, 1, 192, 220, 200, 197, 1, 140, 200, 197, 120, 3, 210, 172, 200, - 197, 120, 3, 210, 144, 200, 197, 120, 3, 210, 141, 200, 197, 18, 3, 210, - 159, 200, 197, 18, 3, 210, 140, 200, 197, 18, 3, 210, 165, 200, 197, 18, - 3, 210, 151, 200, 197, 18, 3, 210, 173, 200, 197, 18, 3, 210, 161, 200, - 197, 3, 210, 177, 200, 197, 3, 195, 40, 200, 197, 120, 3, 210, 100, 174, - 200, 197, 120, 3, 210, 100, 193, 190, 200, 197, 1, 221, 215, 200, 197, 1, + 200, 197, 1, 192, 220, 200, 197, 1, 140, 200, 197, 120, 3, 210, 174, 200, + 197, 120, 3, 210, 146, 200, 197, 120, 3, 210, 143, 200, 197, 18, 3, 210, + 161, 200, 197, 18, 3, 210, 142, 200, 197, 18, 3, 210, 167, 200, 197, 18, + 3, 210, 153, 200, 197, 18, 3, 210, 175, 200, 197, 18, 3, 210, 163, 200, + 197, 3, 210, 179, 200, 197, 3, 195, 40, 200, 197, 120, 3, 210, 102, 174, + 200, 197, 120, 3, 210, 102, 193, 190, 200, 197, 1, 221, 217, 200, 197, 1, 200, 126, 200, 197, 17, 191, 77, 200, 197, 17, 107, 200, 197, 17, 109, - 200, 197, 17, 138, 200, 197, 17, 134, 200, 197, 17, 149, 200, 197, 17, + 200, 197, 17, 138, 200, 197, 17, 134, 200, 197, 17, 150, 200, 197, 17, 169, 200, 197, 17, 175, 200, 197, 17, 171, 200, 197, 17, 178, 200, 197, - 250, 145, 200, 197, 1, 207, 21, 200, 197, 1, 219, 172, 200, 197, 1, 248, - 203, 200, 197, 1, 53, 222, 152, 200, 197, 1, 53, 218, 168, 249, 63, 1, - 65, 249, 63, 1, 202, 182, 65, 249, 63, 1, 140, 249, 63, 1, 202, 182, 140, - 249, 63, 1, 217, 85, 140, 249, 63, 1, 249, 153, 249, 63, 1, 222, 61, 249, - 153, 249, 63, 1, 168, 249, 63, 1, 202, 182, 168, 249, 63, 1, 180, 249, - 63, 1, 217, 85, 180, 249, 63, 1, 193, 190, 249, 63, 1, 202, 182, 193, - 190, 249, 63, 1, 210, 193, 193, 190, 249, 63, 1, 231, 240, 249, 63, 1, - 202, 182, 231, 240, 249, 63, 1, 223, 32, 249, 63, 1, 238, 32, 249, 63, 1, - 165, 249, 63, 1, 202, 182, 165, 249, 63, 1, 174, 249, 63, 1, 202, 182, - 174, 249, 63, 1, 202, 0, 190, 190, 249, 63, 1, 213, 16, 190, 190, 249, - 63, 1, 188, 249, 63, 1, 202, 182, 188, 249, 63, 1, 217, 85, 188, 249, 63, - 1, 170, 249, 63, 1, 202, 182, 170, 249, 63, 1, 214, 68, 249, 63, 1, 173, - 249, 63, 1, 202, 182, 173, 249, 63, 1, 212, 101, 249, 63, 1, 247, 160, - 249, 63, 1, 214, 162, 249, 63, 1, 217, 11, 249, 63, 1, 68, 249, 63, 1, - 66, 249, 63, 3, 198, 82, 249, 63, 18, 3, 71, 249, 63, 18, 3, 210, 193, - 71, 249, 63, 18, 3, 234, 188, 249, 63, 18, 3, 68, 249, 63, 18, 3, 222, - 61, 68, 249, 63, 18, 3, 74, 249, 63, 18, 3, 222, 61, 74, 249, 63, 18, 3, - 66, 249, 63, 18, 3, 126, 40, 202, 182, 188, 249, 63, 120, 3, 214, 70, - 249, 63, 120, 3, 230, 116, 249, 63, 210, 154, 249, 63, 210, 150, 249, 63, - 16, 248, 165, 215, 7, 216, 163, 249, 63, 16, 248, 165, 209, 138, 249, 63, - 16, 248, 165, 222, 179, 249, 63, 16, 248, 165, 210, 154, 219, 183, 1, - 155, 219, 183, 1, 221, 94, 219, 183, 1, 221, 215, 219, 183, 1, 231, 240, - 219, 183, 1, 231, 19, 219, 183, 1, 214, 68, 219, 183, 1, 247, 160, 219, - 183, 1, 247, 1, 219, 183, 1, 223, 32, 219, 183, 1, 212, 101, 219, 183, 1, - 190, 190, 219, 183, 1, 199, 49, 219, 183, 1, 238, 32, 219, 183, 1, 180, - 219, 183, 1, 168, 219, 183, 1, 209, 110, 219, 183, 1, 209, 228, 219, 183, - 1, 233, 109, 219, 183, 1, 232, 219, 219, 183, 1, 249, 153, 219, 183, 1, - 248, 140, 219, 183, 1, 174, 219, 183, 1, 216, 19, 219, 183, 1, 197, 168, - 219, 183, 1, 197, 157, 219, 183, 1, 235, 35, 219, 183, 1, 170, 219, 183, - 1, 165, 219, 183, 1, 173, 219, 183, 1, 140, 219, 183, 1, 229, 111, 219, - 183, 1, 195, 188, 219, 183, 1, 188, 219, 183, 1, 203, 165, 219, 183, 1, - 193, 190, 219, 183, 1, 65, 219, 183, 200, 239, 1, 170, 219, 183, 200, - 239, 1, 165, 219, 183, 18, 3, 252, 206, 219, 183, 18, 3, 68, 219, 183, - 18, 3, 74, 219, 183, 18, 3, 211, 87, 219, 183, 18, 3, 66, 219, 183, 18, - 3, 196, 30, 219, 183, 18, 3, 71, 219, 183, 120, 3, 222, 152, 219, 183, - 120, 3, 218, 168, 219, 183, 120, 3, 172, 219, 183, 120, 3, 215, 61, 219, - 183, 120, 3, 210, 236, 219, 183, 120, 3, 146, 219, 183, 120, 3, 200, 43, - 219, 183, 120, 3, 212, 73, 219, 183, 120, 3, 222, 83, 219, 183, 3, 207, - 139, 219, 183, 3, 212, 141, 219, 183, 208, 152, 199, 247, 219, 183, 208, - 152, 212, 85, 198, 196, 199, 247, 219, 183, 208, 152, 247, 10, 219, 183, - 208, 152, 197, 149, 247, 10, 219, 183, 208, 152, 197, 148, 219, 183, 17, - 191, 77, 219, 183, 17, 107, 219, 183, 17, 109, 219, 183, 17, 138, 219, - 183, 17, 134, 219, 183, 17, 149, 219, 183, 17, 169, 219, 183, 17, 175, - 219, 183, 17, 171, 219, 183, 17, 178, 219, 183, 1, 197, 132, 219, 183, 1, - 197, 120, 219, 183, 1, 237, 191, 211, 121, 243, 88, 17, 191, 77, 211, - 121, 243, 88, 17, 107, 211, 121, 243, 88, 17, 109, 211, 121, 243, 88, 17, - 138, 211, 121, 243, 88, 17, 134, 211, 121, 243, 88, 17, 149, 211, 121, - 243, 88, 17, 169, 211, 121, 243, 88, 17, 175, 211, 121, 243, 88, 17, 171, - 211, 121, 243, 88, 17, 178, 211, 121, 243, 88, 1, 173, 211, 121, 243, 88, - 1, 250, 182, 211, 121, 243, 88, 1, 251, 253, 211, 121, 243, 88, 1, 251, - 122, 211, 121, 243, 88, 1, 251, 207, 211, 121, 243, 88, 1, 220, 125, 211, - 121, 243, 88, 1, 252, 168, 211, 121, 243, 88, 1, 252, 169, 211, 121, 243, - 88, 1, 252, 167, 211, 121, 243, 88, 1, 252, 161, 211, 121, 243, 88, 1, - 219, 146, 211, 121, 243, 88, 1, 223, 68, 211, 121, 243, 88, 1, 223, 200, - 211, 121, 243, 88, 1, 223, 90, 211, 121, 243, 88, 1, 223, 77, 211, 121, - 243, 88, 1, 218, 225, 211, 121, 243, 88, 1, 196, 160, 211, 121, 243, 88, - 1, 196, 158, 211, 121, 243, 88, 1, 196, 83, 211, 121, 243, 88, 1, 196, - 21, 211, 121, 243, 88, 1, 219, 238, 211, 121, 243, 88, 1, 234, 56, 211, - 121, 243, 88, 1, 234, 191, 211, 121, 243, 88, 1, 234, 103, 211, 121, 243, - 88, 1, 234, 26, 211, 121, 243, 88, 1, 219, 43, 211, 121, 243, 88, 1, 211, - 24, 211, 121, 243, 88, 1, 211, 178, 211, 121, 243, 88, 1, 211, 9, 211, - 121, 243, 88, 1, 211, 136, 211, 121, 243, 88, 215, 156, 197, 97, 211, - 121, 243, 88, 231, 235, 197, 98, 211, 121, 243, 88, 215, 150, 197, 98, - 211, 121, 243, 88, 207, 66, 211, 121, 243, 88, 209, 226, 211, 121, 243, - 88, 251, 244, 211, 121, 243, 88, 208, 152, 215, 146, 211, 121, 243, 88, - 208, 152, 55, 215, 146, 38, 2, 1, 206, 113, 195, 153, 38, 2, 1, 219, 12, - 237, 146, 38, 2, 1, 214, 215, 74, 38, 2, 1, 193, 78, 234, 22, 38, 2, 1, + 250, 147, 200, 197, 1, 207, 22, 200, 197, 1, 219, 174, 200, 197, 1, 248, + 205, 200, 197, 1, 53, 222, 154, 200, 197, 1, 53, 218, 170, 249, 65, 1, + 65, 249, 65, 1, 202, 183, 65, 249, 65, 1, 140, 249, 65, 1, 202, 183, 140, + 249, 65, 1, 217, 87, 140, 249, 65, 1, 249, 155, 249, 65, 1, 222, 63, 249, + 155, 249, 65, 1, 168, 249, 65, 1, 202, 183, 168, 249, 65, 1, 181, 249, + 65, 1, 217, 87, 181, 249, 65, 1, 193, 190, 249, 65, 1, 202, 183, 193, + 190, 249, 65, 1, 210, 195, 193, 190, 249, 65, 1, 231, 242, 249, 65, 1, + 202, 183, 231, 242, 249, 65, 1, 223, 34, 249, 65, 1, 238, 34, 249, 65, 1, + 165, 249, 65, 1, 202, 183, 165, 249, 65, 1, 174, 249, 65, 1, 202, 183, + 174, 249, 65, 1, 202, 1, 190, 190, 249, 65, 1, 213, 18, 190, 190, 249, + 65, 1, 188, 249, 65, 1, 202, 183, 188, 249, 65, 1, 217, 87, 188, 249, 65, + 1, 170, 249, 65, 1, 202, 183, 170, 249, 65, 1, 214, 70, 249, 65, 1, 173, + 249, 65, 1, 202, 183, 173, 249, 65, 1, 212, 103, 249, 65, 1, 247, 162, + 249, 65, 1, 214, 164, 249, 65, 1, 217, 13, 249, 65, 1, 68, 249, 65, 1, + 66, 249, 65, 3, 198, 82, 249, 65, 18, 3, 71, 249, 65, 18, 3, 210, 195, + 71, 249, 65, 18, 3, 234, 190, 249, 65, 18, 3, 68, 249, 65, 18, 3, 222, + 63, 68, 249, 65, 18, 3, 74, 249, 65, 18, 3, 222, 63, 74, 249, 65, 18, 3, + 66, 249, 65, 18, 3, 126, 40, 202, 183, 188, 249, 65, 120, 3, 214, 72, + 249, 65, 120, 3, 230, 118, 249, 65, 210, 156, 249, 65, 210, 152, 249, 65, + 16, 248, 167, 215, 9, 216, 165, 249, 65, 16, 248, 167, 209, 140, 249, 65, + 16, 248, 167, 222, 181, 249, 65, 16, 248, 167, 210, 156, 219, 185, 1, + 155, 219, 185, 1, 221, 96, 219, 185, 1, 221, 217, 219, 185, 1, 231, 242, + 219, 185, 1, 231, 21, 219, 185, 1, 214, 70, 219, 185, 1, 247, 162, 219, + 185, 1, 247, 3, 219, 185, 1, 223, 34, 219, 185, 1, 212, 103, 219, 185, 1, + 190, 190, 219, 185, 1, 199, 49, 219, 185, 1, 238, 34, 219, 185, 1, 181, + 219, 185, 1, 168, 219, 185, 1, 209, 112, 219, 185, 1, 209, 230, 219, 185, + 1, 233, 111, 219, 185, 1, 232, 221, 219, 185, 1, 249, 155, 219, 185, 1, + 248, 142, 219, 185, 1, 174, 219, 185, 1, 216, 21, 219, 185, 1, 197, 168, + 219, 185, 1, 197, 157, 219, 185, 1, 235, 37, 219, 185, 1, 170, 219, 185, + 1, 165, 219, 185, 1, 173, 219, 185, 1, 140, 219, 185, 1, 229, 113, 219, + 185, 1, 195, 188, 219, 185, 1, 188, 219, 185, 1, 203, 166, 219, 185, 1, + 193, 190, 219, 185, 1, 65, 219, 185, 200, 240, 1, 170, 219, 185, 200, + 240, 1, 165, 219, 185, 18, 3, 252, 208, 219, 185, 18, 3, 68, 219, 185, + 18, 3, 74, 219, 185, 18, 3, 211, 89, 219, 185, 18, 3, 66, 219, 185, 18, + 3, 196, 30, 219, 185, 18, 3, 71, 219, 185, 120, 3, 222, 154, 219, 185, + 120, 3, 218, 170, 219, 185, 120, 3, 172, 219, 185, 120, 3, 215, 63, 219, + 185, 120, 3, 210, 238, 219, 185, 120, 3, 146, 219, 185, 120, 3, 200, 43, + 219, 185, 120, 3, 212, 75, 219, 185, 120, 3, 222, 85, 219, 185, 3, 207, + 141, 219, 185, 3, 212, 143, 219, 185, 208, 154, 199, 247, 219, 185, 208, + 154, 212, 87, 198, 196, 199, 247, 219, 185, 208, 154, 247, 12, 219, 185, + 208, 154, 197, 149, 247, 12, 219, 185, 208, 154, 197, 148, 219, 185, 17, + 191, 77, 219, 185, 17, 107, 219, 185, 17, 109, 219, 185, 17, 138, 219, + 185, 17, 134, 219, 185, 17, 150, 219, 185, 17, 169, 219, 185, 17, 175, + 219, 185, 17, 171, 219, 185, 17, 178, 219, 185, 1, 197, 132, 219, 185, 1, + 197, 120, 219, 185, 1, 237, 193, 211, 123, 243, 90, 17, 191, 77, 211, + 123, 243, 90, 17, 107, 211, 123, 243, 90, 17, 109, 211, 123, 243, 90, 17, + 138, 211, 123, 243, 90, 17, 134, 211, 123, 243, 90, 17, 150, 211, 123, + 243, 90, 17, 169, 211, 123, 243, 90, 17, 175, 211, 123, 243, 90, 17, 171, + 211, 123, 243, 90, 17, 178, 211, 123, 243, 90, 1, 173, 211, 123, 243, 90, + 1, 250, 184, 211, 123, 243, 90, 1, 251, 255, 211, 123, 243, 90, 1, 251, + 124, 211, 123, 243, 90, 1, 251, 209, 211, 123, 243, 90, 1, 220, 127, 211, + 123, 243, 90, 1, 252, 170, 211, 123, 243, 90, 1, 252, 171, 211, 123, 243, + 90, 1, 252, 169, 211, 123, 243, 90, 1, 252, 163, 211, 123, 243, 90, 1, + 219, 148, 211, 123, 243, 90, 1, 223, 70, 211, 123, 243, 90, 1, 223, 202, + 211, 123, 243, 90, 1, 223, 92, 211, 123, 243, 90, 1, 223, 79, 211, 123, + 243, 90, 1, 218, 227, 211, 123, 243, 90, 1, 196, 160, 211, 123, 243, 90, + 1, 196, 158, 211, 123, 243, 90, 1, 196, 83, 211, 123, 243, 90, 1, 196, + 21, 211, 123, 243, 90, 1, 219, 240, 211, 123, 243, 90, 1, 234, 58, 211, + 123, 243, 90, 1, 234, 193, 211, 123, 243, 90, 1, 234, 105, 211, 123, 243, + 90, 1, 234, 28, 211, 123, 243, 90, 1, 219, 45, 211, 123, 243, 90, 1, 211, + 26, 211, 123, 243, 90, 1, 211, 180, 211, 123, 243, 90, 1, 211, 11, 211, + 123, 243, 90, 1, 211, 138, 211, 123, 243, 90, 215, 158, 197, 97, 211, + 123, 243, 90, 231, 237, 197, 98, 211, 123, 243, 90, 215, 152, 197, 98, + 211, 123, 243, 90, 207, 67, 211, 123, 243, 90, 209, 228, 211, 123, 243, + 90, 251, 246, 211, 123, 243, 90, 208, 154, 215, 148, 211, 123, 243, 90, + 208, 154, 55, 215, 148, 38, 2, 1, 206, 114, 195, 153, 38, 2, 1, 219, 14, + 237, 148, 38, 2, 1, 214, 217, 74, 38, 2, 1, 193, 78, 234, 24, 38, 2, 1, 199, 200, 199, 145, 38, 2, 1, 198, 221, 199, 145, 38, 2, 1, 199, 200, - 230, 17, 56, 38, 2, 1, 199, 200, 192, 95, 38, 2, 1, 196, 108, 196, 128, - 101, 215, 157, 6, 1, 251, 132, 101, 215, 157, 6, 1, 249, 101, 101, 215, - 157, 6, 1, 231, 210, 101, 215, 157, 6, 1, 236, 150, 101, 215, 157, 6, 1, - 234, 103, 101, 215, 157, 6, 1, 195, 49, 101, 215, 157, 6, 1, 191, 80, - 101, 215, 157, 6, 1, 199, 193, 101, 215, 157, 6, 1, 223, 162, 101, 215, - 157, 6, 1, 222, 87, 101, 215, 157, 6, 1, 220, 7, 101, 215, 157, 6, 1, - 217, 90, 101, 215, 157, 6, 1, 214, 216, 101, 215, 157, 6, 1, 211, 104, - 101, 215, 157, 6, 1, 210, 131, 101, 215, 157, 6, 1, 191, 67, 101, 215, - 157, 6, 1, 207, 163, 101, 215, 157, 6, 1, 205, 142, 101, 215, 157, 6, 1, - 199, 179, 101, 215, 157, 6, 1, 196, 113, 101, 215, 157, 6, 1, 209, 220, - 101, 215, 157, 6, 1, 221, 200, 101, 215, 157, 6, 1, 231, 82, 101, 215, - 157, 6, 1, 208, 81, 101, 215, 157, 6, 1, 203, 69, 101, 215, 157, 6, 1, - 243, 81, 101, 215, 157, 6, 1, 247, 128, 101, 215, 157, 6, 1, 222, 234, - 101, 215, 157, 6, 1, 243, 18, 101, 215, 157, 6, 1, 246, 241, 101, 215, - 157, 6, 1, 192, 218, 101, 215, 157, 6, 1, 222, 249, 101, 215, 157, 6, 1, - 230, 87, 101, 215, 157, 6, 1, 229, 245, 101, 215, 157, 6, 1, 229, 145, - 101, 215, 157, 6, 1, 193, 125, 101, 215, 157, 6, 1, 230, 19, 101, 215, - 157, 6, 1, 229, 11, 101, 215, 157, 6, 1, 233, 23, 101, 215, 157, 6, 1, - 192, 14, 101, 215, 157, 6, 1, 234, 123, 101, 215, 157, 6, 1, 153, 231, - 210, 101, 215, 157, 6, 1, 251, 230, 101, 215, 157, 6, 1, 252, 14, 101, - 215, 157, 6, 1, 230, 17, 56, 101, 215, 157, 6, 1, 220, 116, 56, 200, 197, - 208, 152, 248, 165, 200, 166, 200, 197, 208, 152, 248, 165, 210, 155, - 200, 197, 208, 152, 248, 165, 208, 139, 200, 197, 208, 152, 248, 165, - 247, 145, 200, 197, 208, 152, 248, 165, 219, 173, 205, 121, 200, 197, - 208, 152, 248, 165, 222, 142, 205, 121, 200, 197, 208, 152, 248, 165, - 238, 33, 205, 121, 200, 197, 208, 152, 248, 165, 249, 154, 205, 121, 195, - 150, 163, 222, 57, 195, 150, 163, 203, 130, 195, 150, 163, 208, 225, 195, - 150, 3, 213, 187, 195, 150, 3, 192, 117, 216, 82, 200, 156, 195, 150, - 163, 192, 117, 251, 249, 223, 149, 200, 156, 195, 150, 163, 192, 117, - 223, 149, 200, 156, 195, 150, 163, 192, 117, 222, 45, 223, 149, 200, 156, - 195, 150, 163, 247, 122, 60, 195, 150, 163, 192, 117, 222, 45, 223, 149, - 200, 157, 205, 88, 195, 150, 163, 55, 200, 156, 195, 150, 163, 197, 225, - 200, 156, 195, 150, 163, 222, 45, 251, 73, 195, 150, 163, 75, 60, 195, + 230, 19, 56, 38, 2, 1, 199, 200, 192, 95, 38, 2, 1, 196, 108, 196, 128, + 101, 215, 159, 6, 1, 251, 134, 101, 215, 159, 6, 1, 249, 103, 101, 215, + 159, 6, 1, 231, 212, 101, 215, 159, 6, 1, 236, 152, 101, 215, 159, 6, 1, + 234, 105, 101, 215, 159, 6, 1, 195, 49, 101, 215, 159, 6, 1, 191, 80, + 101, 215, 159, 6, 1, 199, 193, 101, 215, 159, 6, 1, 223, 164, 101, 215, + 159, 6, 1, 222, 89, 101, 215, 159, 6, 1, 220, 9, 101, 215, 159, 6, 1, + 217, 92, 101, 215, 159, 6, 1, 214, 218, 101, 215, 159, 6, 1, 211, 106, + 101, 215, 159, 6, 1, 210, 133, 101, 215, 159, 6, 1, 191, 67, 101, 215, + 159, 6, 1, 207, 165, 101, 215, 159, 6, 1, 205, 143, 101, 215, 159, 6, 1, + 199, 179, 101, 215, 159, 6, 1, 196, 113, 101, 215, 159, 6, 1, 209, 222, + 101, 215, 159, 6, 1, 221, 202, 101, 215, 159, 6, 1, 231, 84, 101, 215, + 159, 6, 1, 208, 83, 101, 215, 159, 6, 1, 203, 70, 101, 215, 159, 6, 1, + 243, 83, 101, 215, 159, 6, 1, 247, 130, 101, 215, 159, 6, 1, 222, 236, + 101, 215, 159, 6, 1, 243, 20, 101, 215, 159, 6, 1, 246, 243, 101, 215, + 159, 6, 1, 192, 218, 101, 215, 159, 6, 1, 222, 251, 101, 215, 159, 6, 1, + 230, 89, 101, 215, 159, 6, 1, 229, 247, 101, 215, 159, 6, 1, 229, 147, + 101, 215, 159, 6, 1, 193, 125, 101, 215, 159, 6, 1, 230, 21, 101, 215, + 159, 6, 1, 229, 13, 101, 215, 159, 6, 1, 233, 25, 101, 215, 159, 6, 1, + 192, 14, 101, 215, 159, 6, 1, 234, 125, 101, 215, 159, 6, 1, 154, 231, + 212, 101, 215, 159, 6, 1, 251, 232, 101, 215, 159, 6, 1, 252, 16, 101, + 215, 159, 6, 1, 230, 19, 56, 101, 215, 159, 6, 1, 220, 118, 56, 200, 197, + 208, 154, 248, 167, 200, 166, 200, 197, 208, 154, 248, 167, 210, 157, + 200, 197, 208, 154, 248, 167, 208, 141, 200, 197, 208, 154, 248, 167, + 247, 147, 200, 197, 208, 154, 248, 167, 219, 175, 205, 122, 200, 197, + 208, 154, 248, 167, 222, 144, 205, 122, 200, 197, 208, 154, 248, 167, + 238, 35, 205, 122, 200, 197, 208, 154, 248, 167, 249, 156, 205, 122, 195, + 150, 163, 222, 59, 195, 150, 163, 203, 131, 195, 150, 163, 208, 227, 195, + 150, 3, 213, 189, 195, 150, 3, 192, 117, 216, 84, 200, 156, 195, 150, + 163, 192, 117, 251, 251, 223, 151, 200, 156, 195, 150, 163, 192, 117, + 223, 151, 200, 156, 195, 150, 163, 192, 117, 222, 47, 223, 151, 200, 156, + 195, 150, 163, 247, 124, 60, 195, 150, 163, 192, 117, 222, 47, 223, 151, + 200, 157, 205, 89, 195, 150, 163, 55, 200, 156, 195, 150, 163, 197, 225, + 200, 156, 195, 150, 163, 222, 47, 251, 75, 195, 150, 163, 75, 60, 195, 150, 163, 105, 185, 60, 195, 150, 163, 115, 185, 60, 195, 150, 163, 206, - 196, 222, 56, 223, 149, 200, 156, 195, 150, 163, 250, 179, 223, 149, 200, + 197, 222, 58, 223, 151, 200, 156, 195, 150, 163, 250, 181, 223, 151, 200, 156, 195, 150, 3, 195, 36, 200, 156, 195, 150, 3, 195, 36, 196, 154, 195, - 150, 3, 207, 18, 195, 36, 196, 154, 195, 150, 3, 195, 36, 251, 73, 195, - 150, 3, 207, 18, 195, 36, 251, 73, 195, 150, 3, 195, 36, 196, 155, 4, - 199, 215, 195, 150, 3, 195, 36, 251, 74, 4, 199, 215, 195, 150, 3, 251, - 72, 251, 88, 195, 150, 3, 251, 72, 249, 120, 195, 150, 3, 251, 72, 195, - 178, 195, 150, 3, 251, 72, 195, 179, 4, 199, 215, 195, 150, 3, 198, 126, - 195, 150, 3, 229, 180, 179, 251, 71, 195, 150, 3, 179, 251, 71, 195, 150, - 3, 206, 70, 179, 251, 71, 195, 150, 3, 251, 72, 196, 162, 215, 136, 195, - 150, 3, 251, 10, 195, 150, 3, 206, 122, 251, 10, 195, 150, 163, 247, 122, - 58, 195, 150, 3, 222, 237, 195, 150, 3, 196, 75, 195, 150, 3, 250, 177, - 195, 150, 163, 206, 189, 58, 195, 150, 163, 55, 206, 189, 58, 195, 150, - 3, 55, 251, 72, 251, 88, 8, 1, 2, 6, 65, 8, 1, 2, 6, 252, 25, 8, 2, 1, - 153, 252, 25, 8, 1, 2, 6, 249, 82, 250, 120, 8, 1, 2, 6, 247, 193, 8, 1, - 2, 6, 238, 127, 8, 1, 2, 6, 233, 248, 8, 1, 2, 6, 71, 8, 2, 1, 153, 211, - 77, 71, 8, 2, 1, 153, 68, 8, 1, 2, 6, 223, 35, 8, 1, 2, 6, 222, 152, 8, - 1, 2, 6, 220, 143, 4, 106, 8, 1, 2, 6, 218, 168, 8, 1, 2, 6, 207, 18, - 215, 61, 8, 1, 2, 6, 74, 8, 1, 2, 6, 211, 77, 74, 8, 2, 1, 202, 206, 74, - 8, 2, 1, 202, 206, 211, 77, 74, 8, 2, 1, 202, 206, 187, 4, 106, 8, 2, 1, - 153, 211, 151, 8, 1, 2, 6, 211, 19, 8, 2, 1, 198, 54, 132, 74, 8, 2, 1, - 248, 77, 132, 74, 8, 1, 2, 6, 210, 236, 8, 1, 2, 6, 207, 18, 146, 8, 1, - 2, 6, 153, 146, 8, 1, 2, 6, 200, 43, 8, 1, 2, 6, 66, 8, 2, 1, 202, 206, - 66, 8, 2, 1, 202, 206, 237, 40, 66, 8, 2, 1, 202, 206, 153, 218, 168, 8, + 150, 3, 207, 19, 195, 36, 196, 154, 195, 150, 3, 195, 36, 251, 75, 195, + 150, 3, 207, 19, 195, 36, 251, 75, 195, 150, 3, 195, 36, 196, 155, 4, + 199, 215, 195, 150, 3, 195, 36, 251, 76, 4, 199, 215, 195, 150, 3, 251, + 74, 251, 90, 195, 150, 3, 251, 74, 249, 122, 195, 150, 3, 251, 74, 195, + 178, 195, 150, 3, 251, 74, 195, 179, 4, 199, 215, 195, 150, 3, 198, 126, + 195, 150, 3, 229, 182, 180, 251, 73, 195, 150, 3, 180, 251, 73, 195, 150, + 3, 206, 71, 180, 251, 73, 195, 150, 3, 251, 74, 196, 162, 215, 138, 195, + 150, 3, 251, 12, 195, 150, 3, 206, 123, 251, 12, 195, 150, 163, 247, 124, + 58, 195, 150, 3, 222, 239, 195, 150, 3, 196, 75, 195, 150, 3, 250, 179, + 195, 150, 163, 206, 190, 58, 195, 150, 163, 55, 206, 190, 58, 195, 150, + 3, 55, 251, 74, 251, 90, 8, 1, 2, 6, 65, 8, 1, 2, 6, 252, 27, 8, 2, 1, + 154, 252, 27, 8, 1, 2, 6, 249, 84, 250, 122, 8, 1, 2, 6, 247, 195, 8, 1, + 2, 6, 238, 129, 8, 1, 2, 6, 233, 250, 8, 1, 2, 6, 71, 8, 2, 1, 154, 211, + 79, 71, 8, 2, 1, 154, 68, 8, 1, 2, 6, 223, 37, 8, 1, 2, 6, 222, 154, 8, + 1, 2, 6, 220, 145, 4, 106, 8, 1, 2, 6, 218, 170, 8, 1, 2, 6, 207, 19, + 215, 63, 8, 1, 2, 6, 74, 8, 1, 2, 6, 211, 79, 74, 8, 2, 1, 202, 207, 74, + 8, 2, 1, 202, 207, 211, 79, 74, 8, 2, 1, 202, 207, 187, 4, 106, 8, 2, 1, + 154, 211, 153, 8, 1, 2, 6, 211, 21, 8, 2, 1, 198, 54, 132, 74, 8, 2, 1, + 248, 79, 132, 74, 8, 1, 2, 6, 210, 238, 8, 1, 2, 6, 207, 19, 146, 8, 1, + 2, 6, 154, 146, 8, 1, 2, 6, 200, 43, 8, 1, 2, 6, 66, 8, 2, 1, 202, 207, + 66, 8, 2, 1, 202, 207, 237, 42, 66, 8, 2, 1, 202, 207, 154, 218, 170, 8, 1, 2, 6, 196, 12, 8, 1, 2, 6, 193, 224, 8, 1, 2, 6, 191, 166, 8, 1, 2, 6, - 233, 178, 8, 1, 195, 20, 220, 8, 201, 216, 8, 1, 251, 230, 35, 1, 2, 6, - 231, 211, 35, 1, 2, 6, 220, 31, 35, 1, 2, 6, 209, 185, 35, 1, 2, 6, 207, - 3, 35, 1, 2, 6, 208, 176, 38, 1, 2, 6, 234, 140, 52, 1, 6, 65, 52, 1, 6, - 252, 25, 52, 1, 6, 250, 120, 52, 1, 6, 249, 82, 250, 120, 52, 1, 6, 238, - 127, 52, 1, 6, 71, 52, 1, 6, 207, 18, 71, 52, 1, 6, 232, 51, 52, 1, 6, - 230, 116, 52, 1, 6, 68, 52, 1, 6, 223, 35, 52, 1, 6, 222, 152, 52, 1, 6, - 172, 52, 1, 6, 218, 168, 52, 1, 6, 215, 61, 52, 1, 6, 207, 18, 215, 61, - 52, 1, 6, 74, 52, 1, 6, 211, 19, 52, 1, 6, 210, 236, 52, 1, 6, 146, 52, + 233, 180, 8, 1, 195, 20, 220, 10, 201, 217, 8, 1, 251, 232, 35, 1, 2, 6, + 231, 213, 35, 1, 2, 6, 220, 33, 35, 1, 2, 6, 209, 187, 35, 1, 2, 6, 207, + 4, 35, 1, 2, 6, 208, 178, 38, 1, 2, 6, 234, 142, 52, 1, 6, 65, 52, 1, 6, + 252, 27, 52, 1, 6, 250, 122, 52, 1, 6, 249, 84, 250, 122, 52, 1, 6, 238, + 129, 52, 1, 6, 71, 52, 1, 6, 207, 19, 71, 52, 1, 6, 232, 53, 52, 1, 6, + 230, 118, 52, 1, 6, 68, 52, 1, 6, 223, 37, 52, 1, 6, 222, 154, 52, 1, 6, + 172, 52, 1, 6, 218, 170, 52, 1, 6, 215, 63, 52, 1, 6, 207, 19, 215, 63, + 52, 1, 6, 74, 52, 1, 6, 211, 21, 52, 1, 6, 210, 238, 52, 1, 6, 146, 52, 1, 6, 200, 43, 52, 1, 6, 66, 52, 1, 6, 193, 224, 52, 1, 2, 65, 52, 1, 2, - 153, 65, 52, 1, 2, 251, 160, 52, 1, 2, 153, 252, 25, 52, 1, 2, 250, 120, - 52, 1, 2, 238, 127, 52, 1, 2, 71, 52, 1, 2, 205, 86, 52, 1, 2, 211, 77, - 71, 52, 1, 2, 153, 211, 77, 71, 52, 1, 2, 232, 51, 52, 1, 2, 153, 68, 52, - 1, 2, 222, 152, 52, 1, 2, 218, 168, 52, 1, 2, 234, 88, 52, 1, 2, 74, 52, - 1, 2, 211, 77, 74, 52, 1, 2, 198, 54, 132, 74, 52, 1, 2, 248, 77, 132, - 74, 52, 1, 2, 210, 236, 52, 1, 2, 200, 43, 52, 1, 2, 66, 52, 1, 2, 202, - 206, 66, 52, 1, 2, 153, 218, 168, 52, 1, 2, 196, 12, 52, 1, 2, 251, 230, - 52, 1, 2, 248, 212, 52, 1, 2, 35, 231, 211, 52, 1, 2, 237, 106, 52, 1, 2, - 35, 209, 211, 52, 1, 2, 243, 95, 8, 200, 230, 2, 1, 68, 8, 200, 230, 2, - 1, 146, 8, 200, 230, 2, 1, 66, 8, 200, 230, 2, 1, 196, 12, 35, 200, 230, - 2, 1, 248, 212, 35, 200, 230, 2, 1, 231, 211, 35, 200, 230, 2, 1, 207, 3, - 35, 200, 230, 2, 1, 209, 211, 35, 200, 230, 2, 1, 243, 95, 8, 2, 1, 196, - 152, 8, 2, 1, 78, 4, 82, 198, 152, 8, 2, 1, 238, 128, 4, 82, 198, 152, 8, - 2, 1, 233, 176, 4, 82, 198, 152, 8, 2, 1, 218, 169, 4, 82, 198, 152, 8, - 2, 1, 215, 62, 4, 82, 198, 152, 8, 2, 1, 210, 237, 4, 82, 198, 152, 8, 2, - 1, 207, 222, 4, 82, 198, 152, 8, 2, 1, 207, 222, 4, 232, 234, 23, 82, - 198, 152, 8, 2, 1, 206, 9, 4, 82, 198, 152, 8, 2, 1, 200, 44, 4, 82, 198, - 152, 8, 2, 1, 191, 167, 4, 82, 198, 152, 8, 2, 1, 153, 232, 51, 52, 1, - 38, 234, 103, 8, 2, 1, 223, 115, 232, 51, 8, 2, 1, 199, 52, 4, 201, 32, - 8, 2, 6, 1, 228, 74, 4, 106, 8, 2, 1, 223, 84, 4, 106, 8, 2, 1, 210, 237, - 4, 106, 8, 2, 6, 1, 126, 4, 106, 8, 2, 1, 196, 71, 4, 106, 8, 2, 1, 78, - 4, 210, 192, 102, 8, 2, 1, 238, 128, 4, 210, 192, 102, 8, 2, 1, 233, 176, - 4, 210, 192, 102, 8, 2, 1, 232, 52, 4, 210, 192, 102, 8, 2, 1, 222, 153, - 4, 210, 192, 102, 8, 2, 1, 220, 143, 4, 210, 192, 102, 8, 2, 1, 218, 169, - 4, 210, 192, 102, 8, 2, 1, 215, 62, 4, 210, 192, 102, 8, 2, 1, 210, 237, - 4, 210, 192, 102, 8, 2, 1, 207, 222, 4, 210, 192, 102, 8, 2, 1, 206, 9, - 4, 210, 192, 102, 8, 2, 1, 234, 13, 4, 210, 192, 102, 8, 2, 1, 196, 13, - 4, 210, 192, 102, 8, 2, 1, 192, 236, 4, 210, 192, 102, 8, 2, 1, 191, 167, - 4, 210, 192, 102, 8, 2, 1, 42, 4, 207, 24, 102, 8, 2, 1, 251, 161, 4, - 207, 24, 102, 8, 2, 1, 238, 128, 4, 228, 251, 23, 199, 215, 8, 2, 1, 235, - 15, 4, 207, 24, 102, 8, 2, 1, 211, 77, 235, 15, 4, 207, 24, 102, 8, 2, 1, - 207, 18, 211, 77, 235, 15, 4, 207, 24, 102, 8, 2, 1, 205, 87, 4, 207, 24, - 102, 8, 2, 1, 228, 74, 4, 207, 24, 102, 8, 2, 1, 211, 77, 187, 4, 207, - 24, 102, 8, 2, 1, 234, 13, 4, 207, 24, 102, 8, 2, 1, 126, 4, 207, 24, - 102, 8, 2, 1, 233, 179, 4, 207, 24, 102, 52, 1, 2, 153, 251, 160, 52, 1, - 2, 247, 193, 52, 1, 2, 247, 194, 4, 238, 175, 52, 1, 2, 233, 248, 52, 1, - 2, 207, 18, 211, 77, 71, 52, 1, 2, 233, 175, 52, 1, 2, 236, 139, 223, 36, - 4, 106, 52, 1, 2, 27, 232, 51, 52, 1, 2, 153, 230, 116, 52, 1, 2, 228, - 74, 4, 106, 52, 1, 2, 223, 83, 52, 1, 2, 6, 68, 52, 1, 2, 6, 228, 74, 4, - 106, 52, 1, 2, 223, 36, 4, 238, 212, 52, 1, 2, 220, 143, 4, 207, 24, 102, - 52, 1, 2, 220, 143, 4, 210, 192, 102, 52, 1, 2, 6, 172, 52, 1, 2, 218, - 169, 4, 102, 52, 1, 2, 153, 218, 169, 4, 179, 219, 212, 52, 1, 2, 215, - 62, 4, 45, 102, 52, 1, 2, 215, 62, 4, 207, 24, 102, 52, 1, 2, 6, 215, 61, - 52, 1, 2, 249, 82, 74, 52, 1, 2, 209, 211, 52, 1, 2, 206, 9, 4, 102, 52, - 1, 2, 234, 12, 52, 1, 2, 200, 44, 4, 210, 192, 102, 52, 1, 2, 126, 164, - 52, 1, 2, 196, 70, 52, 1, 2, 6, 66, 52, 1, 2, 196, 13, 4, 102, 52, 1, 2, - 153, 196, 12, 52, 1, 2, 191, 166, 52, 1, 2, 191, 167, 4, 207, 24, 102, - 52, 1, 2, 191, 167, 4, 238, 175, 52, 1, 2, 233, 178, 52, 1, 2, 199, 15, - 33, 235, 138, 230, 211, 252, 60, 33, 235, 138, 252, 47, 252, 60, 33, 202, - 59, 60, 33, 200, 164, 77, 33, 217, 145, 33, 230, 208, 33, 217, 143, 33, - 252, 44, 33, 230, 209, 33, 252, 45, 33, 8, 2, 1, 207, 222, 60, 33, 248, - 35, 33, 217, 144, 33, 55, 243, 2, 58, 33, 211, 139, 58, 33, 191, 21, 60, - 33, 223, 69, 60, 33, 196, 63, 58, 33, 196, 46, 58, 33, 8, 2, 1, 232, 203, - 211, 77, 42, 58, 33, 8, 2, 1, 252, 25, 33, 8, 2, 1, 251, 68, 33, 8, 2, 1, - 250, 146, 33, 8, 2, 1, 247, 194, 247, 35, 33, 8, 2, 1, 223, 115, 238, - 127, 33, 8, 2, 1, 233, 248, 33, 8, 2, 1, 232, 51, 33, 8, 1, 2, 6, 232, - 51, 33, 8, 2, 1, 222, 152, 33, 8, 2, 1, 172, 33, 8, 1, 2, 6, 172, 33, 8, - 1, 2, 6, 218, 168, 33, 8, 2, 1, 215, 61, 33, 8, 1, 2, 6, 215, 61, 33, 8, - 1, 2, 6, 146, 33, 8, 2, 1, 207, 222, 206, 116, 33, 8, 2, 1, 206, 8, 33, - 8, 2, 1, 179, 206, 8, 33, 8, 2, 1, 191, 166, 33, 8, 2, 1, 251, 160, 33, - 8, 2, 1, 250, 120, 33, 8, 2, 1, 248, 212, 33, 8, 2, 1, 205, 86, 33, 8, 2, - 1, 233, 175, 33, 8, 2, 1, 220, 143, 4, 55, 82, 198, 152, 33, 8, 2, 1, - 187, 4, 156, 247, 23, 106, 33, 8, 2, 1, 210, 236, 33, 8, 2, 1, 234, 12, - 33, 8, 2, 1, 126, 4, 156, 247, 23, 106, 33, 8, 2, 1, 193, 224, 33, 8, 2, - 1, 42, 4, 237, 42, 33, 8, 2, 1, 187, 4, 237, 42, 33, 8, 2, 1, 126, 4, - 237, 42, 33, 133, 199, 229, 58, 33, 222, 36, 93, 183, 33, 222, 36, 93, - 219, 224, 33, 75, 93, 219, 224, 33, 193, 78, 223, 93, 248, 29, 60, 33, - 75, 248, 233, 219, 224, 33, 237, 115, 77, 33, 55, 223, 93, 248, 37, 60, - 33, 251, 165, 234, 45, 119, 60, 33, 45, 250, 236, 58, 33, 50, 250, 236, - 23, 144, 250, 236, 60, 8, 6, 1, 42, 4, 206, 189, 60, 8, 2, 1, 42, 4, 206, - 189, 60, 8, 6, 1, 78, 4, 75, 58, 8, 2, 1, 78, 4, 75, 58, 8, 6, 1, 78, 4, - 75, 60, 8, 2, 1, 78, 4, 75, 60, 8, 6, 1, 78, 4, 219, 113, 60, 8, 2, 1, - 78, 4, 219, 113, 60, 8, 6, 1, 247, 194, 4, 247, 36, 23, 252, 46, 8, 2, 1, - 247, 194, 4, 247, 36, 23, 252, 46, 8, 6, 1, 238, 128, 4, 75, 58, 8, 2, 1, - 238, 128, 4, 75, 58, 8, 6, 1, 238, 128, 4, 75, 60, 8, 2, 1, 238, 128, 4, - 75, 60, 8, 6, 1, 238, 128, 4, 219, 113, 60, 8, 2, 1, 238, 128, 4, 219, - 113, 60, 8, 6, 1, 238, 128, 4, 247, 35, 8, 2, 1, 238, 128, 4, 247, 35, 8, - 6, 1, 238, 128, 4, 243, 2, 60, 8, 2, 1, 238, 128, 4, 243, 2, 60, 8, 6, 1, - 235, 15, 4, 217, 147, 23, 230, 210, 8, 2, 1, 235, 15, 4, 217, 147, 23, - 230, 210, 8, 6, 1, 235, 15, 4, 217, 147, 23, 252, 46, 8, 2, 1, 235, 15, - 4, 217, 147, 23, 252, 46, 8, 6, 1, 235, 15, 4, 243, 2, 60, 8, 2, 1, 235, - 15, 4, 243, 2, 60, 8, 6, 1, 235, 15, 4, 198, 153, 60, 8, 2, 1, 235, 15, - 4, 198, 153, 60, 8, 6, 1, 235, 15, 4, 247, 36, 23, 248, 36, 8, 2, 1, 235, - 15, 4, 247, 36, 23, 248, 36, 8, 6, 1, 233, 176, 4, 75, 58, 8, 2, 1, 233, - 176, 4, 75, 58, 8, 6, 1, 232, 52, 4, 217, 146, 8, 2, 1, 232, 52, 4, 217, - 146, 8, 6, 1, 230, 117, 4, 75, 58, 8, 2, 1, 230, 117, 4, 75, 58, 8, 6, 1, - 230, 117, 4, 75, 60, 8, 2, 1, 230, 117, 4, 75, 60, 8, 6, 1, 230, 117, 4, - 237, 42, 8, 2, 1, 230, 117, 4, 237, 42, 8, 6, 1, 230, 117, 4, 247, 35, 8, - 2, 1, 230, 117, 4, 247, 35, 8, 6, 1, 230, 117, 4, 248, 37, 60, 8, 2, 1, - 230, 117, 4, 248, 37, 60, 8, 6, 1, 228, 74, 4, 198, 153, 60, 8, 2, 1, - 228, 74, 4, 198, 153, 60, 8, 6, 1, 228, 74, 4, 237, 43, 23, 252, 46, 8, - 2, 1, 228, 74, 4, 237, 43, 23, 252, 46, 8, 6, 1, 222, 153, 4, 252, 46, 8, - 2, 1, 222, 153, 4, 252, 46, 8, 6, 1, 222, 153, 4, 75, 60, 8, 2, 1, 222, - 153, 4, 75, 60, 8, 6, 1, 222, 153, 4, 219, 113, 60, 8, 2, 1, 222, 153, 4, - 219, 113, 60, 8, 6, 1, 220, 143, 4, 75, 60, 8, 2, 1, 220, 143, 4, 75, 60, - 8, 6, 1, 220, 143, 4, 75, 248, 233, 23, 217, 146, 8, 2, 1, 220, 143, 4, - 75, 248, 233, 23, 217, 146, 8, 6, 1, 220, 143, 4, 219, 113, 60, 8, 2, 1, - 220, 143, 4, 219, 113, 60, 8, 6, 1, 220, 143, 4, 243, 2, 60, 8, 2, 1, - 220, 143, 4, 243, 2, 60, 8, 6, 1, 218, 169, 4, 252, 46, 8, 2, 1, 218, - 169, 4, 252, 46, 8, 6, 1, 218, 169, 4, 75, 58, 8, 2, 1, 218, 169, 4, 75, - 58, 8, 6, 1, 218, 169, 4, 75, 60, 8, 2, 1, 218, 169, 4, 75, 60, 8, 6, 1, - 215, 62, 4, 75, 58, 8, 2, 1, 215, 62, 4, 75, 58, 8, 6, 1, 215, 62, 4, 75, - 60, 8, 2, 1, 215, 62, 4, 75, 60, 8, 6, 1, 215, 62, 4, 219, 113, 60, 8, 2, - 1, 215, 62, 4, 219, 113, 60, 8, 6, 1, 215, 62, 4, 243, 2, 60, 8, 2, 1, - 215, 62, 4, 243, 2, 60, 8, 6, 1, 187, 4, 198, 153, 23, 252, 46, 8, 2, 1, - 187, 4, 198, 153, 23, 252, 46, 8, 6, 1, 187, 4, 198, 153, 23, 237, 42, 8, - 2, 1, 187, 4, 198, 153, 23, 237, 42, 8, 6, 1, 187, 4, 217, 147, 23, 230, - 210, 8, 2, 1, 187, 4, 217, 147, 23, 230, 210, 8, 6, 1, 187, 4, 217, 147, - 23, 252, 46, 8, 2, 1, 187, 4, 217, 147, 23, 252, 46, 8, 6, 1, 210, 237, - 4, 252, 46, 8, 2, 1, 210, 237, 4, 252, 46, 8, 6, 1, 210, 237, 4, 75, 58, - 8, 2, 1, 210, 237, 4, 75, 58, 8, 6, 1, 207, 222, 4, 75, 58, 8, 2, 1, 207, - 222, 4, 75, 58, 8, 6, 1, 207, 222, 4, 75, 60, 8, 2, 1, 207, 222, 4, 75, - 60, 8, 6, 1, 207, 222, 4, 75, 248, 233, 23, 217, 146, 8, 2, 1, 207, 222, - 4, 75, 248, 233, 23, 217, 146, 8, 6, 1, 207, 222, 4, 219, 113, 60, 8, 2, - 1, 207, 222, 4, 219, 113, 60, 8, 6, 1, 206, 9, 4, 75, 58, 8, 2, 1, 206, - 9, 4, 75, 58, 8, 6, 1, 206, 9, 4, 75, 60, 8, 2, 1, 206, 9, 4, 75, 60, 8, - 6, 1, 206, 9, 4, 252, 47, 23, 75, 58, 8, 2, 1, 206, 9, 4, 252, 47, 23, - 75, 58, 8, 6, 1, 206, 9, 4, 247, 93, 23, 75, 58, 8, 2, 1, 206, 9, 4, 247, - 93, 23, 75, 58, 8, 6, 1, 206, 9, 4, 75, 248, 233, 23, 75, 58, 8, 2, 1, - 206, 9, 4, 75, 248, 233, 23, 75, 58, 8, 6, 1, 200, 44, 4, 75, 58, 8, 2, - 1, 200, 44, 4, 75, 58, 8, 6, 1, 200, 44, 4, 75, 60, 8, 2, 1, 200, 44, 4, - 75, 60, 8, 6, 1, 200, 44, 4, 219, 113, 60, 8, 2, 1, 200, 44, 4, 219, 113, - 60, 8, 6, 1, 200, 44, 4, 243, 2, 60, 8, 2, 1, 200, 44, 4, 243, 2, 60, 8, - 6, 1, 126, 4, 237, 43, 60, 8, 2, 1, 126, 4, 237, 43, 60, 8, 6, 1, 126, 4, - 198, 153, 60, 8, 2, 1, 126, 4, 198, 153, 60, 8, 6, 1, 126, 4, 243, 2, 60, - 8, 2, 1, 126, 4, 243, 2, 60, 8, 6, 1, 126, 4, 198, 153, 23, 252, 46, 8, - 2, 1, 126, 4, 198, 153, 23, 252, 46, 8, 6, 1, 126, 4, 217, 147, 23, 237, - 42, 8, 2, 1, 126, 4, 217, 147, 23, 237, 42, 8, 6, 1, 196, 13, 4, 198, - 152, 8, 2, 1, 196, 13, 4, 198, 152, 8, 6, 1, 196, 13, 4, 75, 60, 8, 2, 1, - 196, 13, 4, 75, 60, 8, 6, 1, 193, 225, 4, 230, 210, 8, 2, 1, 193, 225, 4, - 230, 210, 8, 6, 1, 193, 225, 4, 252, 46, 8, 2, 1, 193, 225, 4, 252, 46, - 8, 6, 1, 193, 225, 4, 237, 42, 8, 2, 1, 193, 225, 4, 237, 42, 8, 6, 1, - 193, 225, 4, 75, 58, 8, 2, 1, 193, 225, 4, 75, 58, 8, 6, 1, 193, 225, 4, - 75, 60, 8, 2, 1, 193, 225, 4, 75, 60, 8, 6, 1, 192, 236, 4, 75, 58, 8, 2, - 1, 192, 236, 4, 75, 58, 8, 6, 1, 192, 236, 4, 237, 42, 8, 2, 1, 192, 236, - 4, 237, 42, 8, 6, 1, 192, 160, 4, 75, 58, 8, 2, 1, 192, 160, 4, 75, 58, - 8, 6, 1, 191, 167, 4, 243, 1, 8, 2, 1, 191, 167, 4, 243, 1, 8, 6, 1, 191, - 167, 4, 75, 60, 8, 2, 1, 191, 167, 4, 75, 60, 8, 6, 1, 191, 167, 4, 219, - 113, 60, 8, 2, 1, 191, 167, 4, 219, 113, 60, 8, 2, 1, 230, 117, 4, 219, - 113, 60, 8, 2, 1, 200, 44, 4, 237, 42, 8, 2, 1, 193, 225, 4, 206, 189, - 58, 8, 2, 1, 192, 160, 4, 206, 189, 58, 8, 2, 1, 42, 4, 50, 132, 206, - 188, 8, 2, 1, 179, 206, 9, 4, 75, 58, 8, 2, 1, 179, 206, 9, 4, 237, 39, - 106, 8, 2, 1, 179, 206, 9, 4, 137, 106, 8, 6, 1, 203, 127, 206, 8, 8, 2, - 1, 237, 106, 8, 6, 1, 42, 4, 75, 60, 8, 2, 1, 42, 4, 75, 60, 8, 6, 1, 42, - 4, 228, 251, 58, 8, 2, 1, 42, 4, 228, 251, 58, 8, 6, 1, 42, 4, 243, 2, - 23, 252, 46, 8, 2, 1, 42, 4, 243, 2, 23, 252, 46, 8, 6, 1, 42, 4, 243, 2, - 23, 230, 210, 8, 2, 1, 42, 4, 243, 2, 23, 230, 210, 8, 6, 1, 42, 4, 243, - 2, 23, 228, 251, 58, 8, 2, 1, 42, 4, 243, 2, 23, 228, 251, 58, 8, 6, 1, - 42, 4, 243, 2, 23, 198, 152, 8, 2, 1, 42, 4, 243, 2, 23, 198, 152, 8, 6, - 1, 42, 4, 243, 2, 23, 75, 60, 8, 2, 1, 42, 4, 243, 2, 23, 75, 60, 8, 6, - 1, 42, 4, 248, 37, 23, 252, 46, 8, 2, 1, 42, 4, 248, 37, 23, 252, 46, 8, - 6, 1, 42, 4, 248, 37, 23, 230, 210, 8, 2, 1, 42, 4, 248, 37, 23, 230, - 210, 8, 6, 1, 42, 4, 248, 37, 23, 228, 251, 58, 8, 2, 1, 42, 4, 248, 37, - 23, 228, 251, 58, 8, 6, 1, 42, 4, 248, 37, 23, 198, 152, 8, 2, 1, 42, 4, - 248, 37, 23, 198, 152, 8, 6, 1, 42, 4, 248, 37, 23, 75, 60, 8, 2, 1, 42, - 4, 248, 37, 23, 75, 60, 8, 6, 1, 235, 15, 4, 75, 60, 8, 2, 1, 235, 15, 4, - 75, 60, 8, 6, 1, 235, 15, 4, 228, 251, 58, 8, 2, 1, 235, 15, 4, 228, 251, - 58, 8, 6, 1, 235, 15, 4, 198, 152, 8, 2, 1, 235, 15, 4, 198, 152, 8, 6, - 1, 235, 15, 4, 243, 2, 23, 252, 46, 8, 2, 1, 235, 15, 4, 243, 2, 23, 252, - 46, 8, 6, 1, 235, 15, 4, 243, 2, 23, 230, 210, 8, 2, 1, 235, 15, 4, 243, - 2, 23, 230, 210, 8, 6, 1, 235, 15, 4, 243, 2, 23, 228, 251, 58, 8, 2, 1, - 235, 15, 4, 243, 2, 23, 228, 251, 58, 8, 6, 1, 235, 15, 4, 243, 2, 23, - 198, 152, 8, 2, 1, 235, 15, 4, 243, 2, 23, 198, 152, 8, 6, 1, 235, 15, 4, - 243, 2, 23, 75, 60, 8, 2, 1, 235, 15, 4, 243, 2, 23, 75, 60, 8, 6, 1, - 228, 74, 4, 228, 251, 58, 8, 2, 1, 228, 74, 4, 228, 251, 58, 8, 6, 1, - 228, 74, 4, 75, 60, 8, 2, 1, 228, 74, 4, 75, 60, 8, 6, 1, 187, 4, 75, 60, - 8, 2, 1, 187, 4, 75, 60, 8, 6, 1, 187, 4, 228, 251, 58, 8, 2, 1, 187, 4, - 228, 251, 58, 8, 6, 1, 187, 4, 243, 2, 23, 252, 46, 8, 2, 1, 187, 4, 243, - 2, 23, 252, 46, 8, 6, 1, 187, 4, 243, 2, 23, 230, 210, 8, 2, 1, 187, 4, - 243, 2, 23, 230, 210, 8, 6, 1, 187, 4, 243, 2, 23, 228, 251, 58, 8, 2, 1, - 187, 4, 243, 2, 23, 228, 251, 58, 8, 6, 1, 187, 4, 243, 2, 23, 198, 152, - 8, 2, 1, 187, 4, 243, 2, 23, 198, 152, 8, 6, 1, 187, 4, 243, 2, 23, 75, - 60, 8, 2, 1, 187, 4, 243, 2, 23, 75, 60, 8, 6, 1, 187, 4, 228, 188, 23, - 252, 46, 8, 2, 1, 187, 4, 228, 188, 23, 252, 46, 8, 6, 1, 187, 4, 228, - 188, 23, 230, 210, 8, 2, 1, 187, 4, 228, 188, 23, 230, 210, 8, 6, 1, 187, - 4, 228, 188, 23, 228, 251, 58, 8, 2, 1, 187, 4, 228, 188, 23, 228, 251, - 58, 8, 6, 1, 187, 4, 228, 188, 23, 198, 152, 8, 2, 1, 187, 4, 228, 188, - 23, 198, 152, 8, 6, 1, 187, 4, 228, 188, 23, 75, 60, 8, 2, 1, 187, 4, - 228, 188, 23, 75, 60, 8, 6, 1, 126, 4, 75, 60, 8, 2, 1, 126, 4, 75, 60, - 8, 6, 1, 126, 4, 228, 251, 58, 8, 2, 1, 126, 4, 228, 251, 58, 8, 6, 1, - 126, 4, 228, 188, 23, 252, 46, 8, 2, 1, 126, 4, 228, 188, 23, 252, 46, 8, - 6, 1, 126, 4, 228, 188, 23, 230, 210, 8, 2, 1, 126, 4, 228, 188, 23, 230, - 210, 8, 6, 1, 126, 4, 228, 188, 23, 228, 251, 58, 8, 2, 1, 126, 4, 228, - 188, 23, 228, 251, 58, 8, 6, 1, 126, 4, 228, 188, 23, 198, 152, 8, 2, 1, - 126, 4, 228, 188, 23, 198, 152, 8, 6, 1, 126, 4, 228, 188, 23, 75, 60, 8, - 2, 1, 126, 4, 228, 188, 23, 75, 60, 8, 6, 1, 192, 160, 4, 230, 210, 8, 2, - 1, 192, 160, 4, 230, 210, 8, 6, 1, 192, 160, 4, 75, 60, 8, 2, 1, 192, - 160, 4, 75, 60, 8, 6, 1, 192, 160, 4, 228, 251, 58, 8, 2, 1, 192, 160, 4, - 228, 251, 58, 8, 6, 1, 192, 160, 4, 198, 152, 8, 2, 1, 192, 160, 4, 198, - 152, 8, 6, 1, 216, 83, 219, 74, 8, 2, 1, 216, 83, 219, 74, 8, 6, 1, 216, - 83, 196, 12, 8, 2, 1, 216, 83, 196, 12, 8, 6, 1, 192, 160, 4, 219, 4, 8, - 2, 1, 192, 160, 4, 219, 4, 35, 2, 1, 251, 161, 4, 208, 169, 35, 2, 1, - 251, 161, 4, 237, 212, 35, 2, 1, 251, 161, 4, 208, 170, 23, 195, 169, 35, - 2, 1, 251, 161, 4, 237, 213, 23, 195, 169, 35, 2, 1, 251, 161, 4, 208, - 170, 23, 210, 243, 35, 2, 1, 251, 161, 4, 237, 213, 23, 210, 243, 35, 2, - 1, 251, 161, 4, 208, 170, 23, 210, 4, 35, 2, 1, 251, 161, 4, 237, 213, - 23, 210, 4, 35, 6, 1, 251, 161, 4, 208, 169, 35, 6, 1, 251, 161, 4, 237, - 212, 35, 6, 1, 251, 161, 4, 208, 170, 23, 195, 169, 35, 6, 1, 251, 161, - 4, 237, 213, 23, 195, 169, 35, 6, 1, 251, 161, 4, 208, 170, 23, 210, 243, - 35, 6, 1, 251, 161, 4, 237, 213, 23, 210, 243, 35, 6, 1, 251, 161, 4, - 208, 170, 23, 210, 4, 35, 6, 1, 251, 161, 4, 237, 213, 23, 210, 4, 35, 2, - 1, 234, 48, 4, 208, 169, 35, 2, 1, 234, 48, 4, 237, 212, 35, 2, 1, 234, - 48, 4, 208, 170, 23, 195, 169, 35, 2, 1, 234, 48, 4, 237, 213, 23, 195, - 169, 35, 2, 1, 234, 48, 4, 208, 170, 23, 210, 243, 35, 2, 1, 234, 48, 4, - 237, 213, 23, 210, 243, 35, 6, 1, 234, 48, 4, 208, 169, 35, 6, 1, 234, - 48, 4, 237, 212, 35, 6, 1, 234, 48, 4, 208, 170, 23, 195, 169, 35, 6, 1, - 234, 48, 4, 237, 213, 23, 195, 169, 35, 6, 1, 234, 48, 4, 208, 170, 23, - 210, 243, 35, 6, 1, 234, 48, 4, 237, 213, 23, 210, 243, 35, 2, 1, 233, - 254, 4, 208, 169, 35, 2, 1, 233, 254, 4, 237, 212, 35, 2, 1, 233, 254, 4, - 208, 170, 23, 195, 169, 35, 2, 1, 233, 254, 4, 237, 213, 23, 195, 169, - 35, 2, 1, 233, 254, 4, 208, 170, 23, 210, 243, 35, 2, 1, 233, 254, 4, - 237, 213, 23, 210, 243, 35, 2, 1, 233, 254, 4, 208, 170, 23, 210, 4, 35, - 2, 1, 233, 254, 4, 237, 213, 23, 210, 4, 35, 6, 1, 233, 254, 4, 208, 169, - 35, 6, 1, 233, 254, 4, 237, 212, 35, 6, 1, 233, 254, 4, 208, 170, 23, - 195, 169, 35, 6, 1, 233, 254, 4, 237, 213, 23, 195, 169, 35, 6, 1, 233, - 254, 4, 208, 170, 23, 210, 243, 35, 6, 1, 233, 254, 4, 237, 213, 23, 210, - 243, 35, 6, 1, 233, 254, 4, 208, 170, 23, 210, 4, 35, 6, 1, 233, 254, 4, - 237, 213, 23, 210, 4, 35, 2, 1, 223, 84, 4, 208, 169, 35, 2, 1, 223, 84, - 4, 237, 212, 35, 2, 1, 223, 84, 4, 208, 170, 23, 195, 169, 35, 2, 1, 223, - 84, 4, 237, 213, 23, 195, 169, 35, 2, 1, 223, 84, 4, 208, 170, 23, 210, - 243, 35, 2, 1, 223, 84, 4, 237, 213, 23, 210, 243, 35, 2, 1, 223, 84, 4, - 208, 170, 23, 210, 4, 35, 2, 1, 223, 84, 4, 237, 213, 23, 210, 4, 35, 6, - 1, 223, 84, 4, 208, 169, 35, 6, 1, 223, 84, 4, 237, 212, 35, 6, 1, 223, - 84, 4, 208, 170, 23, 195, 169, 35, 6, 1, 223, 84, 4, 237, 213, 23, 195, - 169, 35, 6, 1, 223, 84, 4, 208, 170, 23, 210, 243, 35, 6, 1, 223, 84, 4, - 237, 213, 23, 210, 243, 35, 6, 1, 223, 84, 4, 208, 170, 23, 210, 4, 35, - 6, 1, 223, 84, 4, 237, 213, 23, 210, 4, 35, 2, 1, 211, 108, 4, 208, 169, - 35, 2, 1, 211, 108, 4, 237, 212, 35, 2, 1, 211, 108, 4, 208, 170, 23, - 195, 169, 35, 2, 1, 211, 108, 4, 237, 213, 23, 195, 169, 35, 2, 1, 211, - 108, 4, 208, 170, 23, 210, 243, 35, 2, 1, 211, 108, 4, 237, 213, 23, 210, - 243, 35, 6, 1, 211, 108, 4, 208, 169, 35, 6, 1, 211, 108, 4, 237, 212, - 35, 6, 1, 211, 108, 4, 208, 170, 23, 195, 169, 35, 6, 1, 211, 108, 4, - 237, 213, 23, 195, 169, 35, 6, 1, 211, 108, 4, 208, 170, 23, 210, 243, - 35, 6, 1, 211, 108, 4, 237, 213, 23, 210, 243, 35, 2, 1, 196, 71, 4, 208, - 169, 35, 2, 1, 196, 71, 4, 237, 212, 35, 2, 1, 196, 71, 4, 208, 170, 23, - 195, 169, 35, 2, 1, 196, 71, 4, 237, 213, 23, 195, 169, 35, 2, 1, 196, - 71, 4, 208, 170, 23, 210, 243, 35, 2, 1, 196, 71, 4, 237, 213, 23, 210, - 243, 35, 2, 1, 196, 71, 4, 208, 170, 23, 210, 4, 35, 2, 1, 196, 71, 4, - 237, 213, 23, 210, 4, 35, 6, 1, 196, 71, 4, 237, 212, 35, 6, 1, 196, 71, - 4, 237, 213, 23, 195, 169, 35, 6, 1, 196, 71, 4, 237, 213, 23, 210, 243, - 35, 6, 1, 196, 71, 4, 237, 213, 23, 210, 4, 35, 2, 1, 211, 111, 4, 208, - 169, 35, 2, 1, 211, 111, 4, 237, 212, 35, 2, 1, 211, 111, 4, 208, 170, - 23, 195, 169, 35, 2, 1, 211, 111, 4, 237, 213, 23, 195, 169, 35, 2, 1, - 211, 111, 4, 208, 170, 23, 210, 243, 35, 2, 1, 211, 111, 4, 237, 213, 23, - 210, 243, 35, 2, 1, 211, 111, 4, 208, 170, 23, 210, 4, 35, 2, 1, 211, - 111, 4, 237, 213, 23, 210, 4, 35, 6, 1, 211, 111, 4, 208, 169, 35, 6, 1, - 211, 111, 4, 237, 212, 35, 6, 1, 211, 111, 4, 208, 170, 23, 195, 169, 35, - 6, 1, 211, 111, 4, 237, 213, 23, 195, 169, 35, 6, 1, 211, 111, 4, 208, - 170, 23, 210, 243, 35, 6, 1, 211, 111, 4, 237, 213, 23, 210, 243, 35, 6, - 1, 211, 111, 4, 208, 170, 23, 210, 4, 35, 6, 1, 211, 111, 4, 237, 213, - 23, 210, 4, 35, 2, 1, 251, 161, 4, 195, 169, 35, 2, 1, 251, 161, 4, 210, - 243, 35, 2, 1, 234, 48, 4, 195, 169, 35, 2, 1, 234, 48, 4, 210, 243, 35, - 2, 1, 233, 254, 4, 195, 169, 35, 2, 1, 233, 254, 4, 210, 243, 35, 2, 1, - 223, 84, 4, 195, 169, 35, 2, 1, 223, 84, 4, 210, 243, 35, 2, 1, 211, 108, - 4, 195, 169, 35, 2, 1, 211, 108, 4, 210, 243, 35, 2, 1, 196, 71, 4, 195, - 169, 35, 2, 1, 196, 71, 4, 210, 243, 35, 2, 1, 211, 111, 4, 195, 169, 35, - 2, 1, 211, 111, 4, 210, 243, 35, 2, 1, 251, 161, 4, 208, 170, 23, 191, - 233, 35, 2, 1, 251, 161, 4, 237, 213, 23, 191, 233, 35, 2, 1, 251, 161, - 4, 208, 170, 23, 195, 170, 23, 191, 233, 35, 2, 1, 251, 161, 4, 237, 213, - 23, 195, 170, 23, 191, 233, 35, 2, 1, 251, 161, 4, 208, 170, 23, 210, - 244, 23, 191, 233, 35, 2, 1, 251, 161, 4, 237, 213, 23, 210, 244, 23, - 191, 233, 35, 2, 1, 251, 161, 4, 208, 170, 23, 210, 5, 23, 191, 233, 35, - 2, 1, 251, 161, 4, 237, 213, 23, 210, 5, 23, 191, 233, 35, 6, 1, 251, - 161, 4, 208, 170, 23, 208, 184, 35, 6, 1, 251, 161, 4, 237, 213, 23, 208, - 184, 35, 6, 1, 251, 161, 4, 208, 170, 23, 195, 170, 23, 208, 184, 35, 6, - 1, 251, 161, 4, 237, 213, 23, 195, 170, 23, 208, 184, 35, 6, 1, 251, 161, - 4, 208, 170, 23, 210, 244, 23, 208, 184, 35, 6, 1, 251, 161, 4, 237, 213, - 23, 210, 244, 23, 208, 184, 35, 6, 1, 251, 161, 4, 208, 170, 23, 210, 5, - 23, 208, 184, 35, 6, 1, 251, 161, 4, 237, 213, 23, 210, 5, 23, 208, 184, - 35, 2, 1, 233, 254, 4, 208, 170, 23, 191, 233, 35, 2, 1, 233, 254, 4, - 237, 213, 23, 191, 233, 35, 2, 1, 233, 254, 4, 208, 170, 23, 195, 170, - 23, 191, 233, 35, 2, 1, 233, 254, 4, 237, 213, 23, 195, 170, 23, 191, - 233, 35, 2, 1, 233, 254, 4, 208, 170, 23, 210, 244, 23, 191, 233, 35, 2, - 1, 233, 254, 4, 237, 213, 23, 210, 244, 23, 191, 233, 35, 2, 1, 233, 254, - 4, 208, 170, 23, 210, 5, 23, 191, 233, 35, 2, 1, 233, 254, 4, 237, 213, - 23, 210, 5, 23, 191, 233, 35, 6, 1, 233, 254, 4, 208, 170, 23, 208, 184, - 35, 6, 1, 233, 254, 4, 237, 213, 23, 208, 184, 35, 6, 1, 233, 254, 4, - 208, 170, 23, 195, 170, 23, 208, 184, 35, 6, 1, 233, 254, 4, 237, 213, - 23, 195, 170, 23, 208, 184, 35, 6, 1, 233, 254, 4, 208, 170, 23, 210, - 244, 23, 208, 184, 35, 6, 1, 233, 254, 4, 237, 213, 23, 210, 244, 23, - 208, 184, 35, 6, 1, 233, 254, 4, 208, 170, 23, 210, 5, 23, 208, 184, 35, - 6, 1, 233, 254, 4, 237, 213, 23, 210, 5, 23, 208, 184, 35, 2, 1, 211, - 111, 4, 208, 170, 23, 191, 233, 35, 2, 1, 211, 111, 4, 237, 213, 23, 191, - 233, 35, 2, 1, 211, 111, 4, 208, 170, 23, 195, 170, 23, 191, 233, 35, 2, - 1, 211, 111, 4, 237, 213, 23, 195, 170, 23, 191, 233, 35, 2, 1, 211, 111, - 4, 208, 170, 23, 210, 244, 23, 191, 233, 35, 2, 1, 211, 111, 4, 237, 213, - 23, 210, 244, 23, 191, 233, 35, 2, 1, 211, 111, 4, 208, 170, 23, 210, 5, - 23, 191, 233, 35, 2, 1, 211, 111, 4, 237, 213, 23, 210, 5, 23, 191, 233, - 35, 6, 1, 211, 111, 4, 208, 170, 23, 208, 184, 35, 6, 1, 211, 111, 4, - 237, 213, 23, 208, 184, 35, 6, 1, 211, 111, 4, 208, 170, 23, 195, 170, - 23, 208, 184, 35, 6, 1, 211, 111, 4, 237, 213, 23, 195, 170, 23, 208, - 184, 35, 6, 1, 211, 111, 4, 208, 170, 23, 210, 244, 23, 208, 184, 35, 6, - 1, 211, 111, 4, 237, 213, 23, 210, 244, 23, 208, 184, 35, 6, 1, 211, 111, - 4, 208, 170, 23, 210, 5, 23, 208, 184, 35, 6, 1, 211, 111, 4, 237, 213, - 23, 210, 5, 23, 208, 184, 35, 2, 1, 251, 161, 4, 194, 254, 35, 2, 1, 251, - 161, 4, 217, 146, 35, 2, 1, 251, 161, 4, 195, 170, 23, 191, 233, 35, 2, - 1, 251, 161, 4, 191, 233, 35, 2, 1, 251, 161, 4, 210, 244, 23, 191, 233, - 35, 2, 1, 251, 161, 4, 210, 4, 35, 2, 1, 251, 161, 4, 210, 5, 23, 191, - 233, 35, 6, 1, 251, 161, 4, 194, 254, 35, 6, 1, 251, 161, 4, 217, 146, - 35, 6, 1, 251, 161, 4, 195, 169, 35, 6, 1, 251, 161, 4, 210, 243, 35, 6, - 1, 251, 161, 4, 208, 184, 35, 221, 30, 35, 208, 184, 35, 208, 169, 35, - 210, 4, 35, 237, 36, 23, 210, 4, 35, 2, 1, 233, 254, 4, 195, 170, 23, - 191, 233, 35, 2, 1, 233, 254, 4, 191, 233, 35, 2, 1, 233, 254, 4, 210, - 244, 23, 191, 233, 35, 2, 1, 233, 254, 4, 210, 4, 35, 2, 1, 233, 254, 4, - 210, 5, 23, 191, 233, 35, 6, 1, 234, 48, 4, 195, 169, 35, 6, 1, 234, 48, - 4, 210, 243, 35, 6, 1, 233, 254, 4, 195, 169, 35, 6, 1, 233, 254, 4, 210, - 243, 35, 6, 1, 233, 254, 4, 208, 184, 35, 208, 170, 23, 195, 169, 35, - 208, 170, 23, 210, 243, 35, 208, 170, 23, 210, 4, 35, 2, 1, 223, 84, 4, - 194, 254, 35, 2, 1, 223, 84, 4, 217, 146, 35, 2, 1, 223, 84, 4, 237, 36, - 23, 195, 169, 35, 2, 1, 223, 84, 4, 237, 36, 23, 210, 243, 35, 2, 1, 223, - 84, 4, 210, 4, 35, 2, 1, 223, 84, 4, 237, 36, 23, 210, 4, 35, 6, 1, 223, - 84, 4, 194, 254, 35, 6, 1, 223, 84, 4, 217, 146, 35, 6, 1, 223, 84, 4, - 195, 169, 35, 6, 1, 223, 84, 4, 210, 243, 35, 237, 213, 23, 195, 169, 35, - 237, 213, 23, 210, 243, 35, 237, 213, 23, 210, 4, 35, 2, 1, 196, 71, 4, - 194, 254, 35, 2, 1, 196, 71, 4, 217, 146, 35, 2, 1, 196, 71, 4, 237, 36, - 23, 195, 169, 35, 2, 1, 196, 71, 4, 237, 36, 23, 210, 243, 35, 2, 1, 207, - 4, 4, 208, 169, 35, 2, 1, 207, 4, 4, 237, 212, 35, 2, 1, 196, 71, 4, 210, - 4, 35, 2, 1, 196, 71, 4, 237, 36, 23, 210, 4, 35, 6, 1, 196, 71, 4, 194, - 254, 35, 6, 1, 196, 71, 4, 217, 146, 35, 6, 1, 196, 71, 4, 195, 169, 35, - 6, 1, 196, 71, 4, 210, 243, 35, 6, 1, 207, 4, 4, 237, 212, 35, 237, 36, - 23, 195, 169, 35, 237, 36, 23, 210, 243, 35, 195, 169, 35, 2, 1, 211, - 111, 4, 195, 170, 23, 191, 233, 35, 2, 1, 211, 111, 4, 191, 233, 35, 2, - 1, 211, 111, 4, 210, 244, 23, 191, 233, 35, 2, 1, 211, 111, 4, 210, 4, - 35, 2, 1, 211, 111, 4, 210, 5, 23, 191, 233, 35, 6, 1, 211, 108, 4, 195, - 169, 35, 6, 1, 211, 108, 4, 210, 243, 35, 6, 1, 211, 111, 4, 195, 169, - 35, 6, 1, 211, 111, 4, 210, 243, 35, 6, 1, 211, 111, 4, 208, 184, 35, - 210, 243, 35, 237, 212, 234, 104, 208, 30, 234, 115, 208, 30, 234, 104, - 201, 247, 234, 115, 201, 247, 198, 219, 201, 247, 232, 126, 201, 247, - 202, 134, 201, 247, 233, 13, 201, 247, 208, 152, 201, 247, 199, 4, 201, - 247, 230, 79, 201, 247, 191, 78, 193, 75, 201, 247, 191, 78, 193, 75, - 213, 29, 191, 78, 193, 75, 222, 196, 219, 215, 77, 206, 199, 77, 228, 88, - 213, 30, 228, 88, 233, 13, 237, 215, 234, 104, 237, 215, 234, 115, 237, - 215, 228, 241, 164, 55, 81, 219, 112, 55, 130, 219, 112, 45, 202, 170, - 207, 252, 77, 50, 202, 170, 207, 252, 77, 202, 170, 218, 240, 207, 252, - 77, 202, 170, 229, 132, 207, 252, 77, 45, 55, 207, 252, 77, 50, 55, 207, - 252, 77, 55, 218, 240, 207, 252, 77, 55, 229, 132, 207, 252, 77, 238, 14, - 55, 238, 14, 247, 248, 197, 238, 247, 248, 91, 75, 219, 236, 105, 75, - 219, 236, 228, 241, 234, 120, 228, 86, 209, 61, 219, 113, 204, 10, 210, - 128, 204, 10, 219, 215, 234, 113, 206, 199, 234, 113, 209, 34, 236, 232, - 232, 144, 219, 215, 210, 252, 206, 199, 210, 252, 214, 215, 213, 37, 201, - 247, 210, 14, 216, 50, 56, 210, 14, 199, 96, 198, 230, 56, 208, 215, 55, - 208, 215, 197, 225, 208, 215, 207, 18, 208, 215, 207, 18, 55, 208, 215, - 207, 18, 197, 225, 208, 215, 247, 96, 202, 170, 219, 219, 251, 116, 207, - 252, 77, 202, 170, 206, 203, 251, 116, 207, 252, 77, 207, 83, 77, 55, - 233, 216, 77, 223, 102, 210, 254, 196, 100, 246, 240, 198, 178, 247, 97, - 223, 119, 209, 61, 250, 191, 228, 89, 247, 248, 232, 118, 202, 97, 45, - 51, 248, 54, 4, 208, 7, 50, 51, 248, 54, 4, 208, 7, 55, 208, 13, 77, 208, - 13, 233, 216, 77, 233, 216, 208, 13, 77, 198, 128, 3, 233, 255, 207, 18, - 209, 142, 56, 62, 118, 247, 248, 62, 96, 247, 248, 130, 250, 193, 207, - 18, 204, 25, 242, 220, 196, 77, 105, 250, 192, 251, 178, 195, 84, 242, - 72, 216, 35, 56, 200, 129, 237, 215, 223, 93, 196, 100, 232, 187, 208, - 152, 77, 115, 75, 208, 151, 208, 26, 208, 215, 232, 128, 75, 208, 151, - 232, 226, 75, 208, 151, 105, 75, 208, 151, 232, 128, 75, 77, 235, 138, - 238, 217, 197, 237, 81, 232, 128, 236, 138, 216, 213, 13, 201, 247, 193, - 23, 222, 196, 232, 77, 251, 44, 223, 91, 198, 144, 223, 91, 204, 10, 223, - 91, 209, 81, 219, 215, 223, 59, 206, 199, 223, 59, 232, 238, 201, 14, - 223, 59, 209, 34, 236, 232, 223, 59, 223, 132, 200, 75, 200, 147, 252, - 49, 200, 75, 200, 147, 223, 132, 9, 232, 146, 203, 133, 252, 49, 9, 232, - 146, 203, 133, 214, 208, 17, 203, 134, 213, 33, 17, 203, 134, 200, 182, - 191, 77, 200, 182, 8, 2, 1, 68, 200, 182, 134, 200, 182, 149, 200, 182, - 169, 200, 182, 175, 200, 182, 171, 200, 182, 178, 200, 182, 108, 56, 200, - 182, 216, 34, 200, 182, 234, 43, 56, 200, 182, 45, 210, 113, 200, 182, - 50, 210, 113, 200, 182, 8, 2, 1, 215, 61, 200, 230, 191, 77, 200, 230, - 107, 200, 230, 109, 200, 230, 138, 200, 230, 134, 200, 230, 149, 200, - 230, 169, 200, 230, 175, 200, 230, 171, 200, 230, 178, 200, 230, 108, 56, - 200, 230, 216, 34, 200, 230, 234, 43, 56, 200, 230, 45, 210, 113, 200, - 230, 50, 210, 113, 8, 200, 230, 2, 1, 65, 8, 200, 230, 2, 1, 71, 8, 200, - 230, 2, 1, 74, 8, 200, 230, 2, 1, 192, 235, 8, 200, 230, 2, 1, 205, 86, - 8, 200, 230, 2, 1, 230, 116, 8, 200, 230, 2, 1, 222, 152, 8, 200, 230, 2, - 1, 172, 8, 200, 230, 2, 1, 218, 168, 8, 200, 230, 2, 1, 215, 61, 8, 200, - 230, 2, 1, 210, 236, 8, 200, 230, 2, 1, 206, 8, 8, 200, 230, 2, 1, 200, - 43, 233, 233, 56, 242, 84, 56, 238, 200, 56, 232, 106, 232, 111, 56, 219, - 91, 56, 216, 51, 56, 214, 234, 56, 209, 245, 56, 206, 36, 56, 193, 31, - 56, 214, 80, 203, 99, 56, 236, 149, 56, 233, 234, 56, 221, 135, 56, 197, - 81, 56, 235, 116, 56, 231, 138, 210, 27, 56, 209, 242, 56, 230, 174, 56, - 250, 153, 56, 228, 166, 56, 247, 37, 56, 219, 81, 198, 33, 56, 201, 226, - 56, 199, 93, 56, 223, 147, 206, 36, 56, 197, 60, 219, 91, 56, 213, 19, - 87, 56, 217, 88, 56, 206, 59, 56, 220, 9, 56, 248, 147, 56, 202, 22, 56, - 33, 45, 230, 13, 58, 33, 50, 230, 13, 58, 33, 179, 81, 219, 113, 210, - 255, 33, 203, 40, 81, 219, 113, 210, 255, 33, 251, 85, 64, 58, 33, 242, - 221, 64, 58, 33, 45, 64, 58, 33, 50, 64, 58, 33, 206, 189, 210, 255, 33, - 242, 221, 206, 189, 210, 255, 33, 251, 85, 206, 189, 210, 255, 33, 115, - 185, 58, 33, 232, 128, 185, 58, 33, 234, 99, 243, 10, 33, 234, 99, 201, - 190, 33, 234, 99, 237, 32, 33, 234, 99, 243, 11, 249, 141, 33, 45, 50, - 64, 58, 33, 234, 99, 205, 76, 33, 234, 99, 221, 218, 33, 234, 99, 196, - 68, 209, 58, 197, 241, 33, 207, 19, 202, 24, 210, 255, 33, 55, 81, 201, - 28, 210, 255, 33, 251, 95, 113, 33, 197, 225, 196, 102, 33, 193, 78, 248, - 29, 58, 33, 118, 64, 210, 255, 33, 179, 55, 202, 24, 210, 255, 33, 96, - 230, 13, 4, 181, 235, 118, 33, 118, 230, 13, 4, 181, 235, 118, 33, 45, - 64, 60, 33, 50, 64, 60, 33, 250, 194, 58, 252, 55, 211, 146, 252, 38, - 119, 199, 34, 200, 240, 235, 129, 6, 247, 193, 237, 125, 247, 27, 247, - 22, 219, 113, 113, 247, 98, 211, 146, 247, 152, 196, 112, 233, 235, 239, - 38, 205, 72, 237, 125, 233, 91, 27, 2, 232, 51, 27, 6, 230, 116, 248, - 137, 6, 230, 116, 235, 129, 6, 230, 116, 209, 103, 239, 38, 209, 103, - 239, 39, 139, 105, 209, 185, 27, 6, 68, 248, 137, 6, 68, 27, 6, 172, 27, - 2, 172, 220, 143, 78, 249, 88, 113, 235, 129, 6, 215, 61, 212, 132, 56, - 202, 5, 207, 95, 239, 5, 27, 6, 210, 236, 235, 129, 6, 210, 236, 235, - 129, 6, 208, 104, 27, 6, 146, 248, 137, 6, 146, 235, 129, 6, 146, 208, - 223, 199, 208, 207, 31, 204, 1, 77, 199, 107, 56, 198, 22, 87, 56, 195, - 136, 235, 129, 6, 191, 166, 211, 18, 56, 211, 135, 56, 223, 93, 211, 135, - 56, 248, 137, 6, 191, 166, 153, 35, 2, 1, 223, 83, 222, 3, 56, 251, 110, - 56, 27, 6, 250, 120, 248, 137, 6, 247, 193, 234, 4, 113, 27, 2, 71, 27, - 6, 71, 27, 6, 233, 175, 153, 6, 233, 175, 27, 6, 218, 168, 27, 2, 74, - 131, 113, 248, 215, 113, 231, 39, 113, 237, 254, 113, 223, 137, 202, 3, - 206, 122, 6, 208, 104, 233, 94, 56, 235, 129, 2, 209, 185, 235, 129, 2, - 231, 211, 235, 129, 6, 231, 211, 235, 129, 6, 209, 185, 235, 129, 215, - 60, 200, 201, 153, 49, 6, 232, 51, 153, 49, 6, 172, 207, 18, 49, 6, 172, - 153, 49, 6, 192, 159, 235, 129, 43, 6, 238, 127, 235, 129, 43, 2, 238, - 127, 235, 129, 43, 2, 71, 235, 129, 43, 2, 68, 235, 129, 43, 2, 223, 35, - 208, 188, 219, 112, 153, 251, 137, 210, 14, 56, 251, 210, 153, 2, 233, - 175, 16, 40, 205, 151, 202, 3, 193, 246, 232, 118, 91, 203, 243, 193, - 246, 232, 118, 91, 213, 167, 193, 246, 232, 118, 91, 199, 86, 193, 246, - 232, 118, 91, 199, 0, 193, 246, 232, 118, 105, 198, 253, 193, 246, 232, - 118, 91, 233, 18, 193, 246, 232, 118, 105, 233, 17, 193, 246, 232, 118, - 115, 233, 17, 193, 246, 232, 118, 232, 128, 233, 17, 193, 246, 232, 118, - 91, 202, 124, 193, 246, 232, 118, 232, 226, 202, 122, 193, 246, 232, 118, - 91, 234, 159, 193, 246, 232, 118, 115, 234, 157, 193, 246, 232, 118, 232, - 226, 234, 157, 193, 246, 232, 118, 203, 247, 234, 157, 232, 118, 212, - 133, 107, 206, 136, 212, 134, 107, 206, 136, 212, 134, 109, 206, 136, - 212, 134, 138, 206, 136, 212, 134, 134, 206, 136, 212, 134, 149, 206, - 136, 212, 134, 169, 206, 136, 212, 134, 175, 206, 136, 212, 134, 171, - 206, 136, 212, 134, 178, 206, 136, 212, 134, 199, 95, 206, 136, 212, 134, - 234, 127, 206, 136, 212, 134, 197, 37, 206, 136, 212, 134, 233, 15, 206, - 136, 212, 134, 91, 228, 140, 206, 136, 212, 134, 232, 226, 228, 140, 206, - 136, 212, 134, 91, 189, 2, 206, 136, 212, 134, 107, 2, 206, 136, 212, - 134, 109, 2, 206, 136, 212, 134, 138, 2, 206, 136, 212, 134, 134, 2, 206, - 136, 212, 134, 149, 2, 206, 136, 212, 134, 169, 2, 206, 136, 212, 134, - 175, 2, 206, 136, 212, 134, 171, 2, 206, 136, 212, 134, 178, 2, 206, 136, - 212, 134, 199, 95, 2, 206, 136, 212, 134, 234, 127, 2, 206, 136, 212, - 134, 197, 37, 2, 206, 136, 212, 134, 233, 15, 2, 206, 136, 212, 134, 91, - 228, 140, 2, 206, 136, 212, 134, 232, 226, 228, 140, 2, 206, 136, 212, - 134, 91, 189, 206, 136, 212, 134, 91, 198, 230, 247, 194, 238, 127, 206, - 136, 212, 134, 232, 226, 189, 206, 136, 212, 134, 199, 96, 189, 206, 136, - 212, 134, 207, 18, 91, 228, 140, 8, 2, 1, 207, 18, 247, 193, 206, 136, - 212, 134, 202, 136, 220, 4, 20, 206, 136, 212, 134, 233, 16, 234, 210, - 20, 206, 136, 212, 134, 233, 16, 189, 206, 136, 212, 134, 91, 228, 141, - 189, 193, 246, 232, 118, 191, 78, 198, 253, 153, 17, 109, 153, 17, 138, - 118, 57, 196, 66, 57, 96, 57, 235, 119, 57, 45, 50, 57, 133, 144, 57, - 186, 193, 105, 57, 186, 234, 204, 57, 202, 2, 234, 204, 57, 202, 2, 193, + 154, 65, 52, 1, 2, 251, 162, 52, 1, 2, 154, 252, 27, 52, 1, 2, 250, 122, + 52, 1, 2, 238, 129, 52, 1, 2, 71, 52, 1, 2, 205, 87, 52, 1, 2, 211, 79, + 71, 52, 1, 2, 154, 211, 79, 71, 52, 1, 2, 232, 53, 52, 1, 2, 154, 68, 52, + 1, 2, 222, 154, 52, 1, 2, 218, 170, 52, 1, 2, 234, 90, 52, 1, 2, 74, 52, + 1, 2, 211, 79, 74, 52, 1, 2, 198, 54, 132, 74, 52, 1, 2, 248, 79, 132, + 74, 52, 1, 2, 210, 238, 52, 1, 2, 200, 43, 52, 1, 2, 66, 52, 1, 2, 202, + 207, 66, 52, 1, 2, 154, 218, 170, 52, 1, 2, 196, 12, 52, 1, 2, 251, 232, + 52, 1, 2, 248, 214, 52, 1, 2, 35, 231, 213, 52, 1, 2, 237, 108, 52, 1, 2, + 35, 209, 213, 52, 1, 2, 243, 97, 8, 200, 231, 2, 1, 68, 8, 200, 231, 2, + 1, 146, 8, 200, 231, 2, 1, 66, 8, 200, 231, 2, 1, 196, 12, 35, 200, 231, + 2, 1, 248, 214, 35, 200, 231, 2, 1, 231, 213, 35, 200, 231, 2, 1, 207, 4, + 35, 200, 231, 2, 1, 209, 213, 35, 200, 231, 2, 1, 243, 97, 8, 2, 1, 196, + 152, 8, 2, 1, 78, 4, 82, 198, 152, 8, 2, 1, 238, 130, 4, 82, 198, 152, 8, + 2, 1, 233, 178, 4, 82, 198, 152, 8, 2, 1, 218, 171, 4, 82, 198, 152, 8, + 2, 1, 215, 64, 4, 82, 198, 152, 8, 2, 1, 210, 239, 4, 82, 198, 152, 8, 2, + 1, 207, 224, 4, 82, 198, 152, 8, 2, 1, 207, 224, 4, 232, 236, 23, 82, + 198, 152, 8, 2, 1, 206, 10, 4, 82, 198, 152, 8, 2, 1, 200, 44, 4, 82, + 198, 152, 8, 2, 1, 191, 167, 4, 82, 198, 152, 8, 2, 1, 154, 232, 53, 52, + 1, 38, 234, 105, 8, 2, 1, 223, 117, 232, 53, 8, 2, 1, 199, 52, 4, 201, + 33, 8, 2, 6, 1, 228, 76, 4, 106, 8, 2, 1, 223, 86, 4, 106, 8, 2, 1, 210, + 239, 4, 106, 8, 2, 6, 1, 126, 4, 106, 8, 2, 1, 196, 71, 4, 106, 8, 2, 1, + 78, 4, 210, 194, 102, 8, 2, 1, 238, 130, 4, 210, 194, 102, 8, 2, 1, 233, + 178, 4, 210, 194, 102, 8, 2, 1, 232, 54, 4, 210, 194, 102, 8, 2, 1, 222, + 155, 4, 210, 194, 102, 8, 2, 1, 220, 145, 4, 210, 194, 102, 8, 2, 1, 218, + 171, 4, 210, 194, 102, 8, 2, 1, 215, 64, 4, 210, 194, 102, 8, 2, 1, 210, + 239, 4, 210, 194, 102, 8, 2, 1, 207, 224, 4, 210, 194, 102, 8, 2, 1, 206, + 10, 4, 210, 194, 102, 8, 2, 1, 234, 15, 4, 210, 194, 102, 8, 2, 1, 196, + 13, 4, 210, 194, 102, 8, 2, 1, 192, 236, 4, 210, 194, 102, 8, 2, 1, 191, + 167, 4, 210, 194, 102, 8, 2, 1, 42, 4, 207, 25, 102, 8, 2, 1, 251, 163, + 4, 207, 25, 102, 8, 2, 1, 238, 130, 4, 228, 253, 23, 199, 215, 8, 2, 1, + 235, 17, 4, 207, 25, 102, 8, 2, 1, 211, 79, 235, 17, 4, 207, 25, 102, 8, + 2, 1, 207, 19, 211, 79, 235, 17, 4, 207, 25, 102, 8, 2, 1, 205, 88, 4, + 207, 25, 102, 8, 2, 1, 228, 76, 4, 207, 25, 102, 8, 2, 1, 211, 79, 187, + 4, 207, 25, 102, 8, 2, 1, 234, 15, 4, 207, 25, 102, 8, 2, 1, 126, 4, 207, + 25, 102, 8, 2, 1, 233, 181, 4, 207, 25, 102, 52, 1, 2, 154, 251, 162, 52, + 1, 2, 247, 195, 52, 1, 2, 247, 196, 4, 238, 177, 52, 1, 2, 233, 250, 52, + 1, 2, 207, 19, 211, 79, 71, 52, 1, 2, 233, 177, 52, 1, 2, 236, 141, 223, + 38, 4, 106, 52, 1, 2, 27, 232, 53, 52, 1, 2, 154, 230, 118, 52, 1, 2, + 228, 76, 4, 106, 52, 1, 2, 223, 85, 52, 1, 2, 6, 68, 52, 1, 2, 6, 228, + 76, 4, 106, 52, 1, 2, 223, 38, 4, 238, 214, 52, 1, 2, 220, 145, 4, 207, + 25, 102, 52, 1, 2, 220, 145, 4, 210, 194, 102, 52, 1, 2, 6, 172, 52, 1, + 2, 218, 171, 4, 102, 52, 1, 2, 154, 218, 171, 4, 180, 219, 214, 52, 1, 2, + 215, 64, 4, 45, 102, 52, 1, 2, 215, 64, 4, 207, 25, 102, 52, 1, 2, 6, + 215, 63, 52, 1, 2, 249, 84, 74, 52, 1, 2, 209, 213, 52, 1, 2, 206, 10, 4, + 102, 52, 1, 2, 234, 14, 52, 1, 2, 200, 44, 4, 210, 194, 102, 52, 1, 2, + 126, 164, 52, 1, 2, 196, 70, 52, 1, 2, 6, 66, 52, 1, 2, 196, 13, 4, 102, + 52, 1, 2, 154, 196, 12, 52, 1, 2, 191, 166, 52, 1, 2, 191, 167, 4, 207, + 25, 102, 52, 1, 2, 191, 167, 4, 238, 177, 52, 1, 2, 233, 180, 52, 1, 2, + 199, 15, 33, 235, 140, 230, 213, 252, 62, 33, 235, 140, 252, 49, 252, 62, + 33, 202, 60, 60, 33, 200, 164, 77, 33, 217, 147, 33, 230, 210, 33, 217, + 145, 33, 252, 46, 33, 230, 211, 33, 252, 47, 33, 8, 2, 1, 207, 224, 60, + 33, 248, 37, 33, 217, 146, 33, 55, 243, 4, 58, 33, 211, 141, 58, 33, 191, + 21, 60, 33, 223, 71, 60, 33, 196, 63, 58, 33, 196, 46, 58, 33, 8, 2, 1, + 232, 205, 211, 79, 42, 58, 33, 8, 2, 1, 252, 27, 33, 8, 2, 1, 251, 70, + 33, 8, 2, 1, 250, 148, 33, 8, 2, 1, 247, 196, 247, 37, 33, 8, 2, 1, 223, + 117, 238, 129, 33, 8, 2, 1, 233, 250, 33, 8, 2, 1, 232, 53, 33, 8, 1, 2, + 6, 232, 53, 33, 8, 2, 1, 222, 154, 33, 8, 2, 1, 172, 33, 8, 1, 2, 6, 172, + 33, 8, 1, 2, 6, 218, 170, 33, 8, 2, 1, 215, 63, 33, 8, 1, 2, 6, 215, 63, + 33, 8, 1, 2, 6, 146, 33, 8, 2, 1, 207, 224, 206, 117, 33, 8, 2, 1, 206, + 9, 33, 8, 2, 1, 180, 206, 9, 33, 8, 2, 1, 191, 166, 33, 8, 2, 1, 251, + 162, 33, 8, 2, 1, 250, 122, 33, 8, 2, 1, 248, 214, 33, 8, 2, 1, 205, 87, + 33, 8, 2, 1, 233, 177, 33, 8, 2, 1, 220, 145, 4, 55, 82, 198, 152, 33, 8, + 2, 1, 187, 4, 156, 247, 25, 106, 33, 8, 2, 1, 210, 238, 33, 8, 2, 1, 234, + 14, 33, 8, 2, 1, 126, 4, 156, 247, 25, 106, 33, 8, 2, 1, 193, 224, 33, 8, + 2, 1, 42, 4, 237, 44, 33, 8, 2, 1, 187, 4, 237, 44, 33, 8, 2, 1, 126, 4, + 237, 44, 33, 133, 199, 229, 58, 33, 222, 38, 93, 179, 33, 222, 38, 93, + 219, 226, 33, 75, 93, 219, 226, 33, 193, 78, 223, 95, 248, 31, 60, 33, + 75, 248, 235, 219, 226, 33, 237, 117, 77, 33, 55, 223, 95, 248, 39, 60, + 33, 251, 167, 234, 47, 119, 60, 33, 45, 250, 238, 58, 33, 50, 250, 238, + 23, 144, 250, 238, 60, 8, 6, 1, 42, 4, 206, 190, 60, 8, 2, 1, 42, 4, 206, + 190, 60, 8, 6, 1, 78, 4, 75, 58, 8, 2, 1, 78, 4, 75, 58, 8, 6, 1, 78, 4, + 75, 60, 8, 2, 1, 78, 4, 75, 60, 8, 6, 1, 78, 4, 219, 115, 60, 8, 2, 1, + 78, 4, 219, 115, 60, 8, 6, 1, 247, 196, 4, 247, 38, 23, 252, 48, 8, 2, 1, + 247, 196, 4, 247, 38, 23, 252, 48, 8, 6, 1, 238, 130, 4, 75, 58, 8, 2, 1, + 238, 130, 4, 75, 58, 8, 6, 1, 238, 130, 4, 75, 60, 8, 2, 1, 238, 130, 4, + 75, 60, 8, 6, 1, 238, 130, 4, 219, 115, 60, 8, 2, 1, 238, 130, 4, 219, + 115, 60, 8, 6, 1, 238, 130, 4, 247, 37, 8, 2, 1, 238, 130, 4, 247, 37, 8, + 6, 1, 238, 130, 4, 243, 4, 60, 8, 2, 1, 238, 130, 4, 243, 4, 60, 8, 6, 1, + 235, 17, 4, 217, 149, 23, 230, 212, 8, 2, 1, 235, 17, 4, 217, 149, 23, + 230, 212, 8, 6, 1, 235, 17, 4, 217, 149, 23, 252, 48, 8, 2, 1, 235, 17, + 4, 217, 149, 23, 252, 48, 8, 6, 1, 235, 17, 4, 243, 4, 60, 8, 2, 1, 235, + 17, 4, 243, 4, 60, 8, 6, 1, 235, 17, 4, 198, 153, 60, 8, 2, 1, 235, 17, + 4, 198, 153, 60, 8, 6, 1, 235, 17, 4, 247, 38, 23, 248, 38, 8, 2, 1, 235, + 17, 4, 247, 38, 23, 248, 38, 8, 6, 1, 233, 178, 4, 75, 58, 8, 2, 1, 233, + 178, 4, 75, 58, 8, 6, 1, 232, 54, 4, 217, 148, 8, 2, 1, 232, 54, 4, 217, + 148, 8, 6, 1, 230, 119, 4, 75, 58, 8, 2, 1, 230, 119, 4, 75, 58, 8, 6, 1, + 230, 119, 4, 75, 60, 8, 2, 1, 230, 119, 4, 75, 60, 8, 6, 1, 230, 119, 4, + 237, 44, 8, 2, 1, 230, 119, 4, 237, 44, 8, 6, 1, 230, 119, 4, 247, 37, 8, + 2, 1, 230, 119, 4, 247, 37, 8, 6, 1, 230, 119, 4, 248, 39, 60, 8, 2, 1, + 230, 119, 4, 248, 39, 60, 8, 6, 1, 228, 76, 4, 198, 153, 60, 8, 2, 1, + 228, 76, 4, 198, 153, 60, 8, 6, 1, 228, 76, 4, 237, 45, 23, 252, 48, 8, + 2, 1, 228, 76, 4, 237, 45, 23, 252, 48, 8, 6, 1, 222, 155, 4, 252, 48, 8, + 2, 1, 222, 155, 4, 252, 48, 8, 6, 1, 222, 155, 4, 75, 60, 8, 2, 1, 222, + 155, 4, 75, 60, 8, 6, 1, 222, 155, 4, 219, 115, 60, 8, 2, 1, 222, 155, 4, + 219, 115, 60, 8, 6, 1, 220, 145, 4, 75, 60, 8, 2, 1, 220, 145, 4, 75, 60, + 8, 6, 1, 220, 145, 4, 75, 248, 235, 23, 217, 148, 8, 2, 1, 220, 145, 4, + 75, 248, 235, 23, 217, 148, 8, 6, 1, 220, 145, 4, 219, 115, 60, 8, 2, 1, + 220, 145, 4, 219, 115, 60, 8, 6, 1, 220, 145, 4, 243, 4, 60, 8, 2, 1, + 220, 145, 4, 243, 4, 60, 8, 6, 1, 218, 171, 4, 252, 48, 8, 2, 1, 218, + 171, 4, 252, 48, 8, 6, 1, 218, 171, 4, 75, 58, 8, 2, 1, 218, 171, 4, 75, + 58, 8, 6, 1, 218, 171, 4, 75, 60, 8, 2, 1, 218, 171, 4, 75, 60, 8, 6, 1, + 215, 64, 4, 75, 58, 8, 2, 1, 215, 64, 4, 75, 58, 8, 6, 1, 215, 64, 4, 75, + 60, 8, 2, 1, 215, 64, 4, 75, 60, 8, 6, 1, 215, 64, 4, 219, 115, 60, 8, 2, + 1, 215, 64, 4, 219, 115, 60, 8, 6, 1, 215, 64, 4, 243, 4, 60, 8, 2, 1, + 215, 64, 4, 243, 4, 60, 8, 6, 1, 187, 4, 198, 153, 23, 252, 48, 8, 2, 1, + 187, 4, 198, 153, 23, 252, 48, 8, 6, 1, 187, 4, 198, 153, 23, 237, 44, 8, + 2, 1, 187, 4, 198, 153, 23, 237, 44, 8, 6, 1, 187, 4, 217, 149, 23, 230, + 212, 8, 2, 1, 187, 4, 217, 149, 23, 230, 212, 8, 6, 1, 187, 4, 217, 149, + 23, 252, 48, 8, 2, 1, 187, 4, 217, 149, 23, 252, 48, 8, 6, 1, 210, 239, + 4, 252, 48, 8, 2, 1, 210, 239, 4, 252, 48, 8, 6, 1, 210, 239, 4, 75, 58, + 8, 2, 1, 210, 239, 4, 75, 58, 8, 6, 1, 207, 224, 4, 75, 58, 8, 2, 1, 207, + 224, 4, 75, 58, 8, 6, 1, 207, 224, 4, 75, 60, 8, 2, 1, 207, 224, 4, 75, + 60, 8, 6, 1, 207, 224, 4, 75, 248, 235, 23, 217, 148, 8, 2, 1, 207, 224, + 4, 75, 248, 235, 23, 217, 148, 8, 6, 1, 207, 224, 4, 219, 115, 60, 8, 2, + 1, 207, 224, 4, 219, 115, 60, 8, 6, 1, 206, 10, 4, 75, 58, 8, 2, 1, 206, + 10, 4, 75, 58, 8, 6, 1, 206, 10, 4, 75, 60, 8, 2, 1, 206, 10, 4, 75, 60, + 8, 6, 1, 206, 10, 4, 252, 49, 23, 75, 58, 8, 2, 1, 206, 10, 4, 252, 49, + 23, 75, 58, 8, 6, 1, 206, 10, 4, 247, 95, 23, 75, 58, 8, 2, 1, 206, 10, + 4, 247, 95, 23, 75, 58, 8, 6, 1, 206, 10, 4, 75, 248, 235, 23, 75, 58, 8, + 2, 1, 206, 10, 4, 75, 248, 235, 23, 75, 58, 8, 6, 1, 200, 44, 4, 75, 58, + 8, 2, 1, 200, 44, 4, 75, 58, 8, 6, 1, 200, 44, 4, 75, 60, 8, 2, 1, 200, + 44, 4, 75, 60, 8, 6, 1, 200, 44, 4, 219, 115, 60, 8, 2, 1, 200, 44, 4, + 219, 115, 60, 8, 6, 1, 200, 44, 4, 243, 4, 60, 8, 2, 1, 200, 44, 4, 243, + 4, 60, 8, 6, 1, 126, 4, 237, 45, 60, 8, 2, 1, 126, 4, 237, 45, 60, 8, 6, + 1, 126, 4, 198, 153, 60, 8, 2, 1, 126, 4, 198, 153, 60, 8, 6, 1, 126, 4, + 243, 4, 60, 8, 2, 1, 126, 4, 243, 4, 60, 8, 6, 1, 126, 4, 198, 153, 23, + 252, 48, 8, 2, 1, 126, 4, 198, 153, 23, 252, 48, 8, 6, 1, 126, 4, 217, + 149, 23, 237, 44, 8, 2, 1, 126, 4, 217, 149, 23, 237, 44, 8, 6, 1, 196, + 13, 4, 198, 152, 8, 2, 1, 196, 13, 4, 198, 152, 8, 6, 1, 196, 13, 4, 75, + 60, 8, 2, 1, 196, 13, 4, 75, 60, 8, 6, 1, 193, 225, 4, 230, 212, 8, 2, 1, + 193, 225, 4, 230, 212, 8, 6, 1, 193, 225, 4, 252, 48, 8, 2, 1, 193, 225, + 4, 252, 48, 8, 6, 1, 193, 225, 4, 237, 44, 8, 2, 1, 193, 225, 4, 237, 44, + 8, 6, 1, 193, 225, 4, 75, 58, 8, 2, 1, 193, 225, 4, 75, 58, 8, 6, 1, 193, + 225, 4, 75, 60, 8, 2, 1, 193, 225, 4, 75, 60, 8, 6, 1, 192, 236, 4, 75, + 58, 8, 2, 1, 192, 236, 4, 75, 58, 8, 6, 1, 192, 236, 4, 237, 44, 8, 2, 1, + 192, 236, 4, 237, 44, 8, 6, 1, 192, 160, 4, 75, 58, 8, 2, 1, 192, 160, 4, + 75, 58, 8, 6, 1, 191, 167, 4, 243, 3, 8, 2, 1, 191, 167, 4, 243, 3, 8, 6, + 1, 191, 167, 4, 75, 60, 8, 2, 1, 191, 167, 4, 75, 60, 8, 6, 1, 191, 167, + 4, 219, 115, 60, 8, 2, 1, 191, 167, 4, 219, 115, 60, 8, 2, 1, 230, 119, + 4, 219, 115, 60, 8, 2, 1, 200, 44, 4, 237, 44, 8, 2, 1, 193, 225, 4, 206, + 190, 58, 8, 2, 1, 192, 160, 4, 206, 190, 58, 8, 2, 1, 42, 4, 50, 132, + 206, 189, 8, 2, 1, 180, 206, 10, 4, 75, 58, 8, 2, 1, 180, 206, 10, 4, + 237, 41, 106, 8, 2, 1, 180, 206, 10, 4, 137, 106, 8, 6, 1, 203, 128, 206, + 9, 8, 2, 1, 237, 108, 8, 6, 1, 42, 4, 75, 60, 8, 2, 1, 42, 4, 75, 60, 8, + 6, 1, 42, 4, 228, 253, 58, 8, 2, 1, 42, 4, 228, 253, 58, 8, 6, 1, 42, 4, + 243, 4, 23, 252, 48, 8, 2, 1, 42, 4, 243, 4, 23, 252, 48, 8, 6, 1, 42, 4, + 243, 4, 23, 230, 212, 8, 2, 1, 42, 4, 243, 4, 23, 230, 212, 8, 6, 1, 42, + 4, 243, 4, 23, 228, 253, 58, 8, 2, 1, 42, 4, 243, 4, 23, 228, 253, 58, 8, + 6, 1, 42, 4, 243, 4, 23, 198, 152, 8, 2, 1, 42, 4, 243, 4, 23, 198, 152, + 8, 6, 1, 42, 4, 243, 4, 23, 75, 60, 8, 2, 1, 42, 4, 243, 4, 23, 75, 60, + 8, 6, 1, 42, 4, 248, 39, 23, 252, 48, 8, 2, 1, 42, 4, 248, 39, 23, 252, + 48, 8, 6, 1, 42, 4, 248, 39, 23, 230, 212, 8, 2, 1, 42, 4, 248, 39, 23, + 230, 212, 8, 6, 1, 42, 4, 248, 39, 23, 228, 253, 58, 8, 2, 1, 42, 4, 248, + 39, 23, 228, 253, 58, 8, 6, 1, 42, 4, 248, 39, 23, 198, 152, 8, 2, 1, 42, + 4, 248, 39, 23, 198, 152, 8, 6, 1, 42, 4, 248, 39, 23, 75, 60, 8, 2, 1, + 42, 4, 248, 39, 23, 75, 60, 8, 6, 1, 235, 17, 4, 75, 60, 8, 2, 1, 235, + 17, 4, 75, 60, 8, 6, 1, 235, 17, 4, 228, 253, 58, 8, 2, 1, 235, 17, 4, + 228, 253, 58, 8, 6, 1, 235, 17, 4, 198, 152, 8, 2, 1, 235, 17, 4, 198, + 152, 8, 6, 1, 235, 17, 4, 243, 4, 23, 252, 48, 8, 2, 1, 235, 17, 4, 243, + 4, 23, 252, 48, 8, 6, 1, 235, 17, 4, 243, 4, 23, 230, 212, 8, 2, 1, 235, + 17, 4, 243, 4, 23, 230, 212, 8, 6, 1, 235, 17, 4, 243, 4, 23, 228, 253, + 58, 8, 2, 1, 235, 17, 4, 243, 4, 23, 228, 253, 58, 8, 6, 1, 235, 17, 4, + 243, 4, 23, 198, 152, 8, 2, 1, 235, 17, 4, 243, 4, 23, 198, 152, 8, 6, 1, + 235, 17, 4, 243, 4, 23, 75, 60, 8, 2, 1, 235, 17, 4, 243, 4, 23, 75, 60, + 8, 6, 1, 228, 76, 4, 228, 253, 58, 8, 2, 1, 228, 76, 4, 228, 253, 58, 8, + 6, 1, 228, 76, 4, 75, 60, 8, 2, 1, 228, 76, 4, 75, 60, 8, 6, 1, 187, 4, + 75, 60, 8, 2, 1, 187, 4, 75, 60, 8, 6, 1, 187, 4, 228, 253, 58, 8, 2, 1, + 187, 4, 228, 253, 58, 8, 6, 1, 187, 4, 243, 4, 23, 252, 48, 8, 2, 1, 187, + 4, 243, 4, 23, 252, 48, 8, 6, 1, 187, 4, 243, 4, 23, 230, 212, 8, 2, 1, + 187, 4, 243, 4, 23, 230, 212, 8, 6, 1, 187, 4, 243, 4, 23, 228, 253, 58, + 8, 2, 1, 187, 4, 243, 4, 23, 228, 253, 58, 8, 6, 1, 187, 4, 243, 4, 23, + 198, 152, 8, 2, 1, 187, 4, 243, 4, 23, 198, 152, 8, 6, 1, 187, 4, 243, 4, + 23, 75, 60, 8, 2, 1, 187, 4, 243, 4, 23, 75, 60, 8, 6, 1, 187, 4, 228, + 190, 23, 252, 48, 8, 2, 1, 187, 4, 228, 190, 23, 252, 48, 8, 6, 1, 187, + 4, 228, 190, 23, 230, 212, 8, 2, 1, 187, 4, 228, 190, 23, 230, 212, 8, 6, + 1, 187, 4, 228, 190, 23, 228, 253, 58, 8, 2, 1, 187, 4, 228, 190, 23, + 228, 253, 58, 8, 6, 1, 187, 4, 228, 190, 23, 198, 152, 8, 2, 1, 187, 4, + 228, 190, 23, 198, 152, 8, 6, 1, 187, 4, 228, 190, 23, 75, 60, 8, 2, 1, + 187, 4, 228, 190, 23, 75, 60, 8, 6, 1, 126, 4, 75, 60, 8, 2, 1, 126, 4, + 75, 60, 8, 6, 1, 126, 4, 228, 253, 58, 8, 2, 1, 126, 4, 228, 253, 58, 8, + 6, 1, 126, 4, 228, 190, 23, 252, 48, 8, 2, 1, 126, 4, 228, 190, 23, 252, + 48, 8, 6, 1, 126, 4, 228, 190, 23, 230, 212, 8, 2, 1, 126, 4, 228, 190, + 23, 230, 212, 8, 6, 1, 126, 4, 228, 190, 23, 228, 253, 58, 8, 2, 1, 126, + 4, 228, 190, 23, 228, 253, 58, 8, 6, 1, 126, 4, 228, 190, 23, 198, 152, + 8, 2, 1, 126, 4, 228, 190, 23, 198, 152, 8, 6, 1, 126, 4, 228, 190, 23, + 75, 60, 8, 2, 1, 126, 4, 228, 190, 23, 75, 60, 8, 6, 1, 192, 160, 4, 230, + 212, 8, 2, 1, 192, 160, 4, 230, 212, 8, 6, 1, 192, 160, 4, 75, 60, 8, 2, + 1, 192, 160, 4, 75, 60, 8, 6, 1, 192, 160, 4, 228, 253, 58, 8, 2, 1, 192, + 160, 4, 228, 253, 58, 8, 6, 1, 192, 160, 4, 198, 152, 8, 2, 1, 192, 160, + 4, 198, 152, 8, 6, 1, 216, 85, 219, 76, 8, 2, 1, 216, 85, 219, 76, 8, 6, + 1, 216, 85, 196, 12, 8, 2, 1, 216, 85, 196, 12, 8, 6, 1, 192, 160, 4, + 219, 6, 8, 2, 1, 192, 160, 4, 219, 6, 35, 2, 1, 251, 163, 4, 208, 171, + 35, 2, 1, 251, 163, 4, 237, 214, 35, 2, 1, 251, 163, 4, 208, 172, 23, + 195, 169, 35, 2, 1, 251, 163, 4, 237, 215, 23, 195, 169, 35, 2, 1, 251, + 163, 4, 208, 172, 23, 210, 245, 35, 2, 1, 251, 163, 4, 237, 215, 23, 210, + 245, 35, 2, 1, 251, 163, 4, 208, 172, 23, 210, 6, 35, 2, 1, 251, 163, 4, + 237, 215, 23, 210, 6, 35, 6, 1, 251, 163, 4, 208, 171, 35, 6, 1, 251, + 163, 4, 237, 214, 35, 6, 1, 251, 163, 4, 208, 172, 23, 195, 169, 35, 6, + 1, 251, 163, 4, 237, 215, 23, 195, 169, 35, 6, 1, 251, 163, 4, 208, 172, + 23, 210, 245, 35, 6, 1, 251, 163, 4, 237, 215, 23, 210, 245, 35, 6, 1, + 251, 163, 4, 208, 172, 23, 210, 6, 35, 6, 1, 251, 163, 4, 237, 215, 23, + 210, 6, 35, 2, 1, 234, 50, 4, 208, 171, 35, 2, 1, 234, 50, 4, 237, 214, + 35, 2, 1, 234, 50, 4, 208, 172, 23, 195, 169, 35, 2, 1, 234, 50, 4, 237, + 215, 23, 195, 169, 35, 2, 1, 234, 50, 4, 208, 172, 23, 210, 245, 35, 2, + 1, 234, 50, 4, 237, 215, 23, 210, 245, 35, 6, 1, 234, 50, 4, 208, 171, + 35, 6, 1, 234, 50, 4, 237, 214, 35, 6, 1, 234, 50, 4, 208, 172, 23, 195, + 169, 35, 6, 1, 234, 50, 4, 237, 215, 23, 195, 169, 35, 6, 1, 234, 50, 4, + 208, 172, 23, 210, 245, 35, 6, 1, 234, 50, 4, 237, 215, 23, 210, 245, 35, + 2, 1, 234, 0, 4, 208, 171, 35, 2, 1, 234, 0, 4, 237, 214, 35, 2, 1, 234, + 0, 4, 208, 172, 23, 195, 169, 35, 2, 1, 234, 0, 4, 237, 215, 23, 195, + 169, 35, 2, 1, 234, 0, 4, 208, 172, 23, 210, 245, 35, 2, 1, 234, 0, 4, + 237, 215, 23, 210, 245, 35, 2, 1, 234, 0, 4, 208, 172, 23, 210, 6, 35, 2, + 1, 234, 0, 4, 237, 215, 23, 210, 6, 35, 6, 1, 234, 0, 4, 208, 171, 35, 6, + 1, 234, 0, 4, 237, 214, 35, 6, 1, 234, 0, 4, 208, 172, 23, 195, 169, 35, + 6, 1, 234, 0, 4, 237, 215, 23, 195, 169, 35, 6, 1, 234, 0, 4, 208, 172, + 23, 210, 245, 35, 6, 1, 234, 0, 4, 237, 215, 23, 210, 245, 35, 6, 1, 234, + 0, 4, 208, 172, 23, 210, 6, 35, 6, 1, 234, 0, 4, 237, 215, 23, 210, 6, + 35, 2, 1, 223, 86, 4, 208, 171, 35, 2, 1, 223, 86, 4, 237, 214, 35, 2, 1, + 223, 86, 4, 208, 172, 23, 195, 169, 35, 2, 1, 223, 86, 4, 237, 215, 23, + 195, 169, 35, 2, 1, 223, 86, 4, 208, 172, 23, 210, 245, 35, 2, 1, 223, + 86, 4, 237, 215, 23, 210, 245, 35, 2, 1, 223, 86, 4, 208, 172, 23, 210, + 6, 35, 2, 1, 223, 86, 4, 237, 215, 23, 210, 6, 35, 6, 1, 223, 86, 4, 208, + 171, 35, 6, 1, 223, 86, 4, 237, 214, 35, 6, 1, 223, 86, 4, 208, 172, 23, + 195, 169, 35, 6, 1, 223, 86, 4, 237, 215, 23, 195, 169, 35, 6, 1, 223, + 86, 4, 208, 172, 23, 210, 245, 35, 6, 1, 223, 86, 4, 237, 215, 23, 210, + 245, 35, 6, 1, 223, 86, 4, 208, 172, 23, 210, 6, 35, 6, 1, 223, 86, 4, + 237, 215, 23, 210, 6, 35, 2, 1, 211, 110, 4, 208, 171, 35, 2, 1, 211, + 110, 4, 237, 214, 35, 2, 1, 211, 110, 4, 208, 172, 23, 195, 169, 35, 2, + 1, 211, 110, 4, 237, 215, 23, 195, 169, 35, 2, 1, 211, 110, 4, 208, 172, + 23, 210, 245, 35, 2, 1, 211, 110, 4, 237, 215, 23, 210, 245, 35, 6, 1, + 211, 110, 4, 208, 171, 35, 6, 1, 211, 110, 4, 237, 214, 35, 6, 1, 211, + 110, 4, 208, 172, 23, 195, 169, 35, 6, 1, 211, 110, 4, 237, 215, 23, 195, + 169, 35, 6, 1, 211, 110, 4, 208, 172, 23, 210, 245, 35, 6, 1, 211, 110, + 4, 237, 215, 23, 210, 245, 35, 2, 1, 196, 71, 4, 208, 171, 35, 2, 1, 196, + 71, 4, 237, 214, 35, 2, 1, 196, 71, 4, 208, 172, 23, 195, 169, 35, 2, 1, + 196, 71, 4, 237, 215, 23, 195, 169, 35, 2, 1, 196, 71, 4, 208, 172, 23, + 210, 245, 35, 2, 1, 196, 71, 4, 237, 215, 23, 210, 245, 35, 2, 1, 196, + 71, 4, 208, 172, 23, 210, 6, 35, 2, 1, 196, 71, 4, 237, 215, 23, 210, 6, + 35, 6, 1, 196, 71, 4, 237, 214, 35, 6, 1, 196, 71, 4, 237, 215, 23, 195, + 169, 35, 6, 1, 196, 71, 4, 237, 215, 23, 210, 245, 35, 6, 1, 196, 71, 4, + 237, 215, 23, 210, 6, 35, 2, 1, 211, 113, 4, 208, 171, 35, 2, 1, 211, + 113, 4, 237, 214, 35, 2, 1, 211, 113, 4, 208, 172, 23, 195, 169, 35, 2, + 1, 211, 113, 4, 237, 215, 23, 195, 169, 35, 2, 1, 211, 113, 4, 208, 172, + 23, 210, 245, 35, 2, 1, 211, 113, 4, 237, 215, 23, 210, 245, 35, 2, 1, + 211, 113, 4, 208, 172, 23, 210, 6, 35, 2, 1, 211, 113, 4, 237, 215, 23, + 210, 6, 35, 6, 1, 211, 113, 4, 208, 171, 35, 6, 1, 211, 113, 4, 237, 214, + 35, 6, 1, 211, 113, 4, 208, 172, 23, 195, 169, 35, 6, 1, 211, 113, 4, + 237, 215, 23, 195, 169, 35, 6, 1, 211, 113, 4, 208, 172, 23, 210, 245, + 35, 6, 1, 211, 113, 4, 237, 215, 23, 210, 245, 35, 6, 1, 211, 113, 4, + 208, 172, 23, 210, 6, 35, 6, 1, 211, 113, 4, 237, 215, 23, 210, 6, 35, 2, + 1, 251, 163, 4, 195, 169, 35, 2, 1, 251, 163, 4, 210, 245, 35, 2, 1, 234, + 50, 4, 195, 169, 35, 2, 1, 234, 50, 4, 210, 245, 35, 2, 1, 234, 0, 4, + 195, 169, 35, 2, 1, 234, 0, 4, 210, 245, 35, 2, 1, 223, 86, 4, 195, 169, + 35, 2, 1, 223, 86, 4, 210, 245, 35, 2, 1, 211, 110, 4, 195, 169, 35, 2, + 1, 211, 110, 4, 210, 245, 35, 2, 1, 196, 71, 4, 195, 169, 35, 2, 1, 196, + 71, 4, 210, 245, 35, 2, 1, 211, 113, 4, 195, 169, 35, 2, 1, 211, 113, 4, + 210, 245, 35, 2, 1, 251, 163, 4, 208, 172, 23, 191, 233, 35, 2, 1, 251, + 163, 4, 237, 215, 23, 191, 233, 35, 2, 1, 251, 163, 4, 208, 172, 23, 195, + 170, 23, 191, 233, 35, 2, 1, 251, 163, 4, 237, 215, 23, 195, 170, 23, + 191, 233, 35, 2, 1, 251, 163, 4, 208, 172, 23, 210, 246, 23, 191, 233, + 35, 2, 1, 251, 163, 4, 237, 215, 23, 210, 246, 23, 191, 233, 35, 2, 1, + 251, 163, 4, 208, 172, 23, 210, 7, 23, 191, 233, 35, 2, 1, 251, 163, 4, + 237, 215, 23, 210, 7, 23, 191, 233, 35, 6, 1, 251, 163, 4, 208, 172, 23, + 208, 186, 35, 6, 1, 251, 163, 4, 237, 215, 23, 208, 186, 35, 6, 1, 251, + 163, 4, 208, 172, 23, 195, 170, 23, 208, 186, 35, 6, 1, 251, 163, 4, 237, + 215, 23, 195, 170, 23, 208, 186, 35, 6, 1, 251, 163, 4, 208, 172, 23, + 210, 246, 23, 208, 186, 35, 6, 1, 251, 163, 4, 237, 215, 23, 210, 246, + 23, 208, 186, 35, 6, 1, 251, 163, 4, 208, 172, 23, 210, 7, 23, 208, 186, + 35, 6, 1, 251, 163, 4, 237, 215, 23, 210, 7, 23, 208, 186, 35, 2, 1, 234, + 0, 4, 208, 172, 23, 191, 233, 35, 2, 1, 234, 0, 4, 237, 215, 23, 191, + 233, 35, 2, 1, 234, 0, 4, 208, 172, 23, 195, 170, 23, 191, 233, 35, 2, 1, + 234, 0, 4, 237, 215, 23, 195, 170, 23, 191, 233, 35, 2, 1, 234, 0, 4, + 208, 172, 23, 210, 246, 23, 191, 233, 35, 2, 1, 234, 0, 4, 237, 215, 23, + 210, 246, 23, 191, 233, 35, 2, 1, 234, 0, 4, 208, 172, 23, 210, 7, 23, + 191, 233, 35, 2, 1, 234, 0, 4, 237, 215, 23, 210, 7, 23, 191, 233, 35, 6, + 1, 234, 0, 4, 208, 172, 23, 208, 186, 35, 6, 1, 234, 0, 4, 237, 215, 23, + 208, 186, 35, 6, 1, 234, 0, 4, 208, 172, 23, 195, 170, 23, 208, 186, 35, + 6, 1, 234, 0, 4, 237, 215, 23, 195, 170, 23, 208, 186, 35, 6, 1, 234, 0, + 4, 208, 172, 23, 210, 246, 23, 208, 186, 35, 6, 1, 234, 0, 4, 237, 215, + 23, 210, 246, 23, 208, 186, 35, 6, 1, 234, 0, 4, 208, 172, 23, 210, 7, + 23, 208, 186, 35, 6, 1, 234, 0, 4, 237, 215, 23, 210, 7, 23, 208, 186, + 35, 2, 1, 211, 113, 4, 208, 172, 23, 191, 233, 35, 2, 1, 211, 113, 4, + 237, 215, 23, 191, 233, 35, 2, 1, 211, 113, 4, 208, 172, 23, 195, 170, + 23, 191, 233, 35, 2, 1, 211, 113, 4, 237, 215, 23, 195, 170, 23, 191, + 233, 35, 2, 1, 211, 113, 4, 208, 172, 23, 210, 246, 23, 191, 233, 35, 2, + 1, 211, 113, 4, 237, 215, 23, 210, 246, 23, 191, 233, 35, 2, 1, 211, 113, + 4, 208, 172, 23, 210, 7, 23, 191, 233, 35, 2, 1, 211, 113, 4, 237, 215, + 23, 210, 7, 23, 191, 233, 35, 6, 1, 211, 113, 4, 208, 172, 23, 208, 186, + 35, 6, 1, 211, 113, 4, 237, 215, 23, 208, 186, 35, 6, 1, 211, 113, 4, + 208, 172, 23, 195, 170, 23, 208, 186, 35, 6, 1, 211, 113, 4, 237, 215, + 23, 195, 170, 23, 208, 186, 35, 6, 1, 211, 113, 4, 208, 172, 23, 210, + 246, 23, 208, 186, 35, 6, 1, 211, 113, 4, 237, 215, 23, 210, 246, 23, + 208, 186, 35, 6, 1, 211, 113, 4, 208, 172, 23, 210, 7, 23, 208, 186, 35, + 6, 1, 211, 113, 4, 237, 215, 23, 210, 7, 23, 208, 186, 35, 2, 1, 251, + 163, 4, 194, 254, 35, 2, 1, 251, 163, 4, 217, 148, 35, 2, 1, 251, 163, 4, + 195, 170, 23, 191, 233, 35, 2, 1, 251, 163, 4, 191, 233, 35, 2, 1, 251, + 163, 4, 210, 246, 23, 191, 233, 35, 2, 1, 251, 163, 4, 210, 6, 35, 2, 1, + 251, 163, 4, 210, 7, 23, 191, 233, 35, 6, 1, 251, 163, 4, 194, 254, 35, + 6, 1, 251, 163, 4, 217, 148, 35, 6, 1, 251, 163, 4, 195, 169, 35, 6, 1, + 251, 163, 4, 210, 245, 35, 6, 1, 251, 163, 4, 208, 186, 35, 221, 32, 35, + 208, 186, 35, 208, 171, 35, 210, 6, 35, 237, 38, 23, 210, 6, 35, 2, 1, + 234, 0, 4, 195, 170, 23, 191, 233, 35, 2, 1, 234, 0, 4, 191, 233, 35, 2, + 1, 234, 0, 4, 210, 246, 23, 191, 233, 35, 2, 1, 234, 0, 4, 210, 6, 35, 2, + 1, 234, 0, 4, 210, 7, 23, 191, 233, 35, 6, 1, 234, 50, 4, 195, 169, 35, + 6, 1, 234, 50, 4, 210, 245, 35, 6, 1, 234, 0, 4, 195, 169, 35, 6, 1, 234, + 0, 4, 210, 245, 35, 6, 1, 234, 0, 4, 208, 186, 35, 208, 172, 23, 195, + 169, 35, 208, 172, 23, 210, 245, 35, 208, 172, 23, 210, 6, 35, 2, 1, 223, + 86, 4, 194, 254, 35, 2, 1, 223, 86, 4, 217, 148, 35, 2, 1, 223, 86, 4, + 237, 38, 23, 195, 169, 35, 2, 1, 223, 86, 4, 237, 38, 23, 210, 245, 35, + 2, 1, 223, 86, 4, 210, 6, 35, 2, 1, 223, 86, 4, 237, 38, 23, 210, 6, 35, + 6, 1, 223, 86, 4, 194, 254, 35, 6, 1, 223, 86, 4, 217, 148, 35, 6, 1, + 223, 86, 4, 195, 169, 35, 6, 1, 223, 86, 4, 210, 245, 35, 237, 215, 23, + 195, 169, 35, 237, 215, 23, 210, 245, 35, 237, 215, 23, 210, 6, 35, 2, 1, + 196, 71, 4, 194, 254, 35, 2, 1, 196, 71, 4, 217, 148, 35, 2, 1, 196, 71, + 4, 237, 38, 23, 195, 169, 35, 2, 1, 196, 71, 4, 237, 38, 23, 210, 245, + 35, 2, 1, 207, 5, 4, 208, 171, 35, 2, 1, 207, 5, 4, 237, 214, 35, 2, 1, + 196, 71, 4, 210, 6, 35, 2, 1, 196, 71, 4, 237, 38, 23, 210, 6, 35, 6, 1, + 196, 71, 4, 194, 254, 35, 6, 1, 196, 71, 4, 217, 148, 35, 6, 1, 196, 71, + 4, 195, 169, 35, 6, 1, 196, 71, 4, 210, 245, 35, 6, 1, 207, 5, 4, 237, + 214, 35, 237, 38, 23, 195, 169, 35, 237, 38, 23, 210, 245, 35, 195, 169, + 35, 2, 1, 211, 113, 4, 195, 170, 23, 191, 233, 35, 2, 1, 211, 113, 4, + 191, 233, 35, 2, 1, 211, 113, 4, 210, 246, 23, 191, 233, 35, 2, 1, 211, + 113, 4, 210, 6, 35, 2, 1, 211, 113, 4, 210, 7, 23, 191, 233, 35, 6, 1, + 211, 110, 4, 195, 169, 35, 6, 1, 211, 110, 4, 210, 245, 35, 6, 1, 211, + 113, 4, 195, 169, 35, 6, 1, 211, 113, 4, 210, 245, 35, 6, 1, 211, 113, 4, + 208, 186, 35, 210, 245, 35, 237, 214, 234, 106, 208, 32, 234, 117, 208, + 32, 234, 106, 201, 248, 234, 117, 201, 248, 198, 219, 201, 248, 232, 128, + 201, 248, 202, 135, 201, 248, 233, 15, 201, 248, 208, 154, 201, 248, 199, + 4, 201, 248, 230, 81, 201, 248, 191, 78, 193, 75, 201, 248, 191, 78, 193, + 75, 213, 31, 191, 78, 193, 75, 222, 198, 219, 217, 77, 206, 200, 77, 228, + 90, 213, 32, 228, 90, 233, 15, 237, 217, 234, 106, 237, 217, 234, 117, + 237, 217, 228, 243, 164, 55, 81, 219, 114, 55, 130, 219, 114, 45, 202, + 171, 207, 254, 77, 50, 202, 171, 207, 254, 77, 202, 171, 218, 242, 207, + 254, 77, 202, 171, 229, 134, 207, 254, 77, 45, 55, 207, 254, 77, 50, 55, + 207, 254, 77, 55, 218, 242, 207, 254, 77, 55, 229, 134, 207, 254, 77, + 238, 16, 55, 238, 16, 247, 250, 197, 238, 247, 250, 91, 75, 219, 238, + 105, 75, 219, 238, 228, 243, 234, 122, 228, 88, 209, 63, 219, 115, 204, + 11, 210, 130, 204, 11, 219, 217, 234, 115, 206, 200, 234, 115, 209, 36, + 236, 234, 232, 146, 219, 217, 210, 254, 206, 200, 210, 254, 214, 217, + 213, 39, 201, 248, 210, 16, 216, 52, 56, 210, 16, 199, 96, 198, 230, 56, + 208, 217, 55, 208, 217, 197, 225, 208, 217, 207, 19, 208, 217, 207, 19, + 55, 208, 217, 207, 19, 197, 225, 208, 217, 247, 98, 202, 171, 219, 221, + 251, 118, 207, 254, 77, 202, 171, 206, 204, 251, 118, 207, 254, 77, 207, + 85, 77, 55, 233, 218, 77, 223, 104, 211, 0, 196, 100, 246, 242, 198, 178, + 247, 99, 223, 121, 209, 63, 250, 193, 228, 91, 247, 250, 232, 120, 202, + 98, 45, 51, 248, 56, 4, 208, 9, 50, 51, 248, 56, 4, 208, 9, 55, 208, 15, + 77, 208, 15, 233, 218, 77, 233, 218, 208, 15, 77, 198, 128, 3, 234, 1, + 207, 19, 209, 144, 56, 62, 118, 247, 250, 62, 96, 247, 250, 130, 250, + 195, 207, 19, 204, 26, 242, 222, 196, 77, 105, 250, 194, 251, 180, 195, + 84, 242, 74, 216, 37, 56, 200, 129, 237, 217, 223, 95, 196, 100, 232, + 189, 208, 154, 77, 115, 75, 208, 153, 208, 28, 208, 217, 232, 130, 75, + 208, 153, 232, 228, 75, 208, 153, 105, 75, 208, 153, 232, 130, 75, 77, + 235, 140, 238, 219, 197, 237, 81, 232, 130, 236, 140, 216, 215, 13, 201, + 248, 193, 23, 222, 198, 232, 79, 251, 46, 223, 93, 198, 144, 223, 93, + 204, 11, 223, 93, 209, 83, 219, 217, 223, 61, 206, 200, 223, 61, 232, + 240, 201, 15, 223, 61, 209, 36, 236, 234, 223, 61, 223, 134, 200, 75, + 200, 147, 252, 51, 200, 75, 200, 147, 223, 134, 9, 232, 148, 203, 134, + 252, 51, 9, 232, 148, 203, 134, 214, 210, 17, 203, 135, 213, 35, 17, 203, + 135, 200, 182, 191, 77, 200, 182, 8, 2, 1, 68, 200, 182, 134, 200, 182, + 150, 200, 182, 169, 200, 182, 175, 200, 182, 171, 200, 182, 178, 200, + 182, 108, 56, 200, 182, 216, 36, 200, 182, 234, 45, 56, 200, 182, 45, + 210, 115, 200, 182, 50, 210, 115, 200, 182, 8, 2, 1, 215, 63, 200, 231, + 191, 77, 200, 231, 107, 200, 231, 109, 200, 231, 138, 200, 231, 134, 200, + 231, 150, 200, 231, 169, 200, 231, 175, 200, 231, 171, 200, 231, 178, + 200, 231, 108, 56, 200, 231, 216, 36, 200, 231, 234, 45, 56, 200, 231, + 45, 210, 115, 200, 231, 50, 210, 115, 8, 200, 231, 2, 1, 65, 8, 200, 231, + 2, 1, 71, 8, 200, 231, 2, 1, 74, 8, 200, 231, 2, 1, 192, 235, 8, 200, + 231, 2, 1, 205, 87, 8, 200, 231, 2, 1, 230, 118, 8, 200, 231, 2, 1, 222, + 154, 8, 200, 231, 2, 1, 172, 8, 200, 231, 2, 1, 218, 170, 8, 200, 231, 2, + 1, 215, 63, 8, 200, 231, 2, 1, 210, 238, 8, 200, 231, 2, 1, 206, 9, 8, + 200, 231, 2, 1, 200, 43, 233, 235, 56, 242, 86, 56, 238, 202, 56, 232, + 108, 232, 113, 56, 219, 93, 56, 216, 53, 56, 214, 236, 56, 209, 247, 56, + 206, 37, 56, 193, 31, 56, 214, 82, 203, 100, 56, 236, 151, 56, 233, 236, + 56, 221, 137, 56, 197, 81, 56, 235, 118, 56, 231, 140, 210, 29, 56, 209, + 244, 56, 230, 176, 56, 250, 155, 56, 228, 168, 56, 247, 39, 56, 219, 83, + 198, 33, 56, 201, 227, 56, 199, 93, 56, 223, 149, 206, 37, 56, 197, 60, + 219, 93, 56, 213, 21, 87, 56, 217, 90, 56, 206, 60, 56, 220, 11, 56, 248, + 149, 56, 202, 23, 56, 33, 45, 230, 15, 58, 33, 50, 230, 15, 58, 33, 180, + 81, 219, 115, 211, 1, 33, 203, 41, 81, 219, 115, 211, 1, 33, 251, 87, 64, + 58, 33, 242, 223, 64, 58, 33, 45, 64, 58, 33, 50, 64, 58, 33, 206, 190, + 211, 1, 33, 242, 223, 206, 190, 211, 1, 33, 251, 87, 206, 190, 211, 1, + 33, 115, 185, 58, 33, 232, 130, 185, 58, 33, 234, 101, 243, 12, 33, 234, + 101, 201, 191, 33, 234, 101, 237, 34, 33, 234, 101, 243, 13, 249, 143, + 33, 45, 50, 64, 58, 33, 234, 101, 205, 77, 33, 234, 101, 221, 220, 33, + 234, 101, 196, 68, 209, 60, 197, 241, 33, 207, 20, 202, 25, 211, 1, 33, + 55, 81, 201, 29, 211, 1, 33, 251, 97, 113, 33, 197, 225, 196, 102, 33, + 193, 78, 248, 31, 58, 33, 118, 64, 211, 1, 33, 180, 55, 202, 25, 211, 1, + 33, 96, 230, 15, 4, 182, 235, 120, 33, 118, 230, 15, 4, 182, 235, 120, + 33, 45, 64, 60, 33, 50, 64, 60, 33, 250, 196, 58, 252, 57, 211, 148, 252, + 40, 119, 199, 34, 200, 241, 235, 131, 6, 247, 195, 237, 127, 247, 29, + 247, 24, 219, 115, 113, 247, 100, 211, 148, 247, 154, 196, 112, 233, 237, + 239, 40, 205, 73, 237, 127, 233, 93, 27, 2, 232, 53, 27, 6, 230, 118, + 248, 139, 6, 230, 118, 235, 131, 6, 230, 118, 209, 105, 239, 40, 209, + 105, 239, 41, 139, 105, 209, 187, 27, 6, 68, 248, 139, 6, 68, 27, 6, 172, + 27, 2, 172, 220, 145, 78, 249, 90, 113, 235, 131, 6, 215, 63, 212, 134, + 56, 202, 6, 207, 97, 239, 7, 27, 6, 210, 238, 235, 131, 6, 210, 238, 235, + 131, 6, 208, 106, 27, 6, 146, 248, 139, 6, 146, 235, 131, 6, 146, 208, + 225, 199, 208, 207, 32, 204, 2, 77, 199, 107, 56, 198, 22, 87, 56, 195, + 136, 235, 131, 6, 191, 166, 211, 20, 56, 211, 137, 56, 223, 95, 211, 137, + 56, 248, 139, 6, 191, 166, 154, 35, 2, 1, 223, 85, 222, 5, 56, 251, 112, + 56, 27, 6, 250, 122, 248, 139, 6, 247, 195, 234, 6, 113, 27, 2, 71, 27, + 6, 71, 27, 6, 233, 177, 154, 6, 233, 177, 27, 6, 218, 170, 27, 2, 74, + 131, 113, 248, 217, 113, 231, 41, 113, 238, 0, 113, 223, 139, 202, 4, + 206, 123, 6, 208, 106, 233, 96, 56, 235, 131, 2, 209, 187, 235, 131, 2, + 231, 213, 235, 131, 6, 231, 213, 235, 131, 6, 209, 187, 235, 131, 215, + 62, 200, 201, 154, 49, 6, 232, 53, 154, 49, 6, 172, 207, 19, 49, 6, 172, + 154, 49, 6, 192, 159, 235, 131, 43, 6, 238, 129, 235, 131, 43, 2, 238, + 129, 235, 131, 43, 2, 71, 235, 131, 43, 2, 68, 235, 131, 43, 2, 223, 37, + 208, 190, 219, 114, 154, 251, 139, 210, 16, 56, 251, 212, 154, 2, 233, + 177, 16, 40, 205, 152, 202, 4, 193, 246, 232, 120, 91, 203, 244, 193, + 246, 232, 120, 91, 213, 169, 193, 246, 232, 120, 91, 199, 86, 193, 246, + 232, 120, 91, 199, 0, 193, 246, 232, 120, 105, 198, 253, 193, 246, 232, + 120, 91, 233, 20, 193, 246, 232, 120, 105, 233, 19, 193, 246, 232, 120, + 115, 233, 19, 193, 246, 232, 120, 232, 130, 233, 19, 193, 246, 232, 120, + 91, 202, 125, 193, 246, 232, 120, 232, 228, 202, 123, 193, 246, 232, 120, + 91, 234, 161, 193, 246, 232, 120, 115, 234, 159, 193, 246, 232, 120, 232, + 228, 234, 159, 193, 246, 232, 120, 203, 248, 234, 159, 232, 120, 212, + 135, 107, 206, 137, 212, 136, 107, 206, 137, 212, 136, 109, 206, 137, + 212, 136, 138, 206, 137, 212, 136, 134, 206, 137, 212, 136, 150, 206, + 137, 212, 136, 169, 206, 137, 212, 136, 175, 206, 137, 212, 136, 171, + 206, 137, 212, 136, 178, 206, 137, 212, 136, 199, 95, 206, 137, 212, 136, + 234, 129, 206, 137, 212, 136, 197, 37, 206, 137, 212, 136, 233, 17, 206, + 137, 212, 136, 91, 228, 142, 206, 137, 212, 136, 232, 228, 228, 142, 206, + 137, 212, 136, 91, 189, 2, 206, 137, 212, 136, 107, 2, 206, 137, 212, + 136, 109, 2, 206, 137, 212, 136, 138, 2, 206, 137, 212, 136, 134, 2, 206, + 137, 212, 136, 150, 2, 206, 137, 212, 136, 169, 2, 206, 137, 212, 136, + 175, 2, 206, 137, 212, 136, 171, 2, 206, 137, 212, 136, 178, 2, 206, 137, + 212, 136, 199, 95, 2, 206, 137, 212, 136, 234, 129, 2, 206, 137, 212, + 136, 197, 37, 2, 206, 137, 212, 136, 233, 17, 2, 206, 137, 212, 136, 91, + 228, 142, 2, 206, 137, 212, 136, 232, 228, 228, 142, 2, 206, 137, 212, + 136, 91, 189, 206, 137, 212, 136, 91, 198, 230, 247, 196, 238, 129, 206, + 137, 212, 136, 232, 228, 189, 206, 137, 212, 136, 199, 96, 189, 206, 137, + 212, 136, 207, 19, 91, 228, 142, 8, 2, 1, 207, 19, 247, 195, 206, 137, + 212, 136, 202, 137, 220, 6, 20, 206, 137, 212, 136, 233, 18, 234, 212, + 20, 206, 137, 212, 136, 233, 18, 189, 206, 137, 212, 136, 91, 228, 143, + 189, 193, 246, 232, 120, 191, 78, 198, 253, 154, 17, 109, 154, 17, 138, + 118, 57, 196, 66, 57, 96, 57, 235, 121, 57, 45, 50, 57, 133, 144, 57, + 186, 193, 105, 57, 186, 234, 206, 57, 202, 3, 234, 206, 57, 202, 3, 193, 105, 57, 118, 64, 4, 106, 96, 64, 4, 106, 118, 193, 139, 57, 96, 193, - 139, 57, 118, 105, 229, 233, 57, 196, 66, 105, 229, 233, 57, 96, 105, - 229, 233, 57, 235, 119, 105, 229, 233, 57, 118, 64, 4, 199, 215, 96, 64, - 4, 199, 215, 118, 64, 232, 98, 164, 196, 66, 64, 232, 98, 164, 96, 64, - 232, 98, 164, 235, 119, 64, 232, 98, 164, 133, 144, 64, 4, 249, 74, 118, - 64, 4, 102, 96, 64, 4, 102, 118, 64, 4, 219, 4, 96, 64, 4, 219, 4, 45, - 50, 193, 139, 57, 45, 50, 64, 4, 106, 235, 119, 191, 21, 57, 196, 66, 64, - 4, 198, 136, 219, 214, 196, 66, 64, 4, 198, 136, 206, 197, 235, 119, 64, - 4, 198, 136, 219, 214, 235, 119, 64, 4, 198, 136, 206, 197, 96, 64, 4, - 239, 2, 235, 118, 235, 119, 64, 4, 239, 2, 219, 214, 251, 85, 198, 54, - 204, 28, 57, 242, 221, 198, 54, 204, 28, 57, 186, 193, 105, 64, 119, 179, - 164, 118, 64, 119, 249, 88, 139, 96, 64, 119, 164, 251, 85, 211, 77, 243, - 11, 57, 242, 221, 211, 77, 243, 11, 57, 118, 230, 13, 4, 181, 196, 65, - 118, 230, 13, 4, 181, 235, 118, 196, 66, 230, 13, 4, 181, 206, 197, 196, - 66, 230, 13, 4, 181, 219, 214, 96, 230, 13, 4, 181, 196, 65, 96, 230, 13, - 4, 181, 235, 118, 235, 119, 230, 13, 4, 181, 206, 197, 235, 119, 230, 13, - 4, 181, 219, 214, 96, 64, 139, 118, 57, 196, 66, 64, 118, 79, 235, 119, - 57, 118, 64, 139, 96, 57, 118, 210, 196, 250, 231, 196, 66, 210, 196, - 250, 231, 96, 210, 196, 250, 231, 235, 119, 210, 196, 250, 231, 118, 230, - 13, 139, 96, 230, 12, 96, 230, 13, 139, 118, 230, 12, 118, 55, 64, 4, + 139, 57, 118, 105, 229, 235, 57, 196, 66, 105, 229, 235, 57, 96, 105, + 229, 235, 57, 235, 121, 105, 229, 235, 57, 118, 64, 4, 199, 215, 96, 64, + 4, 199, 215, 118, 64, 232, 100, 164, 196, 66, 64, 232, 100, 164, 96, 64, + 232, 100, 164, 235, 121, 64, 232, 100, 164, 133, 144, 64, 4, 249, 76, + 118, 64, 4, 102, 96, 64, 4, 102, 118, 64, 4, 219, 6, 96, 64, 4, 219, 6, + 45, 50, 193, 139, 57, 45, 50, 64, 4, 106, 235, 121, 191, 21, 57, 196, 66, + 64, 4, 198, 136, 219, 216, 196, 66, 64, 4, 198, 136, 206, 198, 235, 121, + 64, 4, 198, 136, 219, 216, 235, 121, 64, 4, 198, 136, 206, 198, 96, 64, + 4, 239, 4, 235, 120, 235, 121, 64, 4, 239, 4, 219, 216, 251, 87, 198, 54, + 204, 29, 57, 242, 223, 198, 54, 204, 29, 57, 186, 193, 105, 64, 119, 180, + 164, 118, 64, 119, 249, 90, 139, 96, 64, 119, 164, 251, 87, 211, 79, 243, + 13, 57, 242, 223, 211, 79, 243, 13, 57, 118, 230, 15, 4, 182, 196, 65, + 118, 230, 15, 4, 182, 235, 120, 196, 66, 230, 15, 4, 182, 206, 198, 196, + 66, 230, 15, 4, 182, 219, 216, 96, 230, 15, 4, 182, 196, 65, 96, 230, 15, + 4, 182, 235, 120, 235, 121, 230, 15, 4, 182, 206, 198, 235, 121, 230, 15, + 4, 182, 219, 216, 96, 64, 139, 118, 57, 196, 66, 64, 118, 79, 235, 121, + 57, 118, 64, 139, 96, 57, 118, 210, 198, 250, 233, 196, 66, 210, 198, + 250, 233, 96, 210, 198, 250, 233, 235, 121, 210, 198, 250, 233, 118, 230, + 15, 139, 96, 230, 14, 96, 230, 15, 139, 118, 230, 14, 118, 55, 64, 4, 106, 45, 50, 55, 64, 4, 106, 96, 55, 64, 4, 106, 118, 55, 57, 196, 66, - 55, 57, 96, 55, 57, 235, 119, 55, 57, 45, 50, 55, 57, 133, 144, 55, 57, - 186, 193, 105, 55, 57, 186, 234, 204, 55, 57, 202, 2, 234, 204, 55, 57, - 202, 2, 193, 105, 55, 57, 118, 197, 225, 57, 96, 197, 225, 57, 118, 201, - 183, 57, 96, 201, 183, 57, 196, 66, 64, 4, 55, 106, 235, 119, 64, 4, 55, - 106, 118, 237, 214, 57, 196, 66, 237, 214, 57, 96, 237, 214, 57, 235, - 119, 237, 214, 57, 118, 64, 119, 164, 96, 64, 119, 164, 118, 63, 57, 196, - 66, 63, 57, 96, 63, 57, 235, 119, 63, 57, 196, 66, 63, 64, 232, 98, 164, - 196, 66, 63, 64, 211, 105, 210, 52, 196, 66, 63, 64, 211, 105, 210, 53, - 4, 228, 241, 164, 196, 66, 63, 64, 211, 105, 210, 53, 4, 81, 164, 196, - 66, 63, 55, 57, 196, 66, 63, 55, 64, 211, 105, 210, 52, 96, 63, 64, 232, - 98, 193, 167, 186, 193, 105, 64, 119, 239, 1, 202, 2, 234, 204, 64, 119, - 239, 1, 133, 144, 63, 57, 50, 64, 4, 2, 243, 10, 235, 119, 64, 118, 79, - 196, 66, 57, 115, 96, 250, 231, 118, 64, 4, 81, 106, 96, 64, 4, 81, 106, + 55, 57, 96, 55, 57, 235, 121, 55, 57, 45, 50, 55, 57, 133, 144, 55, 57, + 186, 193, 105, 55, 57, 186, 234, 206, 55, 57, 202, 3, 234, 206, 55, 57, + 202, 3, 193, 105, 55, 57, 118, 197, 225, 57, 96, 197, 225, 57, 118, 201, + 184, 57, 96, 201, 184, 57, 196, 66, 64, 4, 55, 106, 235, 121, 64, 4, 55, + 106, 118, 237, 216, 57, 196, 66, 237, 216, 57, 96, 237, 216, 57, 235, + 121, 237, 216, 57, 118, 64, 119, 164, 96, 64, 119, 164, 118, 63, 57, 196, + 66, 63, 57, 96, 63, 57, 235, 121, 63, 57, 196, 66, 63, 64, 232, 100, 164, + 196, 66, 63, 64, 211, 107, 210, 54, 196, 66, 63, 64, 211, 107, 210, 55, + 4, 228, 243, 164, 196, 66, 63, 64, 211, 107, 210, 55, 4, 81, 164, 196, + 66, 63, 55, 57, 196, 66, 63, 55, 64, 211, 107, 210, 54, 96, 63, 64, 232, + 100, 193, 167, 186, 193, 105, 64, 119, 239, 3, 202, 3, 234, 206, 64, 119, + 239, 3, 133, 144, 63, 57, 50, 64, 4, 2, 243, 12, 235, 121, 64, 118, 79, + 196, 66, 57, 115, 96, 250, 233, 118, 64, 4, 81, 106, 96, 64, 4, 81, 106, 45, 50, 64, 4, 81, 106, 118, 64, 4, 55, 81, 106, 96, 64, 4, 55, 81, 106, - 45, 50, 64, 4, 55, 81, 106, 118, 211, 74, 57, 96, 211, 74, 57, 45, 50, - 211, 74, 57, 40, 251, 174, 242, 68, 210, 105, 237, 16, 199, 24, 233, 211, - 199, 24, 236, 164, 213, 12, 233, 212, 234, 105, 203, 252, 223, 151, 214, - 245, 234, 132, 211, 146, 213, 12, 251, 133, 234, 132, 211, 146, 2, 234, - 132, 211, 146, 239, 32, 250, 220, 216, 190, 236, 164, 213, 12, 239, 34, - 250, 220, 216, 190, 2, 239, 32, 250, 220, 216, 190, 234, 95, 79, 208, - 190, 215, 60, 208, 200, 215, 60, 239, 9, 215, 60, 200, 201, 216, 35, 56, - 216, 33, 56, 75, 209, 81, 236, 200, 202, 97, 203, 253, 216, 34, 250, 194, - 211, 66, 206, 189, 211, 66, 247, 249, 211, 66, 51, 206, 128, 238, 191, - 206, 128, 232, 121, 206, 128, 208, 186, 159, 223, 139, 50, 251, 115, 251, - 115, 216, 226, 251, 115, 201, 225, 251, 115, 236, 203, 236, 164, 213, 12, - 236, 207, 210, 119, 159, 213, 12, 210, 119, 159, 219, 29, 251, 125, 219, - 29, 211, 56, 223, 99, 196, 92, 223, 113, 55, 223, 113, 197, 225, 223, - 113, 239, 26, 223, 113, 200, 171, 223, 113, 195, 11, 223, 113, 242, 221, - 223, 113, 242, 221, 239, 26, 223, 113, 251, 85, 239, 26, 223, 113, 199, - 23, 249, 3, 207, 126, 208, 187, 75, 216, 34, 233, 219, 231, 144, 208, - 187, 229, 0, 198, 153, 211, 66, 207, 18, 198, 152, 223, 93, 219, 245, - 206, 8, 202, 172, 193, 138, 193, 10, 208, 200, 213, 12, 198, 152, 216, - 35, 198, 152, 250, 186, 234, 45, 159, 213, 12, 250, 186, 234, 45, 159, - 251, 40, 234, 45, 159, 251, 40, 247, 218, 213, 12, 252, 48, 234, 45, 159, - 214, 105, 251, 40, 213, 21, 252, 48, 234, 45, 159, 251, 165, 234, 45, - 159, 213, 12, 251, 165, 234, 45, 159, 251, 165, 234, 45, 211, 57, 234, - 45, 159, 197, 225, 198, 152, 251, 175, 234, 45, 159, 234, 36, 159, 231, - 143, 234, 36, 159, 237, 17, 248, 209, 251, 42, 199, 34, 219, 120, 231, - 143, 234, 45, 159, 251, 40, 234, 45, 119, 211, 57, 199, 34, 223, 178, - 211, 146, 223, 178, 79, 211, 57, 251, 40, 234, 45, 159, 242, 84, 234, 42, - 234, 43, 242, 83, 206, 189, 223, 163, 234, 45, 159, 206, 189, 234, 45, - 159, 238, 250, 159, 234, 3, 234, 41, 159, 201, 103, 234, 42, 237, 107, - 234, 45, 159, 234, 45, 119, 247, 205, 237, 126, 216, 226, 247, 204, 208, - 11, 234, 45, 159, 213, 12, 234, 45, 159, 228, 17, 159, 213, 12, 228, 17, - 159, 201, 35, 234, 36, 159, 219, 180, 211, 57, 234, 45, 159, 230, 204, - 211, 57, 234, 45, 159, 219, 180, 139, 234, 45, 159, 230, 204, 139, 234, - 45, 159, 219, 180, 247, 218, 213, 12, 234, 45, 159, 230, 204, 247, 218, - 213, 12, 234, 45, 159, 215, 145, 219, 179, 215, 145, 230, 203, 248, 209, - 213, 12, 234, 36, 159, 213, 12, 219, 179, 213, 12, 230, 203, 214, 105, - 219, 180, 213, 21, 234, 45, 159, 214, 105, 230, 204, 213, 21, 234, 45, - 159, 219, 180, 211, 57, 234, 36, 159, 230, 204, 211, 57, 234, 36, 159, - 214, 105, 219, 180, 213, 21, 234, 36, 159, 214, 105, 230, 204, 213, 21, - 234, 36, 159, 219, 180, 211, 57, 230, 203, 230, 204, 211, 57, 219, 179, - 214, 105, 219, 180, 213, 21, 230, 203, 214, 105, 230, 204, 213, 21, 219, - 179, 208, 231, 200, 220, 208, 232, 211, 57, 234, 45, 159, 200, 221, 211, - 57, 234, 45, 159, 208, 232, 211, 57, 234, 36, 159, 200, 221, 211, 57, - 234, 36, 159, 236, 164, 213, 12, 208, 234, 236, 164, 213, 12, 200, 222, - 200, 229, 211, 146, 200, 181, 211, 146, 213, 12, 42, 200, 229, 211, 146, - 213, 12, 42, 200, 181, 211, 146, 200, 229, 79, 211, 57, 234, 45, 159, - 200, 181, 79, 211, 57, 234, 45, 159, 214, 105, 42, 200, 229, 79, 213, 21, - 234, 45, 159, 214, 105, 42, 200, 181, 79, 213, 21, 234, 45, 159, 200, - 229, 79, 4, 213, 12, 234, 45, 159, 200, 181, 79, 4, 213, 12, 234, 45, - 159, 215, 124, 215, 125, 215, 126, 215, 125, 196, 92, 51, 223, 178, 211, - 146, 51, 211, 46, 211, 146, 51, 223, 178, 79, 211, 57, 234, 45, 159, 51, - 211, 46, 79, 211, 57, 234, 45, 159, 51, 247, 111, 51, 238, 181, 47, 209, - 81, 47, 216, 34, 47, 198, 144, 47, 236, 200, 202, 97, 47, 75, 211, 66, - 47, 206, 189, 211, 66, 47, 250, 194, 211, 66, 47, 234, 42, 47, 237, 215, - 112, 209, 81, 112, 216, 34, 112, 198, 144, 112, 75, 211, 66, 50, 199, - 228, 45, 199, 228, 144, 199, 228, 133, 199, 228, 250, 197, 216, 1, 197, - 201, 232, 152, 197, 225, 81, 249, 88, 50, 197, 57, 55, 81, 249, 88, 55, - 50, 197, 57, 236, 164, 213, 12, 208, 179, 213, 12, 197, 201, 236, 164, - 213, 12, 232, 153, 214, 108, 55, 81, 249, 88, 55, 50, 197, 57, 208, 232, - 196, 105, 207, 65, 200, 221, 196, 105, 207, 65, 213, 18, 200, 244, 211, - 146, 239, 32, 250, 220, 213, 18, 200, 243, 213, 18, 200, 244, 79, 211, - 57, 234, 45, 159, 239, 32, 250, 220, 213, 18, 200, 244, 211, 57, 234, 45, - 159, 211, 46, 211, 146, 223, 178, 211, 146, 215, 131, 229, 189, 239, 43, - 217, 27, 223, 110, 192, 192, 214, 224, 213, 20, 50, 251, 116, 4, 251, 16, - 50, 197, 241, 215, 60, 219, 29, 251, 125, 215, 60, 219, 29, 211, 56, 215, - 60, 223, 99, 215, 60, 196, 92, 237, 33, 211, 66, 75, 211, 66, 201, 103, - 211, 66, 236, 200, 198, 144, 248, 63, 45, 213, 18, 233, 93, 204, 24, 208, - 200, 50, 213, 18, 233, 93, 204, 24, 208, 200, 45, 204, 24, 208, 200, 50, - 204, 24, 208, 200, 207, 18, 198, 153, 234, 42, 238, 171, 219, 29, 211, - 56, 238, 171, 219, 29, 251, 125, 55, 200, 228, 55, 200, 180, 55, 223, 99, - 55, 196, 92, 209, 115, 234, 45, 23, 210, 119, 159, 219, 180, 4, 236, 140, - 230, 204, 4, 236, 140, 195, 83, 215, 145, 219, 179, 195, 83, 215, 145, - 230, 203, 219, 180, 234, 45, 119, 211, 57, 230, 203, 230, 204, 234, 45, - 119, 211, 57, 219, 179, 234, 45, 119, 211, 57, 219, 179, 234, 45, 119, - 211, 57, 230, 203, 234, 45, 119, 211, 57, 208, 231, 234, 45, 119, 211, - 57, 200, 220, 236, 164, 213, 12, 208, 235, 211, 57, 234, 44, 236, 164, - 213, 12, 200, 223, 211, 57, 234, 44, 213, 12, 51, 223, 178, 79, 211, 57, - 234, 45, 159, 213, 12, 51, 211, 46, 79, 211, 57, 234, 45, 159, 51, 223, - 178, 79, 211, 57, 213, 12, 234, 45, 159, 51, 211, 46, 79, 211, 57, 213, - 12, 234, 45, 159, 219, 180, 247, 218, 213, 12, 234, 36, 159, 230, 204, - 247, 218, 213, 12, 234, 36, 159, 208, 232, 247, 218, 213, 12, 234, 36, - 159, 200, 221, 247, 218, 213, 12, 234, 36, 159, 213, 12, 213, 18, 200, - 244, 211, 146, 236, 164, 213, 12, 239, 34, 250, 220, 213, 18, 200, 243, - 213, 12, 213, 18, 200, 244, 79, 211, 57, 234, 45, 159, 236, 164, 213, 12, - 239, 34, 250, 220, 213, 18, 200, 244, 211, 57, 234, 44, 81, 234, 120, - 216, 82, 228, 241, 234, 120, 133, 50, 237, 39, 234, 120, 144, 50, 237, - 39, 234, 120, 234, 132, 79, 4, 179, 228, 241, 106, 234, 132, 79, 4, 81, - 249, 88, 250, 183, 234, 95, 79, 228, 241, 106, 2, 234, 132, 79, 4, 81, - 249, 88, 250, 183, 234, 95, 79, 228, 241, 106, 234, 132, 79, 4, 75, 58, - 234, 132, 79, 4, 211, 6, 2, 234, 132, 79, 4, 211, 6, 234, 132, 79, 4, - 196, 103, 234, 132, 79, 4, 105, 228, 241, 201, 15, 239, 32, 4, 179, 228, - 241, 106, 239, 32, 4, 81, 249, 88, 250, 183, 234, 95, 79, 228, 241, 106, - 2, 239, 32, 4, 81, 249, 88, 250, 183, 234, 95, 79, 228, 241, 106, 239, - 32, 4, 211, 6, 2, 239, 32, 4, 211, 6, 191, 167, 213, 10, 249, 131, 216, - 189, 237, 34, 56, 234, 135, 57, 228, 172, 133, 250, 235, 144, 250, 235, - 208, 194, 209, 248, 193, 135, 219, 112, 45, 247, 30, 50, 247, 30, 45, - 232, 193, 50, 232, 193, 248, 77, 50, 238, 219, 248, 77, 45, 238, 219, - 198, 54, 50, 238, 219, 198, 54, 45, 238, 219, 207, 18, 213, 12, 56, 51, - 218, 232, 251, 16, 205, 43, 205, 52, 199, 107, 207, 96, 209, 25, 223, - 144, 195, 56, 201, 190, 209, 108, 79, 223, 109, 56, 153, 213, 12, 56, - 193, 145, 228, 174, 198, 54, 45, 239, 1, 198, 54, 50, 239, 1, 248, 77, - 45, 239, 1, 248, 77, 50, 239, 1, 198, 54, 132, 223, 113, 248, 77, 132, - 223, 113, 232, 93, 202, 65, 133, 250, 236, 248, 210, 105, 228, 241, 249, - 76, 211, 59, 221, 222, 234, 32, 119, 199, 34, 183, 192, 236, 223, 163, - 42, 207, 93, 248, 62, 221, 220, 219, 219, 251, 116, 248, 53, 206, 203, - 251, 116, 248, 53, 234, 32, 119, 199, 34, 219, 224, 248, 221, 206, 188, - 238, 138, 251, 175, 250, 244, 200, 74, 198, 39, 206, 41, 236, 252, 211, - 47, 239, 48, 199, 181, 202, 81, 238, 246, 238, 245, 251, 59, 232, 75, 16, - 228, 67, 251, 59, 232, 75, 16, 201, 181, 208, 30, 251, 59, 232, 75, 16, - 208, 31, 234, 44, 251, 59, 232, 75, 16, 208, 31, 236, 207, 251, 59, 232, - 75, 16, 208, 31, 237, 32, 251, 59, 232, 75, 16, 208, 31, 222, 188, 251, - 59, 232, 75, 16, 208, 31, 243, 10, 251, 59, 232, 75, 16, 243, 11, 201, - 71, 251, 59, 232, 75, 16, 243, 11, 222, 188, 251, 59, 232, 75, 16, 202, - 98, 164, 251, 59, 232, 75, 16, 249, 142, 164, 251, 59, 232, 75, 16, 208, - 31, 202, 97, 251, 59, 232, 75, 16, 208, 31, 249, 141, 251, 59, 232, 75, - 16, 208, 31, 219, 179, 251, 59, 232, 75, 16, 208, 31, 230, 203, 251, 59, - 232, 75, 16, 118, 195, 176, 251, 59, 232, 75, 16, 96, 195, 176, 251, 59, - 232, 75, 16, 208, 31, 118, 57, 251, 59, 232, 75, 16, 208, 31, 96, 57, - 251, 59, 232, 75, 16, 243, 11, 249, 141, 251, 59, 232, 75, 16, 144, 199, - 229, 196, 103, 251, 59, 232, 75, 16, 237, 107, 201, 71, 251, 59, 232, 75, - 16, 208, 31, 144, 247, 96, 251, 59, 232, 75, 16, 208, 31, 237, 106, 251, - 59, 232, 75, 16, 144, 199, 229, 222, 188, 251, 59, 232, 75, 16, 196, 66, - 195, 176, 251, 59, 232, 75, 16, 208, 31, 196, 66, 57, 251, 59, 232, 75, - 16, 133, 199, 229, 211, 6, 251, 59, 232, 75, 16, 237, 119, 201, 71, 251, - 59, 232, 75, 16, 208, 31, 133, 247, 96, 251, 59, 232, 75, 16, 208, 31, - 237, 118, 251, 59, 232, 75, 16, 133, 199, 229, 222, 188, 251, 59, 232, - 75, 16, 235, 119, 195, 176, 251, 59, 232, 75, 16, 208, 31, 235, 119, 57, - 251, 59, 232, 75, 16, 207, 251, 196, 103, 251, 59, 232, 75, 16, 237, 107, - 196, 103, 251, 59, 232, 75, 16, 237, 33, 196, 103, 251, 59, 232, 75, 16, - 222, 189, 196, 103, 251, 59, 232, 75, 16, 243, 11, 196, 103, 251, 59, - 232, 75, 16, 133, 203, 53, 222, 188, 251, 59, 232, 75, 16, 207, 251, 208, - 30, 251, 59, 232, 75, 16, 243, 11, 201, 102, 251, 59, 232, 75, 16, 208, - 31, 242, 83, 251, 59, 232, 75, 16, 133, 199, 229, 237, 42, 251, 59, 232, - 75, 16, 237, 119, 237, 42, 251, 59, 232, 75, 16, 201, 103, 237, 42, 251, - 59, 232, 75, 16, 222, 189, 237, 42, 251, 59, 232, 75, 16, 243, 11, 237, - 42, 251, 59, 232, 75, 16, 144, 203, 53, 201, 71, 251, 59, 232, 75, 16, - 45, 203, 53, 201, 71, 251, 59, 232, 75, 16, 198, 153, 237, 42, 251, 59, - 232, 75, 16, 230, 204, 237, 42, 251, 59, 232, 75, 16, 242, 75, 164, 251, - 59, 232, 75, 16, 237, 119, 198, 152, 251, 59, 232, 75, 16, 191, 20, 251, - 59, 232, 75, 16, 201, 72, 198, 152, 251, 59, 232, 75, 16, 204, 26, 196, - 103, 251, 59, 232, 75, 16, 208, 31, 213, 12, 234, 44, 251, 59, 232, 75, - 16, 208, 31, 208, 12, 251, 59, 232, 75, 16, 144, 247, 97, 198, 152, 251, - 59, 232, 75, 16, 133, 247, 97, 198, 152, 251, 59, 232, 75, 16, 223, 83, - 251, 59, 232, 75, 16, 207, 3, 251, 59, 232, 75, 16, 211, 110, 251, 59, - 232, 75, 16, 251, 161, 196, 103, 251, 59, 232, 75, 16, 234, 48, 196, 103, - 251, 59, 232, 75, 16, 223, 84, 196, 103, 251, 59, 232, 75, 16, 211, 111, - 196, 103, 251, 59, 232, 75, 16, 251, 160, 213, 12, 243, 126, 77, 50, 251, - 116, 4, 235, 119, 191, 21, 57, 203, 21, 211, 77, 248, 62, 248, 236, 113, - 81, 219, 113, 4, 82, 236, 140, 223, 119, 113, 239, 27, 196, 101, 113, - 236, 225, 196, 101, 113, 234, 107, 113, 239, 63, 113, 63, 51, 4, 247, 22, - 81, 219, 112, 234, 78, 113, 251, 152, 221, 223, 113, 229, 202, 113, 47, - 228, 241, 249, 88, 4, 213, 9, 47, 197, 242, 235, 123, 248, 22, 243, 11, - 4, 213, 15, 57, 196, 99, 113, 215, 216, 113, 228, 84, 113, 211, 75, 230, - 115, 113, 211, 75, 220, 141, 113, 210, 93, 113, 210, 92, 113, 236, 234, - 238, 169, 16, 232, 146, 109, 202, 29, 113, 251, 59, 232, 75, 16, 208, 30, - 237, 138, 204, 11, 221, 223, 113, 208, 217, 210, 204, 214, 73, 210, 204, - 208, 212, 205, 77, 113, 242, 238, 205, 77, 113, 45, 210, 114, 116, 102, - 45, 210, 114, 233, 203, 45, 210, 114, 110, 102, 50, 210, 114, 116, 102, - 50, 210, 114, 233, 203, 50, 210, 114, 110, 102, 45, 51, 248, 54, 116, - 239, 1, 45, 51, 248, 54, 233, 203, 45, 51, 248, 54, 110, 239, 1, 50, 51, - 248, 54, 116, 239, 1, 50, 51, 248, 54, 233, 203, 50, 51, 248, 54, 110, - 239, 1, 45, 238, 171, 248, 54, 116, 102, 45, 238, 171, 248, 54, 82, 209, - 175, 45, 238, 171, 248, 54, 110, 102, 238, 171, 248, 54, 233, 203, 50, - 238, 171, 248, 54, 116, 102, 50, 238, 171, 248, 54, 82, 209, 175, 50, - 238, 171, 248, 54, 110, 102, 223, 114, 233, 203, 228, 241, 219, 113, 233, - 203, 116, 45, 211, 57, 110, 50, 238, 171, 248, 54, 205, 53, 116, 50, 211, - 57, 110, 45, 238, 171, 248, 54, 205, 53, 200, 202, 198, 53, 200, 202, - 248, 76, 198, 54, 51, 248, 53, 248, 77, 51, 248, 53, 248, 77, 51, 248, - 54, 139, 198, 54, 51, 248, 53, 48, 16, 248, 76, 45, 81, 111, 219, 112, - 50, 81, 111, 219, 112, 228, 241, 205, 97, 219, 111, 228, 241, 205, 97, - 219, 110, 228, 241, 205, 97, 219, 109, 228, 241, 205, 97, 219, 108, 237, - 97, 16, 156, 81, 23, 198, 54, 183, 237, 97, 16, 156, 81, 23, 248, 77, - 183, 237, 97, 16, 156, 81, 4, 243, 10, 237, 97, 16, 156, 144, 23, 228, - 241, 4, 243, 10, 237, 97, 16, 156, 133, 23, 228, 241, 4, 243, 10, 237, - 97, 16, 156, 81, 4, 197, 241, 237, 97, 16, 156, 144, 23, 228, 241, 4, - 197, 241, 237, 97, 16, 156, 133, 23, 228, 241, 4, 197, 241, 237, 97, 16, - 156, 81, 23, 193, 138, 237, 97, 16, 156, 144, 23, 228, 241, 4, 193, 138, - 237, 97, 16, 156, 133, 23, 228, 241, 4, 193, 138, 237, 97, 16, 156, 144, - 23, 228, 240, 237, 97, 16, 156, 133, 23, 228, 240, 237, 97, 16, 156, 81, - 23, 198, 54, 219, 224, 237, 97, 16, 156, 81, 23, 248, 77, 219, 224, 51, - 232, 159, 207, 23, 113, 234, 149, 113, 81, 219, 113, 233, 203, 216, 159, - 248, 36, 216, 159, 179, 139, 203, 39, 216, 159, 203, 40, 139, 219, 19, - 216, 159, 179, 139, 105, 203, 25, 216, 159, 105, 203, 26, 139, 219, 19, - 216, 159, 105, 203, 26, 222, 197, 216, 159, 197, 221, 216, 159, 199, 65, - 216, 159, 210, 22, 234, 208, 230, 188, 232, 69, 198, 54, 210, 113, 248, - 77, 210, 113, 198, 54, 238, 171, 248, 53, 248, 77, 238, 171, 248, 53, - 198, 54, 198, 42, 203, 103, 248, 53, 248, 77, 198, 42, 203, 103, 248, 53, - 63, 198, 5, 248, 221, 206, 189, 4, 243, 10, 201, 51, 232, 204, 252, 64, - 238, 168, 234, 134, 223, 99, 237, 138, 233, 207, 113, 62, 206, 203, 55, - 197, 241, 62, 219, 219, 55, 197, 241, 62, 196, 76, 55, 197, 241, 62, 235, - 122, 55, 197, 241, 62, 206, 203, 55, 197, 242, 4, 81, 164, 62, 219, 219, - 55, 197, 242, 4, 81, 164, 62, 206, 203, 197, 242, 4, 55, 81, 164, 251, - 201, 242, 222, 201, 58, 198, 145, 242, 222, 228, 175, 4, 232, 184, 205, - 140, 62, 216, 213, 219, 219, 197, 241, 62, 216, 213, 206, 203, 197, 241, - 62, 216, 213, 196, 76, 197, 241, 62, 216, 213, 235, 122, 197, 241, 55, - 81, 164, 62, 51, 40, 201, 63, 62, 243, 11, 40, 207, 97, 208, 255, 113, - 208, 255, 211, 103, 113, 208, 255, 211, 105, 113, 208, 255, 202, 93, 113, - 211, 168, 233, 194, 113, 16, 40, 212, 138, 16, 40, 201, 98, 79, 229, 232, - 16, 40, 201, 98, 79, 199, 53, 16, 40, 234, 95, 79, 199, 53, 16, 40, 234, - 95, 79, 198, 11, 16, 40, 234, 81, 16, 40, 252, 51, 16, 40, 248, 235, 16, - 40, 249, 140, 16, 40, 228, 241, 199, 230, 16, 40, 219, 113, 233, 50, 16, - 40, 81, 199, 230, 16, 40, 232, 146, 233, 50, 16, 40, 247, 88, 207, 22, - 16, 40, 203, 77, 211, 14, 16, 40, 203, 77, 223, 162, 16, 40, 237, 210, - 219, 103, 234, 14, 16, 40, 237, 75, 239, 22, 107, 16, 40, 237, 75, 239, - 22, 109, 16, 40, 237, 75, 239, 22, 138, 16, 40, 237, 75, 239, 22, 134, - 16, 40, 214, 106, 252, 51, 16, 40, 200, 69, 223, 228, 16, 40, 234, 95, - 79, 198, 12, 248, 129, 16, 40, 247, 126, 16, 40, 234, 95, 79, 216, 212, - 16, 40, 200, 226, 16, 40, 234, 14, 16, 40, 233, 7, 204, 10, 16, 40, 230, - 187, 204, 10, 16, 40, 207, 98, 204, 10, 16, 40, 196, 91, 204, 10, 16, 40, - 201, 247, 16, 40, 237, 116, 248, 133, 113, 211, 77, 248, 62, 16, 40, 214, - 76, 16, 40, 237, 117, 232, 146, 109, 16, 40, 200, 227, 232, 146, 109, - 211, 161, 102, 211, 161, 246, 252, 211, 161, 232, 149, 211, 161, 223, 93, - 232, 149, 211, 161, 248, 232, 248, 5, 211, 161, 248, 70, 198, 178, 211, - 161, 248, 48, 249, 93, 228, 15, 211, 161, 251, 139, 79, 243, 125, 211, - 161, 237, 215, 211, 161, 238, 157, 252, 55, 212, 136, 211, 161, 55, 249, - 141, 47, 17, 107, 47, 17, 109, 47, 17, 138, 47, 17, 134, 47, 17, 149, 47, + 45, 50, 64, 4, 55, 81, 106, 118, 211, 76, 57, 96, 211, 76, 57, 45, 50, + 211, 76, 57, 40, 251, 176, 242, 70, 210, 107, 237, 18, 199, 24, 233, 213, + 199, 24, 236, 166, 213, 14, 233, 214, 234, 107, 203, 253, 223, 153, 214, + 247, 234, 134, 211, 148, 213, 14, 251, 135, 234, 134, 211, 148, 2, 234, + 134, 211, 148, 239, 34, 250, 222, 216, 192, 236, 166, 213, 14, 239, 36, + 250, 222, 216, 192, 2, 239, 34, 250, 222, 216, 192, 234, 97, 79, 208, + 192, 215, 62, 208, 202, 215, 62, 239, 11, 215, 62, 200, 201, 216, 37, 56, + 216, 35, 56, 75, 209, 83, 236, 202, 202, 98, 203, 254, 216, 36, 250, 196, + 211, 68, 206, 190, 211, 68, 247, 251, 211, 68, 51, 206, 129, 238, 193, + 206, 129, 232, 123, 206, 129, 208, 188, 159, 223, 141, 50, 251, 117, 251, + 117, 216, 228, 251, 117, 201, 226, 251, 117, 236, 205, 236, 166, 213, 14, + 236, 209, 210, 121, 159, 213, 14, 210, 121, 159, 219, 31, 251, 127, 219, + 31, 211, 58, 223, 101, 196, 92, 223, 115, 55, 223, 115, 197, 225, 223, + 115, 239, 28, 223, 115, 200, 171, 223, 115, 195, 11, 223, 115, 242, 223, + 223, 115, 242, 223, 239, 28, 223, 115, 251, 87, 239, 28, 223, 115, 199, + 23, 249, 5, 207, 128, 208, 189, 75, 216, 36, 233, 221, 231, 146, 208, + 189, 229, 2, 198, 153, 211, 68, 207, 19, 198, 152, 223, 95, 219, 247, + 206, 9, 202, 173, 193, 138, 193, 10, 208, 202, 213, 14, 198, 152, 216, + 37, 198, 152, 250, 188, 234, 47, 159, 213, 14, 250, 188, 234, 47, 159, + 251, 42, 234, 47, 159, 251, 42, 247, 220, 213, 14, 252, 50, 234, 47, 159, + 214, 107, 251, 42, 213, 23, 252, 50, 234, 47, 159, 251, 167, 234, 47, + 159, 213, 14, 251, 167, 234, 47, 159, 251, 167, 234, 47, 211, 59, 234, + 47, 159, 197, 225, 198, 152, 251, 177, 234, 47, 159, 234, 38, 159, 231, + 145, 234, 38, 159, 237, 19, 248, 211, 251, 44, 199, 34, 219, 122, 231, + 145, 234, 47, 159, 251, 42, 234, 47, 119, 211, 59, 199, 34, 223, 180, + 211, 148, 223, 180, 79, 211, 59, 251, 42, 234, 47, 159, 242, 86, 234, 44, + 234, 45, 242, 85, 206, 190, 223, 165, 234, 47, 159, 206, 190, 234, 47, + 159, 238, 252, 159, 234, 5, 234, 43, 159, 201, 104, 234, 44, 237, 109, + 234, 47, 159, 234, 47, 119, 247, 207, 237, 128, 216, 228, 247, 206, 208, + 13, 234, 47, 159, 213, 14, 234, 47, 159, 228, 19, 159, 213, 14, 228, 19, + 159, 201, 36, 234, 38, 159, 219, 182, 211, 59, 234, 47, 159, 230, 206, + 211, 59, 234, 47, 159, 219, 182, 139, 234, 47, 159, 230, 206, 139, 234, + 47, 159, 219, 182, 247, 220, 213, 14, 234, 47, 159, 230, 206, 247, 220, + 213, 14, 234, 47, 159, 215, 147, 219, 181, 215, 147, 230, 205, 248, 211, + 213, 14, 234, 38, 159, 213, 14, 219, 181, 213, 14, 230, 205, 214, 107, + 219, 182, 213, 23, 234, 47, 159, 214, 107, 230, 206, 213, 23, 234, 47, + 159, 219, 182, 211, 59, 234, 38, 159, 230, 206, 211, 59, 234, 38, 159, + 214, 107, 219, 182, 213, 23, 234, 38, 159, 214, 107, 230, 206, 213, 23, + 234, 38, 159, 219, 182, 211, 59, 230, 205, 230, 206, 211, 59, 219, 181, + 214, 107, 219, 182, 213, 23, 230, 205, 214, 107, 230, 206, 213, 23, 219, + 181, 208, 233, 200, 220, 208, 234, 211, 59, 234, 47, 159, 200, 221, 211, + 59, 234, 47, 159, 208, 234, 211, 59, 234, 38, 159, 200, 221, 211, 59, + 234, 38, 159, 236, 166, 213, 14, 208, 236, 236, 166, 213, 14, 200, 222, + 200, 230, 211, 148, 200, 181, 211, 148, 213, 14, 42, 200, 230, 211, 148, + 213, 14, 42, 200, 181, 211, 148, 200, 230, 79, 211, 59, 234, 47, 159, + 200, 181, 79, 211, 59, 234, 47, 159, 214, 107, 42, 200, 230, 79, 213, 23, + 234, 47, 159, 214, 107, 42, 200, 181, 79, 213, 23, 234, 47, 159, 200, + 230, 79, 4, 213, 14, 234, 47, 159, 200, 181, 79, 4, 213, 14, 234, 47, + 159, 215, 126, 215, 127, 215, 128, 215, 127, 196, 92, 51, 223, 180, 211, + 148, 51, 211, 48, 211, 148, 51, 223, 180, 79, 211, 59, 234, 47, 159, 51, + 211, 48, 79, 211, 59, 234, 47, 159, 51, 247, 113, 51, 238, 183, 47, 209, + 83, 47, 216, 36, 47, 198, 144, 47, 236, 202, 202, 98, 47, 75, 211, 68, + 47, 206, 190, 211, 68, 47, 250, 196, 211, 68, 47, 234, 44, 47, 237, 217, + 112, 209, 83, 112, 216, 36, 112, 198, 144, 112, 75, 211, 68, 50, 199, + 228, 45, 199, 228, 144, 199, 228, 133, 199, 228, 250, 199, 216, 3, 197, + 201, 232, 154, 197, 225, 81, 249, 90, 50, 197, 57, 55, 81, 249, 90, 55, + 50, 197, 57, 236, 166, 213, 14, 208, 181, 213, 14, 197, 201, 236, 166, + 213, 14, 232, 155, 214, 110, 55, 81, 249, 90, 55, 50, 197, 57, 208, 234, + 196, 105, 207, 66, 200, 221, 196, 105, 207, 66, 213, 20, 200, 245, 211, + 148, 239, 34, 250, 222, 213, 20, 200, 244, 213, 20, 200, 245, 79, 211, + 59, 234, 47, 159, 239, 34, 250, 222, 213, 20, 200, 245, 211, 59, 234, 47, + 159, 211, 48, 211, 148, 223, 180, 211, 148, 215, 133, 229, 191, 239, 45, + 217, 29, 223, 112, 192, 192, 214, 226, 213, 22, 50, 251, 118, 4, 251, 18, + 50, 197, 241, 215, 62, 219, 31, 251, 127, 215, 62, 219, 31, 211, 58, 215, + 62, 223, 101, 215, 62, 196, 92, 237, 35, 211, 68, 75, 211, 68, 201, 104, + 211, 68, 236, 202, 198, 144, 248, 65, 45, 213, 20, 233, 95, 204, 25, 208, + 202, 50, 213, 20, 233, 95, 204, 25, 208, 202, 45, 204, 25, 208, 202, 50, + 204, 25, 208, 202, 207, 19, 198, 153, 234, 44, 238, 173, 219, 31, 211, + 58, 238, 173, 219, 31, 251, 127, 55, 200, 229, 55, 200, 180, 55, 223, + 101, 55, 196, 92, 209, 117, 234, 47, 23, 210, 121, 159, 219, 182, 4, 236, + 142, 230, 206, 4, 236, 142, 195, 83, 215, 147, 219, 181, 195, 83, 215, + 147, 230, 205, 219, 182, 234, 47, 119, 211, 59, 230, 205, 230, 206, 234, + 47, 119, 211, 59, 219, 181, 234, 47, 119, 211, 59, 219, 181, 234, 47, + 119, 211, 59, 230, 205, 234, 47, 119, 211, 59, 208, 233, 234, 47, 119, + 211, 59, 200, 220, 236, 166, 213, 14, 208, 237, 211, 59, 234, 46, 236, + 166, 213, 14, 200, 223, 211, 59, 234, 46, 213, 14, 51, 223, 180, 79, 211, + 59, 234, 47, 159, 213, 14, 51, 211, 48, 79, 211, 59, 234, 47, 159, 51, + 223, 180, 79, 211, 59, 213, 14, 234, 47, 159, 51, 211, 48, 79, 211, 59, + 213, 14, 234, 47, 159, 219, 182, 247, 220, 213, 14, 234, 38, 159, 230, + 206, 247, 220, 213, 14, 234, 38, 159, 208, 234, 247, 220, 213, 14, 234, + 38, 159, 200, 221, 247, 220, 213, 14, 234, 38, 159, 213, 14, 213, 20, + 200, 245, 211, 148, 236, 166, 213, 14, 239, 36, 250, 222, 213, 20, 200, + 244, 213, 14, 213, 20, 200, 245, 79, 211, 59, 234, 47, 159, 236, 166, + 213, 14, 239, 36, 250, 222, 213, 20, 200, 245, 211, 59, 234, 46, 81, 234, + 122, 216, 84, 228, 243, 234, 122, 133, 50, 237, 41, 234, 122, 144, 50, + 237, 41, 234, 122, 234, 134, 79, 4, 180, 228, 243, 106, 234, 134, 79, 4, + 81, 249, 90, 250, 185, 234, 97, 79, 228, 243, 106, 2, 234, 134, 79, 4, + 81, 249, 90, 250, 185, 234, 97, 79, 228, 243, 106, 234, 134, 79, 4, 75, + 58, 234, 134, 79, 4, 211, 8, 2, 234, 134, 79, 4, 211, 8, 234, 134, 79, 4, + 196, 103, 234, 134, 79, 4, 105, 228, 243, 201, 16, 239, 34, 4, 180, 228, + 243, 106, 239, 34, 4, 81, 249, 90, 250, 185, 234, 97, 79, 228, 243, 106, + 2, 239, 34, 4, 81, 249, 90, 250, 185, 234, 97, 79, 228, 243, 106, 239, + 34, 4, 211, 8, 2, 239, 34, 4, 211, 8, 191, 167, 213, 12, 249, 133, 216, + 191, 237, 36, 56, 234, 137, 57, 228, 174, 133, 250, 237, 144, 250, 237, + 208, 196, 209, 250, 193, 135, 219, 114, 45, 247, 32, 50, 247, 32, 45, + 232, 195, 50, 232, 195, 248, 79, 50, 238, 221, 248, 79, 45, 238, 221, + 198, 54, 50, 238, 221, 198, 54, 45, 238, 221, 207, 19, 213, 14, 56, 51, + 218, 234, 251, 18, 205, 44, 205, 53, 199, 107, 207, 98, 209, 27, 223, + 146, 195, 56, 201, 191, 209, 110, 79, 223, 111, 56, 154, 213, 14, 56, + 193, 145, 228, 176, 198, 54, 45, 239, 3, 198, 54, 50, 239, 3, 248, 79, + 45, 239, 3, 248, 79, 50, 239, 3, 198, 54, 132, 223, 115, 248, 79, 132, + 223, 115, 232, 95, 202, 66, 133, 250, 238, 248, 212, 105, 228, 243, 249, + 78, 211, 61, 221, 224, 234, 34, 119, 199, 34, 179, 192, 236, 223, 165, + 42, 207, 95, 248, 64, 221, 222, 219, 221, 251, 118, 248, 55, 206, 204, + 251, 118, 248, 55, 234, 34, 119, 199, 34, 219, 226, 248, 223, 206, 189, + 238, 140, 251, 177, 250, 246, 200, 74, 198, 39, 206, 42, 236, 254, 211, + 49, 239, 50, 199, 181, 202, 82, 238, 248, 238, 247, 251, 61, 232, 77, 16, + 228, 69, 251, 61, 232, 77, 16, 201, 182, 208, 32, 251, 61, 232, 77, 16, + 208, 33, 234, 46, 251, 61, 232, 77, 16, 208, 33, 236, 209, 251, 61, 232, + 77, 16, 208, 33, 237, 34, 251, 61, 232, 77, 16, 208, 33, 222, 190, 251, + 61, 232, 77, 16, 208, 33, 243, 12, 251, 61, 232, 77, 16, 243, 13, 201, + 72, 251, 61, 232, 77, 16, 243, 13, 222, 190, 251, 61, 232, 77, 16, 202, + 99, 164, 251, 61, 232, 77, 16, 249, 144, 164, 251, 61, 232, 77, 16, 208, + 33, 202, 98, 251, 61, 232, 77, 16, 208, 33, 249, 143, 251, 61, 232, 77, + 16, 208, 33, 219, 181, 251, 61, 232, 77, 16, 208, 33, 230, 205, 251, 61, + 232, 77, 16, 118, 195, 176, 251, 61, 232, 77, 16, 96, 195, 176, 251, 61, + 232, 77, 16, 208, 33, 118, 57, 251, 61, 232, 77, 16, 208, 33, 96, 57, + 251, 61, 232, 77, 16, 243, 13, 249, 143, 251, 61, 232, 77, 16, 144, 199, + 229, 196, 103, 251, 61, 232, 77, 16, 237, 109, 201, 72, 251, 61, 232, 77, + 16, 208, 33, 144, 247, 98, 251, 61, 232, 77, 16, 208, 33, 237, 108, 251, + 61, 232, 77, 16, 144, 199, 229, 222, 190, 251, 61, 232, 77, 16, 196, 66, + 195, 176, 251, 61, 232, 77, 16, 208, 33, 196, 66, 57, 251, 61, 232, 77, + 16, 133, 199, 229, 211, 8, 251, 61, 232, 77, 16, 237, 121, 201, 72, 251, + 61, 232, 77, 16, 208, 33, 133, 247, 98, 251, 61, 232, 77, 16, 208, 33, + 237, 120, 251, 61, 232, 77, 16, 133, 199, 229, 222, 190, 251, 61, 232, + 77, 16, 235, 121, 195, 176, 251, 61, 232, 77, 16, 208, 33, 235, 121, 57, + 251, 61, 232, 77, 16, 207, 253, 196, 103, 251, 61, 232, 77, 16, 237, 109, + 196, 103, 251, 61, 232, 77, 16, 237, 35, 196, 103, 251, 61, 232, 77, 16, + 222, 191, 196, 103, 251, 61, 232, 77, 16, 243, 13, 196, 103, 251, 61, + 232, 77, 16, 133, 203, 54, 222, 190, 251, 61, 232, 77, 16, 207, 253, 208, + 32, 251, 61, 232, 77, 16, 243, 13, 201, 103, 251, 61, 232, 77, 16, 208, + 33, 242, 85, 251, 61, 232, 77, 16, 133, 199, 229, 237, 44, 251, 61, 232, + 77, 16, 237, 121, 237, 44, 251, 61, 232, 77, 16, 201, 104, 237, 44, 251, + 61, 232, 77, 16, 222, 191, 237, 44, 251, 61, 232, 77, 16, 243, 13, 237, + 44, 251, 61, 232, 77, 16, 144, 203, 54, 201, 72, 251, 61, 232, 77, 16, + 45, 203, 54, 201, 72, 251, 61, 232, 77, 16, 198, 153, 237, 44, 251, 61, + 232, 77, 16, 230, 206, 237, 44, 251, 61, 232, 77, 16, 242, 77, 164, 251, + 61, 232, 77, 16, 237, 121, 198, 152, 251, 61, 232, 77, 16, 191, 20, 251, + 61, 232, 77, 16, 201, 73, 198, 152, 251, 61, 232, 77, 16, 204, 27, 196, + 103, 251, 61, 232, 77, 16, 208, 33, 213, 14, 234, 46, 251, 61, 232, 77, + 16, 208, 33, 208, 14, 251, 61, 232, 77, 16, 144, 247, 99, 198, 152, 251, + 61, 232, 77, 16, 133, 247, 99, 198, 152, 251, 61, 232, 77, 16, 223, 85, + 251, 61, 232, 77, 16, 207, 4, 251, 61, 232, 77, 16, 211, 112, 251, 61, + 232, 77, 16, 251, 163, 196, 103, 251, 61, 232, 77, 16, 234, 50, 196, 103, + 251, 61, 232, 77, 16, 223, 86, 196, 103, 251, 61, 232, 77, 16, 211, 113, + 196, 103, 251, 61, 232, 77, 16, 251, 162, 213, 14, 243, 128, 77, 50, 251, + 118, 4, 235, 121, 191, 21, 57, 203, 22, 211, 79, 248, 64, 248, 238, 113, + 81, 219, 115, 4, 82, 236, 142, 223, 121, 113, 239, 29, 196, 101, 113, + 236, 227, 196, 101, 113, 234, 109, 113, 239, 65, 113, 63, 51, 4, 247, 24, + 81, 219, 114, 234, 80, 113, 251, 154, 221, 225, 113, 229, 204, 113, 47, + 228, 243, 249, 90, 4, 213, 11, 47, 197, 242, 235, 125, 248, 24, 243, 13, + 4, 213, 17, 57, 196, 99, 113, 215, 218, 113, 228, 86, 113, 211, 77, 230, + 117, 113, 211, 77, 220, 143, 113, 210, 95, 113, 210, 94, 113, 236, 236, + 238, 171, 16, 232, 148, 109, 202, 30, 113, 251, 61, 232, 77, 16, 208, 32, + 237, 140, 204, 12, 221, 225, 113, 208, 219, 210, 206, 214, 75, 210, 206, + 208, 214, 205, 78, 113, 242, 240, 205, 78, 113, 45, 210, 116, 116, 102, + 45, 210, 116, 233, 205, 45, 210, 116, 110, 102, 50, 210, 116, 116, 102, + 50, 210, 116, 233, 205, 50, 210, 116, 110, 102, 45, 51, 248, 56, 116, + 239, 3, 45, 51, 248, 56, 233, 205, 45, 51, 248, 56, 110, 239, 3, 50, 51, + 248, 56, 116, 239, 3, 50, 51, 248, 56, 233, 205, 50, 51, 248, 56, 110, + 239, 3, 45, 238, 173, 248, 56, 116, 102, 45, 238, 173, 248, 56, 82, 209, + 177, 45, 238, 173, 248, 56, 110, 102, 238, 173, 248, 56, 233, 205, 50, + 238, 173, 248, 56, 116, 102, 50, 238, 173, 248, 56, 82, 209, 177, 50, + 238, 173, 248, 56, 110, 102, 223, 116, 233, 205, 228, 243, 219, 115, 233, + 205, 116, 45, 211, 59, 110, 50, 238, 173, 248, 56, 205, 54, 116, 50, 211, + 59, 110, 45, 238, 173, 248, 56, 205, 54, 200, 202, 198, 53, 200, 202, + 248, 78, 198, 54, 51, 248, 55, 248, 79, 51, 248, 55, 248, 79, 51, 248, + 56, 139, 198, 54, 51, 248, 55, 48, 16, 248, 78, 45, 81, 111, 219, 114, + 50, 81, 111, 219, 114, 228, 243, 205, 98, 219, 113, 228, 243, 205, 98, + 219, 112, 228, 243, 205, 98, 219, 111, 228, 243, 205, 98, 219, 110, 237, + 99, 16, 156, 81, 23, 198, 54, 179, 237, 99, 16, 156, 81, 23, 248, 79, + 179, 237, 99, 16, 156, 81, 4, 243, 12, 237, 99, 16, 156, 144, 23, 228, + 243, 4, 243, 12, 237, 99, 16, 156, 133, 23, 228, 243, 4, 243, 12, 237, + 99, 16, 156, 81, 4, 197, 241, 237, 99, 16, 156, 144, 23, 228, 243, 4, + 197, 241, 237, 99, 16, 156, 133, 23, 228, 243, 4, 197, 241, 237, 99, 16, + 156, 81, 23, 193, 138, 237, 99, 16, 156, 144, 23, 228, 243, 4, 193, 138, + 237, 99, 16, 156, 133, 23, 228, 243, 4, 193, 138, 237, 99, 16, 156, 144, + 23, 228, 242, 237, 99, 16, 156, 133, 23, 228, 242, 237, 99, 16, 156, 81, + 23, 198, 54, 219, 226, 237, 99, 16, 156, 81, 23, 248, 79, 219, 226, 51, + 232, 161, 207, 24, 113, 234, 151, 113, 81, 219, 115, 233, 205, 216, 161, + 248, 38, 216, 161, 180, 139, 203, 40, 216, 161, 203, 41, 139, 219, 21, + 216, 161, 180, 139, 105, 203, 26, 216, 161, 105, 203, 27, 139, 219, 21, + 216, 161, 105, 203, 27, 222, 199, 216, 161, 197, 221, 216, 161, 199, 65, + 216, 161, 210, 24, 234, 210, 230, 190, 232, 71, 198, 54, 210, 115, 248, + 79, 210, 115, 198, 54, 238, 173, 248, 55, 248, 79, 238, 173, 248, 55, + 198, 54, 198, 42, 203, 104, 248, 55, 248, 79, 198, 42, 203, 104, 248, 55, + 63, 198, 5, 248, 223, 206, 190, 4, 243, 12, 201, 52, 232, 206, 252, 66, + 238, 170, 234, 136, 223, 101, 237, 140, 233, 209, 113, 62, 206, 204, 55, + 197, 241, 62, 219, 221, 55, 197, 241, 62, 196, 76, 55, 197, 241, 62, 235, + 124, 55, 197, 241, 62, 206, 204, 55, 197, 242, 4, 81, 164, 62, 219, 221, + 55, 197, 242, 4, 81, 164, 62, 206, 204, 197, 242, 4, 55, 81, 164, 251, + 203, 242, 224, 201, 59, 198, 145, 242, 224, 228, 177, 4, 232, 186, 205, + 141, 62, 216, 215, 219, 221, 197, 241, 62, 216, 215, 206, 204, 197, 241, + 62, 216, 215, 196, 76, 197, 241, 62, 216, 215, 235, 124, 197, 241, 55, + 81, 164, 62, 51, 40, 201, 64, 62, 243, 13, 40, 207, 99, 209, 1, 113, 209, + 1, 211, 105, 113, 209, 1, 211, 107, 113, 209, 1, 202, 94, 113, 211, 170, + 233, 196, 113, 16, 40, 212, 140, 16, 40, 201, 99, 79, 229, 234, 16, 40, + 201, 99, 79, 199, 53, 16, 40, 234, 97, 79, 199, 53, 16, 40, 234, 97, 79, + 198, 11, 16, 40, 234, 83, 16, 40, 252, 53, 16, 40, 248, 237, 16, 40, 249, + 142, 16, 40, 228, 243, 199, 230, 16, 40, 219, 115, 233, 52, 16, 40, 81, + 199, 230, 16, 40, 232, 148, 233, 52, 16, 40, 247, 90, 207, 23, 16, 40, + 203, 78, 211, 16, 16, 40, 203, 78, 223, 164, 16, 40, 237, 212, 219, 105, + 234, 16, 16, 40, 237, 77, 239, 24, 107, 16, 40, 237, 77, 239, 24, 109, + 16, 40, 237, 77, 239, 24, 138, 16, 40, 237, 77, 239, 24, 134, 16, 40, + 214, 108, 252, 53, 16, 40, 200, 69, 223, 230, 16, 40, 234, 97, 79, 198, + 12, 248, 131, 16, 40, 247, 128, 16, 40, 234, 97, 79, 216, 214, 16, 40, + 200, 227, 16, 40, 234, 16, 16, 40, 233, 9, 204, 11, 16, 40, 230, 189, + 204, 11, 16, 40, 207, 100, 204, 11, 16, 40, 196, 91, 204, 11, 16, 40, + 201, 248, 16, 40, 237, 118, 248, 135, 113, 211, 79, 248, 64, 16, 40, 214, + 78, 16, 40, 237, 119, 232, 148, 109, 16, 40, 200, 228, 232, 148, 109, + 211, 163, 102, 211, 163, 246, 254, 211, 163, 232, 151, 211, 163, 223, 95, + 232, 151, 211, 163, 248, 234, 248, 7, 211, 163, 248, 72, 198, 178, 211, + 163, 248, 50, 249, 95, 228, 17, 211, 163, 251, 141, 79, 243, 127, 211, + 163, 237, 217, 211, 163, 238, 159, 252, 57, 212, 138, 211, 163, 55, 249, + 143, 47, 17, 107, 47, 17, 109, 47, 17, 138, 47, 17, 134, 47, 17, 150, 47, 17, 169, 47, 17, 175, 47, 17, 171, 47, 17, 178, 47, 31, 199, 95, 47, 31, - 234, 127, 47, 31, 197, 37, 47, 31, 198, 251, 47, 31, 232, 122, 47, 31, - 233, 19, 47, 31, 202, 130, 47, 31, 203, 244, 47, 31, 234, 161, 47, 31, - 213, 171, 47, 31, 197, 32, 127, 17, 107, 127, 17, 109, 127, 17, 138, 127, - 17, 134, 127, 17, 149, 127, 17, 169, 127, 17, 175, 127, 17, 171, 127, 17, - 178, 127, 31, 199, 95, 127, 31, 234, 127, 127, 31, 197, 37, 127, 31, 198, - 251, 127, 31, 232, 122, 127, 31, 233, 19, 127, 31, 202, 130, 127, 31, - 203, 244, 127, 31, 234, 161, 127, 31, 213, 171, 127, 31, 197, 32, 17, 91, - 232, 80, 201, 63, 17, 105, 232, 80, 201, 63, 17, 115, 232, 80, 201, 63, - 17, 232, 128, 232, 80, 201, 63, 17, 232, 226, 232, 80, 201, 63, 17, 202, - 136, 232, 80, 201, 63, 17, 203, 247, 232, 80, 201, 63, 17, 234, 164, 232, - 80, 201, 63, 17, 213, 175, 232, 80, 201, 63, 31, 199, 96, 232, 80, 201, - 63, 31, 234, 128, 232, 80, 201, 63, 31, 197, 38, 232, 80, 201, 63, 31, - 198, 252, 232, 80, 201, 63, 31, 232, 123, 232, 80, 201, 63, 31, 233, 20, - 232, 80, 201, 63, 31, 202, 131, 232, 80, 201, 63, 31, 203, 245, 232, 80, - 201, 63, 31, 234, 162, 232, 80, 201, 63, 31, 213, 172, 232, 80, 201, 63, - 31, 197, 33, 232, 80, 201, 63, 127, 8, 2, 1, 65, 127, 8, 2, 1, 250, 120, - 127, 8, 2, 1, 247, 193, 127, 8, 2, 1, 238, 127, 127, 8, 2, 1, 71, 127, 8, - 2, 1, 233, 175, 127, 8, 2, 1, 232, 51, 127, 8, 2, 1, 230, 116, 127, 8, 2, - 1, 68, 127, 8, 2, 1, 223, 35, 127, 8, 2, 1, 222, 152, 127, 8, 2, 1, 172, - 127, 8, 2, 1, 218, 168, 127, 8, 2, 1, 215, 61, 127, 8, 2, 1, 74, 127, 8, - 2, 1, 210, 236, 127, 8, 2, 1, 208, 104, 127, 8, 2, 1, 146, 127, 8, 2, 1, - 206, 8, 127, 8, 2, 1, 200, 43, 127, 8, 2, 1, 66, 127, 8, 2, 1, 196, 12, + 234, 129, 47, 31, 197, 37, 47, 31, 198, 251, 47, 31, 232, 124, 47, 31, + 233, 21, 47, 31, 202, 131, 47, 31, 203, 245, 47, 31, 234, 163, 47, 31, + 213, 173, 47, 31, 197, 32, 127, 17, 107, 127, 17, 109, 127, 17, 138, 127, + 17, 134, 127, 17, 150, 127, 17, 169, 127, 17, 175, 127, 17, 171, 127, 17, + 178, 127, 31, 199, 95, 127, 31, 234, 129, 127, 31, 197, 37, 127, 31, 198, + 251, 127, 31, 232, 124, 127, 31, 233, 21, 127, 31, 202, 131, 127, 31, + 203, 245, 127, 31, 234, 163, 127, 31, 213, 173, 127, 31, 197, 32, 17, 91, + 232, 82, 201, 64, 17, 105, 232, 82, 201, 64, 17, 115, 232, 82, 201, 64, + 17, 232, 130, 232, 82, 201, 64, 17, 232, 228, 232, 82, 201, 64, 17, 202, + 137, 232, 82, 201, 64, 17, 203, 248, 232, 82, 201, 64, 17, 234, 166, 232, + 82, 201, 64, 17, 213, 177, 232, 82, 201, 64, 31, 199, 96, 232, 82, 201, + 64, 31, 234, 130, 232, 82, 201, 64, 31, 197, 38, 232, 82, 201, 64, 31, + 198, 252, 232, 82, 201, 64, 31, 232, 125, 232, 82, 201, 64, 31, 233, 22, + 232, 82, 201, 64, 31, 202, 132, 232, 82, 201, 64, 31, 203, 246, 232, 82, + 201, 64, 31, 234, 164, 232, 82, 201, 64, 31, 213, 174, 232, 82, 201, 64, + 31, 197, 33, 232, 82, 201, 64, 127, 8, 2, 1, 65, 127, 8, 2, 1, 250, 122, + 127, 8, 2, 1, 247, 195, 127, 8, 2, 1, 238, 129, 127, 8, 2, 1, 71, 127, 8, + 2, 1, 233, 177, 127, 8, 2, 1, 232, 53, 127, 8, 2, 1, 230, 118, 127, 8, 2, + 1, 68, 127, 8, 2, 1, 223, 37, 127, 8, 2, 1, 222, 154, 127, 8, 2, 1, 172, + 127, 8, 2, 1, 218, 170, 127, 8, 2, 1, 215, 63, 127, 8, 2, 1, 74, 127, 8, + 2, 1, 210, 238, 127, 8, 2, 1, 208, 106, 127, 8, 2, 1, 146, 127, 8, 2, 1, + 206, 9, 127, 8, 2, 1, 200, 43, 127, 8, 2, 1, 66, 127, 8, 2, 1, 196, 12, 127, 8, 2, 1, 193, 224, 127, 8, 2, 1, 192, 235, 127, 8, 2, 1, 192, 159, - 127, 8, 2, 1, 191, 166, 47, 8, 6, 1, 65, 47, 8, 6, 1, 250, 120, 47, 8, 6, - 1, 247, 193, 47, 8, 6, 1, 238, 127, 47, 8, 6, 1, 71, 47, 8, 6, 1, 233, - 175, 47, 8, 6, 1, 232, 51, 47, 8, 6, 1, 230, 116, 47, 8, 6, 1, 68, 47, 8, - 6, 1, 223, 35, 47, 8, 6, 1, 222, 152, 47, 8, 6, 1, 172, 47, 8, 6, 1, 218, - 168, 47, 8, 6, 1, 215, 61, 47, 8, 6, 1, 74, 47, 8, 6, 1, 210, 236, 47, 8, - 6, 1, 208, 104, 47, 8, 6, 1, 146, 47, 8, 6, 1, 206, 8, 47, 8, 6, 1, 200, + 127, 8, 2, 1, 191, 166, 47, 8, 6, 1, 65, 47, 8, 6, 1, 250, 122, 47, 8, 6, + 1, 247, 195, 47, 8, 6, 1, 238, 129, 47, 8, 6, 1, 71, 47, 8, 6, 1, 233, + 177, 47, 8, 6, 1, 232, 53, 47, 8, 6, 1, 230, 118, 47, 8, 6, 1, 68, 47, 8, + 6, 1, 223, 37, 47, 8, 6, 1, 222, 154, 47, 8, 6, 1, 172, 47, 8, 6, 1, 218, + 170, 47, 8, 6, 1, 215, 63, 47, 8, 6, 1, 74, 47, 8, 6, 1, 210, 238, 47, 8, + 6, 1, 208, 106, 47, 8, 6, 1, 146, 47, 8, 6, 1, 206, 9, 47, 8, 6, 1, 200, 43, 47, 8, 6, 1, 66, 47, 8, 6, 1, 196, 12, 47, 8, 6, 1, 193, 224, 47, 8, 6, 1, 192, 235, 47, 8, 6, 1, 192, 159, 47, 8, 6, 1, 191, 166, 47, 8, 2, - 1, 65, 47, 8, 2, 1, 250, 120, 47, 8, 2, 1, 247, 193, 47, 8, 2, 1, 238, - 127, 47, 8, 2, 1, 71, 47, 8, 2, 1, 233, 175, 47, 8, 2, 1, 232, 51, 47, 8, - 2, 1, 230, 116, 47, 8, 2, 1, 68, 47, 8, 2, 1, 223, 35, 47, 8, 2, 1, 222, - 152, 47, 8, 2, 1, 172, 47, 8, 2, 1, 218, 168, 47, 8, 2, 1, 215, 61, 47, - 8, 2, 1, 74, 47, 8, 2, 1, 210, 236, 47, 8, 2, 1, 208, 104, 47, 8, 2, 1, - 146, 47, 8, 2, 1, 206, 8, 47, 8, 2, 1, 200, 43, 47, 8, 2, 1, 66, 47, 8, + 1, 65, 47, 8, 2, 1, 250, 122, 47, 8, 2, 1, 247, 195, 47, 8, 2, 1, 238, + 129, 47, 8, 2, 1, 71, 47, 8, 2, 1, 233, 177, 47, 8, 2, 1, 232, 53, 47, 8, + 2, 1, 230, 118, 47, 8, 2, 1, 68, 47, 8, 2, 1, 223, 37, 47, 8, 2, 1, 222, + 154, 47, 8, 2, 1, 172, 47, 8, 2, 1, 218, 170, 47, 8, 2, 1, 215, 63, 47, + 8, 2, 1, 74, 47, 8, 2, 1, 210, 238, 47, 8, 2, 1, 208, 106, 47, 8, 2, 1, + 146, 47, 8, 2, 1, 206, 9, 47, 8, 2, 1, 200, 43, 47, 8, 2, 1, 66, 47, 8, 2, 1, 196, 12, 47, 8, 2, 1, 193, 224, 47, 8, 2, 1, 192, 235, 47, 8, 2, 1, - 192, 159, 47, 8, 2, 1, 191, 166, 47, 17, 191, 77, 214, 106, 47, 31, 234, - 127, 214, 106, 47, 31, 197, 37, 214, 106, 47, 31, 198, 251, 214, 106, 47, - 31, 232, 122, 214, 106, 47, 31, 233, 19, 214, 106, 47, 31, 202, 130, 214, - 106, 47, 31, 203, 244, 214, 106, 47, 31, 234, 161, 214, 106, 47, 31, 213, - 171, 214, 106, 47, 31, 197, 32, 55, 47, 17, 107, 55, 47, 17, 109, 55, 47, - 17, 138, 55, 47, 17, 134, 55, 47, 17, 149, 55, 47, 17, 169, 55, 47, 17, - 175, 55, 47, 17, 171, 55, 47, 17, 178, 55, 47, 31, 199, 95, 214, 106, 47, - 17, 191, 77, 111, 122, 156, 228, 240, 111, 122, 88, 228, 240, 111, 122, - 156, 195, 135, 111, 122, 88, 195, 135, 111, 122, 156, 197, 225, 237, 216, - 228, 240, 111, 122, 88, 197, 225, 237, 216, 228, 240, 111, 122, 156, 197, - 225, 237, 216, 195, 135, 111, 122, 88, 197, 225, 237, 216, 195, 135, 111, - 122, 156, 208, 26, 237, 216, 228, 240, 111, 122, 88, 208, 26, 237, 216, - 228, 240, 111, 122, 156, 208, 26, 237, 216, 195, 135, 111, 122, 88, 208, - 26, 237, 216, 195, 135, 111, 122, 156, 144, 23, 183, 111, 122, 144, 156, - 23, 50, 229, 217, 111, 122, 144, 88, 23, 50, 219, 132, 111, 122, 88, 144, - 23, 183, 111, 122, 156, 144, 23, 219, 224, 111, 122, 144, 156, 23, 45, - 229, 217, 111, 122, 144, 88, 23, 45, 219, 132, 111, 122, 88, 144, 23, - 219, 224, 111, 122, 156, 133, 23, 183, 111, 122, 133, 156, 23, 50, 229, - 217, 111, 122, 133, 88, 23, 50, 219, 132, 111, 122, 88, 133, 23, 183, - 111, 122, 156, 133, 23, 219, 224, 111, 122, 133, 156, 23, 45, 229, 217, - 111, 122, 133, 88, 23, 45, 219, 132, 111, 122, 88, 133, 23, 219, 224, - 111, 122, 156, 81, 23, 183, 111, 122, 81, 156, 23, 50, 229, 217, 111, - 122, 133, 88, 23, 50, 144, 219, 132, 111, 122, 144, 88, 23, 50, 133, 219, - 132, 111, 122, 81, 88, 23, 50, 219, 132, 111, 122, 144, 156, 23, 50, 133, - 229, 217, 111, 122, 133, 156, 23, 50, 144, 229, 217, 111, 122, 88, 81, - 23, 183, 111, 122, 156, 81, 23, 219, 224, 111, 122, 81, 156, 23, 45, 229, - 217, 111, 122, 133, 88, 23, 45, 144, 219, 132, 111, 122, 144, 88, 23, 45, - 133, 219, 132, 111, 122, 81, 88, 23, 45, 219, 132, 111, 122, 144, 156, - 23, 45, 133, 229, 217, 111, 122, 133, 156, 23, 45, 144, 229, 217, 111, - 122, 88, 81, 23, 219, 224, 111, 122, 156, 144, 23, 228, 240, 111, 122, - 45, 88, 23, 50, 144, 219, 132, 111, 122, 50, 88, 23, 45, 144, 219, 132, - 111, 122, 144, 156, 23, 228, 241, 229, 217, 111, 122, 144, 88, 23, 228, - 241, 219, 132, 111, 122, 50, 156, 23, 45, 144, 229, 217, 111, 122, 45, - 156, 23, 50, 144, 229, 217, 111, 122, 88, 144, 23, 228, 240, 111, 122, - 156, 133, 23, 228, 240, 111, 122, 45, 88, 23, 50, 133, 219, 132, 111, - 122, 50, 88, 23, 45, 133, 219, 132, 111, 122, 133, 156, 23, 228, 241, - 229, 217, 111, 122, 133, 88, 23, 228, 241, 219, 132, 111, 122, 50, 156, - 23, 45, 133, 229, 217, 111, 122, 45, 156, 23, 50, 133, 229, 217, 111, - 122, 88, 133, 23, 228, 240, 111, 122, 156, 81, 23, 228, 240, 111, 122, - 45, 88, 23, 50, 81, 219, 132, 111, 122, 50, 88, 23, 45, 81, 219, 132, - 111, 122, 81, 156, 23, 228, 241, 229, 217, 111, 122, 133, 88, 23, 144, - 228, 241, 219, 132, 111, 122, 144, 88, 23, 133, 228, 241, 219, 132, 111, - 122, 81, 88, 23, 228, 241, 219, 132, 111, 122, 45, 133, 88, 23, 50, 144, - 219, 132, 111, 122, 50, 133, 88, 23, 45, 144, 219, 132, 111, 122, 45, - 144, 88, 23, 50, 133, 219, 132, 111, 122, 50, 144, 88, 23, 45, 133, 219, - 132, 111, 122, 144, 156, 23, 133, 228, 241, 229, 217, 111, 122, 133, 156, - 23, 144, 228, 241, 229, 217, 111, 122, 50, 156, 23, 45, 81, 229, 217, - 111, 122, 45, 156, 23, 50, 81, 229, 217, 111, 122, 88, 81, 23, 228, 240, - 111, 122, 156, 55, 237, 216, 228, 240, 111, 122, 88, 55, 237, 216, 228, - 240, 111, 122, 156, 55, 237, 216, 195, 135, 111, 122, 88, 55, 237, 216, - 195, 135, 111, 122, 55, 228, 240, 111, 122, 55, 195, 135, 111, 122, 144, - 202, 170, 23, 50, 235, 133, 111, 122, 144, 55, 23, 50, 202, 169, 111, - 122, 55, 144, 23, 183, 111, 122, 144, 202, 170, 23, 45, 235, 133, 111, - 122, 144, 55, 23, 45, 202, 169, 111, 122, 55, 144, 23, 219, 224, 111, - 122, 133, 202, 170, 23, 50, 235, 133, 111, 122, 133, 55, 23, 50, 202, - 169, 111, 122, 55, 133, 23, 183, 111, 122, 133, 202, 170, 23, 45, 235, - 133, 111, 122, 133, 55, 23, 45, 202, 169, 111, 122, 55, 133, 23, 219, - 224, 111, 122, 81, 202, 170, 23, 50, 235, 133, 111, 122, 81, 55, 23, 50, - 202, 169, 111, 122, 55, 81, 23, 183, 111, 122, 81, 202, 170, 23, 45, 235, - 133, 111, 122, 81, 55, 23, 45, 202, 169, 111, 122, 55, 81, 23, 219, 224, - 111, 122, 144, 202, 170, 23, 228, 241, 235, 133, 111, 122, 144, 55, 23, - 228, 241, 202, 169, 111, 122, 55, 144, 23, 228, 240, 111, 122, 133, 202, - 170, 23, 228, 241, 235, 133, 111, 122, 133, 55, 23, 228, 241, 202, 169, - 111, 122, 55, 133, 23, 228, 240, 111, 122, 81, 202, 170, 23, 228, 241, - 235, 133, 111, 122, 81, 55, 23, 228, 241, 202, 169, 111, 122, 55, 81, 23, - 228, 240, 111, 122, 156, 251, 17, 144, 23, 183, 111, 122, 156, 251, 17, - 144, 23, 219, 224, 111, 122, 156, 251, 17, 133, 23, 219, 224, 111, 122, - 156, 251, 17, 133, 23, 183, 111, 122, 156, 237, 39, 116, 50, 119, 110, - 219, 224, 111, 122, 156, 237, 39, 116, 45, 119, 110, 183, 111, 122, 156, - 237, 39, 238, 217, 111, 122, 156, 219, 224, 111, 122, 156, 196, 77, 111, - 122, 156, 183, 111, 122, 156, 235, 123, 111, 122, 88, 219, 224, 111, 122, - 88, 196, 77, 111, 122, 88, 183, 111, 122, 88, 235, 123, 111, 122, 156, - 45, 23, 88, 183, 111, 122, 156, 133, 23, 88, 235, 123, 111, 122, 88, 45, - 23, 156, 183, 111, 122, 88, 133, 23, 156, 235, 123, 116, 132, 248, 129, - 110, 91, 234, 160, 248, 129, 110, 91, 208, 23, 248, 129, 110, 115, 234, - 158, 248, 129, 110, 132, 248, 129, 110, 232, 226, 234, 158, 248, 129, - 110, 115, 208, 21, 248, 129, 110, 203, 247, 234, 158, 248, 129, 232, 80, - 248, 129, 45, 203, 247, 234, 158, 248, 129, 45, 115, 208, 21, 248, 129, - 45, 232, 226, 234, 158, 248, 129, 45, 132, 248, 129, 45, 115, 234, 158, - 248, 129, 45, 91, 208, 23, 248, 129, 45, 91, 234, 160, 248, 129, 50, 132, - 248, 129, 156, 203, 153, 216, 213, 203, 153, 237, 221, 203, 153, 116, 91, - 234, 160, 248, 129, 50, 91, 234, 160, 248, 129, 208, 28, 110, 219, 224, - 208, 28, 110, 183, 208, 28, 116, 219, 224, 208, 28, 116, 45, 23, 110, 45, - 23, 110, 183, 208, 28, 116, 45, 23, 110, 183, 208, 28, 116, 45, 23, 116, - 50, 23, 110, 219, 224, 208, 28, 116, 45, 23, 116, 50, 23, 110, 183, 208, - 28, 116, 183, 208, 28, 116, 50, 23, 110, 219, 224, 208, 28, 116, 50, 23, - 110, 45, 23, 110, 183, 62, 201, 190, 63, 201, 190, 63, 51, 4, 206, 113, - 239, 0, 63, 51, 239, 33, 62, 2, 201, 190, 51, 4, 228, 241, 233, 5, 51, 4, - 81, 233, 5, 51, 4, 211, 38, 238, 211, 233, 5, 51, 4, 116, 45, 119, 110, - 50, 233, 5, 51, 4, 116, 50, 119, 110, 45, 233, 5, 51, 4, 237, 39, 238, - 211, 233, 5, 62, 2, 201, 190, 63, 2, 201, 190, 62, 207, 92, 63, 207, 92, - 62, 81, 207, 92, 63, 81, 207, 92, 62, 210, 117, 63, 210, 117, 62, 196, + 192, 159, 47, 8, 2, 1, 191, 166, 47, 17, 191, 77, 214, 108, 47, 31, 234, + 129, 214, 108, 47, 31, 197, 37, 214, 108, 47, 31, 198, 251, 214, 108, 47, + 31, 232, 124, 214, 108, 47, 31, 233, 21, 214, 108, 47, 31, 202, 131, 214, + 108, 47, 31, 203, 245, 214, 108, 47, 31, 234, 163, 214, 108, 47, 31, 213, + 173, 214, 108, 47, 31, 197, 32, 55, 47, 17, 107, 55, 47, 17, 109, 55, 47, + 17, 138, 55, 47, 17, 134, 55, 47, 17, 150, 55, 47, 17, 169, 55, 47, 17, + 175, 55, 47, 17, 171, 55, 47, 17, 178, 55, 47, 31, 199, 95, 214, 108, 47, + 17, 191, 77, 111, 122, 156, 228, 242, 111, 122, 88, 228, 242, 111, 122, + 156, 195, 135, 111, 122, 88, 195, 135, 111, 122, 156, 197, 225, 237, 218, + 228, 242, 111, 122, 88, 197, 225, 237, 218, 228, 242, 111, 122, 156, 197, + 225, 237, 218, 195, 135, 111, 122, 88, 197, 225, 237, 218, 195, 135, 111, + 122, 156, 208, 28, 237, 218, 228, 242, 111, 122, 88, 208, 28, 237, 218, + 228, 242, 111, 122, 156, 208, 28, 237, 218, 195, 135, 111, 122, 88, 208, + 28, 237, 218, 195, 135, 111, 122, 156, 144, 23, 179, 111, 122, 144, 156, + 23, 50, 229, 219, 111, 122, 144, 88, 23, 50, 219, 134, 111, 122, 88, 144, + 23, 179, 111, 122, 156, 144, 23, 219, 226, 111, 122, 144, 156, 23, 45, + 229, 219, 111, 122, 144, 88, 23, 45, 219, 134, 111, 122, 88, 144, 23, + 219, 226, 111, 122, 156, 133, 23, 179, 111, 122, 133, 156, 23, 50, 229, + 219, 111, 122, 133, 88, 23, 50, 219, 134, 111, 122, 88, 133, 23, 179, + 111, 122, 156, 133, 23, 219, 226, 111, 122, 133, 156, 23, 45, 229, 219, + 111, 122, 133, 88, 23, 45, 219, 134, 111, 122, 88, 133, 23, 219, 226, + 111, 122, 156, 81, 23, 179, 111, 122, 81, 156, 23, 50, 229, 219, 111, + 122, 133, 88, 23, 50, 144, 219, 134, 111, 122, 144, 88, 23, 50, 133, 219, + 134, 111, 122, 81, 88, 23, 50, 219, 134, 111, 122, 144, 156, 23, 50, 133, + 229, 219, 111, 122, 133, 156, 23, 50, 144, 229, 219, 111, 122, 88, 81, + 23, 179, 111, 122, 156, 81, 23, 219, 226, 111, 122, 81, 156, 23, 45, 229, + 219, 111, 122, 133, 88, 23, 45, 144, 219, 134, 111, 122, 144, 88, 23, 45, + 133, 219, 134, 111, 122, 81, 88, 23, 45, 219, 134, 111, 122, 144, 156, + 23, 45, 133, 229, 219, 111, 122, 133, 156, 23, 45, 144, 229, 219, 111, + 122, 88, 81, 23, 219, 226, 111, 122, 156, 144, 23, 228, 242, 111, 122, + 45, 88, 23, 50, 144, 219, 134, 111, 122, 50, 88, 23, 45, 144, 219, 134, + 111, 122, 144, 156, 23, 228, 243, 229, 219, 111, 122, 144, 88, 23, 228, + 243, 219, 134, 111, 122, 50, 156, 23, 45, 144, 229, 219, 111, 122, 45, + 156, 23, 50, 144, 229, 219, 111, 122, 88, 144, 23, 228, 242, 111, 122, + 156, 133, 23, 228, 242, 111, 122, 45, 88, 23, 50, 133, 219, 134, 111, + 122, 50, 88, 23, 45, 133, 219, 134, 111, 122, 133, 156, 23, 228, 243, + 229, 219, 111, 122, 133, 88, 23, 228, 243, 219, 134, 111, 122, 50, 156, + 23, 45, 133, 229, 219, 111, 122, 45, 156, 23, 50, 133, 229, 219, 111, + 122, 88, 133, 23, 228, 242, 111, 122, 156, 81, 23, 228, 242, 111, 122, + 45, 88, 23, 50, 81, 219, 134, 111, 122, 50, 88, 23, 45, 81, 219, 134, + 111, 122, 81, 156, 23, 228, 243, 229, 219, 111, 122, 133, 88, 23, 144, + 228, 243, 219, 134, 111, 122, 144, 88, 23, 133, 228, 243, 219, 134, 111, + 122, 81, 88, 23, 228, 243, 219, 134, 111, 122, 45, 133, 88, 23, 50, 144, + 219, 134, 111, 122, 50, 133, 88, 23, 45, 144, 219, 134, 111, 122, 45, + 144, 88, 23, 50, 133, 219, 134, 111, 122, 50, 144, 88, 23, 45, 133, 219, + 134, 111, 122, 144, 156, 23, 133, 228, 243, 229, 219, 111, 122, 133, 156, + 23, 144, 228, 243, 229, 219, 111, 122, 50, 156, 23, 45, 81, 229, 219, + 111, 122, 45, 156, 23, 50, 81, 229, 219, 111, 122, 88, 81, 23, 228, 242, + 111, 122, 156, 55, 237, 218, 228, 242, 111, 122, 88, 55, 237, 218, 228, + 242, 111, 122, 156, 55, 237, 218, 195, 135, 111, 122, 88, 55, 237, 218, + 195, 135, 111, 122, 55, 228, 242, 111, 122, 55, 195, 135, 111, 122, 144, + 202, 171, 23, 50, 235, 135, 111, 122, 144, 55, 23, 50, 202, 170, 111, + 122, 55, 144, 23, 179, 111, 122, 144, 202, 171, 23, 45, 235, 135, 111, + 122, 144, 55, 23, 45, 202, 170, 111, 122, 55, 144, 23, 219, 226, 111, + 122, 133, 202, 171, 23, 50, 235, 135, 111, 122, 133, 55, 23, 50, 202, + 170, 111, 122, 55, 133, 23, 179, 111, 122, 133, 202, 171, 23, 45, 235, + 135, 111, 122, 133, 55, 23, 45, 202, 170, 111, 122, 55, 133, 23, 219, + 226, 111, 122, 81, 202, 171, 23, 50, 235, 135, 111, 122, 81, 55, 23, 50, + 202, 170, 111, 122, 55, 81, 23, 179, 111, 122, 81, 202, 171, 23, 45, 235, + 135, 111, 122, 81, 55, 23, 45, 202, 170, 111, 122, 55, 81, 23, 219, 226, + 111, 122, 144, 202, 171, 23, 228, 243, 235, 135, 111, 122, 144, 55, 23, + 228, 243, 202, 170, 111, 122, 55, 144, 23, 228, 242, 111, 122, 133, 202, + 171, 23, 228, 243, 235, 135, 111, 122, 133, 55, 23, 228, 243, 202, 170, + 111, 122, 55, 133, 23, 228, 242, 111, 122, 81, 202, 171, 23, 228, 243, + 235, 135, 111, 122, 81, 55, 23, 228, 243, 202, 170, 111, 122, 55, 81, 23, + 228, 242, 111, 122, 156, 251, 19, 144, 23, 179, 111, 122, 156, 251, 19, + 144, 23, 219, 226, 111, 122, 156, 251, 19, 133, 23, 219, 226, 111, 122, + 156, 251, 19, 133, 23, 179, 111, 122, 156, 237, 41, 116, 50, 119, 110, + 219, 226, 111, 122, 156, 237, 41, 116, 45, 119, 110, 179, 111, 122, 156, + 237, 41, 238, 219, 111, 122, 156, 219, 226, 111, 122, 156, 196, 77, 111, + 122, 156, 179, 111, 122, 156, 235, 125, 111, 122, 88, 219, 226, 111, 122, + 88, 196, 77, 111, 122, 88, 179, 111, 122, 88, 235, 125, 111, 122, 156, + 45, 23, 88, 179, 111, 122, 156, 133, 23, 88, 235, 125, 111, 122, 88, 45, + 23, 156, 179, 111, 122, 88, 133, 23, 156, 235, 125, 116, 132, 248, 131, + 110, 91, 234, 162, 248, 131, 110, 91, 208, 25, 248, 131, 110, 115, 234, + 160, 248, 131, 110, 132, 248, 131, 110, 232, 228, 234, 160, 248, 131, + 110, 115, 208, 23, 248, 131, 110, 203, 248, 234, 160, 248, 131, 232, 82, + 248, 131, 45, 203, 248, 234, 160, 248, 131, 45, 115, 208, 23, 248, 131, + 45, 232, 228, 234, 160, 248, 131, 45, 132, 248, 131, 45, 115, 234, 160, + 248, 131, 45, 91, 208, 25, 248, 131, 45, 91, 234, 162, 248, 131, 50, 132, + 248, 131, 156, 203, 154, 216, 215, 203, 154, 237, 223, 203, 154, 116, 91, + 234, 162, 248, 131, 50, 91, 234, 162, 248, 131, 208, 30, 110, 219, 226, + 208, 30, 110, 179, 208, 30, 116, 219, 226, 208, 30, 116, 45, 23, 110, 45, + 23, 110, 179, 208, 30, 116, 45, 23, 110, 179, 208, 30, 116, 45, 23, 116, + 50, 23, 110, 219, 226, 208, 30, 116, 45, 23, 116, 50, 23, 110, 179, 208, + 30, 116, 179, 208, 30, 116, 50, 23, 110, 219, 226, 208, 30, 116, 50, 23, + 110, 45, 23, 110, 179, 62, 201, 191, 63, 201, 191, 63, 51, 4, 206, 114, + 239, 2, 63, 51, 239, 35, 62, 2, 201, 191, 51, 4, 228, 243, 233, 7, 51, 4, + 81, 233, 7, 51, 4, 211, 40, 238, 213, 233, 7, 51, 4, 116, 45, 119, 110, + 50, 233, 7, 51, 4, 116, 50, 119, 110, 45, 233, 7, 51, 4, 237, 41, 238, + 213, 233, 7, 62, 2, 201, 191, 63, 2, 201, 191, 62, 207, 94, 63, 207, 94, + 62, 81, 207, 94, 63, 81, 207, 94, 62, 210, 119, 63, 210, 119, 62, 196, 76, 197, 241, 63, 196, 76, 197, 241, 62, 196, 76, 2, 197, 241, 63, 196, - 76, 2, 197, 241, 62, 206, 203, 197, 241, 63, 206, 203, 197, 241, 62, 206, - 203, 2, 197, 241, 63, 206, 203, 2, 197, 241, 62, 206, 203, 209, 59, 63, - 206, 203, 209, 59, 62, 235, 122, 197, 241, 63, 235, 122, 197, 241, 62, - 235, 122, 2, 197, 241, 63, 235, 122, 2, 197, 241, 62, 219, 219, 197, 241, - 63, 219, 219, 197, 241, 62, 219, 219, 2, 197, 241, 63, 219, 219, 2, 197, - 241, 62, 219, 219, 209, 59, 63, 219, 219, 209, 59, 62, 237, 32, 63, 237, - 32, 63, 237, 33, 239, 33, 62, 2, 237, 32, 232, 235, 218, 232, 63, 243, - 10, 235, 138, 243, 10, 243, 11, 4, 81, 233, 5, 247, 244, 62, 243, 10, - 243, 11, 4, 45, 132, 248, 139, 243, 11, 4, 50, 132, 248, 139, 243, 11, 4, - 110, 132, 248, 139, 243, 11, 4, 116, 132, 248, 139, 243, 11, 4, 116, 50, - 208, 28, 248, 139, 243, 11, 4, 251, 175, 247, 218, 116, 45, 208, 28, 248, - 139, 45, 132, 62, 243, 10, 50, 132, 62, 243, 10, 223, 95, 247, 248, 223, - 95, 63, 243, 10, 116, 132, 223, 95, 63, 243, 10, 110, 132, 223, 95, 63, - 243, 10, 116, 45, 208, 28, 243, 4, 251, 16, 116, 50, 208, 28, 243, 4, - 251, 16, 110, 50, 208, 28, 243, 4, 251, 16, 110, 45, 208, 28, 243, 4, - 251, 16, 116, 132, 243, 10, 110, 132, 243, 10, 62, 110, 50, 197, 241, 62, + 76, 2, 197, 241, 62, 206, 204, 197, 241, 63, 206, 204, 197, 241, 62, 206, + 204, 2, 197, 241, 63, 206, 204, 2, 197, 241, 62, 206, 204, 209, 61, 63, + 206, 204, 209, 61, 62, 235, 124, 197, 241, 63, 235, 124, 197, 241, 62, + 235, 124, 2, 197, 241, 63, 235, 124, 2, 197, 241, 62, 219, 221, 197, 241, + 63, 219, 221, 197, 241, 62, 219, 221, 2, 197, 241, 63, 219, 221, 2, 197, + 241, 62, 219, 221, 209, 61, 63, 219, 221, 209, 61, 62, 237, 34, 63, 237, + 34, 63, 237, 35, 239, 35, 62, 2, 237, 34, 232, 237, 218, 234, 63, 243, + 12, 235, 140, 243, 12, 243, 13, 4, 81, 233, 7, 247, 246, 62, 243, 12, + 243, 13, 4, 45, 132, 248, 141, 243, 13, 4, 50, 132, 248, 141, 243, 13, 4, + 110, 132, 248, 141, 243, 13, 4, 116, 132, 248, 141, 243, 13, 4, 116, 50, + 208, 30, 248, 141, 243, 13, 4, 251, 177, 247, 220, 116, 45, 208, 30, 248, + 141, 45, 132, 62, 243, 12, 50, 132, 62, 243, 12, 223, 97, 247, 250, 223, + 97, 63, 243, 12, 116, 132, 223, 97, 63, 243, 12, 110, 132, 223, 97, 63, + 243, 12, 116, 45, 208, 30, 243, 6, 251, 18, 116, 50, 208, 30, 243, 6, + 251, 18, 110, 50, 208, 30, 243, 6, 251, 18, 110, 45, 208, 30, 243, 6, + 251, 18, 116, 132, 243, 12, 110, 132, 243, 12, 62, 110, 50, 197, 241, 62, 110, 45, 197, 241, 62, 116, 45, 197, 241, 62, 116, 50, 197, 241, 63, 247, - 248, 51, 4, 45, 132, 248, 139, 51, 4, 50, 132, 248, 139, 51, 4, 116, 45, - 237, 39, 132, 248, 139, 51, 4, 110, 50, 237, 39, 132, 248, 139, 63, 51, - 4, 81, 248, 154, 219, 112, 63, 196, 76, 197, 242, 4, 236, 140, 196, 76, - 197, 242, 4, 45, 132, 248, 139, 196, 76, 197, 242, 4, 50, 132, 248, 139, - 220, 13, 243, 10, 63, 51, 4, 116, 45, 208, 27, 63, 51, 4, 110, 45, 208, - 27, 63, 51, 4, 110, 50, 208, 27, 63, 51, 4, 116, 50, 208, 27, 63, 243, - 11, 4, 116, 45, 208, 27, 63, 243, 11, 4, 110, 45, 208, 27, 63, 243, 11, - 4, 110, 50, 208, 27, 63, 243, 11, 4, 116, 50, 208, 27, 116, 45, 197, 241, - 116, 50, 197, 241, 110, 45, 197, 241, 63, 216, 213, 201, 190, 62, 216, - 213, 201, 190, 63, 216, 213, 2, 201, 190, 62, 216, 213, 2, 201, 190, 110, - 50, 197, 241, 62, 200, 199, 4, 207, 119, 242, 210, 196, 117, 202, 48, - 242, 77, 62, 201, 102, 63, 201, 102, 219, 129, 198, 208, 200, 198, 250, - 213, 213, 35, 237, 86, 213, 35, 239, 42, 211, 62, 62, 199, 106, 63, 199, - 106, 249, 107, 248, 62, 249, 107, 111, 4, 243, 125, 249, 107, 111, 4, - 192, 235, 205, 154, 196, 118, 4, 207, 150, 235, 96, 228, 181, 248, 207, - 63, 203, 49, 209, 175, 62, 203, 49, 209, 175, 203, 140, 207, 18, 206, - 122, 232, 190, 229, 224, 247, 248, 62, 45, 209, 58, 223, 148, 62, 50, - 209, 58, 223, 148, 63, 45, 209, 58, 223, 148, 63, 133, 209, 58, 223, 148, - 63, 50, 209, 58, 223, 148, 63, 144, 209, 58, 223, 148, 202, 104, 23, 238, - 215, 247, 71, 56, 207, 164, 56, 248, 162, 56, 247, 151, 251, 99, 211, 39, - 238, 217, 243, 96, 207, 3, 238, 218, 79, 218, 255, 238, 218, 79, 222, - 254, 201, 103, 23, 238, 227, 233, 74, 113, 252, 34, 203, 143, 230, 62, - 23, 202, 213, 210, 61, 113, 192, 22, 192, 106, 197, 231, 40, 229, 219, - 197, 231, 40, 220, 43, 197, 231, 40, 232, 243, 197, 231, 40, 198, 209, - 197, 231, 40, 193, 66, 197, 231, 40, 193, 143, 197, 231, 40, 215, 184, - 197, 231, 40, 234, 207, 193, 94, 79, 237, 60, 63, 232, 92, 233, 103, 63, - 202, 64, 233, 103, 62, 202, 64, 233, 103, 63, 200, 199, 4, 207, 119, 232, - 238, 208, 23, 215, 205, 220, 6, 208, 23, 215, 205, 216, 180, 233, 42, 56, - 234, 207, 217, 97, 56, 222, 167, 205, 115, 196, 57, 214, 94, 209, 77, - 251, 2, 199, 164, 231, 152, 247, 124, 219, 186, 195, 38, 219, 143, 205, - 80, 205, 183, 247, 106, 251, 34, 209, 120, 63, 243, 105, 221, 138, 63, - 243, 105, 208, 14, 63, 243, 105, 206, 131, 63, 243, 105, 248, 152, 63, - 243, 105, 221, 76, 63, 243, 105, 210, 74, 62, 243, 105, 221, 138, 62, - 243, 105, 208, 14, 62, 243, 105, 206, 131, 62, 243, 105, 248, 152, 62, - 243, 105, 221, 76, 62, 243, 105, 210, 74, 62, 201, 245, 200, 211, 63, - 229, 224, 200, 211, 63, 237, 33, 200, 211, 62, 242, 207, 200, 211, 63, - 201, 245, 200, 211, 62, 229, 224, 200, 211, 62, 237, 33, 200, 211, 63, - 242, 207, 200, 211, 228, 181, 201, 195, 208, 23, 213, 6, 234, 160, 213, - 6, 249, 13, 234, 160, 213, 1, 249, 13, 202, 129, 213, 1, 215, 97, 232, - 207, 56, 215, 97, 214, 206, 56, 215, 97, 203, 127, 56, 193, 105, 200, 63, - 238, 217, 234, 204, 200, 63, 238, 217, 196, 87, 207, 88, 113, 207, 88, - 16, 40, 196, 254, 209, 98, 207, 88, 16, 40, 196, 252, 209, 98, 207, 88, - 16, 40, 196, 251, 209, 98, 207, 88, 16, 40, 196, 249, 209, 98, 207, 88, - 16, 40, 196, 247, 209, 98, 207, 88, 16, 40, 196, 245, 209, 98, 207, 88, - 16, 40, 196, 243, 209, 98, 207, 88, 16, 40, 231, 149, 217, 28, 62, 196, - 87, 207, 88, 113, 207, 89, 210, 136, 113, 210, 104, 210, 136, 113, 210, - 3, 210, 136, 56, 193, 92, 113, 237, 25, 233, 102, 237, 25, 233, 101, 237, - 25, 233, 100, 237, 25, 233, 99, 237, 25, 233, 98, 237, 25, 233, 97, 63, - 243, 11, 4, 75, 183, 63, 243, 11, 4, 105, 236, 138, 62, 243, 11, 4, 63, - 75, 183, 62, 243, 11, 4, 105, 63, 236, 138, 215, 221, 40, 192, 106, 215, - 221, 40, 192, 21, 237, 6, 40, 230, 205, 192, 106, 237, 6, 40, 219, 178, - 192, 21, 237, 6, 40, 219, 178, 192, 106, 237, 6, 40, 230, 205, 192, 21, - 63, 232, 217, 62, 232, 217, 230, 62, 23, 209, 180, 251, 127, 238, 214, - 200, 130, 201, 112, 79, 252, 8, 205, 98, 251, 191, 232, 186, 231, 162, - 201, 112, 79, 229, 191, 250, 172, 113, 232, 202, 211, 10, 63, 201, 102, - 115, 219, 107, 239, 19, 183, 115, 219, 107, 239, 19, 219, 224, 193, 155, - 56, 137, 195, 12, 56, 235, 128, 233, 42, 56, 235, 128, 217, 97, 56, 223, - 105, 233, 42, 23, 217, 97, 56, 217, 97, 23, 233, 42, 56, 217, 97, 4, 201, - 28, 56, 217, 97, 4, 201, 28, 23, 217, 97, 23, 233, 42, 56, 81, 217, 97, - 4, 201, 28, 56, 228, 241, 217, 97, 4, 201, 28, 56, 216, 213, 63, 243, 10, - 216, 213, 62, 243, 10, 216, 213, 2, 63, 243, 10, 217, 48, 113, 236, 198, - 113, 196, 84, 210, 103, 113, 242, 89, 232, 74, 196, 53, 214, 83, 247, 7, - 210, 185, 222, 173, 195, 80, 243, 75, 62, 215, 206, 219, 126, 203, 176, - 204, 22, 208, 4, 203, 255, 202, 36, 249, 111, 249, 73, 112, 221, 222, 63, - 235, 108, 217, 90, 63, 235, 108, 221, 138, 62, 235, 108, 217, 90, 62, - 235, 108, 221, 138, 202, 49, 193, 51, 202, 52, 200, 199, 248, 242, 242, - 210, 207, 149, 62, 202, 48, 198, 210, 242, 211, 23, 207, 149, 153, 63, - 203, 49, 209, 175, 153, 62, 203, 49, 209, 175, 63, 237, 33, 223, 163, - 201, 190, 238, 210, 220, 21, 236, 229, 247, 102, 211, 65, 209, 180, 247, - 103, 202, 85, 229, 201, 4, 63, 238, 217, 47, 238, 210, 220, 21, 246, 253, - 213, 44, 234, 72, 251, 157, 211, 96, 45, 193, 129, 198, 19, 62, 197, 10, - 45, 193, 129, 198, 19, 63, 197, 10, 45, 193, 129, 198, 19, 62, 45, 220, - 22, 216, 179, 63, 45, 220, 22, 216, 179, 235, 103, 202, 76, 56, 88, 63, - 235, 122, 197, 241, 45, 242, 219, 234, 72, 112, 205, 154, 233, 83, 237, - 39, 223, 163, 63, 243, 11, 223, 163, 62, 201, 190, 62, 197, 203, 207, 29, - 45, 234, 71, 207, 29, 45, 234, 70, 250, 187, 16, 40, 196, 57, 88, 243, - 11, 4, 201, 28, 23, 105, 185, 58, 210, 23, 206, 205, 223, 107, 210, 23, - 219, 221, 223, 107, 210, 23, 223, 93, 210, 23, 62, 238, 218, 211, 105, - 203, 78, 203, 66, 203, 12, 243, 40, 247, 80, 229, 118, 202, 137, 231, - 163, 193, 51, 228, 153, 231, 163, 4, 230, 30, 217, 72, 16, 40, 219, 131, - 215, 184, 196, 118, 211, 105, 230, 188, 232, 129, 232, 218, 223, 163, - 229, 5, 233, 32, 205, 178, 51, 232, 128, 239, 0, 202, 108, 228, 27, 202, - 112, 209, 251, 4, 249, 111, 199, 87, 223, 19, 249, 93, 113, 229, 229, - 230, 207, 113, 232, 83, 208, 153, 238, 182, 211, 105, 62, 201, 190, 63, - 232, 218, 4, 228, 241, 82, 62, 201, 29, 62, 205, 188, 205, 84, 116, 248, - 134, 205, 84, 62, 205, 84, 110, 248, 134, 205, 84, 63, 205, 84, 63, 88, - 243, 126, 77, 199, 107, 219, 40, 56, 199, 182, 235, 102, 251, 223, 234, - 67, 207, 147, 232, 231, 207, 147, 230, 53, 195, 67, 230, 53, 193, 3, 230, - 53, 110, 50, 210, 33, 210, 33, 116, 50, 210, 33, 63, 213, 208, 62, 213, - 208, 243, 126, 77, 88, 243, 126, 77, 215, 127, 192, 235, 88, 215, 127, - 192, 235, 249, 107, 192, 235, 88, 249, 107, 192, 235, 211, 10, 35, 238, - 217, 88, 35, 238, 217, 211, 77, 247, 22, 238, 217, 88, 211, 77, 247, 22, - 238, 217, 8, 238, 217, 203, 151, 63, 8, 238, 217, 211, 10, 8, 238, 217, - 217, 93, 238, 217, 201, 103, 79, 237, 208, 232, 128, 199, 127, 250, 193, - 232, 128, 249, 108, 250, 193, 88, 232, 128, 249, 108, 250, 193, 232, 128, - 242, 205, 250, 193, 62, 232, 128, 209, 60, 201, 102, 63, 232, 128, 209, - 60, 201, 102, 201, 240, 201, 38, 211, 10, 63, 201, 102, 47, 63, 201, 102, - 211, 77, 247, 22, 62, 201, 102, 62, 247, 22, 63, 201, 102, 211, 10, 62, - 201, 102, 88, 211, 10, 62, 201, 102, 209, 130, 201, 102, 203, 151, 63, - 201, 102, 88, 250, 193, 211, 77, 247, 22, 250, 193, 234, 164, 201, 206, - 250, 193, 234, 164, 209, 60, 62, 201, 102, 234, 164, 209, 60, 209, 130, - 201, 102, 202, 136, 209, 60, 62, 201, 102, 234, 164, 209, 60, 207, 90, - 62, 201, 102, 88, 234, 164, 209, 60, 207, 90, 62, 201, 102, 197, 38, 209, - 60, 62, 201, 102, 202, 131, 209, 60, 250, 193, 199, 127, 250, 193, 211, - 77, 247, 22, 199, 127, 250, 193, 88, 199, 127, 250, 193, 202, 136, 209, - 239, 62, 23, 63, 232, 189, 62, 232, 189, 63, 232, 189, 234, 164, 209, - 239, 211, 10, 62, 232, 189, 47, 211, 77, 247, 22, 234, 164, 209, 60, 201, - 102, 88, 199, 127, 209, 130, 250, 193, 202, 50, 198, 172, 197, 234, 202, - 50, 88, 243, 101, 202, 50, 201, 242, 88, 201, 242, 249, 108, 250, 193, - 234, 164, 199, 127, 208, 189, 250, 193, 88, 234, 164, 199, 127, 208, 189, - 250, 193, 238, 218, 77, 203, 151, 63, 243, 10, 214, 106, 112, 238, 218, - 77, 110, 50, 235, 98, 63, 201, 190, 116, 50, 235, 98, 63, 201, 190, 110, - 50, 203, 151, 63, 201, 190, 116, 50, 203, 151, 63, 201, 190, 62, 208, 13, - 87, 211, 42, 63, 208, 13, 87, 211, 42, 63, 233, 216, 87, 211, 42, 62, - 237, 33, 216, 35, 63, 192, 235, 88, 233, 216, 87, 113, 156, 81, 164, 216, - 213, 81, 164, 88, 81, 164, 88, 202, 170, 153, 242, 75, 207, 252, 87, 211, - 42, 88, 202, 170, 242, 75, 207, 252, 87, 211, 42, 88, 55, 153, 242, 75, - 207, 252, 87, 211, 42, 88, 55, 242, 75, 207, 252, 87, 211, 42, 88, 130, - 202, 170, 242, 75, 207, 252, 87, 211, 42, 88, 130, 55, 242, 75, 207, 252, - 87, 211, 42, 238, 163, 201, 81, 210, 128, 3, 211, 42, 88, 233, 216, 87, - 211, 42, 88, 229, 224, 233, 216, 87, 211, 42, 88, 62, 229, 223, 206, 122, - 88, 62, 229, 224, 247, 248, 232, 190, 229, 223, 206, 122, 232, 190, 229, - 224, 247, 248, 216, 213, 45, 210, 114, 211, 42, 216, 213, 50, 210, 114, - 211, 42, 216, 213, 232, 203, 45, 210, 114, 211, 42, 216, 213, 232, 203, - 50, 210, 114, 211, 42, 216, 213, 219, 219, 251, 116, 248, 54, 211, 42, - 216, 213, 206, 203, 251, 116, 248, 54, 211, 42, 88, 219, 219, 251, 116, - 207, 252, 87, 211, 42, 88, 206, 203, 251, 116, 207, 252, 87, 211, 42, 88, - 219, 219, 251, 116, 248, 54, 211, 42, 88, 206, 203, 251, 116, 248, 54, - 211, 42, 156, 45, 198, 42, 203, 103, 248, 54, 211, 42, 156, 50, 198, 42, - 203, 103, 248, 54, 211, 42, 216, 213, 45, 238, 171, 248, 54, 211, 42, - 216, 213, 50, 238, 171, 248, 54, 211, 42, 236, 241, 214, 106, 47, 17, - 107, 236, 241, 214, 106, 47, 17, 109, 236, 241, 214, 106, 47, 17, 138, - 236, 241, 214, 106, 47, 17, 134, 236, 241, 214, 106, 47, 17, 149, 236, - 241, 214, 106, 47, 17, 169, 236, 241, 214, 106, 47, 17, 175, 236, 241, - 214, 106, 47, 17, 171, 236, 241, 214, 106, 47, 17, 178, 236, 241, 214, - 106, 47, 31, 199, 95, 236, 241, 47, 49, 17, 107, 236, 241, 47, 49, 17, - 109, 236, 241, 47, 49, 17, 138, 236, 241, 47, 49, 17, 134, 236, 241, 47, - 49, 17, 149, 236, 241, 47, 49, 17, 169, 236, 241, 47, 49, 17, 175, 236, - 241, 47, 49, 17, 171, 236, 241, 47, 49, 17, 178, 236, 241, 47, 49, 31, - 199, 95, 236, 241, 214, 106, 47, 49, 17, 107, 236, 241, 214, 106, 47, 49, - 17, 109, 236, 241, 214, 106, 47, 49, 17, 138, 236, 241, 214, 106, 47, 49, - 17, 134, 236, 241, 214, 106, 47, 49, 17, 149, 236, 241, 214, 106, 47, 49, - 17, 169, 236, 241, 214, 106, 47, 49, 17, 175, 236, 241, 214, 106, 47, 49, - 17, 171, 236, 241, 214, 106, 47, 49, 17, 178, 236, 241, 214, 106, 47, 49, - 31, 199, 95, 88, 193, 77, 96, 57, 88, 108, 56, 88, 216, 35, 56, 88, 236, - 200, 56, 88, 202, 2, 234, 204, 57, 88, 96, 57, 88, 186, 234, 204, 57, - 235, 113, 209, 62, 96, 57, 88, 206, 114, 96, 57, 197, 240, 96, 57, 88, - 197, 240, 96, 57, 237, 214, 197, 240, 96, 57, 88, 237, 214, 197, 240, 96, - 57, 62, 96, 57, 198, 225, 198, 52, 96, 250, 235, 198, 225, 248, 75, 96, - 250, 235, 62, 96, 250, 235, 88, 62, 238, 163, 235, 119, 23, 96, 57, 88, - 62, 238, 163, 196, 66, 23, 96, 57, 201, 187, 62, 96, 57, 88, 239, 56, 62, - 96, 57, 206, 202, 63, 96, 57, 219, 218, 63, 96, 57, 249, 145, 203, 151, - 63, 96, 57, 232, 95, 203, 151, 63, 96, 57, 88, 110, 206, 201, 63, 96, 57, - 88, 116, 206, 201, 63, 96, 57, 213, 8, 110, 206, 201, 63, 96, 57, 238, - 171, 219, 4, 213, 8, 116, 206, 201, 63, 96, 57, 47, 88, 63, 96, 57, 193, - 88, 96, 57, 248, 138, 202, 2, 234, 204, 57, 248, 138, 96, 57, 248, 138, - 186, 234, 204, 57, 88, 248, 138, 202, 2, 234, 204, 57, 88, 248, 138, 96, - 57, 88, 248, 138, 186, 234, 204, 57, 199, 129, 96, 57, 88, 199, 128, 96, - 57, 193, 115, 96, 57, 88, 193, 115, 96, 57, 211, 71, 96, 57, 55, 238, - 171, 219, 4, 115, 236, 251, 251, 115, 63, 197, 242, 239, 33, 2, 63, 197, - 241, 209, 254, 211, 77, 200, 228, 211, 77, 200, 180, 45, 206, 7, 249, - 131, 237, 112, 50, 206, 7, 249, 131, 237, 112, 211, 57, 4, 75, 223, 117, - 207, 19, 202, 24, 208, 230, 200, 228, 200, 181, 208, 230, 202, 23, 81, - 249, 88, 4, 228, 241, 106, 13, 206, 180, 237, 38, 179, 236, 199, 13, 233, - 83, 237, 38, 112, 219, 29, 251, 125, 112, 219, 29, 211, 56, 63, 237, 33, - 4, 247, 20, 236, 140, 23, 4, 236, 140, 234, 132, 79, 211, 69, 196, 65, - 110, 50, 239, 2, 4, 236, 140, 116, 45, 239, 2, 4, 236, 140, 45, 211, 12, - 222, 199, 50, 211, 12, 222, 199, 232, 80, 211, 12, 222, 199, 220, 13, - 133, 199, 228, 220, 13, 144, 199, 228, 45, 23, 50, 55, 197, 57, 45, 23, - 50, 199, 228, 45, 215, 131, 179, 50, 199, 228, 179, 45, 199, 228, 133, - 199, 229, 4, 243, 11, 58, 218, 233, 236, 206, 247, 205, 228, 241, 206, - 52, 63, 239, 55, 237, 32, 63, 239, 55, 237, 33, 4, 118, 198, 182, 63, - 239, 55, 237, 33, 4, 96, 198, 182, 63, 51, 4, 118, 198, 182, 63, 51, 4, - 96, 198, 182, 13, 45, 63, 51, 248, 53, 13, 50, 63, 51, 248, 53, 13, 45, - 251, 116, 248, 53, 13, 50, 251, 116, 248, 53, 13, 45, 55, 251, 116, 248, - 53, 13, 50, 55, 251, 116, 248, 53, 13, 45, 63, 198, 42, 203, 103, 248, - 53, 13, 50, 63, 198, 42, 203, 103, 248, 53, 13, 45, 232, 203, 210, 113, - 13, 50, 232, 203, 210, 113, 196, 66, 208, 26, 57, 235, 119, 208, 26, 57, - 251, 85, 231, 202, 243, 11, 57, 242, 221, 231, 202, 243, 11, 57, 50, 64, - 4, 47, 209, 81, 179, 118, 57, 179, 96, 57, 179, 45, 50, 57, 179, 118, 55, - 57, 179, 96, 55, 57, 179, 45, 50, 55, 57, 179, 118, 64, 232, 98, 164, - 179, 96, 64, 232, 98, 164, 179, 118, 55, 64, 232, 98, 164, 179, 96, 55, - 64, 232, 98, 164, 179, 96, 201, 183, 57, 69, 70, 248, 132, 69, 70, 236, - 137, 69, 70, 236, 9, 69, 70, 236, 136, 69, 70, 235, 201, 69, 70, 236, 72, - 69, 70, 236, 8, 69, 70, 236, 135, 69, 70, 235, 169, 69, 70, 236, 40, 69, - 70, 235, 232, 69, 70, 236, 103, 69, 70, 235, 200, 69, 70, 236, 71, 69, - 70, 236, 7, 69, 70, 236, 134, 69, 70, 235, 153, 69, 70, 236, 24, 69, 70, - 235, 216, 69, 70, 236, 87, 69, 70, 235, 184, 69, 70, 236, 55, 69, 70, - 235, 247, 69, 70, 236, 118, 69, 70, 235, 168, 69, 70, 236, 39, 69, 70, - 235, 231, 69, 70, 236, 102, 69, 70, 235, 199, 69, 70, 236, 70, 69, 70, - 236, 6, 69, 70, 236, 133, 69, 70, 235, 145, 69, 70, 236, 16, 69, 70, 235, - 208, 69, 70, 236, 79, 69, 70, 235, 176, 69, 70, 236, 47, 69, 70, 235, - 239, 69, 70, 236, 110, 69, 70, 235, 160, 69, 70, 236, 31, 69, 70, 235, - 223, 69, 70, 236, 94, 69, 70, 235, 191, 69, 70, 236, 62, 69, 70, 235, - 254, 69, 70, 236, 125, 69, 70, 235, 152, 69, 70, 236, 23, 69, 70, 235, - 215, 69, 70, 236, 86, 69, 70, 235, 183, 69, 70, 236, 54, 69, 70, 235, - 246, 69, 70, 236, 117, 69, 70, 235, 167, 69, 70, 236, 38, 69, 70, 235, - 230, 69, 70, 236, 101, 69, 70, 235, 198, 69, 70, 236, 69, 69, 70, 236, 5, - 69, 70, 236, 132, 69, 70, 235, 141, 69, 70, 236, 12, 69, 70, 235, 204, - 69, 70, 236, 75, 69, 70, 235, 172, 69, 70, 236, 43, 69, 70, 235, 235, 69, - 70, 236, 106, 69, 70, 235, 156, 69, 70, 236, 27, 69, 70, 235, 219, 69, - 70, 236, 90, 69, 70, 235, 187, 69, 70, 236, 58, 69, 70, 235, 250, 69, 70, - 236, 121, 69, 70, 235, 148, 69, 70, 236, 19, 69, 70, 235, 211, 69, 70, - 236, 82, 69, 70, 235, 179, 69, 70, 236, 50, 69, 70, 235, 242, 69, 70, - 236, 113, 69, 70, 235, 163, 69, 70, 236, 34, 69, 70, 235, 226, 69, 70, - 236, 97, 69, 70, 235, 194, 69, 70, 236, 65, 69, 70, 236, 1, 69, 70, 236, - 128, 69, 70, 235, 144, 69, 70, 236, 15, 69, 70, 235, 207, 69, 70, 236, - 78, 69, 70, 235, 175, 69, 70, 236, 46, 69, 70, 235, 238, 69, 70, 236, - 109, 69, 70, 235, 159, 69, 70, 236, 30, 69, 70, 235, 222, 69, 70, 236, - 93, 69, 70, 235, 190, 69, 70, 236, 61, 69, 70, 235, 253, 69, 70, 236, - 124, 69, 70, 235, 151, 69, 70, 236, 22, 69, 70, 235, 214, 69, 70, 236, - 85, 69, 70, 235, 182, 69, 70, 236, 53, 69, 70, 235, 245, 69, 70, 236, - 116, 69, 70, 235, 166, 69, 70, 236, 37, 69, 70, 235, 229, 69, 70, 236, - 100, 69, 70, 235, 197, 69, 70, 236, 68, 69, 70, 236, 4, 69, 70, 236, 131, - 69, 70, 235, 139, 69, 70, 236, 10, 69, 70, 235, 202, 69, 70, 236, 73, 69, - 70, 235, 170, 69, 70, 236, 41, 69, 70, 235, 233, 69, 70, 236, 104, 69, - 70, 235, 154, 69, 70, 236, 25, 69, 70, 235, 217, 69, 70, 236, 88, 69, 70, - 235, 185, 69, 70, 236, 56, 69, 70, 235, 248, 69, 70, 236, 119, 69, 70, - 235, 146, 69, 70, 236, 17, 69, 70, 235, 209, 69, 70, 236, 80, 69, 70, - 235, 177, 69, 70, 236, 48, 69, 70, 235, 240, 69, 70, 236, 111, 69, 70, - 235, 161, 69, 70, 236, 32, 69, 70, 235, 224, 69, 70, 236, 95, 69, 70, - 235, 192, 69, 70, 236, 63, 69, 70, 235, 255, 69, 70, 236, 126, 69, 70, - 235, 142, 69, 70, 236, 13, 69, 70, 235, 205, 69, 70, 236, 76, 69, 70, - 235, 173, 69, 70, 236, 44, 69, 70, 235, 236, 69, 70, 236, 107, 69, 70, - 235, 157, 69, 70, 236, 28, 69, 70, 235, 220, 69, 70, 236, 91, 69, 70, - 235, 188, 69, 70, 236, 59, 69, 70, 235, 251, 69, 70, 236, 122, 69, 70, - 235, 149, 69, 70, 236, 20, 69, 70, 235, 212, 69, 70, 236, 83, 69, 70, - 235, 180, 69, 70, 236, 51, 69, 70, 235, 243, 69, 70, 236, 114, 69, 70, - 235, 164, 69, 70, 236, 35, 69, 70, 235, 227, 69, 70, 236, 98, 69, 70, - 235, 195, 69, 70, 236, 66, 69, 70, 236, 2, 69, 70, 236, 129, 69, 70, 235, - 140, 69, 70, 236, 11, 69, 70, 235, 203, 69, 70, 236, 74, 69, 70, 235, - 171, 69, 70, 236, 42, 69, 70, 235, 234, 69, 70, 236, 105, 69, 70, 235, - 155, 69, 70, 236, 26, 69, 70, 235, 218, 69, 70, 236, 89, 69, 70, 235, - 186, 69, 70, 236, 57, 69, 70, 235, 249, 69, 70, 236, 120, 69, 70, 235, - 147, 69, 70, 236, 18, 69, 70, 235, 210, 69, 70, 236, 81, 69, 70, 235, - 178, 69, 70, 236, 49, 69, 70, 235, 241, 69, 70, 236, 112, 69, 70, 235, - 162, 69, 70, 236, 33, 69, 70, 235, 225, 69, 70, 236, 96, 69, 70, 235, - 193, 69, 70, 236, 64, 69, 70, 236, 0, 69, 70, 236, 127, 69, 70, 235, 143, - 69, 70, 236, 14, 69, 70, 235, 206, 69, 70, 236, 77, 69, 70, 235, 174, 69, - 70, 236, 45, 69, 70, 235, 237, 69, 70, 236, 108, 69, 70, 235, 158, 69, - 70, 236, 29, 69, 70, 235, 221, 69, 70, 236, 92, 69, 70, 235, 189, 69, 70, - 236, 60, 69, 70, 235, 252, 69, 70, 236, 123, 69, 70, 235, 150, 69, 70, - 236, 21, 69, 70, 235, 213, 69, 70, 236, 84, 69, 70, 235, 181, 69, 70, - 236, 52, 69, 70, 235, 244, 69, 70, 236, 115, 69, 70, 235, 165, 69, 70, - 236, 36, 69, 70, 235, 228, 69, 70, 236, 99, 69, 70, 235, 196, 69, 70, - 236, 67, 69, 70, 236, 3, 69, 70, 236, 130, 96, 197, 13, 64, 4, 81, 106, - 96, 197, 13, 64, 4, 55, 81, 106, 118, 55, 64, 4, 81, 106, 96, 55, 64, 4, - 81, 106, 45, 50, 55, 64, 4, 81, 106, 96, 197, 13, 64, 232, 98, 164, 118, - 55, 64, 232, 98, 164, 96, 55, 64, 232, 98, 164, 235, 119, 64, 4, 228, - 241, 106, 196, 66, 64, 4, 228, 241, 106, 196, 66, 197, 225, 57, 235, 119, - 197, 225, 57, 118, 55, 237, 216, 57, 96, 55, 237, 216, 57, 118, 197, 225, - 237, 216, 57, 96, 197, 225, 237, 216, 57, 96, 197, 13, 197, 225, 237, - 216, 57, 96, 64, 4, 235, 138, 201, 80, 196, 66, 64, 119, 164, 235, 119, - 64, 119, 164, 96, 64, 4, 199, 216, 4, 81, 106, 96, 64, 4, 199, 216, 4, - 55, 81, 106, 96, 197, 13, 64, 4, 199, 215, 96, 197, 13, 64, 4, 199, 216, - 4, 81, 106, 96, 197, 13, 64, 4, 199, 216, 4, 55, 81, 106, 118, 250, 237, - 96, 250, 237, 118, 55, 250, 237, 96, 55, 250, 237, 118, 64, 119, 62, 237, - 32, 96, 64, 119, 62, 237, 32, 118, 64, 232, 98, 249, 88, 119, 62, 237, - 32, 96, 64, 232, 98, 249, 88, 119, 62, 237, 32, 186, 193, 105, 23, 202, - 2, 234, 204, 57, 186, 234, 204, 23, 202, 2, 193, 105, 57, 186, 193, 105, - 64, 4, 102, 186, 234, 204, 64, 4, 102, 202, 2, 234, 204, 64, 4, 102, 202, - 2, 193, 105, 64, 4, 102, 186, 193, 105, 64, 23, 186, 234, 204, 57, 186, - 234, 204, 64, 23, 202, 2, 234, 204, 57, 202, 2, 234, 204, 64, 23, 202, 2, - 193, 105, 57, 202, 2, 193, 105, 64, 23, 186, 193, 105, 57, 206, 180, 237, - 39, 238, 210, 233, 83, 237, 38, 233, 83, 237, 39, 238, 210, 206, 180, - 237, 38, 202, 2, 234, 204, 64, 238, 210, 186, 234, 204, 57, 186, 234, - 204, 64, 238, 210, 202, 2, 234, 204, 57, 233, 83, 237, 39, 238, 210, 186, - 234, 204, 57, 206, 180, 237, 39, 238, 210, 202, 2, 234, 204, 57, 186, - 234, 204, 64, 238, 210, 186, 193, 105, 57, 186, 193, 105, 64, 238, 210, - 186, 234, 204, 57, 193, 139, 64, 209, 58, 236, 231, 183, 64, 209, 58, 96, - 199, 25, 238, 161, 196, 65, 64, 209, 58, 96, 199, 25, 238, 161, 235, 118, - 64, 209, 58, 235, 119, 199, 25, 238, 161, 219, 214, 64, 209, 58, 235, - 119, 199, 25, 238, 161, 206, 197, 206, 200, 251, 17, 242, 221, 57, 219, - 217, 251, 17, 251, 85, 57, 198, 54, 251, 17, 251, 85, 57, 248, 77, 251, - 17, 251, 85, 57, 198, 54, 251, 17, 242, 221, 64, 4, 216, 34, 198, 54, - 251, 17, 251, 85, 64, 4, 209, 81, 110, 50, 204, 27, 242, 221, 57, 110, - 45, 204, 27, 251, 85, 57, 251, 85, 242, 219, 243, 11, 57, 242, 221, 242, - 219, 243, 11, 57, 96, 64, 93, 203, 40, 118, 57, 118, 64, 93, 203, 40, 96, - 57, 203, 40, 96, 64, 93, 118, 57, 96, 64, 4, 108, 60, 118, 64, 4, 108, - 60, 96, 64, 198, 216, 192, 235, 45, 50, 64, 198, 216, 2, 243, 10, 196, - 66, 197, 13, 64, 232, 98, 2, 243, 10, 45, 181, 133, 50, 181, 144, 230, - 12, 45, 181, 144, 50, 181, 133, 230, 12, 133, 181, 50, 144, 181, 45, 230, - 12, 133, 181, 45, 144, 181, 50, 230, 12, 45, 181, 133, 50, 181, 133, 230, - 12, 133, 181, 50, 144, 181, 50, 230, 12, 45, 181, 144, 50, 181, 144, 230, - 12, 133, 181, 45, 144, 181, 45, 230, 12, 118, 230, 13, 4, 181, 133, 119, - 164, 96, 230, 13, 4, 181, 133, 119, 164, 196, 66, 230, 13, 4, 181, 50, - 119, 164, 235, 119, 230, 13, 4, 181, 50, 119, 164, 118, 230, 13, 4, 181, - 144, 119, 164, 96, 230, 13, 4, 181, 144, 119, 164, 196, 66, 230, 13, 4, - 181, 45, 119, 164, 235, 119, 230, 13, 4, 181, 45, 119, 164, 118, 230, 13, - 4, 181, 133, 232, 98, 164, 96, 230, 13, 4, 181, 133, 232, 98, 164, 196, - 66, 230, 13, 4, 181, 50, 232, 98, 164, 235, 119, 230, 13, 4, 181, 50, - 232, 98, 164, 118, 230, 13, 4, 181, 144, 232, 98, 164, 96, 230, 13, 4, - 181, 144, 232, 98, 164, 196, 66, 230, 13, 4, 181, 45, 232, 98, 164, 235, - 119, 230, 13, 4, 181, 45, 232, 98, 164, 118, 230, 13, 4, 181, 133, 93, - 118, 230, 13, 4, 181, 235, 123, 196, 66, 230, 13, 4, 181, 45, 248, 216, - 196, 66, 230, 13, 4, 181, 183, 96, 230, 13, 4, 181, 133, 93, 96, 230, 13, - 4, 181, 235, 123, 235, 119, 230, 13, 4, 181, 45, 248, 216, 235, 119, 230, - 13, 4, 181, 183, 118, 230, 13, 4, 181, 133, 93, 96, 230, 13, 4, 181, 196, - 77, 118, 230, 13, 4, 181, 144, 93, 96, 230, 13, 4, 181, 235, 123, 96, - 230, 13, 4, 181, 133, 93, 118, 230, 13, 4, 181, 196, 77, 96, 230, 13, 4, - 181, 144, 93, 118, 230, 13, 4, 181, 235, 123, 118, 230, 13, 4, 181, 133, - 93, 179, 237, 215, 118, 230, 13, 4, 181, 144, 248, 233, 179, 237, 215, - 96, 230, 13, 4, 181, 133, 93, 179, 237, 215, 96, 230, 13, 4, 181, 144, - 248, 233, 179, 237, 215, 196, 66, 230, 13, 4, 181, 45, 248, 216, 235, - 119, 230, 13, 4, 181, 183, 235, 119, 230, 13, 4, 181, 45, 248, 216, 196, - 66, 230, 13, 4, 181, 183, 50, 55, 64, 4, 206, 113, 229, 235, 234, 43, 3, - 93, 96, 57, 198, 153, 211, 67, 93, 96, 57, 118, 64, 93, 198, 153, 211, - 66, 96, 64, 93, 198, 153, 211, 66, 96, 64, 93, 251, 165, 234, 45, 159, - 219, 180, 93, 118, 57, 118, 64, 198, 216, 219, 179, 230, 204, 93, 96, 57, - 200, 229, 93, 96, 57, 118, 64, 198, 216, 200, 228, 200, 181, 93, 118, 57, - 45, 232, 237, 199, 215, 50, 232, 237, 199, 215, 133, 232, 237, 199, 215, - 144, 232, 237, 199, 215, 197, 225, 81, 249, 88, 237, 112, 191, 167, 213, - 10, 201, 201, 191, 167, 213, 10, 196, 255, 242, 83, 45, 63, 238, 171, - 248, 53, 50, 63, 238, 171, 248, 53, 45, 63, 210, 113, 50, 63, 210, 113, - 191, 167, 213, 10, 45, 223, 178, 248, 53, 191, 167, 213, 10, 50, 223, - 178, 248, 53, 191, 167, 213, 10, 45, 248, 166, 248, 53, 191, 167, 213, - 10, 50, 248, 166, 248, 53, 45, 51, 248, 54, 4, 196, 103, 50, 51, 248, 54, - 4, 196, 103, 45, 51, 248, 54, 4, 198, 183, 223, 163, 198, 54, 239, 1, 50, - 51, 248, 54, 4, 198, 183, 223, 163, 248, 77, 239, 1, 45, 51, 248, 54, 4, - 198, 183, 223, 163, 248, 77, 239, 1, 50, 51, 248, 54, 4, 198, 183, 223, - 163, 198, 54, 239, 1, 45, 251, 116, 248, 54, 4, 236, 140, 50, 251, 116, - 248, 54, 4, 236, 140, 45, 251, 17, 219, 180, 248, 53, 50, 251, 17, 230, - 204, 248, 53, 55, 45, 251, 17, 230, 204, 248, 53, 55, 50, 251, 17, 219, - 180, 248, 53, 45, 62, 198, 42, 203, 103, 248, 53, 50, 62, 198, 42, 203, - 103, 248, 53, 235, 138, 233, 39, 81, 191, 21, 219, 112, 216, 226, 251, - 116, 211, 69, 219, 224, 50, 251, 116, 195, 168, 4, 201, 190, 216, 226, - 50, 251, 116, 4, 236, 140, 251, 116, 4, 206, 9, 223, 117, 252, 47, 251, - 115, 201, 225, 251, 116, 211, 69, 219, 224, 201, 225, 251, 116, 211, 69, - 196, 77, 153, 251, 115, 207, 18, 251, 115, 251, 116, 4, 196, 103, 207, - 18, 251, 116, 4, 196, 103, 211, 172, 251, 116, 211, 69, 196, 77, 211, - 172, 251, 116, 211, 69, 235, 123, 216, 226, 251, 116, 4, 211, 77, 250, - 251, 234, 91, 223, 163, 64, 209, 58, 133, 23, 183, 216, 226, 251, 116, 4, - 211, 77, 250, 251, 234, 91, 223, 163, 64, 209, 58, 133, 23, 219, 224, - 216, 226, 251, 116, 4, 211, 77, 250, 251, 234, 91, 223, 163, 64, 209, 58, - 144, 23, 183, 216, 226, 251, 116, 4, 211, 77, 250, 251, 234, 91, 223, - 163, 64, 209, 58, 144, 23, 219, 224, 216, 226, 251, 116, 4, 211, 77, 250, - 251, 234, 91, 223, 163, 64, 209, 58, 50, 23, 196, 77, 216, 226, 251, 116, - 4, 211, 77, 250, 251, 234, 91, 223, 163, 64, 209, 58, 45, 23, 196, 77, - 216, 226, 251, 116, 4, 211, 77, 250, 251, 234, 91, 223, 163, 64, 209, 58, - 50, 23, 235, 123, 216, 226, 251, 116, 4, 211, 77, 250, 251, 234, 91, 223, - 163, 64, 209, 58, 45, 23, 235, 123, 207, 18, 234, 105, 203, 252, 234, - 105, 203, 253, 4, 211, 6, 234, 105, 203, 253, 4, 2, 243, 11, 58, 234, - 105, 203, 253, 4, 50, 64, 58, 234, 105, 203, 253, 4, 45, 64, 58, 243, 11, - 4, 228, 241, 164, 47, 81, 164, 47, 210, 118, 47, 207, 19, 202, 23, 47, - 209, 254, 243, 11, 236, 206, 247, 205, 228, 241, 249, 88, 23, 198, 54, - 132, 236, 206, 247, 205, 81, 164, 243, 11, 4, 200, 183, 192, 235, 47, - 251, 83, 236, 200, 56, 133, 64, 198, 216, 243, 10, 47, 63, 247, 248, 47, - 247, 248, 47, 219, 179, 47, 230, 203, 243, 11, 4, 2, 243, 11, 119, 199, - 34, 183, 243, 11, 4, 105, 228, 241, 201, 16, 119, 199, 34, 183, 112, 206, - 180, 237, 39, 202, 97, 112, 233, 83, 237, 39, 202, 97, 112, 250, 193, - 112, 2, 243, 10, 112, 201, 190, 105, 222, 198, 201, 188, 197, 242, 4, 75, - 58, 197, 242, 4, 196, 103, 206, 9, 223, 163, 197, 241, 197, 242, 4, 204, - 4, 250, 183, 248, 76, 50, 197, 242, 93, 45, 197, 241, 45, 197, 242, 248, - 216, 81, 164, 81, 249, 88, 248, 216, 50, 197, 241, 248, 64, 4, 45, 132, - 248, 139, 248, 64, 4, 50, 132, 248, 139, 62, 248, 63, 25, 4, 45, 132, - 248, 139, 25, 4, 50, 132, 248, 139, 63, 228, 174, 62, 228, 174, 45, 193, - 72, 233, 39, 50, 193, 72, 233, 39, 45, 55, 193, 72, 233, 39, 50, 55, 193, - 72, 233, 39, 223, 155, 223, 139, 198, 179, 139, 223, 139, 223, 140, 214, - 108, 4, 81, 164, 235, 132, 215, 131, 51, 4, 239, 25, 211, 11, 223, 152, - 250, 219, 202, 254, 208, 200, 234, 43, 3, 23, 202, 99, 210, 118, 234, 43, - 3, 23, 202, 99, 210, 119, 4, 198, 153, 58, 228, 17, 119, 23, 202, 99, - 210, 118, 231, 14, 201, 101, 199, 22, 235, 122, 197, 242, 4, 45, 132, - 248, 139, 235, 122, 197, 242, 4, 50, 132, 248, 139, 62, 237, 33, 4, 144, - 57, 62, 218, 232, 63, 243, 11, 4, 144, 57, 62, 243, 11, 4, 144, 57, 234, - 25, 63, 201, 190, 234, 25, 62, 201, 190, 234, 25, 63, 237, 32, 234, 25, - 62, 237, 32, 234, 25, 63, 243, 10, 234, 25, 62, 243, 10, 206, 51, 207, - 19, 202, 24, 211, 66, 202, 24, 4, 211, 6, 207, 19, 202, 24, 4, 228, 241, - 106, 248, 175, 202, 23, 248, 175, 207, 19, 202, 23, 55, 209, 81, 197, - 225, 209, 81, 219, 219, 238, 163, 251, 116, 248, 53, 206, 203, 238, 163, - 251, 116, 248, 53, 198, 137, 216, 32, 215, 60, 47, 75, 211, 66, 215, 60, - 47, 108, 211, 66, 215, 60, 47, 25, 211, 66, 215, 60, 196, 93, 211, 67, 4, - 236, 140, 215, 60, 196, 93, 211, 67, 4, 209, 81, 215, 60, 51, 223, 100, - 211, 66, 215, 60, 51, 196, 93, 211, 66, 105, 219, 29, 23, 211, 66, 105, - 219, 29, 211, 57, 211, 66, 215, 60, 25, 211, 66, 215, 236, 105, 200, 204, - 200, 202, 4, 223, 113, 208, 26, 223, 114, 211, 66, 232, 246, 210, 107, - 223, 113, 223, 114, 4, 55, 106, 223, 114, 250, 143, 4, 202, 97, 243, 3, - 232, 76, 251, 85, 223, 111, 219, 113, 223, 112, 4, 207, 91, 210, 86, 250, - 245, 209, 52, 219, 113, 223, 112, 4, 204, 27, 210, 86, 250, 245, 209, 52, - 219, 113, 223, 112, 213, 12, 223, 157, 199, 34, 209, 52, 223, 114, 250, - 245, 42, 209, 62, 211, 66, 208, 19, 223, 114, 211, 66, 223, 114, 4, 118, - 64, 4, 102, 223, 114, 4, 25, 56, 223, 114, 4, 223, 99, 223, 114, 4, 196, - 92, 223, 114, 4, 211, 6, 223, 114, 4, 196, 103, 222, 199, 220, 13, 45, - 197, 242, 211, 66, 191, 167, 213, 10, 205, 92, 239, 62, 191, 167, 213, - 10, 205, 92, 209, 126, 191, 167, 213, 10, 205, 92, 208, 195, 108, 3, 4, - 2, 243, 11, 58, 108, 3, 4, 243, 2, 252, 61, 58, 108, 3, 4, 198, 153, 58, - 108, 3, 4, 75, 60, 108, 3, 4, 198, 153, 60, 108, 3, 4, 200, 230, 109, - 108, 3, 4, 62, 197, 241, 216, 35, 3, 4, 242, 75, 58, 216, 35, 3, 4, 75, - 60, 216, 35, 3, 4, 233, 83, 236, 138, 216, 35, 3, 4, 206, 180, 236, 138, - 108, 3, 223, 163, 45, 132, 243, 10, 108, 3, 223, 163, 50, 132, 243, 10, - 195, 152, 211, 57, 238, 218, 208, 200, 215, 127, 3, 4, 75, 58, 215, 127, - 3, 4, 196, 103, 204, 24, 208, 201, 4, 248, 77, 242, 218, 202, 68, 208, - 200, 215, 127, 3, 223, 163, 45, 132, 243, 10, 215, 127, 3, 223, 163, 50, - 132, 243, 10, 47, 215, 127, 3, 4, 243, 2, 252, 60, 215, 127, 3, 223, 163, - 55, 243, 10, 47, 236, 200, 56, 108, 3, 223, 163, 197, 241, 216, 35, 3, - 223, 163, 197, 241, 215, 127, 3, 223, 163, 197, 241, 223, 108, 208, 200, - 206, 198, 223, 108, 208, 200, 191, 167, 213, 10, 207, 64, 239, 62, 251, - 147, 211, 57, 239, 9, 223, 100, 4, 236, 140, 196, 93, 4, 216, 35, 56, - 196, 93, 4, 211, 6, 223, 100, 4, 211, 6, 223, 100, 4, 219, 29, 251, 125, - 196, 93, 4, 219, 29, 211, 56, 196, 93, 93, 223, 99, 223, 100, 93, 196, - 92, 196, 93, 93, 249, 88, 93, 223, 99, 223, 100, 93, 249, 88, 93, 196, - 92, 196, 93, 248, 216, 23, 222, 198, 4, 196, 92, 223, 100, 248, 216, 23, - 222, 198, 4, 223, 99, 242, 219, 196, 93, 4, 204, 3, 242, 219, 223, 100, - 4, 204, 3, 55, 51, 223, 99, 55, 51, 196, 92, 242, 219, 196, 93, 4, 204, - 4, 23, 202, 68, 208, 200, 219, 29, 23, 4, 75, 58, 219, 29, 211, 57, 4, - 75, 58, 55, 219, 29, 251, 125, 55, 219, 29, 211, 56, 105, 223, 101, 219, - 29, 251, 125, 105, 223, 101, 219, 29, 211, 56, 202, 80, 220, 13, 211, 56, - 202, 80, 220, 13, 251, 125, 219, 29, 211, 57, 211, 1, 219, 29, 251, 125, - 219, 29, 23, 4, 82, 201, 80, 219, 29, 211, 57, 4, 82, 201, 80, 219, 29, - 23, 4, 228, 241, 237, 215, 219, 29, 211, 57, 4, 228, 241, 237, 215, 219, - 29, 23, 4, 55, 211, 6, 219, 29, 23, 4, 196, 103, 219, 29, 23, 4, 55, 196, - 103, 2, 195, 149, 4, 196, 103, 219, 29, 211, 57, 4, 55, 211, 6, 219, 29, - 211, 57, 4, 55, 196, 103, 191, 167, 213, 10, 236, 152, 251, 75, 191, 167, - 213, 10, 207, 137, 251, 75, 234, 43, 3, 4, 75, 60, 228, 17, 4, 75, 58, - 197, 225, 228, 241, 249, 88, 4, 55, 81, 106, 197, 225, 228, 241, 249, 88, - 4, 197, 225, 81, 106, 198, 153, 211, 67, 4, 75, 58, 198, 153, 211, 67, 4, - 206, 180, 236, 138, 202, 180, 216, 35, 202, 179, 239, 49, 4, 75, 58, 234, - 43, 4, 250, 193, 251, 165, 234, 45, 119, 4, 243, 2, 252, 60, 251, 40, - 234, 45, 211, 57, 234, 45, 159, 234, 43, 3, 93, 108, 56, 108, 3, 93, 234, - 43, 56, 234, 43, 3, 93, 198, 153, 211, 66, 55, 242, 84, 234, 44, 105, - 239, 41, 234, 43, 202, 194, 115, 239, 41, 234, 43, 202, 194, 234, 43, 3, - 4, 105, 185, 93, 23, 105, 185, 60, 234, 36, 4, 232, 128, 185, 58, 219, - 180, 4, 243, 11, 223, 117, 230, 204, 4, 243, 11, 223, 117, 219, 180, 4, - 208, 13, 87, 58, 230, 204, 4, 208, 13, 87, 58, 219, 180, 211, 57, 202, - 99, 234, 45, 159, 230, 204, 211, 57, 202, 99, 234, 45, 159, 219, 180, - 211, 57, 202, 99, 234, 45, 119, 4, 75, 223, 117, 230, 204, 211, 57, 202, - 99, 234, 45, 119, 4, 75, 223, 117, 219, 180, 211, 57, 202, 99, 234, 45, - 119, 4, 75, 58, 230, 204, 211, 57, 202, 99, 234, 45, 119, 4, 75, 58, 219, - 180, 211, 57, 202, 99, 234, 45, 119, 4, 75, 93, 183, 230, 204, 211, 57, - 202, 99, 234, 45, 119, 4, 75, 93, 219, 224, 219, 180, 211, 57, 251, 41, - 230, 204, 211, 57, 251, 41, 219, 180, 23, 202, 168, 213, 12, 234, 45, - 159, 230, 204, 23, 202, 168, 213, 12, 234, 45, 159, 219, 180, 23, 213, - 12, 251, 41, 230, 204, 23, 213, 12, 251, 41, 219, 180, 93, 235, 131, 234, - 45, 93, 230, 203, 230, 204, 93, 235, 131, 234, 45, 93, 219, 179, 219, - 180, 93, 202, 180, 211, 57, 234, 44, 230, 204, 93, 202, 180, 211, 57, - 234, 44, 219, 180, 93, 202, 180, 93, 230, 203, 230, 204, 93, 202, 180, - 93, 219, 179, 219, 180, 93, 230, 204, 93, 235, 131, 234, 44, 230, 204, - 93, 219, 180, 93, 235, 131, 234, 44, 219, 180, 93, 202, 99, 234, 45, 93, - 230, 204, 93, 202, 99, 234, 44, 230, 204, 93, 202, 99, 234, 45, 93, 219, - 180, 93, 202, 99, 234, 44, 202, 99, 234, 45, 119, 211, 57, 219, 179, 202, - 99, 234, 45, 119, 211, 57, 230, 203, 202, 99, 234, 45, 119, 211, 57, 219, - 180, 4, 75, 223, 117, 202, 99, 234, 45, 119, 211, 57, 230, 204, 4, 75, - 223, 117, 235, 131, 234, 45, 119, 211, 57, 219, 179, 235, 131, 234, 45, - 119, 211, 57, 230, 203, 235, 131, 202, 99, 234, 45, 119, 211, 57, 219, - 179, 235, 131, 202, 99, 234, 45, 119, 211, 57, 230, 203, 202, 180, 211, - 57, 219, 179, 202, 180, 211, 57, 230, 203, 202, 180, 93, 219, 180, 93, - 234, 43, 56, 202, 180, 93, 230, 204, 93, 234, 43, 56, 55, 214, 88, 219, - 179, 55, 214, 88, 230, 203, 55, 214, 88, 219, 180, 4, 196, 103, 230, 204, - 211, 1, 219, 179, 230, 204, 248, 216, 219, 179, 219, 180, 242, 219, 247, - 205, 238, 164, 230, 204, 242, 219, 247, 205, 238, 164, 219, 180, 242, - 219, 247, 205, 238, 165, 93, 202, 99, 234, 44, 230, 204, 242, 219, 247, - 205, 238, 165, 93, 202, 99, 234, 44, 202, 69, 199, 38, 220, 11, 199, 38, - 202, 69, 199, 39, 211, 57, 234, 45, 159, 220, 11, 199, 39, 211, 57, 234, - 45, 159, 234, 43, 3, 4, 247, 241, 58, 208, 232, 93, 202, 168, 234, 43, - 56, 200, 221, 93, 202, 168, 234, 43, 56, 208, 232, 93, 202, 168, 213, 12, - 234, 45, 159, 200, 221, 93, 202, 168, 213, 12, 234, 45, 159, 208, 232, - 93, 234, 43, 56, 200, 221, 93, 234, 43, 56, 208, 232, 93, 213, 12, 234, - 45, 159, 200, 221, 93, 213, 12, 234, 45, 159, 208, 232, 93, 251, 165, - 234, 45, 159, 200, 221, 93, 251, 165, 234, 45, 159, 208, 232, 93, 213, - 12, 251, 165, 234, 45, 159, 200, 221, 93, 213, 12, 251, 165, 234, 45, - 159, 55, 208, 231, 55, 200, 220, 200, 229, 4, 236, 140, 200, 181, 4, 236, - 140, 200, 229, 4, 108, 3, 60, 200, 181, 4, 108, 3, 60, 200, 229, 4, 215, - 127, 3, 60, 200, 181, 4, 215, 127, 3, 60, 200, 229, 79, 211, 57, 234, 45, - 119, 4, 75, 58, 200, 181, 79, 211, 57, 234, 45, 119, 4, 75, 58, 200, 229, - 79, 93, 234, 43, 56, 200, 181, 79, 93, 234, 43, 56, 200, 229, 79, 93, - 198, 153, 211, 66, 200, 181, 79, 93, 198, 153, 211, 66, 200, 229, 79, 93, - 251, 165, 234, 45, 159, 200, 181, 79, 93, 251, 165, 234, 45, 159, 200, - 229, 79, 93, 213, 12, 234, 45, 159, 200, 181, 79, 93, 213, 12, 234, 45, - 159, 51, 45, 211, 77, 111, 211, 66, 51, 50, 211, 77, 111, 211, 66, 242, - 219, 200, 228, 242, 219, 200, 180, 242, 219, 200, 229, 211, 57, 234, 45, - 159, 242, 219, 200, 181, 211, 57, 234, 45, 159, 200, 229, 93, 200, 180, - 200, 181, 93, 200, 228, 200, 229, 93, 200, 228, 200, 181, 93, 200, 180, - 200, 181, 248, 216, 200, 228, 200, 181, 248, 216, 23, 222, 198, 247, 205, - 237, 216, 4, 200, 228, 234, 132, 79, 211, 69, 235, 118, 209, 116, 4, 199, - 122, 198, 53, 198, 7, 223, 99, 232, 147, 213, 27, 203, 40, 45, 199, 228, - 203, 40, 144, 199, 228, 203, 40, 133, 199, 228, 209, 255, 4, 206, 8, 81, - 249, 88, 197, 225, 50, 197, 57, 55, 81, 249, 88, 45, 197, 57, 81, 249, - 88, 55, 45, 197, 57, 55, 81, 249, 88, 55, 45, 197, 57, 179, 237, 216, - 232, 98, 45, 216, 191, 79, 55, 195, 135, 203, 40, 144, 199, 229, 4, 211, - 6, 203, 40, 133, 199, 229, 4, 196, 103, 203, 40, 133, 199, 229, 93, 203, - 40, 144, 199, 228, 55, 144, 199, 228, 55, 133, 199, 228, 55, 201, 28, - 213, 12, 56, 207, 18, 55, 201, 28, 213, 12, 56, 236, 164, 213, 12, 236, - 208, 4, 207, 18, 214, 107, 202, 97, 81, 219, 113, 4, 243, 11, 58, 81, - 219, 113, 4, 243, 11, 60, 144, 199, 229, 4, 243, 11, 60, 210, 119, 4, - 228, 241, 106, 210, 119, 4, 198, 153, 211, 66, 197, 225, 81, 249, 88, - 248, 168, 207, 65, 197, 225, 81, 249, 88, 4, 228, 241, 106, 197, 225, - 242, 84, 211, 66, 197, 225, 214, 88, 219, 179, 197, 225, 214, 88, 230, - 203, 235, 131, 202, 99, 219, 180, 211, 57, 234, 45, 159, 235, 131, 202, - 99, 230, 204, 211, 57, 234, 45, 159, 197, 225, 202, 24, 248, 168, 207, - 65, 220, 13, 197, 225, 81, 249, 88, 211, 66, 55, 202, 24, 211, 66, 63, - 81, 164, 215, 60, 63, 81, 164, 186, 234, 204, 63, 57, 186, 193, 105, 63, - 57, 202, 2, 234, 204, 63, 57, 202, 2, 193, 105, 63, 57, 45, 50, 63, 57, - 118, 62, 57, 196, 66, 62, 57, 235, 119, 62, 57, 186, 234, 204, 62, 57, - 186, 193, 105, 62, 57, 202, 2, 234, 204, 62, 57, 202, 2, 193, 105, 62, - 57, 45, 50, 62, 57, 133, 144, 62, 57, 96, 64, 4, 198, 136, 235, 118, 96, - 64, 4, 198, 136, 196, 65, 118, 64, 4, 198, 136, 235, 118, 118, 64, 4, - 198, 136, 196, 65, 51, 4, 198, 54, 132, 248, 139, 51, 4, 248, 77, 132, - 248, 139, 51, 4, 116, 50, 237, 39, 132, 248, 139, 51, 4, 110, 45, 237, - 39, 132, 248, 139, 237, 33, 4, 45, 132, 248, 139, 237, 33, 4, 50, 132, - 248, 139, 237, 33, 4, 198, 54, 132, 248, 139, 237, 33, 4, 248, 77, 132, - 248, 139, 235, 138, 201, 190, 62, 220, 13, 201, 190, 63, 220, 13, 201, - 190, 62, 195, 83, 2, 201, 190, 63, 195, 83, 2, 201, 190, 62, 210, 24, 63, - 210, 24, 63, 229, 182, 62, 229, 182, 228, 241, 62, 229, 182, 62, 220, 13, - 243, 10, 62, 216, 213, 237, 32, 63, 216, 213, 237, 32, 62, 216, 213, 218, - 232, 63, 216, 213, 218, 232, 62, 2, 237, 32, 62, 2, 218, 232, 63, 2, 218, - 232, 62, 228, 241, 234, 121, 63, 228, 241, 234, 121, 62, 81, 234, 121, - 63, 81, 234, 121, 45, 64, 4, 2, 243, 10, 115, 118, 250, 231, 45, 64, 4, - 47, 209, 81, 179, 118, 201, 183, 57, 118, 197, 13, 64, 4, 81, 106, 118, - 197, 13, 64, 4, 55, 81, 106, 118, 197, 13, 64, 232, 98, 164, 118, 197, - 13, 197, 225, 237, 216, 57, 118, 64, 4, 235, 138, 201, 80, 118, 64, 4, - 199, 216, 4, 81, 106, 118, 64, 4, 199, 216, 4, 55, 81, 106, 118, 197, 13, - 64, 4, 199, 215, 118, 197, 13, 64, 4, 199, 216, 4, 81, 106, 118, 197, 13, - 64, 4, 199, 216, 4, 55, 81, 106, 118, 64, 198, 216, 192, 235, 193, 139, - 64, 209, 58, 236, 231, 219, 224, 234, 43, 3, 93, 118, 57, 207, 19, 198, - 153, 211, 67, 93, 118, 57, 118, 64, 93, 207, 19, 251, 165, 234, 45, 159, - 96, 64, 198, 216, 230, 203, 96, 64, 198, 216, 200, 180, 118, 208, 26, 57, - 96, 208, 26, 57, 207, 19, 198, 153, 211, 67, 93, 96, 57, 96, 64, 93, 207, - 19, 251, 165, 234, 45, 159, 198, 153, 211, 67, 93, 118, 57, 118, 64, 93, - 251, 165, 234, 45, 159, 118, 64, 93, 207, 19, 198, 153, 211, 66, 96, 64, - 93, 207, 19, 198, 153, 211, 66, 235, 119, 197, 240, 191, 21, 57, 203, 40, - 202, 99, 186, 57, 203, 40, 249, 143, 202, 2, 57, 63, 216, 213, 201, 102, - 62, 2, 201, 102, 63, 2, 201, 102, 62, 206, 203, 210, 24, 63, 206, 203, - 210, 24, 88, 220, 13, 243, 10, 88, 211, 8, 4, 211, 8, 223, 117, 88, 243, - 11, 4, 243, 11, 223, 117, 88, 243, 10, 88, 47, 205, 154, 202, 99, 186, - 64, 4, 228, 250, 229, 235, 249, 143, 202, 2, 64, 4, 228, 250, 199, 215, - 202, 99, 186, 64, 4, 228, 241, 199, 215, 249, 143, 202, 2, 64, 4, 228, - 241, 199, 215, 248, 224, 64, 209, 58, 235, 119, 199, 25, 186, 234, 203, - 203, 40, 248, 224, 64, 209, 58, 235, 119, 199, 25, 186, 234, 203, 118, - 197, 240, 57, 196, 66, 197, 240, 57, 96, 197, 240, 57, 235, 119, 197, - 240, 57, 45, 50, 197, 240, 57, 133, 144, 197, 240, 57, 186, 193, 105, - 197, 240, 57, 186, 234, 204, 197, 240, 57, 202, 2, 234, 204, 197, 240, - 57, 202, 2, 193, 105, 197, 240, 57, 118, 197, 240, 237, 214, 57, 196, 66, - 197, 240, 237, 214, 57, 96, 197, 240, 237, 214, 57, 235, 119, 197, 240, - 237, 214, 57, 242, 221, 197, 240, 211, 77, 243, 11, 57, 251, 85, 197, - 240, 211, 77, 243, 11, 57, 118, 197, 240, 64, 119, 164, 196, 66, 197, - 240, 64, 119, 164, 96, 197, 240, 64, 119, 164, 235, 119, 197, 240, 64, - 119, 164, 186, 193, 105, 197, 240, 64, 119, 164, 186, 234, 204, 197, 240, - 64, 119, 164, 202, 2, 234, 204, 197, 240, 64, 119, 164, 202, 2, 193, 105, - 197, 240, 64, 119, 164, 118, 197, 240, 64, 4, 55, 228, 241, 106, 196, 66, - 197, 240, 64, 4, 55, 228, 241, 106, 96, 197, 240, 64, 4, 55, 228, 241, - 106, 235, 119, 197, 240, 64, 4, 55, 228, 241, 106, 228, 241, 199, 237, - 221, 222, 81, 199, 237, 221, 222, 118, 197, 240, 64, 139, 96, 197, 240, - 57, 196, 66, 197, 240, 64, 118, 79, 235, 119, 197, 240, 57, 96, 197, 240, - 64, 139, 118, 197, 240, 57, 235, 119, 197, 240, 64, 118, 79, 196, 66, - 197, 240, 57, 118, 197, 240, 210, 196, 250, 231, 196, 66, 197, 240, 210, - 196, 250, 231, 96, 197, 240, 210, 196, 250, 231, 235, 119, 197, 240, 210, - 196, 250, 231, 118, 62, 47, 63, 57, 196, 66, 62, 47, 63, 57, 96, 62, 47, - 63, 57, 235, 119, 62, 47, 63, 57, 251, 85, 197, 240, 50, 196, 221, 57, - 251, 85, 197, 240, 248, 77, 196, 221, 57, 251, 85, 197, 240, 45, 196, - 221, 57, 251, 85, 197, 240, 198, 54, 196, 221, 57, 207, 23, 219, 224, - 207, 23, 183, 214, 77, 219, 224, 214, 77, 183, 232, 128, 239, 2, 250, - 232, 243, 6, 251, 84, 96, 62, 57, 16, 40, 196, 255, 42, 234, 133, 198, - 225, 198, 52, 118, 234, 37, 250, 235, 198, 225, 206, 204, 196, 66, 234, - 37, 250, 235, 198, 225, 198, 52, 96, 234, 37, 250, 235, 198, 225, 219, - 220, 235, 119, 234, 37, 250, 235, 62, 118, 234, 37, 250, 235, 62, 196, - 66, 234, 37, 250, 235, 62, 96, 234, 37, 250, 235, 62, 235, 119, 234, 37, - 250, 235, 235, 119, 197, 240, 64, 4, 179, 198, 136, 219, 214, 235, 119, - 197, 240, 64, 4, 179, 198, 136, 206, 197, 196, 66, 197, 240, 64, 4, 179, - 198, 136, 219, 214, 196, 66, 197, 240, 64, 4, 179, 198, 136, 206, 197, - 118, 197, 240, 64, 4, 179, 198, 136, 196, 65, 96, 197, 240, 64, 4, 179, - 198, 136, 196, 65, 118, 197, 240, 64, 4, 179, 198, 136, 235, 118, 96, - 197, 240, 64, 4, 179, 198, 136, 235, 118, 62, 238, 163, 235, 119, 23, - 118, 57, 62, 238, 163, 235, 119, 23, 96, 57, 62, 238, 163, 196, 66, 23, - 118, 57, 62, 238, 163, 196, 66, 23, 96, 57, 62, 238, 163, 118, 23, 196, - 66, 57, 62, 238, 163, 96, 23, 196, 66, 57, 62, 238, 163, 118, 23, 235, - 119, 57, 62, 238, 163, 96, 23, 235, 119, 57, 206, 248, 64, 144, 219, 224, - 206, 248, 64, 144, 183, 206, 248, 64, 133, 219, 224, 206, 248, 64, 133, - 183, 206, 248, 64, 45, 196, 77, 206, 248, 64, 50, 196, 77, 206, 248, 64, - 45, 235, 123, 206, 248, 64, 50, 235, 123, 196, 66, 63, 64, 232, 98, 249, - 88, 4, 228, 241, 164, 133, 250, 236, 223, 163, 42, 207, 93, 248, 62, 211, - 1, 63, 201, 188, 211, 1, 63, 23, 62, 201, 188, 211, 1, 62, 201, 188, 249, - 107, 111, 4, 156, 192, 235, 47, 192, 235, 47, 28, 192, 235, 62, 51, 247, - 19, 62, 237, 33, 247, 19, 153, 62, 210, 24, 228, 241, 62, 211, 160, 62, - 211, 160, 62, 216, 213, 196, 76, 197, 242, 247, 19, 62, 216, 213, 235, - 122, 197, 242, 247, 19, 62, 216, 213, 219, 219, 197, 242, 247, 19, 62, - 216, 213, 206, 203, 197, 242, 247, 19, 214, 95, 232, 146, 109, 198, 54, - 132, 62, 243, 10, 248, 77, 132, 62, 243, 10, 156, 232, 128, 209, 60, 62, - 238, 159, 206, 122, 156, 232, 128, 209, 60, 62, 238, 159, 63, 232, 128, - 209, 60, 238, 159, 206, 122, 63, 232, 128, 209, 60, 238, 159, 51, 209, - 25, 223, 144, 196, 107, 56, 230, 187, 77, 209, 78, 232, 146, 109, 209, - 78, 232, 146, 138, 209, 78, 232, 146, 134, 209, 78, 232, 146, 149, 198, - 9, 208, 185, 250, 189, 228, 91, 209, 196, 214, 91, 63, 215, 206, 204, 33, - 62, 237, 33, 211, 105, 238, 217, 197, 202, 156, 215, 206, 250, 227, 238, - 179, 230, 88, 191, 75, 221, 2, 251, 53, 252, 32, 193, 247, 209, 26, 45, - 132, 62, 201, 102, 50, 132, 62, 201, 102, 201, 103, 4, 45, 132, 248, 139, - 201, 103, 4, 50, 132, 248, 139, 118, 197, 13, 64, 4, 197, 242, 250, 233, - 196, 66, 197, 13, 64, 4, 197, 242, 250, 233, 96, 197, 13, 64, 4, 197, - 242, 250, 233, 235, 119, 197, 13, 64, 4, 197, 242, 250, 233, 234, 27, - 232, 146, 107, 234, 27, 232, 146, 109, 205, 51, 206, 31, 250, 188, 16, - 195, 52, 206, 31, 250, 188, 16, 212, 254, 206, 31, 250, 188, 16, 208, 1, - 206, 31, 250, 188, 16, 248, 163, 206, 31, 250, 188, 16, 204, 16, 206, 31, - 250, 188, 16, 198, 0, 234, 43, 3, 4, 223, 140, 60, 196, 89, 113, 204, 12, - 113, 235, 128, 113, 210, 96, 113, 207, 18, 50, 251, 115, 229, 203, 210, - 78, 113, 135, 6, 1, 250, 122, 135, 6, 1, 247, 252, 135, 6, 1, 195, 151, - 135, 6, 1, 231, 18, 135, 6, 1, 236, 169, 135, 6, 1, 192, 49, 135, 6, 1, - 191, 55, 135, 6, 1, 235, 30, 135, 6, 1, 191, 82, 135, 6, 1, 223, 39, 135, - 6, 1, 89, 223, 39, 135, 6, 1, 68, 135, 6, 1, 236, 190, 135, 6, 1, 222, - 94, 135, 6, 1, 219, 75, 135, 6, 1, 215, 66, 135, 6, 1, 214, 210, 135, 6, - 1, 211, 89, 135, 6, 1, 209, 55, 135, 6, 1, 206, 179, 135, 6, 1, 202, 77, - 135, 6, 1, 197, 44, 135, 6, 1, 196, 124, 135, 6, 1, 232, 101, 135, 6, 1, - 229, 188, 135, 6, 1, 211, 20, 135, 6, 1, 210, 63, 135, 6, 1, 203, 8, 135, - 6, 1, 197, 146, 135, 6, 1, 243, 54, 135, 6, 1, 203, 165, 135, 6, 1, 192, - 58, 135, 6, 1, 192, 60, 135, 6, 1, 192, 93, 135, 6, 1, 201, 220, 140, - 135, 6, 1, 191, 225, 135, 6, 1, 2, 191, 190, 135, 6, 1, 2, 191, 191, 4, - 199, 215, 135, 6, 1, 192, 12, 135, 6, 1, 223, 82, 2, 191, 190, 135, 6, 1, - 248, 175, 191, 190, 135, 6, 1, 223, 82, 248, 175, 191, 190, 135, 6, 1, - 232, 228, 135, 6, 1, 223, 37, 135, 6, 1, 203, 7, 135, 6, 1, 197, 215, 65, - 135, 6, 1, 220, 1, 215, 66, 135, 6, 1, 247, 73, 243, 54, 135, 2, 1, 250, - 122, 135, 2, 1, 247, 252, 135, 2, 1, 195, 151, 135, 2, 1, 231, 18, 135, - 2, 1, 236, 169, 135, 2, 1, 192, 49, 135, 2, 1, 191, 55, 135, 2, 1, 235, - 30, 135, 2, 1, 191, 82, 135, 2, 1, 223, 39, 135, 2, 1, 89, 223, 39, 135, - 2, 1, 68, 135, 2, 1, 236, 190, 135, 2, 1, 222, 94, 135, 2, 1, 219, 75, - 135, 2, 1, 215, 66, 135, 2, 1, 214, 210, 135, 2, 1, 211, 89, 135, 2, 1, - 209, 55, 135, 2, 1, 206, 179, 135, 2, 1, 202, 77, 135, 2, 1, 197, 44, - 135, 2, 1, 196, 124, 135, 2, 1, 232, 101, 135, 2, 1, 229, 188, 135, 2, 1, - 211, 20, 135, 2, 1, 210, 63, 135, 2, 1, 203, 8, 135, 2, 1, 197, 146, 135, - 2, 1, 243, 54, 135, 2, 1, 203, 165, 135, 2, 1, 192, 58, 135, 2, 1, 192, - 60, 135, 2, 1, 192, 93, 135, 2, 1, 201, 220, 140, 135, 2, 1, 191, 225, - 135, 2, 1, 2, 191, 190, 135, 2, 1, 2, 191, 191, 4, 199, 215, 135, 2, 1, - 192, 12, 135, 2, 1, 223, 82, 2, 191, 190, 135, 2, 1, 248, 175, 191, 190, - 135, 2, 1, 223, 82, 248, 175, 191, 190, 135, 2, 1, 232, 228, 135, 2, 1, - 223, 37, 135, 2, 1, 203, 7, 135, 2, 1, 197, 215, 65, 135, 2, 1, 220, 1, - 215, 66, 135, 2, 1, 247, 73, 243, 54, 8, 6, 1, 220, 143, 4, 55, 164, 8, - 2, 1, 220, 143, 4, 55, 164, 8, 6, 1, 220, 143, 4, 82, 198, 152, 8, 6, 1, - 210, 237, 4, 106, 8, 6, 1, 207, 222, 4, 199, 215, 8, 2, 1, 42, 4, 106, 8, - 2, 1, 200, 44, 4, 237, 39, 106, 8, 6, 1, 230, 117, 4, 237, 87, 8, 2, 1, - 230, 117, 4, 237, 87, 8, 6, 1, 222, 153, 4, 237, 87, 8, 2, 1, 222, 153, - 4, 237, 87, 8, 6, 1, 191, 167, 4, 237, 87, 8, 2, 1, 191, 167, 4, 237, 87, - 8, 6, 1, 251, 160, 8, 6, 1, 218, 169, 4, 102, 8, 6, 1, 153, 65, 8, 6, 1, - 153, 251, 160, 8, 2, 1, 196, 13, 4, 50, 102, 8, 6, 1, 193, 225, 4, 102, - 8, 2, 1, 193, 225, 4, 102, 8, 2, 1, 196, 13, 4, 238, 175, 8, 6, 1, 132, - 230, 116, 8, 2, 1, 132, 230, 116, 8, 2, 1, 199, 213, 209, 211, 8, 2, 1, - 235, 15, 4, 213, 9, 8, 2, 1, 153, 207, 222, 4, 199, 215, 8, 2, 1, 187, 4, - 130, 206, 189, 223, 117, 8, 1, 2, 6, 153, 71, 8, 200, 230, 2, 1, 223, 35, - 52, 1, 6, 196, 12, 8, 6, 1, 206, 9, 4, 200, 146, 199, 215, 8, 6, 1, 191, - 167, 4, 200, 146, 199, 215, 94, 6, 1, 251, 186, 94, 2, 1, 251, 186, 94, - 6, 1, 195, 66, 94, 2, 1, 195, 66, 94, 6, 1, 231, 211, 94, 2, 1, 231, 211, - 94, 6, 1, 237, 255, 94, 2, 1, 237, 255, 94, 6, 1, 234, 165, 94, 2, 1, - 234, 165, 94, 6, 1, 202, 7, 94, 2, 1, 202, 7, 94, 6, 1, 191, 95, 94, 2, - 1, 191, 95, 94, 6, 1, 230, 6, 94, 2, 1, 230, 6, 94, 6, 1, 199, 13, 94, 2, - 1, 199, 13, 94, 6, 1, 228, 32, 94, 2, 1, 228, 32, 94, 6, 1, 222, 77, 94, - 2, 1, 222, 77, 94, 6, 1, 219, 252, 94, 2, 1, 219, 252, 94, 6, 1, 216, - 100, 94, 2, 1, 216, 100, 94, 6, 1, 213, 219, 94, 2, 1, 213, 219, 94, 6, - 1, 220, 248, 94, 2, 1, 220, 248, 94, 6, 1, 74, 94, 2, 1, 74, 94, 6, 1, - 209, 185, 94, 2, 1, 209, 185, 94, 6, 1, 206, 162, 94, 2, 1, 206, 162, 94, - 6, 1, 202, 183, 94, 2, 1, 202, 183, 94, 6, 1, 199, 166, 94, 2, 1, 199, - 166, 94, 6, 1, 196, 168, 94, 2, 1, 196, 168, 94, 6, 1, 233, 23, 94, 2, 1, - 233, 23, 94, 6, 1, 221, 190, 94, 2, 1, 221, 190, 94, 6, 1, 208, 176, 94, - 2, 1, 208, 176, 94, 6, 1, 211, 81, 94, 2, 1, 211, 81, 94, 6, 1, 237, 37, - 251, 192, 94, 2, 1, 237, 37, 251, 192, 94, 6, 1, 39, 94, 251, 230, 94, 2, - 1, 39, 94, 251, 230, 94, 6, 1, 238, 198, 234, 165, 94, 2, 1, 238, 198, - 234, 165, 94, 6, 1, 237, 37, 222, 77, 94, 2, 1, 237, 37, 222, 77, 94, 6, - 1, 237, 37, 213, 219, 94, 2, 1, 237, 37, 213, 219, 94, 6, 1, 238, 198, - 213, 219, 94, 2, 1, 238, 198, 213, 219, 94, 6, 1, 39, 94, 211, 81, 94, 2, - 1, 39, 94, 211, 81, 94, 6, 1, 205, 145, 94, 2, 1, 205, 145, 94, 6, 1, - 238, 214, 203, 105, 94, 2, 1, 238, 214, 203, 105, 94, 6, 1, 39, 94, 203, - 105, 94, 2, 1, 39, 94, 203, 105, 94, 6, 1, 39, 94, 234, 12, 94, 2, 1, 39, - 94, 234, 12, 94, 6, 1, 251, 212, 221, 195, 94, 2, 1, 251, 212, 221, 195, - 94, 6, 1, 237, 37, 228, 242, 94, 2, 1, 237, 37, 228, 242, 94, 6, 1, 39, - 94, 228, 242, 94, 2, 1, 39, 94, 228, 242, 94, 6, 1, 39, 94, 140, 94, 2, - 1, 39, 94, 140, 94, 6, 1, 220, 142, 140, 94, 2, 1, 220, 142, 140, 94, 6, - 1, 39, 94, 229, 209, 94, 2, 1, 39, 94, 229, 209, 94, 6, 1, 39, 94, 230, - 9, 94, 2, 1, 39, 94, 230, 9, 94, 6, 1, 39, 94, 231, 206, 94, 2, 1, 39, - 94, 231, 206, 94, 6, 1, 39, 94, 236, 193, 94, 2, 1, 39, 94, 236, 193, 94, - 6, 1, 39, 94, 203, 71, 94, 2, 1, 39, 94, 203, 71, 94, 6, 1, 39, 212, 145, - 203, 71, 94, 2, 1, 39, 212, 145, 203, 71, 94, 6, 1, 39, 212, 145, 214, - 16, 94, 2, 1, 39, 212, 145, 214, 16, 94, 6, 1, 39, 212, 145, 212, 81, 94, - 2, 1, 39, 212, 145, 212, 81, 94, 6, 1, 39, 212, 145, 193, 140, 94, 2, 1, - 39, 212, 145, 193, 140, 94, 16, 222, 102, 94, 16, 216, 101, 206, 162, 94, - 16, 209, 186, 206, 162, 94, 16, 201, 89, 94, 16, 199, 167, 206, 162, 94, - 16, 221, 191, 206, 162, 94, 16, 203, 72, 202, 183, 94, 6, 1, 238, 198, - 203, 105, 94, 2, 1, 238, 198, 203, 105, 94, 6, 1, 238, 198, 231, 206, 94, - 2, 1, 238, 198, 231, 206, 94, 33, 213, 220, 58, 94, 33, 201, 213, 250, - 201, 94, 33, 201, 213, 219, 188, 94, 6, 1, 248, 103, 221, 195, 94, 2, 1, - 248, 103, 221, 195, 94, 39, 212, 145, 232, 80, 201, 63, 94, 39, 212, 145, - 236, 234, 208, 13, 77, 94, 39, 212, 145, 223, 142, 208, 13, 77, 94, 39, - 212, 145, 195, 137, 236, 205, 94, 232, 118, 91, 230, 70, 94, 232, 80, - 201, 63, 94, 215, 200, 236, 205, 101, 2, 1, 251, 132, 101, 2, 1, 249, - 101, 101, 2, 1, 231, 210, 101, 2, 1, 236, 150, 101, 2, 1, 234, 103, 101, - 2, 1, 195, 49, 101, 2, 1, 191, 80, 101, 2, 1, 199, 193, 101, 2, 1, 223, - 162, 101, 2, 1, 222, 87, 101, 2, 1, 220, 7, 101, 2, 1, 217, 90, 101, 2, - 1, 214, 216, 101, 2, 1, 211, 104, 101, 2, 1, 210, 131, 101, 2, 1, 191, - 67, 101, 2, 1, 207, 163, 101, 2, 1, 205, 142, 101, 2, 1, 199, 179, 101, - 2, 1, 196, 113, 101, 2, 1, 209, 220, 101, 2, 1, 221, 200, 101, 2, 1, 231, - 82, 101, 2, 1, 208, 81, 101, 2, 1, 203, 69, 101, 2, 1, 243, 81, 101, 2, - 1, 247, 128, 101, 2, 1, 222, 234, 101, 2, 1, 243, 18, 101, 2, 1, 246, - 241, 101, 2, 1, 192, 218, 101, 2, 1, 222, 249, 101, 2, 1, 230, 87, 101, - 2, 1, 229, 245, 101, 2, 1, 229, 145, 101, 2, 1, 193, 125, 101, 2, 1, 230, - 19, 101, 2, 1, 229, 11, 101, 2, 1, 192, 14, 101, 2, 1, 252, 14, 198, 175, - 1, 170, 198, 175, 1, 192, 136, 198, 175, 1, 192, 135, 198, 175, 1, 192, - 125, 198, 175, 1, 192, 123, 198, 175, 1, 248, 218, 252, 62, 192, 118, - 198, 175, 1, 192, 118, 198, 175, 1, 192, 133, 198, 175, 1, 192, 130, 198, - 175, 1, 192, 132, 198, 175, 1, 192, 131, 198, 175, 1, 192, 40, 198, 175, - 1, 192, 127, 198, 175, 1, 192, 116, 198, 175, 1, 197, 86, 192, 116, 198, - 175, 1, 192, 113, 198, 175, 1, 192, 121, 198, 175, 1, 248, 218, 252, 62, - 192, 121, 198, 175, 1, 197, 86, 192, 121, 198, 175, 1, 192, 120, 198, - 175, 1, 192, 140, 198, 175, 1, 192, 114, 198, 175, 1, 197, 86, 192, 114, - 198, 175, 1, 192, 103, 198, 175, 1, 197, 86, 192, 103, 198, 175, 1, 192, - 33, 198, 175, 1, 192, 82, 198, 175, 1, 251, 243, 192, 82, 198, 175, 1, - 197, 86, 192, 82, 198, 175, 1, 192, 112, 198, 175, 1, 192, 111, 198, 175, - 1, 192, 108, 198, 175, 1, 197, 86, 192, 122, 198, 175, 1, 197, 86, 192, - 106, 198, 175, 1, 192, 104, 198, 175, 1, 191, 225, 198, 175, 1, 192, 101, - 198, 175, 1, 192, 99, 198, 175, 1, 192, 124, 198, 175, 1, 197, 86, 192, - 124, 198, 175, 1, 250, 127, 192, 124, 198, 175, 1, 192, 98, 198, 175, 1, - 192, 96, 198, 175, 1, 192, 97, 198, 175, 1, 192, 95, 198, 175, 1, 192, - 94, 198, 175, 1, 192, 134, 198, 175, 1, 192, 92, 198, 175, 1, 192, 90, - 198, 175, 1, 192, 89, 198, 175, 1, 192, 86, 198, 175, 1, 192, 83, 198, - 175, 1, 199, 157, 192, 83, 198, 175, 1, 192, 81, 198, 175, 1, 192, 80, - 198, 175, 1, 192, 12, 198, 175, 52, 1, 220, 115, 77, 198, 175, 204, 11, - 77, 198, 175, 120, 222, 196, 36, 5, 219, 42, 36, 5, 216, 5, 36, 5, 206, - 154, 36, 5, 202, 38, 36, 5, 203, 55, 36, 5, 248, 110, 36, 5, 198, 91, 36, - 5, 242, 98, 36, 5, 213, 36, 36, 5, 212, 64, 36, 5, 231, 11, 211, 182, 36, - 5, 191, 6, 36, 5, 236, 172, 36, 5, 237, 160, 36, 5, 222, 200, 36, 5, 198, - 240, 36, 5, 243, 67, 36, 5, 209, 198, 36, 5, 209, 72, 36, 5, 231, 97, 36, - 5, 231, 93, 36, 5, 231, 94, 36, 5, 231, 95, 36, 5, 201, 175, 36, 5, 201, - 129, 36, 5, 201, 142, 36, 5, 201, 174, 36, 5, 201, 147, 36, 5, 201, 148, - 36, 5, 201, 134, 36, 5, 247, 65, 36, 5, 247, 44, 36, 5, 247, 46, 36, 5, - 247, 64, 36, 5, 247, 62, 36, 5, 247, 63, 36, 5, 247, 45, 36, 5, 190, 224, - 36, 5, 190, 202, 36, 5, 190, 215, 36, 5, 190, 223, 36, 5, 190, 218, 36, - 5, 190, 219, 36, 5, 190, 207, 36, 5, 247, 60, 36, 5, 247, 47, 36, 5, 247, - 49, 36, 5, 247, 59, 36, 5, 247, 57, 36, 5, 247, 58, 36, 5, 247, 48, 36, - 5, 207, 234, 36, 5, 207, 224, 36, 5, 207, 230, 36, 5, 207, 233, 36, 5, - 207, 231, 36, 5, 207, 232, 36, 5, 207, 229, 36, 5, 220, 153, 36, 5, 220, - 145, 36, 5, 220, 148, 36, 5, 220, 152, 36, 5, 220, 149, 36, 5, 220, 150, - 36, 5, 220, 146, 36, 5, 192, 175, 36, 5, 192, 162, 36, 5, 192, 170, 36, - 5, 192, 174, 36, 5, 192, 172, 36, 5, 192, 173, 36, 5, 192, 169, 36, 5, - 230, 128, 36, 5, 230, 118, 36, 5, 230, 121, 36, 5, 230, 127, 36, 5, 230, - 123, 36, 5, 230, 124, 36, 5, 230, 120, 33, 38, 1, 249, 17, 33, 38, 1, - 195, 153, 33, 38, 1, 231, 77, 33, 38, 1, 237, 146, 33, 38, 1, 191, 62, - 33, 38, 1, 191, 87, 33, 38, 1, 155, 33, 38, 1, 234, 140, 33, 38, 1, 234, - 114, 33, 38, 1, 234, 103, 33, 38, 1, 74, 33, 38, 1, 210, 63, 33, 38, 1, - 234, 34, 33, 38, 1, 234, 22, 33, 38, 1, 199, 145, 33, 38, 1, 140, 33, 38, - 1, 197, 161, 33, 38, 1, 243, 127, 33, 38, 1, 203, 165, 33, 38, 1, 203, - 116, 33, 38, 1, 232, 228, 33, 38, 1, 234, 18, 33, 38, 1, 65, 33, 38, 1, - 223, 226, 33, 38, 1, 236, 191, 33, 38, 1, 215, 219, 196, 128, 33, 38, 1, - 192, 95, 33, 38, 1, 191, 225, 33, 38, 1, 223, 81, 65, 33, 38, 1, 219, 83, - 191, 190, 33, 38, 1, 248, 175, 191, 190, 33, 38, 1, 223, 81, 248, 175, - 191, 190, 50, 251, 116, 200, 225, 217, 51, 50, 251, 116, 235, 138, 200, - 225, 217, 51, 45, 200, 225, 248, 53, 50, 200, 225, 248, 53, 45, 235, 138, - 200, 225, 248, 53, 50, 235, 138, 200, 225, 248, 53, 207, 147, 223, 104, - 217, 51, 207, 147, 235, 138, 223, 104, 217, 51, 235, 138, 198, 8, 217, - 51, 45, 198, 8, 248, 53, 50, 198, 8, 248, 53, 207, 147, 201, 190, 45, - 207, 147, 211, 106, 248, 53, 50, 207, 147, 211, 106, 248, 53, 234, 189, - 238, 254, 210, 126, 232, 148, 210, 126, 207, 18, 232, 148, 210, 126, 228, - 85, 235, 138, 211, 177, 235, 119, 251, 126, 196, 66, 251, 126, 235, 138, - 206, 203, 251, 115, 55, 211, 172, 228, 88, 223, 93, 223, 102, 210, 183, - 248, 47, 228, 89, 4, 237, 42, 198, 153, 4, 206, 189, 58, 45, 130, 210, - 116, 248, 53, 50, 130, 210, 116, 248, 53, 198, 153, 4, 75, 58, 198, 153, - 4, 75, 60, 45, 81, 249, 88, 4, 208, 7, 50, 81, 249, 88, 4, 208, 7, 198, - 54, 45, 132, 248, 53, 198, 54, 50, 132, 248, 53, 248, 77, 45, 132, 248, - 53, 248, 77, 50, 132, 248, 53, 45, 202, 206, 126, 248, 53, 50, 202, 206, - 126, 248, 53, 45, 55, 210, 113, 50, 55, 210, 113, 105, 185, 139, 91, 75, - 208, 151, 91, 75, 139, 105, 185, 208, 151, 112, 232, 128, 75, 208, 151, - 232, 226, 75, 77, 207, 18, 208, 13, 77, 81, 198, 152, 206, 189, 209, 61, - 193, 23, 204, 11, 82, 236, 140, 153, 242, 74, 207, 147, 236, 140, 207, - 147, 242, 74, 153, 204, 25, 238, 15, 4, 45, 230, 173, 238, 15, 4, 50, - 230, 173, 153, 238, 14, 198, 54, 132, 205, 54, 56, 197, 14, 237, 215, - 198, 223, 237, 215, 201, 79, 232, 80, 201, 63, 81, 202, 136, 236, 138, - 193, 72, 81, 219, 112, 247, 109, 55, 228, 88, 207, 18, 242, 74, 55, 218, - 237, 207, 252, 77, 237, 216, 4, 45, 196, 69, 55, 200, 164, 77, 223, 93, - 130, 222, 35, 223, 93, 130, 222, 36, 4, 222, 36, 58, 130, 222, 35, 130, - 222, 36, 4, 236, 140, 55, 201, 114, 242, 74, 235, 138, 202, 23, 197, 225, - 238, 14, 216, 214, 242, 74, 210, 125, 77, 208, 150, 234, 129, 77, 238, - 255, 195, 137, 236, 205, 238, 218, 210, 82, 4, 50, 238, 216, 238, 218, - 210, 82, 4, 45, 238, 216, 198, 128, 3, 6, 233, 255, 216, 214, 233, 216, - 77, 216, 214, 208, 13, 77, 45, 51, 248, 54, 4, 106, 50, 51, 248, 54, 4, - 106, 45, 51, 248, 54, 4, 55, 106, 50, 51, 248, 54, 4, 55, 106, 198, 54, - 132, 45, 210, 113, 198, 54, 132, 50, 210, 113, 248, 77, 132, 45, 210, - 113, 248, 77, 132, 50, 210, 113, 211, 172, 228, 88, 12, 48, 207, 48, 12, - 48, 242, 230, 12, 48, 205, 57, 107, 12, 48, 205, 57, 109, 12, 48, 205, - 57, 138, 12, 48, 209, 250, 12, 48, 248, 62, 12, 48, 199, 233, 12, 48, - 221, 79, 107, 12, 48, 221, 79, 109, 12, 48, 236, 202, 12, 48, 205, 61, - 12, 48, 2, 107, 12, 48, 2, 109, 12, 48, 220, 30, 107, 12, 48, 220, 30, - 109, 12, 48, 220, 30, 138, 12, 48, 220, 30, 134, 12, 48, 202, 58, 12, 48, - 198, 227, 12, 48, 202, 55, 107, 12, 48, 202, 55, 109, 12, 48, 229, 224, - 107, 12, 48, 229, 224, 109, 12, 48, 230, 53, 12, 48, 207, 136, 12, 48, - 243, 64, 12, 48, 200, 198, 12, 48, 215, 205, 12, 48, 237, 143, 12, 48, - 215, 193, 12, 48, 242, 249, 12, 48, 193, 144, 107, 12, 48, 193, 144, 109, - 12, 48, 232, 243, 12, 48, 210, 76, 107, 12, 48, 210, 76, 109, 12, 48, - 202, 178, 132, 197, 255, 197, 177, 12, 48, 238, 239, 12, 48, 236, 162, - 12, 48, 223, 27, 12, 48, 248, 102, 79, 242, 213, 12, 48, 233, 193, 12, - 48, 201, 215, 107, 12, 48, 201, 215, 109, 12, 48, 249, 103, 12, 48, 202, - 185, 12, 48, 247, 190, 202, 185, 12, 48, 214, 86, 107, 12, 48, 214, 86, - 109, 12, 48, 214, 86, 138, 12, 48, 214, 86, 134, 12, 48, 216, 172, 12, - 48, 203, 107, 12, 48, 207, 142, 12, 48, 233, 223, 12, 48, 211, 119, 12, - 48, 248, 18, 107, 12, 48, 248, 18, 109, 12, 48, 216, 224, 12, 48, 215, - 199, 12, 48, 230, 214, 107, 12, 48, 230, 214, 109, 12, 48, 230, 214, 138, - 12, 48, 198, 173, 12, 48, 242, 212, 12, 48, 193, 105, 107, 12, 48, 193, - 105, 109, 12, 48, 247, 190, 205, 50, 12, 48, 202, 178, 228, 187, 12, 48, - 228, 187, 12, 48, 247, 190, 201, 229, 12, 48, 247, 190, 203, 102, 12, 48, - 232, 159, 12, 48, 247, 190, 247, 85, 12, 48, 202, 178, 193, 169, 12, 48, - 193, 170, 107, 12, 48, 193, 170, 109, 12, 48, 242, 252, 12, 48, 247, 190, - 230, 250, 12, 48, 179, 107, 12, 48, 179, 109, 12, 48, 247, 190, 219, 19, - 12, 48, 247, 190, 231, 191, 12, 48, 215, 188, 107, 12, 48, 215, 188, 109, - 12, 48, 207, 149, 12, 48, 248, 114, 12, 48, 247, 190, 199, 185, 219, 230, - 12, 48, 247, 190, 219, 233, 12, 48, 247, 190, 193, 66, 12, 48, 247, 190, - 232, 179, 12, 48, 234, 201, 107, 12, 48, 234, 201, 109, 12, 48, 234, 201, - 138, 12, 48, 247, 190, 234, 200, 12, 48, 229, 235, 12, 48, 247, 190, 228, - 183, 12, 48, 248, 98, 12, 48, 231, 61, 12, 48, 247, 190, 232, 236, 12, - 48, 247, 190, 248, 160, 12, 48, 247, 190, 205, 158, 12, 48, 202, 178, - 193, 95, 12, 48, 202, 178, 192, 72, 12, 48, 247, 190, 232, 99, 12, 48, - 223, 34, 233, 228, 12, 48, 247, 190, 233, 228, 12, 48, 223, 34, 198, 56, - 12, 48, 247, 190, 198, 56, 12, 48, 223, 34, 235, 111, 12, 48, 247, 190, - 235, 111, 12, 48, 197, 55, 12, 48, 223, 34, 197, 55, 12, 48, 247, 190, - 197, 55, 83, 48, 107, 83, 48, 219, 112, 83, 48, 236, 140, 83, 48, 202, - 97, 83, 48, 205, 56, 83, 48, 102, 83, 48, 109, 83, 48, 219, 141, 83, 48, - 217, 90, 83, 48, 219, 209, 83, 48, 234, 77, 83, 48, 171, 83, 48, 144, - 248, 62, 83, 48, 238, 242, 83, 48, 228, 26, 83, 48, 199, 233, 83, 48, - 211, 77, 248, 62, 83, 48, 221, 78, 83, 48, 208, 254, 83, 48, 193, 12, 83, - 48, 201, 203, 83, 48, 50, 211, 77, 248, 62, 83, 48, 229, 146, 234, 98, - 83, 48, 199, 95, 83, 48, 236, 202, 83, 48, 205, 61, 83, 48, 242, 230, 83, - 48, 208, 204, 83, 48, 251, 252, 83, 48, 215, 179, 83, 48, 234, 98, 83, - 48, 234, 207, 83, 48, 205, 91, 83, 48, 231, 3, 83, 48, 231, 4, 202, 74, - 83, 48, 233, 227, 83, 48, 248, 174, 83, 48, 193, 35, 83, 48, 243, 86, 83, - 48, 206, 133, 83, 48, 223, 158, 83, 48, 202, 70, 83, 48, 220, 29, 83, 48, - 238, 252, 83, 48, 201, 194, 83, 48, 215, 184, 83, 48, 206, 176, 83, 48, - 193, 20, 83, 48, 211, 95, 83, 48, 197, 63, 83, 48, 235, 91, 83, 48, 203, - 40, 198, 227, 83, 48, 235, 138, 242, 230, 83, 48, 179, 201, 34, 83, 48, - 105, 230, 28, 83, 48, 203, 46, 83, 48, 248, 69, 83, 48, 202, 54, 83, 48, - 248, 25, 83, 48, 201, 78, 83, 48, 229, 223, 83, 48, 230, 71, 83, 48, 236, - 144, 83, 48, 230, 53, 83, 48, 248, 47, 83, 48, 207, 136, 83, 48, 205, 74, - 83, 48, 236, 236, 83, 48, 250, 132, 83, 48, 201, 190, 83, 48, 213, 11, - 83, 48, 200, 198, 83, 48, 205, 103, 83, 48, 215, 205, 83, 48, 197, 254, - 83, 48, 220, 111, 83, 48, 201, 63, 83, 48, 237, 143, 83, 48, 193, 120, - 83, 48, 236, 175, 213, 11, 83, 48, 242, 70, 83, 48, 232, 72, 83, 48, 242, - 243, 83, 48, 201, 84, 83, 48, 193, 143, 83, 48, 232, 243, 83, 48, 242, - 239, 83, 48, 233, 66, 83, 48, 55, 192, 235, 83, 48, 132, 197, 255, 197, - 177, 83, 48, 202, 88, 83, 48, 233, 78, 83, 48, 238, 239, 83, 48, 236, - 162, 83, 48, 208, 199, 83, 48, 223, 27, 83, 48, 216, 196, 83, 48, 198, - 151, 83, 48, 200, 141, 83, 48, 219, 135, 83, 48, 196, 43, 83, 48, 233, - 21, 83, 48, 248, 102, 79, 242, 213, 83, 48, 202, 212, 83, 48, 235, 138, - 199, 87, 83, 48, 193, 89, 83, 48, 202, 107, 83, 48, 236, 222, 83, 48, - 233, 193, 83, 48, 201, 232, 83, 48, 57, 83, 48, 201, 65, 83, 48, 201, - 214, 83, 48, 198, 25, 83, 48, 230, 223, 83, 48, 247, 70, 83, 48, 201, - 107, 83, 48, 249, 103, 83, 48, 206, 245, 83, 48, 202, 185, 83, 48, 223, - 18, 83, 48, 214, 85, 83, 48, 203, 107, 83, 48, 233, 54, 83, 48, 211, 119, - 83, 48, 251, 125, 83, 48, 209, 89, 83, 48, 234, 211, 83, 48, 248, 17, 83, - 48, 216, 224, 83, 48, 216, 37, 83, 48, 204, 32, 83, 48, 250, 239, 83, 48, - 215, 199, 83, 48, 198, 61, 83, 48, 211, 64, 83, 48, 248, 106, 83, 48, - 201, 59, 83, 48, 242, 82, 83, 48, 230, 213, 83, 48, 198, 173, 83, 48, - 223, 121, 83, 48, 248, 120, 83, 48, 193, 170, 234, 98, 83, 48, 242, 212, - 83, 48, 193, 104, 83, 48, 205, 50, 83, 48, 228, 187, 83, 48, 201, 229, - 83, 48, 195, 180, 83, 48, 249, 12, 83, 48, 209, 147, 83, 48, 249, 133, - 83, 48, 203, 102, 83, 48, 207, 86, 83, 48, 206, 45, 83, 48, 232, 159, 83, - 48, 248, 104, 83, 48, 247, 85, 83, 48, 248, 144, 83, 48, 215, 201, 83, - 48, 193, 169, 83, 48, 242, 252, 83, 48, 193, 62, 83, 48, 236, 214, 83, - 48, 195, 50, 83, 48, 230, 250, 83, 48, 219, 19, 83, 48, 231, 191, 83, 48, - 215, 187, 83, 48, 202, 96, 83, 48, 203, 40, 199, 214, 248, 160, 83, 48, - 207, 149, 83, 48, 248, 114, 83, 48, 193, 2, 83, 48, 233, 103, 83, 48, - 219, 230, 83, 48, 199, 185, 219, 230, 83, 48, 219, 226, 83, 48, 202, 4, - 83, 48, 219, 233, 83, 48, 193, 66, 83, 48, 232, 179, 83, 48, 234, 200, - 83, 48, 229, 235, 83, 48, 232, 116, 83, 48, 228, 183, 83, 48, 248, 98, - 83, 48, 199, 199, 83, 48, 230, 78, 83, 48, 233, 14, 83, 48, 205, 194, - 193, 62, 83, 48, 247, 72, 83, 48, 231, 61, 83, 48, 232, 236, 83, 48, 248, - 160, 83, 48, 205, 158, 83, 48, 237, 128, 83, 48, 193, 95, 83, 48, 229, - 199, 83, 48, 192, 72, 83, 48, 216, 49, 83, 48, 248, 139, 83, 48, 234, - 110, 83, 48, 232, 99, 83, 48, 197, 222, 83, 48, 235, 94, 83, 48, 207, - 130, 83, 48, 213, 13, 83, 48, 233, 228, 83, 48, 198, 56, 83, 48, 235, - 111, 83, 48, 197, 55, 83, 48, 232, 182, 154, 237, 85, 246, 240, 45, 119, - 183, 154, 237, 85, 246, 240, 93, 119, 60, 154, 237, 85, 246, 240, 45, - 119, 82, 23, 183, 154, 237, 85, 246, 240, 93, 119, 82, 23, 60, 154, 237, - 85, 246, 240, 232, 80, 200, 168, 154, 237, 85, 246, 240, 200, 169, 232, - 98, 58, 154, 237, 85, 246, 240, 200, 169, 232, 98, 60, 154, 237, 85, 246, - 240, 200, 169, 232, 98, 219, 224, 154, 237, 85, 246, 240, 200, 169, 232, - 98, 116, 219, 224, 154, 237, 85, 246, 240, 200, 169, 232, 98, 116, 183, - 154, 237, 85, 246, 240, 200, 169, 232, 98, 110, 219, 224, 154, 237, 85, - 246, 240, 211, 3, 154, 201, 247, 154, 242, 74, 154, 232, 80, 201, 63, - 236, 211, 77, 223, 19, 223, 141, 201, 106, 113, 154, 223, 51, 77, 154, - 242, 215, 77, 154, 31, 191, 77, 45, 251, 116, 248, 53, 50, 251, 116, 248, - 53, 45, 55, 251, 116, 248, 53, 50, 55, 251, 116, 248, 53, 45, 239, 2, - 248, 53, 50, 239, 2, 248, 53, 45, 63, 239, 2, 248, 53, 50, 63, 239, 2, - 248, 53, 45, 62, 219, 187, 248, 53, 50, 62, 219, 187, 248, 53, 209, 18, - 77, 231, 130, 77, 45, 198, 42, 203, 103, 248, 53, 50, 198, 42, 203, 103, - 248, 53, 45, 63, 219, 187, 248, 53, 50, 63, 219, 187, 248, 53, 45, 63, - 198, 42, 203, 103, 248, 53, 50, 63, 198, 42, 203, 103, 248, 53, 45, 63, - 51, 248, 53, 50, 63, 51, 248, 53, 193, 139, 237, 215, 207, 18, 55, 208, - 216, 207, 252, 77, 55, 208, 216, 207, 252, 77, 130, 55, 208, 216, 207, - 252, 77, 209, 18, 87, 233, 103, 230, 25, 212, 134, 107, 230, 25, 212, - 134, 109, 230, 25, 212, 134, 138, 230, 25, 212, 134, 134, 230, 25, 212, - 134, 149, 230, 25, 212, 134, 169, 230, 25, 212, 134, 175, 230, 25, 212, - 134, 171, 230, 25, 212, 134, 178, 154, 219, 168, 163, 77, 154, 206, 180, - 163, 77, 154, 237, 95, 163, 77, 154, 234, 76, 163, 77, 30, 202, 170, 75, - 163, 77, 30, 55, 75, 163, 77, 193, 135, 237, 215, 81, 222, 86, 207, 49, - 77, 81, 222, 86, 207, 49, 4, 195, 20, 202, 5, 77, 81, 222, 86, 207, 49, - 87, 116, 230, 70, 81, 222, 86, 207, 49, 4, 195, 20, 202, 5, 87, 116, 230, - 70, 81, 222, 86, 207, 49, 87, 110, 230, 70, 47, 209, 18, 77, 154, 199, - 109, 219, 113, 233, 51, 204, 11, 113, 230, 25, 212, 134, 199, 95, 230, - 25, 212, 134, 197, 32, 230, 25, 212, 134, 198, 249, 81, 154, 223, 51, 77, - 217, 31, 77, 210, 107, 251, 153, 77, 154, 67, 223, 144, 154, 132, 233, 6, - 201, 247, 229, 120, 1, 2, 65, 229, 120, 1, 65, 229, 120, 1, 2, 68, 229, - 120, 1, 68, 229, 120, 1, 2, 66, 229, 120, 1, 66, 229, 120, 1, 2, 71, 229, - 120, 1, 71, 229, 120, 1, 2, 74, 229, 120, 1, 74, 229, 120, 1, 155, 229, - 120, 1, 231, 240, 229, 120, 1, 221, 166, 229, 120, 1, 231, 53, 229, 120, - 1, 220, 232, 229, 120, 1, 230, 179, 229, 120, 1, 222, 22, 229, 120, 1, - 231, 165, 229, 120, 1, 221, 67, 229, 120, 1, 231, 3, 229, 120, 1, 188, - 229, 120, 1, 191, 123, 229, 120, 1, 202, 222, 229, 120, 1, 191, 30, 229, - 120, 1, 201, 4, 229, 120, 1, 190, 251, 229, 120, 1, 205, 68, 229, 120, 1, - 191, 87, 229, 120, 1, 202, 46, 229, 120, 1, 191, 7, 229, 120, 1, 190, - 190, 229, 120, 1, 238, 32, 229, 120, 1, 198, 193, 229, 120, 1, 237, 44, - 229, 120, 1, 2, 197, 94, 229, 120, 1, 197, 94, 229, 120, 1, 235, 89, 229, - 120, 1, 199, 145, 229, 120, 1, 237, 146, 229, 120, 1, 159, 229, 120, 1, - 236, 174, 229, 120, 1, 180, 229, 120, 1, 213, 219, 229, 120, 1, 212, 178, - 229, 120, 1, 214, 121, 229, 120, 1, 213, 43, 229, 120, 1, 140, 229, 120, - 1, 249, 153, 229, 120, 1, 168, 229, 120, 1, 229, 158, 229, 120, 1, 248, - 188, 229, 120, 1, 209, 185, 229, 120, 1, 228, 159, 229, 120, 1, 248, 10, - 229, 120, 1, 208, 165, 229, 120, 1, 229, 245, 229, 120, 1, 249, 17, 229, - 120, 1, 210, 63, 229, 120, 1, 229, 23, 229, 120, 1, 248, 111, 229, 120, - 1, 209, 73, 229, 120, 1, 174, 229, 120, 1, 216, 100, 229, 120, 1, 215, - 155, 229, 120, 1, 216, 232, 229, 120, 1, 216, 12, 229, 120, 1, 2, 170, - 229, 120, 1, 170, 229, 120, 1, 2, 191, 225, 229, 120, 1, 191, 225, 229, - 120, 1, 2, 192, 12, 229, 120, 1, 192, 12, 229, 120, 1, 165, 229, 120, 1, - 207, 1, 229, 120, 1, 206, 68, 229, 120, 1, 207, 113, 229, 120, 1, 206, - 162, 229, 120, 1, 2, 193, 190, 229, 120, 1, 193, 190, 229, 120, 1, 193, - 86, 229, 120, 1, 193, 125, 229, 120, 1, 193, 48, 229, 120, 1, 215, 61, - 229, 120, 1, 193, 249, 229, 120, 1, 2, 155, 229, 120, 1, 2, 222, 22, 33, - 222, 48, 195, 20, 202, 5, 77, 33, 222, 48, 204, 30, 202, 5, 77, 222, 48, - 195, 20, 202, 5, 77, 222, 48, 204, 30, 202, 5, 77, 229, 120, 223, 51, 77, - 229, 120, 195, 20, 223, 51, 77, 229, 120, 237, 3, 191, 242, 222, 48, 55, - 228, 88, 72, 1, 2, 65, 72, 1, 65, 72, 1, 2, 68, 72, 1, 68, 72, 1, 2, 66, - 72, 1, 66, 72, 1, 2, 71, 72, 1, 71, 72, 1, 2, 74, 72, 1, 74, 72, 1, 155, - 72, 1, 231, 240, 72, 1, 221, 166, 72, 1, 231, 53, 72, 1, 220, 232, 72, 1, - 230, 179, 72, 1, 222, 22, 72, 1, 231, 165, 72, 1, 221, 67, 72, 1, 231, 3, - 72, 1, 188, 72, 1, 191, 123, 72, 1, 202, 222, 72, 1, 191, 30, 72, 1, 201, - 4, 72, 1, 190, 251, 72, 1, 205, 68, 72, 1, 191, 87, 72, 1, 202, 46, 72, - 1, 191, 7, 72, 1, 190, 190, 72, 1, 238, 32, 72, 1, 198, 193, 72, 1, 237, - 44, 72, 1, 2, 197, 94, 72, 1, 197, 94, 72, 1, 235, 89, 72, 1, 199, 145, - 72, 1, 237, 146, 72, 1, 159, 72, 1, 236, 174, 72, 1, 180, 72, 1, 213, - 219, 72, 1, 212, 178, 72, 1, 214, 121, 72, 1, 213, 43, 72, 1, 140, 72, 1, - 249, 153, 72, 1, 168, 72, 1, 229, 158, 72, 1, 248, 188, 72, 1, 209, 185, - 72, 1, 228, 159, 72, 1, 248, 10, 72, 1, 208, 165, 72, 1, 229, 245, 72, 1, - 249, 17, 72, 1, 210, 63, 72, 1, 229, 23, 72, 1, 248, 111, 72, 1, 209, 73, - 72, 1, 174, 72, 1, 216, 100, 72, 1, 215, 155, 72, 1, 216, 232, 72, 1, - 216, 12, 72, 1, 2, 170, 72, 1, 170, 72, 1, 2, 191, 225, 72, 1, 191, 225, - 72, 1, 2, 192, 12, 72, 1, 192, 12, 72, 1, 165, 72, 1, 207, 1, 72, 1, 206, - 68, 72, 1, 207, 113, 72, 1, 206, 162, 72, 1, 2, 193, 190, 72, 1, 193, - 190, 72, 1, 193, 86, 72, 1, 193, 125, 72, 1, 193, 48, 72, 1, 215, 61, 72, - 1, 193, 249, 72, 1, 2, 155, 72, 1, 2, 222, 22, 72, 1, 195, 188, 72, 1, - 195, 69, 72, 1, 195, 153, 72, 1, 195, 24, 72, 82, 236, 140, 222, 48, 208, - 191, 202, 5, 77, 72, 223, 51, 77, 72, 195, 20, 223, 51, 77, 72, 237, 3, - 221, 27, 248, 88, 1, 250, 120, 248, 88, 1, 210, 236, 248, 88, 1, 218, - 168, 248, 88, 1, 233, 175, 248, 88, 1, 238, 127, 248, 88, 1, 200, 43, - 248, 88, 1, 215, 61, 248, 88, 1, 172, 248, 88, 1, 232, 51, 248, 88, 1, - 222, 152, 248, 88, 1, 230, 116, 248, 88, 1, 223, 35, 248, 88, 1, 208, - 104, 248, 88, 1, 192, 235, 248, 88, 1, 191, 72, 248, 88, 1, 247, 3, 248, - 88, 1, 203, 167, 248, 88, 1, 146, 248, 88, 1, 191, 166, 248, 88, 1, 247, - 193, 248, 88, 1, 206, 8, 248, 88, 1, 65, 248, 88, 1, 74, 248, 88, 1, 71, - 248, 88, 1, 234, 173, 248, 88, 1, 251, 236, 248, 88, 1, 234, 166, 248, - 88, 1, 250, 163, 248, 88, 1, 211, 19, 248, 88, 1, 251, 132, 248, 88, 1, - 234, 103, 248, 88, 1, 251, 122, 248, 88, 1, 234, 88, 248, 88, 1, 234, 34, - 248, 88, 1, 68, 248, 88, 1, 66, 248, 88, 1, 223, 49, 248, 88, 1, 196, 12, - 248, 88, 1, 214, 70, 248, 88, 1, 231, 7, 248, 88, 1, 223, 200, 248, 88, - 1, 187, 4, 75, 58, 248, 88, 1, 213, 80, 30, 1, 221, 113, 30, 1, 201, 167, - 30, 1, 221, 106, 30, 1, 213, 204, 30, 1, 213, 202, 30, 1, 213, 201, 30, - 1, 198, 168, 30, 1, 201, 156, 30, 1, 206, 239, 30, 1, 206, 234, 30, 1, - 206, 231, 30, 1, 206, 224, 30, 1, 206, 219, 30, 1, 206, 214, 30, 1, 206, - 225, 30, 1, 206, 237, 30, 1, 216, 77, 30, 1, 209, 169, 30, 1, 201, 164, - 30, 1, 209, 158, 30, 1, 202, 160, 30, 1, 201, 161, 30, 1, 223, 222, 30, - 1, 243, 24, 30, 1, 201, 171, 30, 1, 243, 91, 30, 1, 221, 188, 30, 1, 199, - 7, 30, 1, 209, 209, 30, 1, 229, 142, 30, 1, 65, 30, 1, 252, 25, 30, 1, - 170, 30, 1, 192, 129, 30, 1, 234, 65, 30, 1, 71, 30, 1, 192, 67, 30, 1, - 192, 80, 30, 1, 74, 30, 1, 193, 190, 30, 1, 193, 176, 30, 1, 211, 151, - 30, 1, 192, 12, 30, 1, 66, 30, 1, 193, 107, 30, 1, 193, 125, 30, 1, 193, - 86, 30, 1, 191, 225, 30, 1, 233, 242, 30, 1, 192, 33, 30, 1, 68, 30, 233, - 3, 30, 1, 201, 165, 30, 1, 213, 194, 30, 1, 213, 196, 30, 1, 213, 199, - 30, 1, 206, 232, 30, 1, 206, 213, 30, 1, 206, 221, 30, 1, 206, 226, 30, - 1, 206, 211, 30, 1, 216, 70, 30, 1, 216, 67, 30, 1, 216, 71, 30, 1, 222, - 71, 30, 1, 209, 164, 30, 1, 209, 150, 30, 1, 209, 156, 30, 1, 209, 153, - 30, 1, 209, 167, 30, 1, 209, 151, 30, 1, 222, 69, 30, 1, 222, 67, 30, 1, - 202, 153, 30, 1, 202, 151, 30, 1, 202, 143, 30, 1, 202, 148, 30, 1, 202, - 158, 30, 1, 210, 149, 30, 1, 201, 168, 30, 1, 192, 57, 30, 1, 192, 51, - 30, 1, 192, 52, 30, 1, 222, 70, 30, 1, 201, 169, 30, 1, 192, 63, 30, 1, - 192, 0, 30, 1, 191, 255, 30, 1, 192, 2, 30, 1, 191, 212, 30, 1, 191, 213, - 30, 1, 191, 216, 30, 1, 251, 25, 30, 1, 251, 19, 154, 251, 96, 219, 101, - 77, 154, 251, 96, 207, 19, 77, 154, 251, 96, 91, 77, 154, 251, 96, 105, - 77, 154, 251, 96, 115, 77, 154, 251, 96, 232, 128, 77, 154, 251, 96, 198, - 54, 77, 154, 251, 96, 82, 77, 154, 251, 96, 248, 77, 77, 154, 251, 96, - 232, 238, 77, 154, 251, 96, 205, 57, 77, 154, 251, 96, 199, 1, 77, 154, - 251, 96, 232, 121, 77, 154, 251, 96, 229, 220, 77, 154, 251, 96, 234, - 208, 77, 154, 251, 96, 217, 91, 77, 248, 88, 1, 248, 10, 248, 88, 1, 191, - 30, 248, 88, 1, 222, 244, 248, 88, 1, 230, 179, 248, 88, 1, 234, 188, - 248, 88, 1, 234, 85, 248, 88, 1, 211, 87, 248, 88, 1, 211, 91, 248, 88, - 1, 223, 77, 248, 88, 1, 251, 98, 248, 88, 1, 223, 128, 248, 88, 1, 196, - 83, 248, 88, 1, 223, 180, 248, 88, 1, 214, 48, 248, 88, 1, 251, 229, 248, - 88, 1, 250, 158, 248, 88, 1, 251, 149, 248, 88, 1, 211, 113, 248, 88, 1, - 211, 94, 248, 88, 1, 223, 125, 248, 88, 53, 1, 210, 236, 248, 88, 53, 1, - 200, 43, 248, 88, 53, 1, 222, 152, 248, 88, 53, 1, 230, 116, 248, 88, 1, - 231, 92, 248, 88, 1, 219, 160, 248, 88, 1, 190, 231, 248, 88, 53, 1, 232, - 51, 248, 88, 1, 230, 136, 248, 88, 1, 220, 180, 248, 88, 1, 211, 151, - 248, 88, 1, 251, 245, 12, 201, 28, 200, 43, 12, 201, 28, 193, 98, 12, - 201, 28, 192, 209, 12, 201, 28, 247, 206, 12, 201, 28, 200, 151, 12, 201, - 28, 228, 78, 12, 201, 28, 228, 82, 12, 201, 28, 228, 169, 12, 201, 28, - 228, 79, 12, 201, 28, 200, 46, 12, 201, 28, 228, 81, 12, 201, 28, 228, - 77, 12, 201, 28, 228, 167, 12, 201, 28, 228, 80, 12, 201, 28, 228, 76, - 12, 201, 28, 215, 61, 12, 201, 28, 230, 116, 12, 201, 28, 206, 8, 12, - 201, 28, 210, 236, 12, 201, 28, 201, 250, 12, 201, 28, 238, 127, 12, 201, - 28, 228, 83, 12, 201, 28, 229, 178, 12, 201, 28, 200, 55, 12, 201, 28, - 200, 128, 12, 201, 28, 201, 118, 12, 201, 28, 203, 173, 12, 201, 28, 210, - 67, 12, 201, 28, 208, 106, 12, 201, 28, 198, 99, 12, 201, 28, 200, 45, - 12, 201, 28, 200, 140, 12, 201, 28, 228, 94, 12, 201, 28, 228, 75, 12, - 201, 28, 209, 230, 12, 201, 28, 208, 104, 72, 1, 2, 220, 232, 72, 1, 2, - 202, 222, 72, 1, 2, 201, 4, 72, 1, 2, 159, 72, 1, 2, 212, 178, 72, 1, 2, - 140, 72, 1, 2, 229, 158, 72, 1, 2, 228, 159, 72, 1, 2, 229, 245, 72, 1, - 2, 229, 23, 72, 1, 2, 215, 155, 72, 1, 2, 165, 72, 1, 2, 207, 1, 72, 1, - 2, 206, 68, 72, 1, 2, 207, 113, 72, 1, 2, 206, 162, 127, 30, 221, 113, - 127, 30, 213, 204, 127, 30, 198, 168, 127, 30, 206, 239, 127, 30, 216, - 77, 127, 30, 209, 169, 127, 30, 202, 160, 127, 30, 223, 222, 127, 30, - 243, 24, 127, 30, 243, 91, 127, 30, 221, 188, 127, 30, 199, 7, 127, 30, - 209, 209, 127, 30, 229, 142, 127, 30, 221, 114, 65, 127, 30, 213, 205, - 65, 127, 30, 198, 169, 65, 127, 30, 206, 240, 65, 127, 30, 216, 78, 65, - 127, 30, 209, 170, 65, 127, 30, 202, 161, 65, 127, 30, 223, 223, 65, 127, - 30, 243, 25, 65, 127, 30, 243, 92, 65, 127, 30, 221, 189, 65, 127, 30, - 199, 8, 65, 127, 30, 209, 210, 65, 127, 30, 229, 143, 65, 127, 30, 243, - 25, 66, 127, 221, 32, 246, 240, 211, 129, 127, 221, 32, 246, 240, 187, - 228, 159, 127, 228, 14, 107, 127, 228, 14, 109, 127, 228, 14, 138, 127, - 228, 14, 134, 127, 228, 14, 149, 127, 228, 14, 169, 127, 228, 14, 175, - 127, 228, 14, 171, 127, 228, 14, 178, 127, 228, 14, 199, 95, 127, 228, - 14, 215, 205, 127, 228, 14, 232, 243, 127, 228, 14, 193, 143, 127, 228, - 14, 193, 28, 127, 228, 14, 216, 165, 127, 228, 14, 234, 207, 127, 228, - 14, 200, 198, 127, 228, 14, 201, 66, 127, 228, 14, 229, 255, 127, 228, - 14, 202, 35, 127, 228, 14, 214, 227, 127, 228, 14, 201, 231, 127, 228, - 14, 232, 254, 127, 228, 14, 239, 50, 127, 228, 14, 220, 114, 127, 228, - 14, 207, 42, 127, 228, 14, 247, 138, 127, 228, 14, 201, 10, 127, 228, 14, - 200, 178, 127, 228, 14, 234, 75, 127, 228, 14, 207, 32, 127, 228, 14, - 251, 168, 127, 228, 14, 233, 31, 127, 228, 14, 207, 30, 127, 228, 14, - 204, 32, 127, 228, 14, 207, 108, 47, 228, 14, 208, 12, 47, 228, 14, 221, - 140, 47, 228, 14, 205, 89, 47, 228, 14, 221, 27, 47, 31, 199, 96, 211, - 105, 62, 201, 190, 47, 31, 197, 33, 211, 105, 62, 201, 190, 47, 31, 198, - 250, 211, 105, 62, 201, 190, 47, 31, 232, 136, 211, 105, 62, 201, 190, - 47, 31, 233, 16, 211, 105, 62, 201, 190, 47, 31, 202, 121, 211, 105, 62, - 201, 190, 47, 31, 203, 242, 211, 105, 62, 201, 190, 47, 31, 234, 154, - 211, 105, 62, 201, 190, 210, 103, 56, 47, 31, 197, 33, 107, 47, 31, 197, - 33, 109, 47, 31, 197, 33, 138, 47, 31, 197, 33, 134, 47, 31, 197, 33, - 149, 47, 31, 197, 33, 169, 47, 31, 197, 33, 175, 47, 31, 197, 33, 171, - 47, 31, 197, 33, 178, 47, 31, 198, 249, 47, 31, 198, 250, 107, 47, 31, - 198, 250, 109, 47, 31, 198, 250, 138, 47, 31, 198, 250, 134, 47, 31, 198, - 250, 149, 47, 30, 221, 113, 47, 30, 213, 204, 47, 30, 198, 168, 47, 30, - 206, 239, 47, 30, 216, 77, 47, 30, 209, 169, 47, 30, 202, 160, 47, 30, - 223, 222, 47, 30, 243, 24, 47, 30, 243, 91, 47, 30, 221, 188, 47, 30, - 199, 7, 47, 30, 209, 209, 47, 30, 229, 142, 47, 30, 221, 114, 65, 47, 30, - 213, 205, 65, 47, 30, 198, 169, 65, 47, 30, 206, 240, 65, 47, 30, 216, - 78, 65, 47, 30, 209, 170, 65, 47, 30, 202, 161, 65, 47, 30, 223, 223, 65, - 47, 30, 243, 25, 65, 47, 30, 243, 92, 65, 47, 30, 221, 189, 65, 47, 30, - 199, 8, 65, 47, 30, 209, 210, 65, 47, 30, 229, 143, 65, 47, 221, 32, 246, - 240, 246, 247, 47, 221, 32, 246, 240, 222, 178, 47, 30, 223, 223, 66, - 221, 32, 201, 106, 113, 47, 228, 14, 107, 47, 228, 14, 109, 47, 228, 14, - 138, 47, 228, 14, 134, 47, 228, 14, 149, 47, 228, 14, 169, 47, 228, 14, - 175, 47, 228, 14, 171, 47, 228, 14, 178, 47, 228, 14, 199, 95, 47, 228, - 14, 215, 205, 47, 228, 14, 232, 243, 47, 228, 14, 193, 143, 47, 228, 14, - 193, 28, 47, 228, 14, 216, 165, 47, 228, 14, 234, 207, 47, 228, 14, 200, - 198, 47, 228, 14, 201, 66, 47, 228, 14, 229, 255, 47, 228, 14, 202, 35, - 47, 228, 14, 214, 227, 47, 228, 14, 201, 231, 47, 228, 14, 232, 254, 47, - 228, 14, 239, 50, 47, 228, 14, 220, 114, 47, 228, 14, 205, 55, 47, 228, - 14, 217, 96, 47, 228, 14, 233, 41, 47, 228, 14, 200, 210, 47, 228, 14, - 233, 220, 47, 228, 14, 208, 211, 47, 228, 14, 250, 167, 47, 228, 14, 223, - 52, 47, 228, 14, 207, 30, 47, 228, 14, 239, 8, 47, 228, 14, 238, 251, 47, - 228, 14, 229, 135, 47, 228, 14, 247, 21, 47, 228, 14, 218, 241, 47, 228, - 14, 219, 224, 47, 228, 14, 183, 47, 228, 14, 216, 215, 47, 228, 14, 207, - 60, 47, 228, 14, 201, 10, 47, 228, 14, 200, 178, 47, 228, 14, 234, 75, - 47, 228, 14, 207, 32, 47, 228, 14, 251, 168, 47, 228, 14, 213, 190, 47, + 250, 51, 4, 45, 132, 248, 141, 51, 4, 50, 132, 248, 141, 51, 4, 116, 45, + 237, 41, 132, 248, 141, 51, 4, 110, 50, 237, 41, 132, 248, 141, 63, 51, + 4, 81, 248, 156, 219, 114, 63, 196, 76, 197, 242, 4, 236, 142, 196, 76, + 197, 242, 4, 45, 132, 248, 141, 196, 76, 197, 242, 4, 50, 132, 248, 141, + 220, 15, 243, 12, 63, 51, 4, 116, 45, 208, 29, 63, 51, 4, 110, 45, 208, + 29, 63, 51, 4, 110, 50, 208, 29, 63, 51, 4, 116, 50, 208, 29, 63, 243, + 13, 4, 116, 45, 208, 29, 63, 243, 13, 4, 110, 45, 208, 29, 63, 243, 13, + 4, 110, 50, 208, 29, 63, 243, 13, 4, 116, 50, 208, 29, 116, 45, 197, 241, + 116, 50, 197, 241, 110, 45, 197, 241, 63, 216, 215, 201, 191, 62, 216, + 215, 201, 191, 63, 216, 215, 2, 201, 191, 62, 216, 215, 2, 201, 191, 110, + 50, 197, 241, 62, 200, 199, 4, 207, 121, 242, 212, 196, 117, 202, 49, + 242, 79, 62, 201, 103, 63, 201, 103, 219, 131, 198, 208, 200, 198, 250, + 215, 213, 37, 237, 88, 213, 37, 239, 44, 211, 64, 62, 199, 106, 63, 199, + 106, 249, 109, 248, 64, 249, 109, 111, 4, 243, 127, 249, 109, 111, 4, + 192, 235, 205, 155, 196, 118, 4, 207, 152, 235, 98, 228, 183, 248, 209, + 63, 203, 50, 209, 177, 62, 203, 50, 209, 177, 203, 141, 207, 19, 206, + 123, 232, 192, 229, 226, 247, 250, 62, 45, 209, 60, 223, 150, 62, 50, + 209, 60, 223, 150, 63, 45, 209, 60, 223, 150, 63, 133, 209, 60, 223, 150, + 63, 50, 209, 60, 223, 150, 63, 144, 209, 60, 223, 150, 202, 105, 23, 238, + 217, 247, 73, 56, 207, 166, 56, 248, 164, 56, 247, 153, 251, 101, 211, + 41, 238, 219, 243, 98, 207, 4, 238, 220, 79, 219, 1, 238, 220, 79, 223, + 0, 201, 104, 23, 238, 229, 233, 76, 113, 252, 36, 203, 144, 230, 64, 23, + 202, 214, 210, 63, 113, 192, 22, 192, 106, 197, 231, 40, 229, 221, 197, + 231, 40, 220, 45, 197, 231, 40, 232, 245, 197, 231, 40, 198, 209, 197, + 231, 40, 193, 66, 197, 231, 40, 193, 143, 197, 231, 40, 215, 186, 197, + 231, 40, 234, 209, 193, 94, 79, 237, 62, 63, 232, 94, 233, 105, 63, 202, + 65, 233, 105, 62, 202, 65, 233, 105, 63, 200, 199, 4, 207, 121, 232, 240, + 208, 25, 215, 207, 220, 8, 208, 25, 215, 207, 216, 182, 233, 44, 56, 234, + 209, 217, 99, 56, 222, 169, 205, 116, 196, 57, 214, 96, 209, 79, 251, 4, + 199, 164, 231, 154, 247, 126, 219, 188, 195, 38, 219, 145, 205, 81, 205, + 184, 247, 108, 251, 36, 209, 122, 63, 243, 107, 221, 140, 63, 243, 107, + 208, 16, 63, 243, 107, 206, 132, 63, 243, 107, 248, 154, 63, 243, 107, + 221, 78, 63, 243, 107, 210, 76, 62, 243, 107, 221, 140, 62, 243, 107, + 208, 16, 62, 243, 107, 206, 132, 62, 243, 107, 248, 154, 62, 243, 107, + 221, 78, 62, 243, 107, 210, 76, 62, 201, 246, 200, 211, 63, 229, 226, + 200, 211, 63, 237, 35, 200, 211, 62, 242, 209, 200, 211, 63, 201, 246, + 200, 211, 62, 229, 226, 200, 211, 62, 237, 35, 200, 211, 63, 242, 209, + 200, 211, 228, 183, 201, 196, 208, 25, 213, 8, 234, 162, 213, 8, 249, 15, + 234, 162, 213, 3, 249, 15, 202, 130, 213, 3, 215, 99, 232, 209, 56, 215, + 99, 214, 208, 56, 215, 99, 203, 128, 56, 193, 105, 200, 63, 238, 219, + 234, 206, 200, 63, 238, 219, 196, 87, 207, 90, 113, 207, 90, 16, 40, 196, + 254, 209, 100, 207, 90, 16, 40, 196, 252, 209, 100, 207, 90, 16, 40, 196, + 251, 209, 100, 207, 90, 16, 40, 196, 249, 209, 100, 207, 90, 16, 40, 196, + 247, 209, 100, 207, 90, 16, 40, 196, 245, 209, 100, 207, 90, 16, 40, 196, + 243, 209, 100, 207, 90, 16, 40, 231, 151, 217, 30, 62, 196, 87, 207, 90, + 113, 207, 91, 210, 138, 113, 210, 106, 210, 138, 113, 210, 5, 210, 138, + 56, 193, 92, 113, 237, 27, 233, 104, 237, 27, 233, 103, 237, 27, 233, + 102, 237, 27, 233, 101, 237, 27, 233, 100, 237, 27, 233, 99, 63, 243, 13, + 4, 75, 179, 63, 243, 13, 4, 105, 236, 140, 62, 243, 13, 4, 63, 75, 179, + 62, 243, 13, 4, 105, 63, 236, 140, 215, 223, 40, 192, 106, 215, 223, 40, + 192, 21, 237, 8, 40, 230, 207, 192, 106, 237, 8, 40, 219, 180, 192, 21, + 237, 8, 40, 219, 180, 192, 106, 237, 8, 40, 230, 207, 192, 21, 63, 232, + 219, 62, 232, 219, 230, 64, 23, 209, 182, 251, 129, 238, 216, 200, 130, + 201, 113, 79, 252, 10, 205, 99, 251, 193, 232, 188, 231, 164, 201, 113, + 79, 229, 193, 250, 174, 113, 232, 204, 211, 12, 63, 201, 103, 115, 219, + 109, 239, 21, 179, 115, 219, 109, 239, 21, 219, 226, 193, 155, 56, 137, + 195, 12, 56, 235, 130, 233, 44, 56, 235, 130, 217, 99, 56, 223, 107, 233, + 44, 23, 217, 99, 56, 217, 99, 23, 233, 44, 56, 217, 99, 4, 201, 29, 56, + 217, 99, 4, 201, 29, 23, 217, 99, 23, 233, 44, 56, 81, 217, 99, 4, 201, + 29, 56, 228, 243, 217, 99, 4, 201, 29, 56, 216, 215, 63, 243, 12, 216, + 215, 62, 243, 12, 216, 215, 2, 63, 243, 12, 217, 50, 113, 236, 200, 113, + 196, 84, 210, 105, 113, 242, 91, 232, 76, 196, 53, 214, 85, 247, 9, 210, + 187, 222, 175, 195, 80, 243, 77, 62, 215, 208, 219, 128, 203, 177, 204, + 23, 208, 6, 204, 0, 202, 37, 249, 113, 249, 75, 112, 221, 224, 63, 235, + 110, 217, 92, 63, 235, 110, 221, 140, 62, 235, 110, 217, 92, 62, 235, + 110, 221, 140, 202, 50, 193, 51, 202, 53, 200, 199, 248, 244, 242, 212, + 207, 151, 62, 202, 49, 198, 210, 242, 213, 23, 207, 151, 154, 63, 203, + 50, 209, 177, 154, 62, 203, 50, 209, 177, 63, 237, 35, 223, 165, 201, + 191, 238, 212, 220, 23, 236, 231, 247, 104, 211, 67, 209, 182, 247, 105, + 202, 86, 229, 203, 4, 63, 238, 219, 47, 238, 212, 220, 23, 246, 255, 213, + 46, 234, 74, 251, 159, 211, 98, 45, 193, 129, 198, 19, 62, 197, 10, 45, + 193, 129, 198, 19, 63, 197, 10, 45, 193, 129, 198, 19, 62, 45, 220, 24, + 216, 181, 63, 45, 220, 24, 216, 181, 235, 105, 202, 77, 56, 88, 63, 235, + 124, 197, 241, 45, 242, 221, 234, 74, 112, 205, 155, 233, 85, 237, 41, + 223, 165, 63, 243, 13, 223, 165, 62, 201, 191, 62, 197, 203, 207, 30, 45, + 234, 73, 207, 30, 45, 234, 72, 250, 189, 16, 40, 196, 57, 88, 243, 13, 4, + 201, 29, 23, 105, 185, 58, 210, 25, 206, 206, 223, 109, 210, 25, 219, + 223, 223, 109, 210, 25, 223, 95, 210, 25, 62, 238, 220, 211, 107, 203, + 79, 203, 67, 203, 13, 243, 42, 247, 82, 229, 120, 202, 138, 231, 165, + 193, 51, 228, 155, 231, 165, 4, 230, 32, 217, 74, 16, 40, 219, 133, 215, + 186, 196, 118, 211, 107, 230, 190, 232, 131, 232, 220, 223, 165, 229, 7, + 233, 34, 205, 179, 51, 232, 130, 239, 2, 202, 109, 228, 29, 202, 113, + 209, 253, 4, 249, 113, 199, 87, 223, 21, 249, 95, 113, 229, 231, 230, + 209, 113, 232, 85, 208, 155, 238, 184, 211, 107, 62, 201, 191, 63, 232, + 220, 4, 228, 243, 82, 62, 201, 30, 62, 205, 189, 205, 85, 116, 248, 136, + 205, 85, 62, 205, 85, 110, 248, 136, 205, 85, 63, 205, 85, 63, 88, 243, + 128, 77, 199, 107, 219, 42, 56, 199, 182, 235, 104, 251, 225, 234, 69, + 207, 149, 232, 233, 207, 149, 230, 55, 195, 67, 230, 55, 193, 3, 230, 55, + 110, 50, 210, 35, 210, 35, 116, 50, 210, 35, 63, 213, 210, 62, 213, 210, + 243, 128, 77, 88, 243, 128, 77, 215, 129, 192, 235, 88, 215, 129, 192, + 235, 249, 109, 192, 235, 88, 249, 109, 192, 235, 211, 12, 35, 238, 219, + 88, 35, 238, 219, 211, 79, 247, 24, 238, 219, 88, 211, 79, 247, 24, 238, + 219, 8, 238, 219, 203, 152, 63, 8, 238, 219, 211, 12, 8, 238, 219, 217, + 95, 238, 219, 201, 104, 79, 237, 210, 232, 130, 199, 127, 250, 195, 232, + 130, 249, 110, 250, 195, 88, 232, 130, 249, 110, 250, 195, 232, 130, 242, + 207, 250, 195, 62, 232, 130, 209, 62, 201, 103, 63, 232, 130, 209, 62, + 201, 103, 201, 241, 201, 39, 211, 12, 63, 201, 103, 47, 63, 201, 103, + 211, 79, 247, 24, 62, 201, 103, 62, 247, 24, 63, 201, 103, 211, 12, 62, + 201, 103, 88, 211, 12, 62, 201, 103, 209, 132, 201, 103, 203, 152, 63, + 201, 103, 88, 250, 195, 211, 79, 247, 24, 250, 195, 234, 166, 201, 207, + 250, 195, 234, 166, 209, 62, 62, 201, 103, 234, 166, 209, 62, 209, 132, + 201, 103, 202, 137, 209, 62, 62, 201, 103, 234, 166, 209, 62, 207, 92, + 62, 201, 103, 88, 234, 166, 209, 62, 207, 92, 62, 201, 103, 197, 38, 209, + 62, 62, 201, 103, 202, 132, 209, 62, 250, 195, 199, 127, 250, 195, 211, + 79, 247, 24, 199, 127, 250, 195, 88, 199, 127, 250, 195, 202, 137, 209, + 241, 62, 23, 63, 232, 191, 62, 232, 191, 63, 232, 191, 234, 166, 209, + 241, 211, 12, 62, 232, 191, 47, 211, 79, 247, 24, 234, 166, 209, 62, 201, + 103, 88, 199, 127, 209, 132, 250, 195, 202, 51, 198, 172, 197, 234, 202, + 51, 88, 243, 103, 202, 51, 201, 243, 88, 201, 243, 249, 110, 250, 195, + 234, 166, 199, 127, 208, 191, 250, 195, 88, 234, 166, 199, 127, 208, 191, + 250, 195, 238, 220, 77, 203, 152, 63, 243, 12, 214, 108, 112, 238, 220, + 77, 110, 50, 235, 100, 63, 201, 191, 116, 50, 235, 100, 63, 201, 191, + 110, 50, 203, 152, 63, 201, 191, 116, 50, 203, 152, 63, 201, 191, 62, + 208, 15, 87, 211, 44, 63, 208, 15, 87, 211, 44, 63, 233, 218, 87, 211, + 44, 62, 237, 35, 216, 37, 63, 192, 235, 88, 233, 218, 87, 113, 156, 81, + 164, 216, 215, 81, 164, 88, 81, 164, 88, 202, 171, 154, 242, 77, 207, + 254, 87, 211, 44, 88, 202, 171, 242, 77, 207, 254, 87, 211, 44, 88, 55, + 154, 242, 77, 207, 254, 87, 211, 44, 88, 55, 242, 77, 207, 254, 87, 211, + 44, 88, 130, 202, 171, 242, 77, 207, 254, 87, 211, 44, 88, 130, 55, 242, + 77, 207, 254, 87, 211, 44, 238, 165, 201, 82, 210, 130, 3, 211, 44, 88, + 233, 218, 87, 211, 44, 88, 229, 226, 233, 218, 87, 211, 44, 88, 62, 229, + 225, 206, 123, 88, 62, 229, 226, 247, 250, 232, 192, 229, 225, 206, 123, + 232, 192, 229, 226, 247, 250, 216, 215, 45, 210, 116, 211, 44, 216, 215, + 50, 210, 116, 211, 44, 216, 215, 232, 205, 45, 210, 116, 211, 44, 216, + 215, 232, 205, 50, 210, 116, 211, 44, 216, 215, 219, 221, 251, 118, 248, + 56, 211, 44, 216, 215, 206, 204, 251, 118, 248, 56, 211, 44, 88, 219, + 221, 251, 118, 207, 254, 87, 211, 44, 88, 206, 204, 251, 118, 207, 254, + 87, 211, 44, 88, 219, 221, 251, 118, 248, 56, 211, 44, 88, 206, 204, 251, + 118, 248, 56, 211, 44, 156, 45, 198, 42, 203, 104, 248, 56, 211, 44, 156, + 50, 198, 42, 203, 104, 248, 56, 211, 44, 216, 215, 45, 238, 173, 248, 56, + 211, 44, 216, 215, 50, 238, 173, 248, 56, 211, 44, 236, 243, 214, 108, + 47, 17, 107, 236, 243, 214, 108, 47, 17, 109, 236, 243, 214, 108, 47, 17, + 138, 236, 243, 214, 108, 47, 17, 134, 236, 243, 214, 108, 47, 17, 150, + 236, 243, 214, 108, 47, 17, 169, 236, 243, 214, 108, 47, 17, 175, 236, + 243, 214, 108, 47, 17, 171, 236, 243, 214, 108, 47, 17, 178, 236, 243, + 214, 108, 47, 31, 199, 95, 236, 243, 47, 49, 17, 107, 236, 243, 47, 49, + 17, 109, 236, 243, 47, 49, 17, 138, 236, 243, 47, 49, 17, 134, 236, 243, + 47, 49, 17, 150, 236, 243, 47, 49, 17, 169, 236, 243, 47, 49, 17, 175, + 236, 243, 47, 49, 17, 171, 236, 243, 47, 49, 17, 178, 236, 243, 47, 49, + 31, 199, 95, 236, 243, 214, 108, 47, 49, 17, 107, 236, 243, 214, 108, 47, + 49, 17, 109, 236, 243, 214, 108, 47, 49, 17, 138, 236, 243, 214, 108, 47, + 49, 17, 134, 236, 243, 214, 108, 47, 49, 17, 150, 236, 243, 214, 108, 47, + 49, 17, 169, 236, 243, 214, 108, 47, 49, 17, 175, 236, 243, 214, 108, 47, + 49, 17, 171, 236, 243, 214, 108, 47, 49, 17, 178, 236, 243, 214, 108, 47, + 49, 31, 199, 95, 88, 193, 77, 96, 57, 88, 108, 56, 88, 216, 37, 56, 88, + 236, 202, 56, 88, 202, 3, 234, 206, 57, 88, 96, 57, 88, 186, 234, 206, + 57, 235, 115, 209, 64, 96, 57, 88, 206, 115, 96, 57, 197, 240, 96, 57, + 88, 197, 240, 96, 57, 237, 216, 197, 240, 96, 57, 88, 237, 216, 197, 240, + 96, 57, 62, 96, 57, 198, 225, 198, 52, 96, 250, 237, 198, 225, 248, 77, + 96, 250, 237, 62, 96, 250, 237, 88, 62, 238, 165, 235, 121, 23, 96, 57, + 88, 62, 238, 165, 196, 66, 23, 96, 57, 201, 188, 62, 96, 57, 88, 239, 58, + 62, 96, 57, 206, 203, 63, 96, 57, 219, 220, 63, 96, 57, 249, 147, 203, + 152, 63, 96, 57, 232, 97, 203, 152, 63, 96, 57, 88, 110, 206, 202, 63, + 96, 57, 88, 116, 206, 202, 63, 96, 57, 213, 10, 110, 206, 202, 63, 96, + 57, 238, 173, 219, 6, 213, 10, 116, 206, 202, 63, 96, 57, 47, 88, 63, 96, + 57, 193, 88, 96, 57, 248, 140, 202, 3, 234, 206, 57, 248, 140, 96, 57, + 248, 140, 186, 234, 206, 57, 88, 248, 140, 202, 3, 234, 206, 57, 88, 248, + 140, 96, 57, 88, 248, 140, 186, 234, 206, 57, 199, 129, 96, 57, 88, 199, + 128, 96, 57, 193, 115, 96, 57, 88, 193, 115, 96, 57, 211, 73, 96, 57, 55, + 238, 173, 219, 6, 115, 236, 253, 251, 117, 63, 197, 242, 239, 35, 2, 63, + 197, 241, 210, 0, 211, 79, 200, 229, 211, 79, 200, 180, 45, 206, 8, 249, + 133, 237, 114, 50, 206, 8, 249, 133, 237, 114, 211, 59, 4, 75, 223, 119, + 207, 20, 202, 25, 208, 232, 200, 229, 200, 181, 208, 232, 202, 24, 81, + 249, 90, 4, 228, 243, 106, 13, 206, 181, 237, 40, 180, 236, 201, 13, 233, + 85, 237, 40, 112, 219, 31, 251, 127, 112, 219, 31, 211, 58, 63, 237, 35, + 4, 247, 22, 236, 142, 23, 4, 236, 142, 234, 134, 79, 211, 71, 196, 65, + 110, 50, 239, 4, 4, 236, 142, 116, 45, 239, 4, 4, 236, 142, 45, 211, 14, + 222, 201, 50, 211, 14, 222, 201, 232, 82, 211, 14, 222, 201, 220, 15, + 133, 199, 228, 220, 15, 144, 199, 228, 45, 23, 50, 55, 197, 57, 45, 23, + 50, 199, 228, 45, 215, 133, 180, 50, 199, 228, 180, 45, 199, 228, 133, + 199, 229, 4, 243, 13, 58, 218, 235, 236, 208, 247, 207, 228, 243, 206, + 53, 63, 239, 57, 237, 34, 63, 239, 57, 237, 35, 4, 118, 198, 182, 63, + 239, 57, 237, 35, 4, 96, 198, 182, 63, 51, 4, 118, 198, 182, 63, 51, 4, + 96, 198, 182, 13, 45, 63, 51, 248, 55, 13, 50, 63, 51, 248, 55, 13, 45, + 251, 118, 248, 55, 13, 50, 251, 118, 248, 55, 13, 45, 55, 251, 118, 248, + 55, 13, 50, 55, 251, 118, 248, 55, 13, 45, 63, 198, 42, 203, 104, 248, + 55, 13, 50, 63, 198, 42, 203, 104, 248, 55, 13, 45, 232, 205, 210, 115, + 13, 50, 232, 205, 210, 115, 196, 66, 208, 28, 57, 235, 121, 208, 28, 57, + 251, 87, 231, 204, 243, 13, 57, 242, 223, 231, 204, 243, 13, 57, 50, 64, + 4, 47, 209, 83, 180, 118, 57, 180, 96, 57, 180, 45, 50, 57, 180, 118, 55, + 57, 180, 96, 55, 57, 180, 45, 50, 55, 57, 180, 118, 64, 232, 100, 164, + 180, 96, 64, 232, 100, 164, 180, 118, 55, 64, 232, 100, 164, 180, 96, 55, + 64, 232, 100, 164, 180, 96, 201, 184, 57, 69, 70, 248, 134, 69, 70, 236, + 139, 69, 70, 236, 11, 69, 70, 236, 138, 69, 70, 235, 203, 69, 70, 236, + 74, 69, 70, 236, 10, 69, 70, 236, 137, 69, 70, 235, 171, 69, 70, 236, 42, + 69, 70, 235, 234, 69, 70, 236, 105, 69, 70, 235, 202, 69, 70, 236, 73, + 69, 70, 236, 9, 69, 70, 236, 136, 69, 70, 235, 155, 69, 70, 236, 26, 69, + 70, 235, 218, 69, 70, 236, 89, 69, 70, 235, 186, 69, 70, 236, 57, 69, 70, + 235, 249, 69, 70, 236, 120, 69, 70, 235, 170, 69, 70, 236, 41, 69, 70, + 235, 233, 69, 70, 236, 104, 69, 70, 235, 201, 69, 70, 236, 72, 69, 70, + 236, 8, 69, 70, 236, 135, 69, 70, 235, 147, 69, 70, 236, 18, 69, 70, 235, + 210, 69, 70, 236, 81, 69, 70, 235, 178, 69, 70, 236, 49, 69, 70, 235, + 241, 69, 70, 236, 112, 69, 70, 235, 162, 69, 70, 236, 33, 69, 70, 235, + 225, 69, 70, 236, 96, 69, 70, 235, 193, 69, 70, 236, 64, 69, 70, 236, 0, + 69, 70, 236, 127, 69, 70, 235, 154, 69, 70, 236, 25, 69, 70, 235, 217, + 69, 70, 236, 88, 69, 70, 235, 185, 69, 70, 236, 56, 69, 70, 235, 248, 69, + 70, 236, 119, 69, 70, 235, 169, 69, 70, 236, 40, 69, 70, 235, 232, 69, + 70, 236, 103, 69, 70, 235, 200, 69, 70, 236, 71, 69, 70, 236, 7, 69, 70, + 236, 134, 69, 70, 235, 143, 69, 70, 236, 14, 69, 70, 235, 206, 69, 70, + 236, 77, 69, 70, 235, 174, 69, 70, 236, 45, 69, 70, 235, 237, 69, 70, + 236, 108, 69, 70, 235, 158, 69, 70, 236, 29, 69, 70, 235, 221, 69, 70, + 236, 92, 69, 70, 235, 189, 69, 70, 236, 60, 69, 70, 235, 252, 69, 70, + 236, 123, 69, 70, 235, 150, 69, 70, 236, 21, 69, 70, 235, 213, 69, 70, + 236, 84, 69, 70, 235, 181, 69, 70, 236, 52, 69, 70, 235, 244, 69, 70, + 236, 115, 69, 70, 235, 165, 69, 70, 236, 36, 69, 70, 235, 228, 69, 70, + 236, 99, 69, 70, 235, 196, 69, 70, 236, 67, 69, 70, 236, 3, 69, 70, 236, + 130, 69, 70, 235, 146, 69, 70, 236, 17, 69, 70, 235, 209, 69, 70, 236, + 80, 69, 70, 235, 177, 69, 70, 236, 48, 69, 70, 235, 240, 69, 70, 236, + 111, 69, 70, 235, 161, 69, 70, 236, 32, 69, 70, 235, 224, 69, 70, 236, + 95, 69, 70, 235, 192, 69, 70, 236, 63, 69, 70, 235, 255, 69, 70, 236, + 126, 69, 70, 235, 153, 69, 70, 236, 24, 69, 70, 235, 216, 69, 70, 236, + 87, 69, 70, 235, 184, 69, 70, 236, 55, 69, 70, 235, 247, 69, 70, 236, + 118, 69, 70, 235, 168, 69, 70, 236, 39, 69, 70, 235, 231, 69, 70, 236, + 102, 69, 70, 235, 199, 69, 70, 236, 70, 69, 70, 236, 6, 69, 70, 236, 133, + 69, 70, 235, 141, 69, 70, 236, 12, 69, 70, 235, 204, 69, 70, 236, 75, 69, + 70, 235, 172, 69, 70, 236, 43, 69, 70, 235, 235, 69, 70, 236, 106, 69, + 70, 235, 156, 69, 70, 236, 27, 69, 70, 235, 219, 69, 70, 236, 90, 69, 70, + 235, 187, 69, 70, 236, 58, 69, 70, 235, 250, 69, 70, 236, 121, 69, 70, + 235, 148, 69, 70, 236, 19, 69, 70, 235, 211, 69, 70, 236, 82, 69, 70, + 235, 179, 69, 70, 236, 50, 69, 70, 235, 242, 69, 70, 236, 113, 69, 70, + 235, 163, 69, 70, 236, 34, 69, 70, 235, 226, 69, 70, 236, 97, 69, 70, + 235, 194, 69, 70, 236, 65, 69, 70, 236, 1, 69, 70, 236, 128, 69, 70, 235, + 144, 69, 70, 236, 15, 69, 70, 235, 207, 69, 70, 236, 78, 69, 70, 235, + 175, 69, 70, 236, 46, 69, 70, 235, 238, 69, 70, 236, 109, 69, 70, 235, + 159, 69, 70, 236, 30, 69, 70, 235, 222, 69, 70, 236, 93, 69, 70, 235, + 190, 69, 70, 236, 61, 69, 70, 235, 253, 69, 70, 236, 124, 69, 70, 235, + 151, 69, 70, 236, 22, 69, 70, 235, 214, 69, 70, 236, 85, 69, 70, 235, + 182, 69, 70, 236, 53, 69, 70, 235, 245, 69, 70, 236, 116, 69, 70, 235, + 166, 69, 70, 236, 37, 69, 70, 235, 229, 69, 70, 236, 100, 69, 70, 235, + 197, 69, 70, 236, 68, 69, 70, 236, 4, 69, 70, 236, 131, 69, 70, 235, 142, + 69, 70, 236, 13, 69, 70, 235, 205, 69, 70, 236, 76, 69, 70, 235, 173, 69, + 70, 236, 44, 69, 70, 235, 236, 69, 70, 236, 107, 69, 70, 235, 157, 69, + 70, 236, 28, 69, 70, 235, 220, 69, 70, 236, 91, 69, 70, 235, 188, 69, 70, + 236, 59, 69, 70, 235, 251, 69, 70, 236, 122, 69, 70, 235, 149, 69, 70, + 236, 20, 69, 70, 235, 212, 69, 70, 236, 83, 69, 70, 235, 180, 69, 70, + 236, 51, 69, 70, 235, 243, 69, 70, 236, 114, 69, 70, 235, 164, 69, 70, + 236, 35, 69, 70, 235, 227, 69, 70, 236, 98, 69, 70, 235, 195, 69, 70, + 236, 66, 69, 70, 236, 2, 69, 70, 236, 129, 69, 70, 235, 145, 69, 70, 236, + 16, 69, 70, 235, 208, 69, 70, 236, 79, 69, 70, 235, 176, 69, 70, 236, 47, + 69, 70, 235, 239, 69, 70, 236, 110, 69, 70, 235, 160, 69, 70, 236, 31, + 69, 70, 235, 223, 69, 70, 236, 94, 69, 70, 235, 191, 69, 70, 236, 62, 69, + 70, 235, 254, 69, 70, 236, 125, 69, 70, 235, 152, 69, 70, 236, 23, 69, + 70, 235, 215, 69, 70, 236, 86, 69, 70, 235, 183, 69, 70, 236, 54, 69, 70, + 235, 246, 69, 70, 236, 117, 69, 70, 235, 167, 69, 70, 236, 38, 69, 70, + 235, 230, 69, 70, 236, 101, 69, 70, 235, 198, 69, 70, 236, 69, 69, 70, + 236, 5, 69, 70, 236, 132, 96, 197, 13, 64, 4, 81, 106, 96, 197, 13, 64, + 4, 55, 81, 106, 118, 55, 64, 4, 81, 106, 96, 55, 64, 4, 81, 106, 45, 50, + 55, 64, 4, 81, 106, 96, 197, 13, 64, 232, 100, 164, 118, 55, 64, 232, + 100, 164, 96, 55, 64, 232, 100, 164, 235, 121, 64, 4, 228, 243, 106, 196, + 66, 64, 4, 228, 243, 106, 196, 66, 197, 225, 57, 235, 121, 197, 225, 57, + 118, 55, 237, 218, 57, 96, 55, 237, 218, 57, 118, 197, 225, 237, 218, 57, + 96, 197, 225, 237, 218, 57, 96, 197, 13, 197, 225, 237, 218, 57, 96, 64, + 4, 235, 140, 201, 81, 196, 66, 64, 119, 164, 235, 121, 64, 119, 164, 96, + 64, 4, 199, 216, 4, 81, 106, 96, 64, 4, 199, 216, 4, 55, 81, 106, 96, + 197, 13, 64, 4, 199, 215, 96, 197, 13, 64, 4, 199, 216, 4, 81, 106, 96, + 197, 13, 64, 4, 199, 216, 4, 55, 81, 106, 118, 250, 239, 96, 250, 239, + 118, 55, 250, 239, 96, 55, 250, 239, 118, 64, 119, 62, 237, 34, 96, 64, + 119, 62, 237, 34, 118, 64, 232, 100, 249, 90, 119, 62, 237, 34, 96, 64, + 232, 100, 249, 90, 119, 62, 237, 34, 186, 193, 105, 23, 202, 3, 234, 206, + 57, 186, 234, 206, 23, 202, 3, 193, 105, 57, 186, 193, 105, 64, 4, 102, + 186, 234, 206, 64, 4, 102, 202, 3, 234, 206, 64, 4, 102, 202, 3, 193, + 105, 64, 4, 102, 186, 193, 105, 64, 23, 186, 234, 206, 57, 186, 234, 206, + 64, 23, 202, 3, 234, 206, 57, 202, 3, 234, 206, 64, 23, 202, 3, 193, 105, + 57, 202, 3, 193, 105, 64, 23, 186, 193, 105, 57, 206, 181, 237, 41, 238, + 212, 233, 85, 237, 40, 233, 85, 237, 41, 238, 212, 206, 181, 237, 40, + 202, 3, 234, 206, 64, 238, 212, 186, 234, 206, 57, 186, 234, 206, 64, + 238, 212, 202, 3, 234, 206, 57, 233, 85, 237, 41, 238, 212, 186, 234, + 206, 57, 206, 181, 237, 41, 238, 212, 202, 3, 234, 206, 57, 186, 234, + 206, 64, 238, 212, 186, 193, 105, 57, 186, 193, 105, 64, 238, 212, 186, + 234, 206, 57, 193, 139, 64, 209, 60, 236, 233, 179, 64, 209, 60, 96, 199, + 25, 238, 163, 196, 65, 64, 209, 60, 96, 199, 25, 238, 163, 235, 120, 64, + 209, 60, 235, 121, 199, 25, 238, 163, 219, 216, 64, 209, 60, 235, 121, + 199, 25, 238, 163, 206, 198, 206, 201, 251, 19, 242, 223, 57, 219, 219, + 251, 19, 251, 87, 57, 198, 54, 251, 19, 251, 87, 57, 248, 79, 251, 19, + 251, 87, 57, 198, 54, 251, 19, 242, 223, 64, 4, 216, 36, 198, 54, 251, + 19, 251, 87, 64, 4, 209, 83, 110, 50, 204, 28, 242, 223, 57, 110, 45, + 204, 28, 251, 87, 57, 251, 87, 242, 221, 243, 13, 57, 242, 223, 242, 221, + 243, 13, 57, 96, 64, 93, 203, 41, 118, 57, 118, 64, 93, 203, 41, 96, 57, + 203, 41, 96, 64, 93, 118, 57, 96, 64, 4, 108, 60, 118, 64, 4, 108, 60, + 96, 64, 198, 216, 192, 235, 45, 50, 64, 198, 216, 2, 243, 12, 196, 66, + 197, 13, 64, 232, 100, 2, 243, 12, 45, 182, 133, 50, 182, 144, 230, 14, + 45, 182, 144, 50, 182, 133, 230, 14, 133, 182, 50, 144, 182, 45, 230, 14, + 133, 182, 45, 144, 182, 50, 230, 14, 45, 182, 133, 50, 182, 133, 230, 14, + 133, 182, 50, 144, 182, 50, 230, 14, 45, 182, 144, 50, 182, 144, 230, 14, + 133, 182, 45, 144, 182, 45, 230, 14, 118, 230, 15, 4, 182, 133, 119, 164, + 96, 230, 15, 4, 182, 133, 119, 164, 196, 66, 230, 15, 4, 182, 50, 119, + 164, 235, 121, 230, 15, 4, 182, 50, 119, 164, 118, 230, 15, 4, 182, 144, + 119, 164, 96, 230, 15, 4, 182, 144, 119, 164, 196, 66, 230, 15, 4, 182, + 45, 119, 164, 235, 121, 230, 15, 4, 182, 45, 119, 164, 118, 230, 15, 4, + 182, 133, 232, 100, 164, 96, 230, 15, 4, 182, 133, 232, 100, 164, 196, + 66, 230, 15, 4, 182, 50, 232, 100, 164, 235, 121, 230, 15, 4, 182, 50, + 232, 100, 164, 118, 230, 15, 4, 182, 144, 232, 100, 164, 96, 230, 15, 4, + 182, 144, 232, 100, 164, 196, 66, 230, 15, 4, 182, 45, 232, 100, 164, + 235, 121, 230, 15, 4, 182, 45, 232, 100, 164, 118, 230, 15, 4, 182, 133, + 93, 118, 230, 15, 4, 182, 235, 125, 196, 66, 230, 15, 4, 182, 45, 248, + 218, 196, 66, 230, 15, 4, 182, 179, 96, 230, 15, 4, 182, 133, 93, 96, + 230, 15, 4, 182, 235, 125, 235, 121, 230, 15, 4, 182, 45, 248, 218, 235, + 121, 230, 15, 4, 182, 179, 118, 230, 15, 4, 182, 133, 93, 96, 230, 15, 4, + 182, 196, 77, 118, 230, 15, 4, 182, 144, 93, 96, 230, 15, 4, 182, 235, + 125, 96, 230, 15, 4, 182, 133, 93, 118, 230, 15, 4, 182, 196, 77, 96, + 230, 15, 4, 182, 144, 93, 118, 230, 15, 4, 182, 235, 125, 118, 230, 15, + 4, 182, 133, 93, 180, 237, 217, 118, 230, 15, 4, 182, 144, 248, 235, 180, + 237, 217, 96, 230, 15, 4, 182, 133, 93, 180, 237, 217, 96, 230, 15, 4, + 182, 144, 248, 235, 180, 237, 217, 196, 66, 230, 15, 4, 182, 45, 248, + 218, 235, 121, 230, 15, 4, 182, 179, 235, 121, 230, 15, 4, 182, 45, 248, + 218, 196, 66, 230, 15, 4, 182, 179, 50, 55, 64, 4, 206, 114, 229, 237, + 234, 45, 3, 93, 96, 57, 198, 153, 211, 69, 93, 96, 57, 118, 64, 93, 198, + 153, 211, 68, 96, 64, 93, 198, 153, 211, 68, 96, 64, 93, 251, 167, 234, + 47, 159, 219, 182, 93, 118, 57, 118, 64, 198, 216, 219, 181, 230, 206, + 93, 96, 57, 200, 230, 93, 96, 57, 118, 64, 198, 216, 200, 229, 200, 181, + 93, 118, 57, 45, 232, 239, 199, 215, 50, 232, 239, 199, 215, 133, 232, + 239, 199, 215, 144, 232, 239, 199, 215, 197, 225, 81, 249, 90, 237, 114, + 191, 167, 213, 12, 201, 202, 191, 167, 213, 12, 196, 255, 242, 85, 45, + 63, 238, 173, 248, 55, 50, 63, 238, 173, 248, 55, 45, 63, 210, 115, 50, + 63, 210, 115, 191, 167, 213, 12, 45, 223, 180, 248, 55, 191, 167, 213, + 12, 50, 223, 180, 248, 55, 191, 167, 213, 12, 45, 248, 168, 248, 55, 191, + 167, 213, 12, 50, 248, 168, 248, 55, 45, 51, 248, 56, 4, 196, 103, 50, + 51, 248, 56, 4, 196, 103, 45, 51, 248, 56, 4, 198, 183, 223, 165, 198, + 54, 239, 3, 50, 51, 248, 56, 4, 198, 183, 223, 165, 248, 79, 239, 3, 45, + 51, 248, 56, 4, 198, 183, 223, 165, 248, 79, 239, 3, 50, 51, 248, 56, 4, + 198, 183, 223, 165, 198, 54, 239, 3, 45, 251, 118, 248, 56, 4, 236, 142, + 50, 251, 118, 248, 56, 4, 236, 142, 45, 251, 19, 219, 182, 248, 55, 50, + 251, 19, 230, 206, 248, 55, 55, 45, 251, 19, 230, 206, 248, 55, 55, 50, + 251, 19, 219, 182, 248, 55, 45, 62, 198, 42, 203, 104, 248, 55, 50, 62, + 198, 42, 203, 104, 248, 55, 235, 140, 233, 41, 81, 191, 21, 219, 114, + 216, 228, 251, 118, 211, 71, 219, 226, 50, 251, 118, 195, 168, 4, 201, + 191, 216, 228, 50, 251, 118, 4, 236, 142, 251, 118, 4, 206, 10, 223, 119, + 252, 49, 251, 117, 201, 226, 251, 118, 211, 71, 219, 226, 201, 226, 251, + 118, 211, 71, 196, 77, 154, 251, 117, 207, 19, 251, 117, 251, 118, 4, + 196, 103, 207, 19, 251, 118, 4, 196, 103, 211, 174, 251, 118, 211, 71, + 196, 77, 211, 174, 251, 118, 211, 71, 235, 125, 216, 228, 251, 118, 4, + 211, 79, 250, 253, 234, 93, 223, 165, 64, 209, 60, 133, 23, 179, 216, + 228, 251, 118, 4, 211, 79, 250, 253, 234, 93, 223, 165, 64, 209, 60, 133, + 23, 219, 226, 216, 228, 251, 118, 4, 211, 79, 250, 253, 234, 93, 223, + 165, 64, 209, 60, 144, 23, 179, 216, 228, 251, 118, 4, 211, 79, 250, 253, + 234, 93, 223, 165, 64, 209, 60, 144, 23, 219, 226, 216, 228, 251, 118, 4, + 211, 79, 250, 253, 234, 93, 223, 165, 64, 209, 60, 50, 23, 196, 77, 216, + 228, 251, 118, 4, 211, 79, 250, 253, 234, 93, 223, 165, 64, 209, 60, 45, + 23, 196, 77, 216, 228, 251, 118, 4, 211, 79, 250, 253, 234, 93, 223, 165, + 64, 209, 60, 50, 23, 235, 125, 216, 228, 251, 118, 4, 211, 79, 250, 253, + 234, 93, 223, 165, 64, 209, 60, 45, 23, 235, 125, 207, 19, 234, 107, 203, + 253, 234, 107, 203, 254, 4, 211, 8, 234, 107, 203, 254, 4, 2, 243, 13, + 58, 234, 107, 203, 254, 4, 50, 64, 58, 234, 107, 203, 254, 4, 45, 64, 58, + 243, 13, 4, 228, 243, 164, 47, 81, 164, 47, 210, 120, 47, 207, 20, 202, + 24, 47, 210, 0, 243, 13, 236, 208, 247, 207, 228, 243, 249, 90, 23, 198, + 54, 132, 236, 208, 247, 207, 81, 164, 243, 13, 4, 200, 183, 192, 235, 47, + 251, 85, 236, 202, 56, 133, 64, 198, 216, 243, 12, 47, 63, 247, 250, 47, + 247, 250, 47, 219, 181, 47, 230, 205, 243, 13, 4, 2, 243, 13, 119, 199, + 34, 179, 243, 13, 4, 105, 228, 243, 201, 17, 119, 199, 34, 179, 112, 206, + 181, 237, 41, 202, 98, 112, 233, 85, 237, 41, 202, 98, 112, 250, 195, + 112, 2, 243, 12, 112, 201, 191, 105, 222, 200, 201, 189, 197, 242, 4, 75, + 58, 197, 242, 4, 196, 103, 206, 10, 223, 165, 197, 241, 197, 242, 4, 204, + 5, 250, 185, 248, 78, 50, 197, 242, 93, 45, 197, 241, 45, 197, 242, 248, + 218, 81, 164, 81, 249, 90, 248, 218, 50, 197, 241, 248, 66, 4, 45, 132, + 248, 141, 248, 66, 4, 50, 132, 248, 141, 62, 248, 65, 25, 4, 45, 132, + 248, 141, 25, 4, 50, 132, 248, 141, 63, 228, 176, 62, 228, 176, 45, 193, + 72, 233, 41, 50, 193, 72, 233, 41, 45, 55, 193, 72, 233, 41, 50, 55, 193, + 72, 233, 41, 223, 157, 223, 141, 198, 179, 139, 223, 141, 223, 142, 214, + 110, 4, 81, 164, 235, 134, 215, 133, 51, 4, 239, 27, 211, 13, 223, 154, + 250, 221, 202, 255, 208, 202, 234, 45, 3, 23, 202, 100, 210, 120, 234, + 45, 3, 23, 202, 100, 210, 121, 4, 198, 153, 58, 228, 19, 119, 23, 202, + 100, 210, 120, 231, 16, 201, 102, 199, 22, 235, 124, 197, 242, 4, 45, + 132, 248, 141, 235, 124, 197, 242, 4, 50, 132, 248, 141, 62, 237, 35, 4, + 144, 57, 62, 218, 234, 63, 243, 13, 4, 144, 57, 62, 243, 13, 4, 144, 57, + 234, 27, 63, 201, 191, 234, 27, 62, 201, 191, 234, 27, 63, 237, 34, 234, + 27, 62, 237, 34, 234, 27, 63, 243, 12, 234, 27, 62, 243, 12, 206, 52, + 207, 20, 202, 25, 211, 68, 202, 25, 4, 211, 8, 207, 20, 202, 25, 4, 228, + 243, 106, 248, 177, 202, 24, 248, 177, 207, 20, 202, 24, 55, 209, 83, + 197, 225, 209, 83, 219, 221, 238, 165, 251, 118, 248, 55, 206, 204, 238, + 165, 251, 118, 248, 55, 198, 137, 216, 34, 215, 62, 47, 75, 211, 68, 215, + 62, 47, 108, 211, 68, 215, 62, 47, 25, 211, 68, 215, 62, 196, 93, 211, + 69, 4, 236, 142, 215, 62, 196, 93, 211, 69, 4, 209, 83, 215, 62, 51, 223, + 102, 211, 68, 215, 62, 51, 196, 93, 211, 68, 105, 219, 31, 23, 211, 68, + 105, 219, 31, 211, 59, 211, 68, 215, 62, 25, 211, 68, 215, 238, 105, 200, + 204, 200, 202, 4, 223, 115, 208, 28, 223, 116, 211, 68, 232, 248, 210, + 109, 223, 115, 223, 116, 4, 55, 106, 223, 116, 250, 145, 4, 202, 98, 243, + 5, 232, 78, 251, 87, 223, 113, 219, 115, 223, 114, 4, 207, 93, 210, 88, + 250, 247, 209, 54, 219, 115, 223, 114, 4, 204, 28, 210, 88, 250, 247, + 209, 54, 219, 115, 223, 114, 213, 14, 223, 159, 199, 34, 209, 54, 223, + 116, 250, 247, 42, 209, 64, 211, 68, 208, 21, 223, 116, 211, 68, 223, + 116, 4, 118, 64, 4, 102, 223, 116, 4, 25, 56, 223, 116, 4, 223, 101, 223, + 116, 4, 196, 92, 223, 116, 4, 211, 8, 223, 116, 4, 196, 103, 222, 201, + 220, 15, 45, 197, 242, 211, 68, 191, 167, 213, 12, 205, 93, 239, 64, 191, + 167, 213, 12, 205, 93, 209, 128, 191, 167, 213, 12, 205, 93, 208, 197, + 108, 3, 4, 2, 243, 13, 58, 108, 3, 4, 243, 4, 252, 63, 58, 108, 3, 4, + 198, 153, 58, 108, 3, 4, 75, 60, 108, 3, 4, 198, 153, 60, 108, 3, 4, 200, + 231, 109, 108, 3, 4, 62, 197, 241, 216, 37, 3, 4, 242, 77, 58, 216, 37, + 3, 4, 75, 60, 216, 37, 3, 4, 233, 85, 236, 140, 216, 37, 3, 4, 206, 181, + 236, 140, 108, 3, 223, 165, 45, 132, 243, 12, 108, 3, 223, 165, 50, 132, + 243, 12, 195, 152, 211, 59, 238, 220, 208, 202, 215, 129, 3, 4, 75, 58, + 215, 129, 3, 4, 196, 103, 204, 25, 208, 203, 4, 248, 79, 242, 220, 202, + 69, 208, 202, 215, 129, 3, 223, 165, 45, 132, 243, 12, 215, 129, 3, 223, + 165, 50, 132, 243, 12, 47, 215, 129, 3, 4, 243, 4, 252, 62, 215, 129, 3, + 223, 165, 55, 243, 12, 47, 236, 202, 56, 108, 3, 223, 165, 197, 241, 216, + 37, 3, 223, 165, 197, 241, 215, 129, 3, 223, 165, 197, 241, 223, 110, + 208, 202, 206, 199, 223, 110, 208, 202, 191, 167, 213, 12, 207, 65, 239, + 64, 251, 149, 211, 59, 239, 11, 223, 102, 4, 236, 142, 196, 93, 4, 216, + 37, 56, 196, 93, 4, 211, 8, 223, 102, 4, 211, 8, 223, 102, 4, 219, 31, + 251, 127, 196, 93, 4, 219, 31, 211, 58, 196, 93, 93, 223, 101, 223, 102, + 93, 196, 92, 196, 93, 93, 249, 90, 93, 223, 101, 223, 102, 93, 249, 90, + 93, 196, 92, 196, 93, 248, 218, 23, 222, 200, 4, 196, 92, 223, 102, 248, + 218, 23, 222, 200, 4, 223, 101, 242, 221, 196, 93, 4, 204, 4, 242, 221, + 223, 102, 4, 204, 4, 55, 51, 223, 101, 55, 51, 196, 92, 242, 221, 196, + 93, 4, 204, 5, 23, 202, 69, 208, 202, 219, 31, 23, 4, 75, 58, 219, 31, + 211, 59, 4, 75, 58, 55, 219, 31, 251, 127, 55, 219, 31, 211, 58, 105, + 223, 103, 219, 31, 251, 127, 105, 223, 103, 219, 31, 211, 58, 202, 81, + 220, 15, 211, 58, 202, 81, 220, 15, 251, 127, 219, 31, 211, 59, 211, 3, + 219, 31, 251, 127, 219, 31, 23, 4, 82, 201, 81, 219, 31, 211, 59, 4, 82, + 201, 81, 219, 31, 23, 4, 228, 243, 237, 217, 219, 31, 211, 59, 4, 228, + 243, 237, 217, 219, 31, 23, 4, 55, 211, 8, 219, 31, 23, 4, 196, 103, 219, + 31, 23, 4, 55, 196, 103, 2, 195, 149, 4, 196, 103, 219, 31, 211, 59, 4, + 55, 211, 8, 219, 31, 211, 59, 4, 55, 196, 103, 191, 167, 213, 12, 236, + 154, 251, 77, 191, 167, 213, 12, 207, 139, 251, 77, 234, 45, 3, 4, 75, + 60, 228, 19, 4, 75, 58, 197, 225, 228, 243, 249, 90, 4, 55, 81, 106, 197, + 225, 228, 243, 249, 90, 4, 197, 225, 81, 106, 198, 153, 211, 69, 4, 75, + 58, 198, 153, 211, 69, 4, 206, 181, 236, 140, 202, 181, 216, 37, 202, + 180, 239, 51, 4, 75, 58, 234, 45, 4, 250, 195, 251, 167, 234, 47, 119, 4, + 243, 4, 252, 62, 251, 42, 234, 47, 211, 59, 234, 47, 159, 234, 45, 3, 93, + 108, 56, 108, 3, 93, 234, 45, 56, 234, 45, 3, 93, 198, 153, 211, 68, 55, + 242, 86, 234, 46, 105, 239, 43, 234, 45, 202, 195, 115, 239, 43, 234, 45, + 202, 195, 234, 45, 3, 4, 105, 185, 93, 23, 105, 185, 60, 234, 38, 4, 232, + 130, 185, 58, 219, 182, 4, 243, 13, 223, 119, 230, 206, 4, 243, 13, 223, + 119, 219, 182, 4, 208, 15, 87, 58, 230, 206, 4, 208, 15, 87, 58, 219, + 182, 211, 59, 202, 100, 234, 47, 159, 230, 206, 211, 59, 202, 100, 234, + 47, 159, 219, 182, 211, 59, 202, 100, 234, 47, 119, 4, 75, 223, 119, 230, + 206, 211, 59, 202, 100, 234, 47, 119, 4, 75, 223, 119, 219, 182, 211, 59, + 202, 100, 234, 47, 119, 4, 75, 58, 230, 206, 211, 59, 202, 100, 234, 47, + 119, 4, 75, 58, 219, 182, 211, 59, 202, 100, 234, 47, 119, 4, 75, 93, + 179, 230, 206, 211, 59, 202, 100, 234, 47, 119, 4, 75, 93, 219, 226, 219, + 182, 211, 59, 251, 43, 230, 206, 211, 59, 251, 43, 219, 182, 23, 202, + 169, 213, 14, 234, 47, 159, 230, 206, 23, 202, 169, 213, 14, 234, 47, + 159, 219, 182, 23, 213, 14, 251, 43, 230, 206, 23, 213, 14, 251, 43, 219, + 182, 93, 235, 133, 234, 47, 93, 230, 205, 230, 206, 93, 235, 133, 234, + 47, 93, 219, 181, 219, 182, 93, 202, 181, 211, 59, 234, 46, 230, 206, 93, + 202, 181, 211, 59, 234, 46, 219, 182, 93, 202, 181, 93, 230, 205, 230, + 206, 93, 202, 181, 93, 219, 181, 219, 182, 93, 230, 206, 93, 235, 133, + 234, 46, 230, 206, 93, 219, 182, 93, 235, 133, 234, 46, 219, 182, 93, + 202, 100, 234, 47, 93, 230, 206, 93, 202, 100, 234, 46, 230, 206, 93, + 202, 100, 234, 47, 93, 219, 182, 93, 202, 100, 234, 46, 202, 100, 234, + 47, 119, 211, 59, 219, 181, 202, 100, 234, 47, 119, 211, 59, 230, 205, + 202, 100, 234, 47, 119, 211, 59, 219, 182, 4, 75, 223, 119, 202, 100, + 234, 47, 119, 211, 59, 230, 206, 4, 75, 223, 119, 235, 133, 234, 47, 119, + 211, 59, 219, 181, 235, 133, 234, 47, 119, 211, 59, 230, 205, 235, 133, + 202, 100, 234, 47, 119, 211, 59, 219, 181, 235, 133, 202, 100, 234, 47, + 119, 211, 59, 230, 205, 202, 181, 211, 59, 219, 181, 202, 181, 211, 59, + 230, 205, 202, 181, 93, 219, 182, 93, 234, 45, 56, 202, 181, 93, 230, + 206, 93, 234, 45, 56, 55, 214, 90, 219, 181, 55, 214, 90, 230, 205, 55, + 214, 90, 219, 182, 4, 196, 103, 230, 206, 211, 3, 219, 181, 230, 206, + 248, 218, 219, 181, 219, 182, 242, 221, 247, 207, 238, 166, 230, 206, + 242, 221, 247, 207, 238, 166, 219, 182, 242, 221, 247, 207, 238, 167, 93, + 202, 100, 234, 46, 230, 206, 242, 221, 247, 207, 238, 167, 93, 202, 100, + 234, 46, 202, 70, 199, 38, 220, 13, 199, 38, 202, 70, 199, 39, 211, 59, + 234, 47, 159, 220, 13, 199, 39, 211, 59, 234, 47, 159, 234, 45, 3, 4, + 247, 243, 58, 208, 234, 93, 202, 169, 234, 45, 56, 200, 221, 93, 202, + 169, 234, 45, 56, 208, 234, 93, 202, 169, 213, 14, 234, 47, 159, 200, + 221, 93, 202, 169, 213, 14, 234, 47, 159, 208, 234, 93, 234, 45, 56, 200, + 221, 93, 234, 45, 56, 208, 234, 93, 213, 14, 234, 47, 159, 200, 221, 93, + 213, 14, 234, 47, 159, 208, 234, 93, 251, 167, 234, 47, 159, 200, 221, + 93, 251, 167, 234, 47, 159, 208, 234, 93, 213, 14, 251, 167, 234, 47, + 159, 200, 221, 93, 213, 14, 251, 167, 234, 47, 159, 55, 208, 233, 55, + 200, 220, 200, 230, 4, 236, 142, 200, 181, 4, 236, 142, 200, 230, 4, 108, + 3, 60, 200, 181, 4, 108, 3, 60, 200, 230, 4, 215, 129, 3, 60, 200, 181, + 4, 215, 129, 3, 60, 200, 230, 79, 211, 59, 234, 47, 119, 4, 75, 58, 200, + 181, 79, 211, 59, 234, 47, 119, 4, 75, 58, 200, 230, 79, 93, 234, 45, 56, + 200, 181, 79, 93, 234, 45, 56, 200, 230, 79, 93, 198, 153, 211, 68, 200, + 181, 79, 93, 198, 153, 211, 68, 200, 230, 79, 93, 251, 167, 234, 47, 159, + 200, 181, 79, 93, 251, 167, 234, 47, 159, 200, 230, 79, 93, 213, 14, 234, + 47, 159, 200, 181, 79, 93, 213, 14, 234, 47, 159, 51, 45, 211, 79, 111, + 211, 68, 51, 50, 211, 79, 111, 211, 68, 242, 221, 200, 229, 242, 221, + 200, 180, 242, 221, 200, 230, 211, 59, 234, 47, 159, 242, 221, 200, 181, + 211, 59, 234, 47, 159, 200, 230, 93, 200, 180, 200, 181, 93, 200, 229, + 200, 230, 93, 200, 229, 200, 181, 93, 200, 180, 200, 181, 248, 218, 200, + 229, 200, 181, 248, 218, 23, 222, 200, 247, 207, 237, 218, 4, 200, 229, + 234, 134, 79, 211, 71, 235, 120, 209, 118, 4, 199, 122, 198, 53, 198, 7, + 223, 101, 232, 149, 213, 29, 203, 41, 45, 199, 228, 203, 41, 144, 199, + 228, 203, 41, 133, 199, 228, 210, 1, 4, 206, 9, 81, 249, 90, 197, 225, + 50, 197, 57, 55, 81, 249, 90, 45, 197, 57, 81, 249, 90, 55, 45, 197, 57, + 55, 81, 249, 90, 55, 45, 197, 57, 180, 237, 218, 232, 100, 45, 216, 193, + 79, 55, 195, 135, 203, 41, 144, 199, 229, 4, 211, 8, 203, 41, 133, 199, + 229, 4, 196, 103, 203, 41, 133, 199, 229, 93, 203, 41, 144, 199, 228, 55, + 144, 199, 228, 55, 133, 199, 228, 55, 201, 29, 213, 14, 56, 207, 19, 55, + 201, 29, 213, 14, 56, 236, 166, 213, 14, 236, 210, 4, 207, 19, 214, 109, + 202, 98, 81, 219, 115, 4, 243, 13, 58, 81, 219, 115, 4, 243, 13, 60, 144, + 199, 229, 4, 243, 13, 60, 210, 121, 4, 228, 243, 106, 210, 121, 4, 198, + 153, 211, 68, 197, 225, 81, 249, 90, 248, 170, 207, 66, 197, 225, 81, + 249, 90, 4, 228, 243, 106, 197, 225, 242, 86, 211, 68, 197, 225, 214, 90, + 219, 181, 197, 225, 214, 90, 230, 205, 235, 133, 202, 100, 219, 182, 211, + 59, 234, 47, 159, 235, 133, 202, 100, 230, 206, 211, 59, 234, 47, 159, + 197, 225, 202, 25, 248, 170, 207, 66, 220, 15, 197, 225, 81, 249, 90, + 211, 68, 55, 202, 25, 211, 68, 63, 81, 164, 215, 62, 63, 81, 164, 186, + 234, 206, 63, 57, 186, 193, 105, 63, 57, 202, 3, 234, 206, 63, 57, 202, + 3, 193, 105, 63, 57, 45, 50, 63, 57, 118, 62, 57, 196, 66, 62, 57, 235, + 121, 62, 57, 186, 234, 206, 62, 57, 186, 193, 105, 62, 57, 202, 3, 234, + 206, 62, 57, 202, 3, 193, 105, 62, 57, 45, 50, 62, 57, 133, 144, 62, 57, + 96, 64, 4, 198, 136, 235, 120, 96, 64, 4, 198, 136, 196, 65, 118, 64, 4, + 198, 136, 235, 120, 118, 64, 4, 198, 136, 196, 65, 51, 4, 198, 54, 132, + 248, 141, 51, 4, 248, 79, 132, 248, 141, 51, 4, 116, 50, 237, 41, 132, + 248, 141, 51, 4, 110, 45, 237, 41, 132, 248, 141, 237, 35, 4, 45, 132, + 248, 141, 237, 35, 4, 50, 132, 248, 141, 237, 35, 4, 198, 54, 132, 248, + 141, 237, 35, 4, 248, 79, 132, 248, 141, 235, 140, 201, 191, 62, 220, 15, + 201, 191, 63, 220, 15, 201, 191, 62, 195, 83, 2, 201, 191, 63, 195, 83, + 2, 201, 191, 62, 210, 26, 63, 210, 26, 63, 229, 184, 62, 229, 184, 228, + 243, 62, 229, 184, 62, 220, 15, 243, 12, 62, 216, 215, 237, 34, 63, 216, + 215, 237, 34, 62, 216, 215, 218, 234, 63, 216, 215, 218, 234, 62, 2, 237, + 34, 62, 2, 218, 234, 63, 2, 218, 234, 62, 228, 243, 234, 123, 63, 228, + 243, 234, 123, 62, 81, 234, 123, 63, 81, 234, 123, 45, 64, 4, 2, 243, 12, + 115, 118, 250, 233, 45, 64, 4, 47, 209, 83, 180, 118, 201, 184, 57, 118, + 197, 13, 64, 4, 81, 106, 118, 197, 13, 64, 4, 55, 81, 106, 118, 197, 13, + 64, 232, 100, 164, 118, 197, 13, 197, 225, 237, 218, 57, 118, 64, 4, 235, + 140, 201, 81, 118, 64, 4, 199, 216, 4, 81, 106, 118, 64, 4, 199, 216, 4, + 55, 81, 106, 118, 197, 13, 64, 4, 199, 215, 118, 197, 13, 64, 4, 199, + 216, 4, 81, 106, 118, 197, 13, 64, 4, 199, 216, 4, 55, 81, 106, 118, 64, + 198, 216, 192, 235, 193, 139, 64, 209, 60, 236, 233, 219, 226, 234, 45, + 3, 93, 118, 57, 207, 20, 198, 153, 211, 69, 93, 118, 57, 118, 64, 93, + 207, 20, 251, 167, 234, 47, 159, 96, 64, 198, 216, 230, 205, 96, 64, 198, + 216, 200, 180, 118, 208, 28, 57, 96, 208, 28, 57, 207, 20, 198, 153, 211, + 69, 93, 96, 57, 96, 64, 93, 207, 20, 251, 167, 234, 47, 159, 198, 153, + 211, 69, 93, 118, 57, 118, 64, 93, 251, 167, 234, 47, 159, 118, 64, 93, + 207, 20, 198, 153, 211, 68, 96, 64, 93, 207, 20, 198, 153, 211, 68, 235, + 121, 197, 240, 191, 21, 57, 203, 41, 202, 100, 186, 57, 203, 41, 249, + 145, 202, 3, 57, 63, 216, 215, 201, 103, 62, 2, 201, 103, 63, 2, 201, + 103, 62, 206, 204, 210, 26, 63, 206, 204, 210, 26, 88, 220, 15, 243, 12, + 88, 211, 10, 4, 211, 10, 223, 119, 88, 243, 13, 4, 243, 13, 223, 119, 88, + 243, 12, 88, 47, 205, 155, 202, 100, 186, 64, 4, 228, 252, 229, 237, 249, + 145, 202, 3, 64, 4, 228, 252, 199, 215, 202, 100, 186, 64, 4, 228, 243, + 199, 215, 249, 145, 202, 3, 64, 4, 228, 243, 199, 215, 248, 226, 64, 209, + 60, 235, 121, 199, 25, 186, 234, 205, 203, 41, 248, 226, 64, 209, 60, + 235, 121, 199, 25, 186, 234, 205, 118, 197, 240, 57, 196, 66, 197, 240, + 57, 96, 197, 240, 57, 235, 121, 197, 240, 57, 45, 50, 197, 240, 57, 133, + 144, 197, 240, 57, 186, 193, 105, 197, 240, 57, 186, 234, 206, 197, 240, + 57, 202, 3, 234, 206, 197, 240, 57, 202, 3, 193, 105, 197, 240, 57, 118, + 197, 240, 237, 216, 57, 196, 66, 197, 240, 237, 216, 57, 96, 197, 240, + 237, 216, 57, 235, 121, 197, 240, 237, 216, 57, 242, 223, 197, 240, 211, + 79, 243, 13, 57, 251, 87, 197, 240, 211, 79, 243, 13, 57, 118, 197, 240, + 64, 119, 164, 196, 66, 197, 240, 64, 119, 164, 96, 197, 240, 64, 119, + 164, 235, 121, 197, 240, 64, 119, 164, 186, 193, 105, 197, 240, 64, 119, + 164, 186, 234, 206, 197, 240, 64, 119, 164, 202, 3, 234, 206, 197, 240, + 64, 119, 164, 202, 3, 193, 105, 197, 240, 64, 119, 164, 118, 197, 240, + 64, 4, 55, 228, 243, 106, 196, 66, 197, 240, 64, 4, 55, 228, 243, 106, + 96, 197, 240, 64, 4, 55, 228, 243, 106, 235, 121, 197, 240, 64, 4, 55, + 228, 243, 106, 228, 243, 199, 237, 221, 224, 81, 199, 237, 221, 224, 118, + 197, 240, 64, 139, 96, 197, 240, 57, 196, 66, 197, 240, 64, 118, 79, 235, + 121, 197, 240, 57, 96, 197, 240, 64, 139, 118, 197, 240, 57, 235, 121, + 197, 240, 64, 118, 79, 196, 66, 197, 240, 57, 118, 197, 240, 210, 198, + 250, 233, 196, 66, 197, 240, 210, 198, 250, 233, 96, 197, 240, 210, 198, + 250, 233, 235, 121, 197, 240, 210, 198, 250, 233, 118, 62, 47, 63, 57, + 196, 66, 62, 47, 63, 57, 96, 62, 47, 63, 57, 235, 121, 62, 47, 63, 57, + 251, 87, 197, 240, 50, 196, 221, 57, 251, 87, 197, 240, 248, 79, 196, + 221, 57, 251, 87, 197, 240, 45, 196, 221, 57, 251, 87, 197, 240, 198, 54, + 196, 221, 57, 207, 24, 219, 226, 207, 24, 179, 214, 79, 219, 226, 214, + 79, 179, 232, 130, 239, 4, 250, 234, 243, 8, 251, 86, 96, 62, 57, 16, 40, + 196, 255, 42, 234, 135, 198, 225, 198, 52, 118, 234, 39, 250, 237, 198, + 225, 206, 205, 196, 66, 234, 39, 250, 237, 198, 225, 198, 52, 96, 234, + 39, 250, 237, 198, 225, 219, 222, 235, 121, 234, 39, 250, 237, 62, 118, + 234, 39, 250, 237, 62, 196, 66, 234, 39, 250, 237, 62, 96, 234, 39, 250, + 237, 62, 235, 121, 234, 39, 250, 237, 235, 121, 197, 240, 64, 4, 180, + 198, 136, 219, 216, 235, 121, 197, 240, 64, 4, 180, 198, 136, 206, 198, + 196, 66, 197, 240, 64, 4, 180, 198, 136, 219, 216, 196, 66, 197, 240, 64, + 4, 180, 198, 136, 206, 198, 118, 197, 240, 64, 4, 180, 198, 136, 196, 65, + 96, 197, 240, 64, 4, 180, 198, 136, 196, 65, 118, 197, 240, 64, 4, 180, + 198, 136, 235, 120, 96, 197, 240, 64, 4, 180, 198, 136, 235, 120, 62, + 238, 165, 235, 121, 23, 118, 57, 62, 238, 165, 235, 121, 23, 96, 57, 62, + 238, 165, 196, 66, 23, 118, 57, 62, 238, 165, 196, 66, 23, 96, 57, 62, + 238, 165, 118, 23, 196, 66, 57, 62, 238, 165, 96, 23, 196, 66, 57, 62, + 238, 165, 118, 23, 235, 121, 57, 62, 238, 165, 96, 23, 235, 121, 57, 206, + 249, 64, 144, 219, 226, 206, 249, 64, 144, 179, 206, 249, 64, 133, 219, + 226, 206, 249, 64, 133, 179, 206, 249, 64, 45, 196, 77, 206, 249, 64, 50, + 196, 77, 206, 249, 64, 45, 235, 125, 206, 249, 64, 50, 235, 125, 196, 66, + 63, 64, 232, 100, 249, 90, 4, 228, 243, 164, 133, 250, 238, 223, 165, 42, + 207, 95, 248, 64, 211, 3, 63, 201, 189, 211, 3, 63, 23, 62, 201, 189, + 211, 3, 62, 201, 189, 249, 109, 111, 4, 156, 192, 235, 47, 192, 235, 47, + 28, 192, 235, 62, 51, 247, 21, 62, 237, 35, 247, 21, 154, 62, 210, 26, + 228, 243, 62, 211, 162, 62, 211, 162, 62, 216, 215, 196, 76, 197, 242, + 247, 21, 62, 216, 215, 235, 124, 197, 242, 247, 21, 62, 216, 215, 219, + 221, 197, 242, 247, 21, 62, 216, 215, 206, 204, 197, 242, 247, 21, 214, + 97, 232, 148, 109, 198, 54, 132, 62, 243, 12, 248, 79, 132, 62, 243, 12, + 156, 232, 130, 209, 62, 62, 238, 161, 206, 123, 156, 232, 130, 209, 62, + 62, 238, 161, 63, 232, 130, 209, 62, 238, 161, 206, 123, 63, 232, 130, + 209, 62, 238, 161, 51, 209, 27, 223, 146, 196, 107, 56, 230, 189, 77, + 209, 80, 232, 148, 109, 209, 80, 232, 148, 138, 209, 80, 232, 148, 134, + 209, 80, 232, 148, 150, 198, 9, 208, 187, 250, 191, 228, 93, 209, 198, + 214, 93, 63, 215, 208, 204, 34, 62, 237, 35, 211, 107, 238, 219, 197, + 202, 156, 215, 208, 250, 229, 238, 181, 230, 90, 191, 75, 221, 4, 251, + 55, 252, 34, 193, 247, 209, 28, 45, 132, 62, 201, 103, 50, 132, 62, 201, + 103, 201, 104, 4, 45, 132, 248, 141, 201, 104, 4, 50, 132, 248, 141, 118, + 197, 13, 64, 4, 197, 242, 250, 235, 196, 66, 197, 13, 64, 4, 197, 242, + 250, 235, 96, 197, 13, 64, 4, 197, 242, 250, 235, 235, 121, 197, 13, 64, + 4, 197, 242, 250, 235, 234, 29, 232, 148, 107, 234, 29, 232, 148, 109, + 205, 52, 206, 32, 250, 190, 16, 195, 52, 206, 32, 250, 190, 16, 213, 0, + 206, 32, 250, 190, 16, 208, 3, 206, 32, 250, 190, 16, 248, 165, 206, 32, + 250, 190, 16, 204, 17, 206, 32, 250, 190, 16, 198, 0, 234, 45, 3, 4, 223, + 142, 60, 196, 89, 113, 204, 13, 113, 235, 130, 113, 210, 98, 113, 207, + 19, 50, 251, 117, 229, 205, 210, 80, 113, 135, 6, 1, 250, 124, 135, 6, 1, + 247, 254, 135, 6, 1, 195, 151, 135, 6, 1, 231, 20, 135, 6, 1, 236, 171, + 135, 6, 1, 192, 49, 135, 6, 1, 191, 55, 135, 6, 1, 235, 32, 135, 6, 1, + 191, 82, 135, 6, 1, 223, 41, 135, 6, 1, 89, 223, 41, 135, 6, 1, 68, 135, + 6, 1, 236, 192, 135, 6, 1, 222, 96, 135, 6, 1, 219, 77, 135, 6, 1, 215, + 68, 135, 6, 1, 214, 212, 135, 6, 1, 211, 91, 135, 6, 1, 209, 57, 135, 6, + 1, 206, 180, 135, 6, 1, 202, 78, 135, 6, 1, 197, 44, 135, 6, 1, 196, 124, + 135, 6, 1, 232, 103, 135, 6, 1, 229, 190, 135, 6, 1, 211, 22, 135, 6, 1, + 210, 65, 135, 6, 1, 203, 9, 135, 6, 1, 197, 146, 135, 6, 1, 243, 56, 135, + 6, 1, 203, 166, 135, 6, 1, 192, 58, 135, 6, 1, 192, 60, 135, 6, 1, 192, + 93, 135, 6, 1, 201, 221, 140, 135, 6, 1, 191, 225, 135, 6, 1, 2, 191, + 190, 135, 6, 1, 2, 191, 191, 4, 199, 215, 135, 6, 1, 192, 12, 135, 6, 1, + 223, 84, 2, 191, 190, 135, 6, 1, 248, 177, 191, 190, 135, 6, 1, 223, 84, + 248, 177, 191, 190, 135, 6, 1, 232, 230, 135, 6, 1, 223, 39, 135, 6, 1, + 203, 8, 135, 6, 1, 197, 215, 65, 135, 6, 1, 220, 3, 215, 68, 135, 6, 1, + 247, 75, 243, 56, 135, 2, 1, 250, 124, 135, 2, 1, 247, 254, 135, 2, 1, + 195, 151, 135, 2, 1, 231, 20, 135, 2, 1, 236, 171, 135, 2, 1, 192, 49, + 135, 2, 1, 191, 55, 135, 2, 1, 235, 32, 135, 2, 1, 191, 82, 135, 2, 1, + 223, 41, 135, 2, 1, 89, 223, 41, 135, 2, 1, 68, 135, 2, 1, 236, 192, 135, + 2, 1, 222, 96, 135, 2, 1, 219, 77, 135, 2, 1, 215, 68, 135, 2, 1, 214, + 212, 135, 2, 1, 211, 91, 135, 2, 1, 209, 57, 135, 2, 1, 206, 180, 135, 2, + 1, 202, 78, 135, 2, 1, 197, 44, 135, 2, 1, 196, 124, 135, 2, 1, 232, 103, + 135, 2, 1, 229, 190, 135, 2, 1, 211, 22, 135, 2, 1, 210, 65, 135, 2, 1, + 203, 9, 135, 2, 1, 197, 146, 135, 2, 1, 243, 56, 135, 2, 1, 203, 166, + 135, 2, 1, 192, 58, 135, 2, 1, 192, 60, 135, 2, 1, 192, 93, 135, 2, 1, + 201, 221, 140, 135, 2, 1, 191, 225, 135, 2, 1, 2, 191, 190, 135, 2, 1, 2, + 191, 191, 4, 199, 215, 135, 2, 1, 192, 12, 135, 2, 1, 223, 84, 2, 191, + 190, 135, 2, 1, 248, 177, 191, 190, 135, 2, 1, 223, 84, 248, 177, 191, + 190, 135, 2, 1, 232, 230, 135, 2, 1, 223, 39, 135, 2, 1, 203, 8, 135, 2, + 1, 197, 215, 65, 135, 2, 1, 220, 3, 215, 68, 135, 2, 1, 247, 75, 243, 56, + 8, 6, 1, 220, 145, 4, 55, 164, 8, 2, 1, 220, 145, 4, 55, 164, 8, 6, 1, + 220, 145, 4, 82, 198, 152, 8, 6, 1, 210, 239, 4, 106, 8, 6, 1, 207, 224, + 4, 199, 215, 8, 2, 1, 42, 4, 106, 8, 2, 1, 200, 44, 4, 237, 41, 106, 8, + 6, 1, 230, 119, 4, 237, 89, 8, 2, 1, 230, 119, 4, 237, 89, 8, 6, 1, 222, + 155, 4, 237, 89, 8, 2, 1, 222, 155, 4, 237, 89, 8, 6, 1, 191, 167, 4, + 237, 89, 8, 2, 1, 191, 167, 4, 237, 89, 8, 6, 1, 251, 162, 8, 6, 1, 218, + 171, 4, 102, 8, 6, 1, 154, 65, 8, 6, 1, 154, 251, 162, 8, 2, 1, 196, 13, + 4, 50, 102, 8, 6, 1, 193, 225, 4, 102, 8, 2, 1, 193, 225, 4, 102, 8, 2, + 1, 196, 13, 4, 238, 177, 8, 6, 1, 132, 230, 118, 8, 2, 1, 132, 230, 118, + 8, 2, 1, 199, 213, 209, 213, 8, 2, 1, 235, 17, 4, 213, 11, 8, 2, 1, 154, + 207, 224, 4, 199, 215, 8, 2, 1, 187, 4, 130, 206, 190, 223, 119, 8, 1, 2, + 6, 154, 71, 8, 200, 231, 2, 1, 223, 37, 52, 1, 6, 196, 12, 8, 6, 1, 206, + 10, 4, 200, 146, 199, 215, 8, 6, 1, 191, 167, 4, 200, 146, 199, 215, 94, + 6, 1, 251, 188, 94, 2, 1, 251, 188, 94, 6, 1, 195, 66, 94, 2, 1, 195, 66, + 94, 6, 1, 231, 213, 94, 2, 1, 231, 213, 94, 6, 1, 238, 1, 94, 2, 1, 238, + 1, 94, 6, 1, 234, 167, 94, 2, 1, 234, 167, 94, 6, 1, 202, 8, 94, 2, 1, + 202, 8, 94, 6, 1, 191, 95, 94, 2, 1, 191, 95, 94, 6, 1, 230, 8, 94, 2, 1, + 230, 8, 94, 6, 1, 199, 13, 94, 2, 1, 199, 13, 94, 6, 1, 228, 34, 94, 2, + 1, 228, 34, 94, 6, 1, 222, 79, 94, 2, 1, 222, 79, 94, 6, 1, 219, 254, 94, + 2, 1, 219, 254, 94, 6, 1, 216, 102, 94, 2, 1, 216, 102, 94, 6, 1, 213, + 221, 94, 2, 1, 213, 221, 94, 6, 1, 220, 250, 94, 2, 1, 220, 250, 94, 6, + 1, 74, 94, 2, 1, 74, 94, 6, 1, 209, 187, 94, 2, 1, 209, 187, 94, 6, 1, + 206, 163, 94, 2, 1, 206, 163, 94, 6, 1, 202, 184, 94, 2, 1, 202, 184, 94, + 6, 1, 199, 166, 94, 2, 1, 199, 166, 94, 6, 1, 196, 168, 94, 2, 1, 196, + 168, 94, 6, 1, 233, 25, 94, 2, 1, 233, 25, 94, 6, 1, 221, 192, 94, 2, 1, + 221, 192, 94, 6, 1, 208, 178, 94, 2, 1, 208, 178, 94, 6, 1, 211, 83, 94, + 2, 1, 211, 83, 94, 6, 1, 237, 39, 251, 194, 94, 2, 1, 237, 39, 251, 194, + 94, 6, 1, 39, 94, 251, 232, 94, 2, 1, 39, 94, 251, 232, 94, 6, 1, 238, + 200, 234, 167, 94, 2, 1, 238, 200, 234, 167, 94, 6, 1, 237, 39, 222, 79, + 94, 2, 1, 237, 39, 222, 79, 94, 6, 1, 237, 39, 213, 221, 94, 2, 1, 237, + 39, 213, 221, 94, 6, 1, 238, 200, 213, 221, 94, 2, 1, 238, 200, 213, 221, + 94, 6, 1, 39, 94, 211, 83, 94, 2, 1, 39, 94, 211, 83, 94, 6, 1, 205, 146, + 94, 2, 1, 205, 146, 94, 6, 1, 238, 216, 203, 106, 94, 2, 1, 238, 216, + 203, 106, 94, 6, 1, 39, 94, 203, 106, 94, 2, 1, 39, 94, 203, 106, 94, 6, + 1, 39, 94, 234, 14, 94, 2, 1, 39, 94, 234, 14, 94, 6, 1, 251, 214, 221, + 197, 94, 2, 1, 251, 214, 221, 197, 94, 6, 1, 237, 39, 228, 244, 94, 2, 1, + 237, 39, 228, 244, 94, 6, 1, 39, 94, 228, 244, 94, 2, 1, 39, 94, 228, + 244, 94, 6, 1, 39, 94, 140, 94, 2, 1, 39, 94, 140, 94, 6, 1, 220, 144, + 140, 94, 2, 1, 220, 144, 140, 94, 6, 1, 39, 94, 229, 211, 94, 2, 1, 39, + 94, 229, 211, 94, 6, 1, 39, 94, 230, 11, 94, 2, 1, 39, 94, 230, 11, 94, + 6, 1, 39, 94, 231, 208, 94, 2, 1, 39, 94, 231, 208, 94, 6, 1, 39, 94, + 236, 195, 94, 2, 1, 39, 94, 236, 195, 94, 6, 1, 39, 94, 203, 72, 94, 2, + 1, 39, 94, 203, 72, 94, 6, 1, 39, 212, 147, 203, 72, 94, 2, 1, 39, 212, + 147, 203, 72, 94, 6, 1, 39, 212, 147, 214, 18, 94, 2, 1, 39, 212, 147, + 214, 18, 94, 6, 1, 39, 212, 147, 212, 83, 94, 2, 1, 39, 212, 147, 212, + 83, 94, 6, 1, 39, 212, 147, 193, 140, 94, 2, 1, 39, 212, 147, 193, 140, + 94, 16, 222, 104, 94, 16, 216, 103, 206, 163, 94, 16, 209, 188, 206, 163, + 94, 16, 201, 90, 94, 16, 199, 167, 206, 163, 94, 16, 221, 193, 206, 163, + 94, 16, 203, 73, 202, 184, 94, 6, 1, 238, 200, 203, 106, 94, 2, 1, 238, + 200, 203, 106, 94, 6, 1, 238, 200, 231, 208, 94, 2, 1, 238, 200, 231, + 208, 94, 33, 213, 222, 58, 94, 33, 201, 214, 250, 203, 94, 33, 201, 214, + 219, 190, 94, 6, 1, 248, 105, 221, 197, 94, 2, 1, 248, 105, 221, 197, 94, + 39, 212, 147, 232, 82, 201, 64, 94, 39, 212, 147, 236, 236, 208, 15, 77, + 94, 39, 212, 147, 223, 144, 208, 15, 77, 94, 39, 212, 147, 195, 137, 236, + 207, 94, 232, 120, 91, 230, 72, 94, 232, 82, 201, 64, 94, 215, 202, 236, + 207, 101, 2, 1, 251, 134, 101, 2, 1, 249, 103, 101, 2, 1, 231, 212, 101, + 2, 1, 236, 152, 101, 2, 1, 234, 105, 101, 2, 1, 195, 49, 101, 2, 1, 191, + 80, 101, 2, 1, 199, 193, 101, 2, 1, 223, 164, 101, 2, 1, 222, 89, 101, 2, + 1, 220, 9, 101, 2, 1, 217, 92, 101, 2, 1, 214, 218, 101, 2, 1, 211, 106, + 101, 2, 1, 210, 133, 101, 2, 1, 191, 67, 101, 2, 1, 207, 165, 101, 2, 1, + 205, 143, 101, 2, 1, 199, 179, 101, 2, 1, 196, 113, 101, 2, 1, 209, 222, + 101, 2, 1, 221, 202, 101, 2, 1, 231, 84, 101, 2, 1, 208, 83, 101, 2, 1, + 203, 70, 101, 2, 1, 243, 83, 101, 2, 1, 247, 130, 101, 2, 1, 222, 236, + 101, 2, 1, 243, 20, 101, 2, 1, 246, 243, 101, 2, 1, 192, 218, 101, 2, 1, + 222, 251, 101, 2, 1, 230, 89, 101, 2, 1, 229, 247, 101, 2, 1, 229, 147, + 101, 2, 1, 193, 125, 101, 2, 1, 230, 21, 101, 2, 1, 229, 13, 101, 2, 1, + 192, 14, 101, 2, 1, 252, 16, 198, 175, 1, 170, 198, 175, 1, 192, 136, + 198, 175, 1, 192, 135, 198, 175, 1, 192, 125, 198, 175, 1, 192, 123, 198, + 175, 1, 248, 220, 252, 64, 192, 118, 198, 175, 1, 192, 118, 198, 175, 1, + 192, 133, 198, 175, 1, 192, 130, 198, 175, 1, 192, 132, 198, 175, 1, 192, + 131, 198, 175, 1, 192, 40, 198, 175, 1, 192, 127, 198, 175, 1, 192, 116, + 198, 175, 1, 197, 86, 192, 116, 198, 175, 1, 192, 113, 198, 175, 1, 192, + 121, 198, 175, 1, 248, 220, 252, 64, 192, 121, 198, 175, 1, 197, 86, 192, + 121, 198, 175, 1, 192, 120, 198, 175, 1, 192, 140, 198, 175, 1, 192, 114, + 198, 175, 1, 197, 86, 192, 114, 198, 175, 1, 192, 103, 198, 175, 1, 197, + 86, 192, 103, 198, 175, 1, 192, 33, 198, 175, 1, 192, 82, 198, 175, 1, + 251, 245, 192, 82, 198, 175, 1, 197, 86, 192, 82, 198, 175, 1, 192, 112, + 198, 175, 1, 192, 111, 198, 175, 1, 192, 108, 198, 175, 1, 197, 86, 192, + 122, 198, 175, 1, 197, 86, 192, 106, 198, 175, 1, 192, 104, 198, 175, 1, + 191, 225, 198, 175, 1, 192, 101, 198, 175, 1, 192, 99, 198, 175, 1, 192, + 124, 198, 175, 1, 197, 86, 192, 124, 198, 175, 1, 250, 129, 192, 124, + 198, 175, 1, 192, 98, 198, 175, 1, 192, 96, 198, 175, 1, 192, 97, 198, + 175, 1, 192, 95, 198, 175, 1, 192, 94, 198, 175, 1, 192, 134, 198, 175, + 1, 192, 92, 198, 175, 1, 192, 90, 198, 175, 1, 192, 89, 198, 175, 1, 192, + 86, 198, 175, 1, 192, 83, 198, 175, 1, 199, 157, 192, 83, 198, 175, 1, + 192, 81, 198, 175, 1, 192, 80, 198, 175, 1, 192, 12, 198, 175, 52, 1, + 220, 117, 77, 198, 175, 204, 12, 77, 198, 175, 120, 222, 198, 36, 5, 219, + 44, 36, 5, 216, 7, 36, 5, 206, 155, 36, 5, 202, 39, 36, 5, 203, 56, 36, + 5, 248, 112, 36, 5, 198, 91, 36, 5, 242, 100, 36, 5, 213, 38, 36, 5, 212, + 66, 36, 5, 231, 13, 211, 184, 36, 5, 191, 6, 36, 5, 236, 174, 36, 5, 237, + 162, 36, 5, 222, 202, 36, 5, 198, 240, 36, 5, 243, 69, 36, 5, 209, 200, + 36, 5, 209, 74, 36, 5, 231, 99, 36, 5, 231, 95, 36, 5, 231, 96, 36, 5, + 231, 97, 36, 5, 201, 176, 36, 5, 201, 130, 36, 5, 201, 143, 36, 5, 201, + 175, 36, 5, 201, 148, 36, 5, 201, 149, 36, 5, 201, 135, 36, 5, 247, 67, + 36, 5, 247, 46, 36, 5, 247, 48, 36, 5, 247, 66, 36, 5, 247, 64, 36, 5, + 247, 65, 36, 5, 247, 47, 36, 5, 190, 224, 36, 5, 190, 202, 36, 5, 190, + 215, 36, 5, 190, 223, 36, 5, 190, 218, 36, 5, 190, 219, 36, 5, 190, 207, + 36, 5, 247, 62, 36, 5, 247, 49, 36, 5, 247, 51, 36, 5, 247, 61, 36, 5, + 247, 59, 36, 5, 247, 60, 36, 5, 247, 50, 36, 5, 207, 236, 36, 5, 207, + 226, 36, 5, 207, 232, 36, 5, 207, 235, 36, 5, 207, 233, 36, 5, 207, 234, + 36, 5, 207, 231, 36, 5, 220, 155, 36, 5, 220, 147, 36, 5, 220, 150, 36, + 5, 220, 154, 36, 5, 220, 151, 36, 5, 220, 152, 36, 5, 220, 148, 36, 5, + 192, 175, 36, 5, 192, 162, 36, 5, 192, 170, 36, 5, 192, 174, 36, 5, 192, + 172, 36, 5, 192, 173, 36, 5, 192, 169, 36, 5, 230, 130, 36, 5, 230, 120, + 36, 5, 230, 123, 36, 5, 230, 129, 36, 5, 230, 125, 36, 5, 230, 126, 36, + 5, 230, 122, 33, 38, 1, 249, 19, 33, 38, 1, 195, 153, 33, 38, 1, 231, 79, + 33, 38, 1, 237, 148, 33, 38, 1, 191, 62, 33, 38, 1, 191, 87, 33, 38, 1, + 155, 33, 38, 1, 234, 142, 33, 38, 1, 234, 116, 33, 38, 1, 234, 105, 33, + 38, 1, 74, 33, 38, 1, 210, 65, 33, 38, 1, 234, 36, 33, 38, 1, 234, 24, + 33, 38, 1, 199, 145, 33, 38, 1, 140, 33, 38, 1, 197, 161, 33, 38, 1, 243, + 129, 33, 38, 1, 203, 166, 33, 38, 1, 203, 117, 33, 38, 1, 232, 230, 33, + 38, 1, 234, 20, 33, 38, 1, 65, 33, 38, 1, 223, 228, 33, 38, 1, 236, 193, + 33, 38, 1, 215, 221, 196, 128, 33, 38, 1, 192, 95, 33, 38, 1, 191, 225, + 33, 38, 1, 223, 83, 65, 33, 38, 1, 219, 85, 191, 190, 33, 38, 1, 248, + 177, 191, 190, 33, 38, 1, 223, 83, 248, 177, 191, 190, 50, 251, 118, 200, + 226, 217, 53, 50, 251, 118, 235, 140, 200, 226, 217, 53, 45, 200, 226, + 248, 55, 50, 200, 226, 248, 55, 45, 235, 140, 200, 226, 248, 55, 50, 235, + 140, 200, 226, 248, 55, 207, 149, 223, 106, 217, 53, 207, 149, 235, 140, + 223, 106, 217, 53, 235, 140, 198, 8, 217, 53, 45, 198, 8, 248, 55, 50, + 198, 8, 248, 55, 207, 149, 201, 191, 45, 207, 149, 211, 108, 248, 55, 50, + 207, 149, 211, 108, 248, 55, 234, 191, 239, 0, 210, 128, 232, 150, 210, + 128, 207, 19, 232, 150, 210, 128, 228, 87, 235, 140, 211, 179, 235, 121, + 251, 128, 196, 66, 251, 128, 235, 140, 206, 204, 251, 117, 55, 211, 174, + 228, 90, 223, 95, 223, 104, 210, 185, 248, 49, 228, 91, 4, 237, 44, 198, + 153, 4, 206, 190, 58, 45, 130, 210, 118, 248, 55, 50, 130, 210, 118, 248, + 55, 198, 153, 4, 75, 58, 198, 153, 4, 75, 60, 45, 81, 249, 90, 4, 208, 9, + 50, 81, 249, 90, 4, 208, 9, 198, 54, 45, 132, 248, 55, 198, 54, 50, 132, + 248, 55, 248, 79, 45, 132, 248, 55, 248, 79, 50, 132, 248, 55, 45, 202, + 207, 126, 248, 55, 50, 202, 207, 126, 248, 55, 45, 55, 210, 115, 50, 55, + 210, 115, 105, 185, 139, 91, 75, 208, 153, 91, 75, 139, 105, 185, 208, + 153, 112, 232, 130, 75, 208, 153, 232, 228, 75, 77, 207, 19, 208, 15, 77, + 81, 198, 152, 206, 190, 209, 63, 193, 23, 204, 12, 82, 236, 142, 154, + 242, 76, 207, 149, 236, 142, 207, 149, 242, 76, 154, 204, 26, 238, 17, 4, + 45, 230, 175, 238, 17, 4, 50, 230, 175, 154, 238, 16, 198, 54, 132, 205, + 55, 56, 197, 14, 237, 217, 198, 223, 237, 217, 201, 80, 232, 82, 201, 64, + 81, 202, 137, 236, 140, 193, 72, 81, 219, 114, 247, 111, 55, 228, 90, + 207, 19, 242, 76, 55, 218, 239, 207, 254, 77, 237, 218, 4, 45, 196, 69, + 55, 200, 164, 77, 223, 95, 130, 222, 37, 223, 95, 130, 222, 38, 4, 222, + 38, 58, 130, 222, 37, 130, 222, 38, 4, 236, 142, 55, 201, 115, 242, 76, + 235, 140, 202, 24, 197, 225, 238, 16, 216, 216, 242, 76, 210, 127, 77, + 208, 152, 234, 131, 77, 239, 1, 195, 137, 236, 207, 238, 220, 210, 84, 4, + 50, 238, 218, 238, 220, 210, 84, 4, 45, 238, 218, 198, 128, 3, 6, 234, 1, + 216, 216, 233, 218, 77, 216, 216, 208, 15, 77, 45, 51, 248, 56, 4, 106, + 50, 51, 248, 56, 4, 106, 45, 51, 248, 56, 4, 55, 106, 50, 51, 248, 56, 4, + 55, 106, 198, 54, 132, 45, 210, 115, 198, 54, 132, 50, 210, 115, 248, 79, + 132, 45, 210, 115, 248, 79, 132, 50, 210, 115, 211, 174, 228, 90, 12, 48, + 207, 49, 12, 48, 242, 232, 12, 48, 205, 58, 107, 12, 48, 205, 58, 109, + 12, 48, 205, 58, 138, 12, 48, 209, 252, 12, 48, 248, 64, 12, 48, 199, + 233, 12, 48, 221, 81, 107, 12, 48, 221, 81, 109, 12, 48, 236, 204, 12, + 48, 205, 62, 12, 48, 2, 107, 12, 48, 2, 109, 12, 48, 220, 32, 107, 12, + 48, 220, 32, 109, 12, 48, 220, 32, 138, 12, 48, 220, 32, 134, 12, 48, + 202, 59, 12, 48, 198, 227, 12, 48, 202, 56, 107, 12, 48, 202, 56, 109, + 12, 48, 229, 226, 107, 12, 48, 229, 226, 109, 12, 48, 230, 55, 12, 48, + 207, 138, 12, 48, 243, 66, 12, 48, 200, 198, 12, 48, 215, 207, 12, 48, + 237, 145, 12, 48, 215, 195, 12, 48, 242, 251, 12, 48, 193, 144, 107, 12, + 48, 193, 144, 109, 12, 48, 232, 245, 12, 48, 210, 78, 107, 12, 48, 210, + 78, 109, 12, 48, 202, 179, 132, 197, 255, 197, 177, 12, 48, 238, 241, 12, + 48, 236, 164, 12, 48, 223, 29, 12, 48, 248, 104, 79, 242, 215, 12, 48, + 233, 195, 12, 48, 201, 216, 107, 12, 48, 201, 216, 109, 12, 48, 249, 105, + 12, 48, 202, 186, 12, 48, 247, 192, 202, 186, 12, 48, 214, 88, 107, 12, + 48, 214, 88, 109, 12, 48, 214, 88, 138, 12, 48, 214, 88, 134, 12, 48, + 216, 174, 12, 48, 203, 108, 12, 48, 207, 144, 12, 48, 233, 225, 12, 48, + 211, 121, 12, 48, 248, 20, 107, 12, 48, 248, 20, 109, 12, 48, 216, 226, + 12, 48, 215, 201, 12, 48, 230, 216, 107, 12, 48, 230, 216, 109, 12, 48, + 230, 216, 138, 12, 48, 198, 173, 12, 48, 242, 214, 12, 48, 193, 105, 107, + 12, 48, 193, 105, 109, 12, 48, 247, 192, 205, 51, 12, 48, 202, 179, 228, + 189, 12, 48, 228, 189, 12, 48, 247, 192, 201, 230, 12, 48, 247, 192, 203, + 103, 12, 48, 232, 161, 12, 48, 247, 192, 247, 87, 12, 48, 202, 179, 193, + 169, 12, 48, 193, 170, 107, 12, 48, 193, 170, 109, 12, 48, 242, 254, 12, + 48, 247, 192, 230, 252, 12, 48, 180, 107, 12, 48, 180, 109, 12, 48, 247, + 192, 219, 21, 12, 48, 247, 192, 231, 193, 12, 48, 215, 190, 107, 12, 48, + 215, 190, 109, 12, 48, 207, 151, 12, 48, 248, 116, 12, 48, 247, 192, 199, + 185, 219, 232, 12, 48, 247, 192, 219, 235, 12, 48, 247, 192, 193, 66, 12, + 48, 247, 192, 232, 181, 12, 48, 234, 203, 107, 12, 48, 234, 203, 109, 12, + 48, 234, 203, 138, 12, 48, 247, 192, 234, 202, 12, 48, 229, 237, 12, 48, + 247, 192, 228, 185, 12, 48, 248, 100, 12, 48, 231, 63, 12, 48, 247, 192, + 232, 238, 12, 48, 247, 192, 248, 162, 12, 48, 247, 192, 205, 159, 12, 48, + 202, 179, 193, 95, 12, 48, 202, 179, 192, 72, 12, 48, 247, 192, 232, 101, + 12, 48, 223, 36, 233, 230, 12, 48, 247, 192, 233, 230, 12, 48, 223, 36, + 198, 56, 12, 48, 247, 192, 198, 56, 12, 48, 223, 36, 235, 113, 12, 48, + 247, 192, 235, 113, 12, 48, 197, 55, 12, 48, 223, 36, 197, 55, 12, 48, + 247, 192, 197, 55, 83, 48, 107, 83, 48, 219, 114, 83, 48, 236, 142, 83, + 48, 202, 98, 83, 48, 205, 57, 83, 48, 102, 83, 48, 109, 83, 48, 219, 143, + 83, 48, 217, 92, 83, 48, 219, 211, 83, 48, 234, 79, 83, 48, 171, 83, 48, + 144, 248, 64, 83, 48, 238, 244, 83, 48, 228, 28, 83, 48, 199, 233, 83, + 48, 211, 79, 248, 64, 83, 48, 221, 80, 83, 48, 209, 0, 83, 48, 193, 12, + 83, 48, 201, 204, 83, 48, 50, 211, 79, 248, 64, 83, 48, 229, 148, 234, + 100, 83, 48, 199, 95, 83, 48, 236, 204, 83, 48, 205, 62, 83, 48, 242, + 232, 83, 48, 208, 206, 83, 48, 251, 254, 83, 48, 215, 181, 83, 48, 234, + 100, 83, 48, 234, 209, 83, 48, 205, 92, 83, 48, 231, 5, 83, 48, 231, 6, + 202, 75, 83, 48, 233, 229, 83, 48, 248, 176, 83, 48, 193, 35, 83, 48, + 243, 88, 83, 48, 206, 134, 83, 48, 223, 160, 83, 48, 202, 71, 83, 48, + 220, 31, 83, 48, 238, 254, 83, 48, 201, 195, 83, 48, 215, 186, 83, 48, + 206, 177, 83, 48, 193, 20, 83, 48, 211, 97, 83, 48, 197, 63, 83, 48, 235, + 93, 83, 48, 203, 41, 198, 227, 83, 48, 235, 140, 242, 232, 83, 48, 180, + 201, 35, 83, 48, 105, 230, 30, 83, 48, 203, 47, 83, 48, 248, 71, 83, 48, + 202, 55, 83, 48, 248, 27, 83, 48, 201, 79, 83, 48, 229, 225, 83, 48, 230, + 73, 83, 48, 236, 146, 83, 48, 230, 55, 83, 48, 248, 49, 83, 48, 207, 138, + 83, 48, 205, 75, 83, 48, 236, 238, 83, 48, 250, 134, 83, 48, 201, 191, + 83, 48, 213, 13, 83, 48, 200, 198, 83, 48, 205, 104, 83, 48, 215, 207, + 83, 48, 197, 254, 83, 48, 220, 113, 83, 48, 201, 64, 83, 48, 237, 145, + 83, 48, 193, 120, 83, 48, 236, 177, 213, 13, 83, 48, 242, 72, 83, 48, + 232, 74, 83, 48, 242, 245, 83, 48, 201, 85, 83, 48, 193, 143, 83, 48, + 232, 245, 83, 48, 242, 241, 83, 48, 233, 68, 83, 48, 55, 192, 235, 83, + 48, 132, 197, 255, 197, 177, 83, 48, 202, 89, 83, 48, 233, 80, 83, 48, + 238, 241, 83, 48, 236, 164, 83, 48, 208, 201, 83, 48, 223, 29, 83, 48, + 216, 198, 83, 48, 198, 151, 83, 48, 200, 141, 83, 48, 219, 137, 83, 48, + 196, 43, 83, 48, 233, 23, 83, 48, 248, 104, 79, 242, 215, 83, 48, 202, + 213, 83, 48, 235, 140, 199, 87, 83, 48, 193, 89, 83, 48, 202, 108, 83, + 48, 236, 224, 83, 48, 233, 195, 83, 48, 201, 233, 83, 48, 57, 83, 48, + 201, 66, 83, 48, 201, 215, 83, 48, 198, 25, 83, 48, 230, 225, 83, 48, + 247, 72, 83, 48, 201, 108, 83, 48, 249, 105, 83, 48, 206, 246, 83, 48, + 202, 186, 83, 48, 223, 20, 83, 48, 214, 87, 83, 48, 203, 108, 83, 48, + 233, 56, 83, 48, 211, 121, 83, 48, 251, 127, 83, 48, 209, 91, 83, 48, + 234, 213, 83, 48, 248, 19, 83, 48, 216, 226, 83, 48, 216, 39, 83, 48, + 204, 33, 83, 48, 250, 241, 83, 48, 215, 201, 83, 48, 198, 61, 83, 48, + 211, 66, 83, 48, 248, 108, 83, 48, 201, 60, 83, 48, 242, 84, 83, 48, 230, + 215, 83, 48, 198, 173, 83, 48, 223, 123, 83, 48, 248, 122, 83, 48, 193, + 170, 234, 100, 83, 48, 242, 214, 83, 48, 193, 104, 83, 48, 205, 51, 83, + 48, 228, 189, 83, 48, 201, 230, 83, 48, 195, 180, 83, 48, 249, 14, 83, + 48, 209, 149, 83, 48, 249, 135, 83, 48, 203, 103, 83, 48, 207, 88, 83, + 48, 206, 46, 83, 48, 232, 161, 83, 48, 248, 106, 83, 48, 247, 87, 83, 48, + 248, 146, 83, 48, 215, 203, 83, 48, 193, 169, 83, 48, 242, 254, 83, 48, + 193, 62, 83, 48, 236, 216, 83, 48, 195, 50, 83, 48, 230, 252, 83, 48, + 219, 21, 83, 48, 231, 193, 83, 48, 215, 189, 83, 48, 202, 97, 83, 48, + 203, 41, 199, 214, 248, 162, 83, 48, 207, 151, 83, 48, 248, 116, 83, 48, + 193, 2, 83, 48, 233, 105, 83, 48, 219, 232, 83, 48, 199, 185, 219, 232, + 83, 48, 219, 228, 83, 48, 202, 5, 83, 48, 219, 235, 83, 48, 193, 66, 83, + 48, 232, 181, 83, 48, 234, 202, 83, 48, 229, 237, 83, 48, 232, 118, 83, + 48, 228, 185, 83, 48, 248, 100, 83, 48, 199, 199, 83, 48, 230, 80, 83, + 48, 233, 16, 83, 48, 205, 195, 193, 62, 83, 48, 247, 74, 83, 48, 231, 63, + 83, 48, 232, 238, 83, 48, 248, 162, 83, 48, 205, 159, 83, 48, 237, 130, + 83, 48, 193, 95, 83, 48, 229, 201, 83, 48, 192, 72, 83, 48, 216, 51, 83, + 48, 248, 141, 83, 48, 234, 112, 83, 48, 232, 101, 83, 48, 197, 222, 83, + 48, 235, 96, 83, 48, 207, 132, 83, 48, 213, 15, 83, 48, 233, 230, 83, 48, + 198, 56, 83, 48, 235, 113, 83, 48, 197, 55, 83, 48, 232, 184, 148, 237, + 87, 246, 242, 45, 119, 179, 148, 237, 87, 246, 242, 93, 119, 60, 148, + 237, 87, 246, 242, 45, 119, 82, 23, 179, 148, 237, 87, 246, 242, 93, 119, + 82, 23, 60, 148, 237, 87, 246, 242, 232, 82, 200, 168, 148, 237, 87, 246, + 242, 200, 169, 232, 100, 58, 148, 237, 87, 246, 242, 200, 169, 232, 100, + 60, 148, 237, 87, 246, 242, 200, 169, 232, 100, 219, 226, 148, 237, 87, + 246, 242, 200, 169, 232, 100, 116, 219, 226, 148, 237, 87, 246, 242, 200, + 169, 232, 100, 116, 179, 148, 237, 87, 246, 242, 200, 169, 232, 100, 110, + 219, 226, 148, 237, 87, 246, 242, 211, 5, 148, 237, 87, 246, 242, 200, + 169, 232, 100, 179, 148, 237, 87, 246, 242, 200, 169, 232, 100, 110, 179, + 148, 237, 87, 246, 242, 228, 243, 207, 84, 148, 237, 87, 246, 242, 206, + 121, 148, 201, 248, 148, 242, 76, 148, 232, 82, 201, 64, 236, 213, 77, + 223, 21, 223, 143, 201, 107, 113, 148, 223, 53, 77, 148, 242, 217, 77, + 148, 31, 191, 77, 45, 251, 118, 248, 55, 50, 251, 118, 248, 55, 45, 55, + 251, 118, 248, 55, 50, 55, 251, 118, 248, 55, 45, 239, 4, 248, 55, 50, + 239, 4, 248, 55, 45, 63, 239, 4, 248, 55, 50, 63, 239, 4, 248, 55, 45, + 62, 219, 189, 248, 55, 50, 62, 219, 189, 248, 55, 209, 20, 77, 231, 132, + 77, 45, 198, 42, 203, 104, 248, 55, 50, 198, 42, 203, 104, 248, 55, 45, + 63, 219, 189, 248, 55, 50, 63, 219, 189, 248, 55, 45, 63, 198, 42, 203, + 104, 248, 55, 50, 63, 198, 42, 203, 104, 248, 55, 45, 63, 51, 248, 55, + 50, 63, 51, 248, 55, 193, 139, 237, 217, 207, 19, 55, 208, 218, 207, 254, + 77, 55, 208, 218, 207, 254, 77, 130, 55, 208, 218, 207, 254, 77, 209, 20, + 87, 233, 105, 230, 27, 212, 136, 107, 230, 27, 212, 136, 109, 230, 27, + 212, 136, 138, 230, 27, 212, 136, 134, 230, 27, 212, 136, 150, 230, 27, + 212, 136, 169, 230, 27, 212, 136, 175, 230, 27, 212, 136, 171, 230, 27, + 212, 136, 178, 148, 219, 170, 163, 77, 148, 206, 181, 163, 77, 148, 237, + 97, 163, 77, 148, 234, 78, 163, 77, 30, 202, 171, 75, 163, 77, 30, 55, + 75, 163, 77, 193, 135, 237, 217, 81, 222, 88, 207, 50, 77, 81, 222, 88, + 207, 50, 4, 195, 20, 202, 6, 77, 81, 222, 88, 207, 50, 87, 116, 230, 72, + 81, 222, 88, 207, 50, 4, 195, 20, 202, 6, 87, 116, 230, 72, 81, 222, 88, + 207, 50, 87, 110, 230, 72, 47, 209, 20, 77, 148, 199, 109, 219, 115, 233, + 53, 204, 12, 113, 230, 27, 212, 136, 199, 95, 230, 27, 212, 136, 197, 32, + 230, 27, 212, 136, 198, 249, 81, 148, 223, 53, 77, 217, 33, 77, 210, 109, + 251, 155, 77, 148, 67, 223, 146, 148, 132, 233, 8, 201, 248, 229, 122, 1, + 2, 65, 229, 122, 1, 65, 229, 122, 1, 2, 68, 229, 122, 1, 68, 229, 122, 1, + 2, 66, 229, 122, 1, 66, 229, 122, 1, 2, 71, 229, 122, 1, 71, 229, 122, 1, + 2, 74, 229, 122, 1, 74, 229, 122, 1, 155, 229, 122, 1, 231, 242, 229, + 122, 1, 221, 168, 229, 122, 1, 231, 55, 229, 122, 1, 220, 234, 229, 122, + 1, 230, 181, 229, 122, 1, 222, 24, 229, 122, 1, 231, 167, 229, 122, 1, + 221, 69, 229, 122, 1, 231, 5, 229, 122, 1, 188, 229, 122, 1, 191, 123, + 229, 122, 1, 202, 223, 229, 122, 1, 191, 30, 229, 122, 1, 201, 5, 229, + 122, 1, 190, 251, 229, 122, 1, 205, 69, 229, 122, 1, 191, 87, 229, 122, + 1, 202, 47, 229, 122, 1, 191, 7, 229, 122, 1, 190, 190, 229, 122, 1, 238, + 34, 229, 122, 1, 198, 193, 229, 122, 1, 237, 46, 229, 122, 1, 2, 197, 94, + 229, 122, 1, 197, 94, 229, 122, 1, 235, 91, 229, 122, 1, 199, 145, 229, + 122, 1, 237, 148, 229, 122, 1, 159, 229, 122, 1, 236, 176, 229, 122, 1, + 181, 229, 122, 1, 213, 221, 229, 122, 1, 212, 180, 229, 122, 1, 214, 123, + 229, 122, 1, 213, 45, 229, 122, 1, 140, 229, 122, 1, 249, 155, 229, 122, + 1, 168, 229, 122, 1, 229, 160, 229, 122, 1, 248, 190, 229, 122, 1, 209, + 187, 229, 122, 1, 228, 161, 229, 122, 1, 248, 12, 229, 122, 1, 208, 167, + 229, 122, 1, 229, 247, 229, 122, 1, 249, 19, 229, 122, 1, 210, 65, 229, + 122, 1, 229, 25, 229, 122, 1, 248, 113, 229, 122, 1, 209, 75, 229, 122, + 1, 174, 229, 122, 1, 216, 102, 229, 122, 1, 215, 157, 229, 122, 1, 216, + 234, 229, 122, 1, 216, 14, 229, 122, 1, 2, 170, 229, 122, 1, 170, 229, + 122, 1, 2, 191, 225, 229, 122, 1, 191, 225, 229, 122, 1, 2, 192, 12, 229, + 122, 1, 192, 12, 229, 122, 1, 165, 229, 122, 1, 207, 2, 229, 122, 1, 206, + 69, 229, 122, 1, 207, 115, 229, 122, 1, 206, 163, 229, 122, 1, 2, 193, + 190, 229, 122, 1, 193, 190, 229, 122, 1, 193, 86, 229, 122, 1, 193, 125, + 229, 122, 1, 193, 48, 229, 122, 1, 215, 63, 229, 122, 1, 193, 249, 229, + 122, 1, 2, 155, 229, 122, 1, 2, 222, 24, 33, 222, 50, 195, 20, 202, 6, + 77, 33, 222, 50, 204, 31, 202, 6, 77, 222, 50, 195, 20, 202, 6, 77, 222, + 50, 204, 31, 202, 6, 77, 229, 122, 223, 53, 77, 229, 122, 195, 20, 223, + 53, 77, 229, 122, 237, 5, 191, 242, 222, 50, 55, 228, 90, 72, 1, 2, 65, + 72, 1, 65, 72, 1, 2, 68, 72, 1, 68, 72, 1, 2, 66, 72, 1, 66, 72, 1, 2, + 71, 72, 1, 71, 72, 1, 2, 74, 72, 1, 74, 72, 1, 155, 72, 1, 231, 242, 72, + 1, 221, 168, 72, 1, 231, 55, 72, 1, 220, 234, 72, 1, 230, 181, 72, 1, + 222, 24, 72, 1, 231, 167, 72, 1, 221, 69, 72, 1, 231, 5, 72, 1, 188, 72, + 1, 191, 123, 72, 1, 202, 223, 72, 1, 191, 30, 72, 1, 201, 5, 72, 1, 190, + 251, 72, 1, 205, 69, 72, 1, 191, 87, 72, 1, 202, 47, 72, 1, 191, 7, 72, + 1, 190, 190, 72, 1, 238, 34, 72, 1, 198, 193, 72, 1, 237, 46, 72, 1, 2, + 197, 94, 72, 1, 197, 94, 72, 1, 235, 91, 72, 1, 199, 145, 72, 1, 237, + 148, 72, 1, 159, 72, 1, 236, 176, 72, 1, 181, 72, 1, 213, 221, 72, 1, + 212, 180, 72, 1, 214, 123, 72, 1, 213, 45, 72, 1, 140, 72, 1, 249, 155, + 72, 1, 168, 72, 1, 229, 160, 72, 1, 248, 190, 72, 1, 209, 187, 72, 1, + 228, 161, 72, 1, 248, 12, 72, 1, 208, 167, 72, 1, 229, 247, 72, 1, 249, + 19, 72, 1, 210, 65, 72, 1, 229, 25, 72, 1, 248, 113, 72, 1, 209, 75, 72, + 1, 174, 72, 1, 216, 102, 72, 1, 215, 157, 72, 1, 216, 234, 72, 1, 216, + 14, 72, 1, 2, 170, 72, 1, 170, 72, 1, 2, 191, 225, 72, 1, 191, 225, 72, + 1, 2, 192, 12, 72, 1, 192, 12, 72, 1, 165, 72, 1, 207, 2, 72, 1, 206, 69, + 72, 1, 207, 115, 72, 1, 206, 163, 72, 1, 2, 193, 190, 72, 1, 193, 190, + 72, 1, 193, 86, 72, 1, 193, 125, 72, 1, 193, 48, 72, 1, 215, 63, 72, 1, + 193, 249, 72, 1, 2, 155, 72, 1, 2, 222, 24, 72, 1, 195, 188, 72, 1, 195, + 69, 72, 1, 195, 153, 72, 1, 195, 24, 72, 82, 236, 142, 222, 50, 208, 193, + 202, 6, 77, 72, 223, 53, 77, 72, 195, 20, 223, 53, 77, 72, 237, 5, 221, + 29, 248, 90, 1, 250, 122, 248, 90, 1, 210, 238, 248, 90, 1, 218, 170, + 248, 90, 1, 233, 177, 248, 90, 1, 238, 129, 248, 90, 1, 200, 43, 248, 90, + 1, 215, 63, 248, 90, 1, 172, 248, 90, 1, 232, 53, 248, 90, 1, 222, 154, + 248, 90, 1, 230, 118, 248, 90, 1, 223, 37, 248, 90, 1, 208, 106, 248, 90, + 1, 192, 235, 248, 90, 1, 191, 72, 248, 90, 1, 247, 5, 248, 90, 1, 203, + 168, 248, 90, 1, 146, 248, 90, 1, 191, 166, 248, 90, 1, 247, 195, 248, + 90, 1, 206, 9, 248, 90, 1, 65, 248, 90, 1, 74, 248, 90, 1, 71, 248, 90, + 1, 234, 175, 248, 90, 1, 251, 238, 248, 90, 1, 234, 168, 248, 90, 1, 250, + 165, 248, 90, 1, 211, 21, 248, 90, 1, 251, 134, 248, 90, 1, 234, 105, + 248, 90, 1, 251, 124, 248, 90, 1, 234, 90, 248, 90, 1, 234, 36, 248, 90, + 1, 68, 248, 90, 1, 66, 248, 90, 1, 223, 51, 248, 90, 1, 196, 12, 248, 90, + 1, 214, 72, 248, 90, 1, 231, 9, 248, 90, 1, 223, 202, 248, 90, 1, 187, 4, + 75, 58, 248, 90, 1, 213, 82, 30, 1, 221, 115, 30, 1, 201, 168, 30, 1, + 221, 108, 30, 1, 213, 206, 30, 1, 213, 204, 30, 1, 213, 203, 30, 1, 198, + 168, 30, 1, 201, 157, 30, 1, 206, 240, 30, 1, 206, 235, 30, 1, 206, 232, + 30, 1, 206, 225, 30, 1, 206, 220, 30, 1, 206, 215, 30, 1, 206, 226, 30, + 1, 206, 238, 30, 1, 216, 79, 30, 1, 209, 171, 30, 1, 201, 165, 30, 1, + 209, 160, 30, 1, 202, 161, 30, 1, 201, 162, 30, 1, 223, 224, 30, 1, 243, + 26, 30, 1, 201, 172, 30, 1, 243, 93, 30, 1, 221, 190, 30, 1, 199, 7, 30, + 1, 209, 211, 30, 1, 229, 144, 30, 1, 65, 30, 1, 252, 27, 30, 1, 170, 30, + 1, 192, 129, 30, 1, 234, 67, 30, 1, 71, 30, 1, 192, 67, 30, 1, 192, 80, + 30, 1, 74, 30, 1, 193, 190, 30, 1, 193, 176, 30, 1, 211, 153, 30, 1, 192, + 12, 30, 1, 66, 30, 1, 193, 107, 30, 1, 193, 125, 30, 1, 193, 86, 30, 1, + 191, 225, 30, 1, 233, 244, 30, 1, 192, 33, 30, 1, 68, 30, 233, 5, 30, 1, + 201, 166, 30, 1, 213, 196, 30, 1, 213, 198, 30, 1, 213, 201, 30, 1, 206, + 233, 30, 1, 206, 214, 30, 1, 206, 222, 30, 1, 206, 227, 30, 1, 206, 212, + 30, 1, 216, 72, 30, 1, 216, 69, 30, 1, 216, 73, 30, 1, 222, 73, 30, 1, + 209, 166, 30, 1, 209, 152, 30, 1, 209, 158, 30, 1, 209, 155, 30, 1, 209, + 169, 30, 1, 209, 153, 30, 1, 222, 71, 30, 1, 222, 69, 30, 1, 202, 154, + 30, 1, 202, 152, 30, 1, 202, 144, 30, 1, 202, 149, 30, 1, 202, 159, 30, + 1, 210, 151, 30, 1, 201, 169, 30, 1, 192, 57, 30, 1, 192, 51, 30, 1, 192, + 52, 30, 1, 222, 72, 30, 1, 201, 170, 30, 1, 192, 63, 30, 1, 192, 0, 30, + 1, 191, 255, 30, 1, 192, 2, 30, 1, 191, 212, 30, 1, 191, 213, 30, 1, 191, + 216, 30, 1, 251, 27, 30, 1, 251, 21, 148, 251, 98, 219, 103, 77, 148, + 251, 98, 207, 20, 77, 148, 251, 98, 91, 77, 148, 251, 98, 105, 77, 148, + 251, 98, 115, 77, 148, 251, 98, 232, 130, 77, 148, 251, 98, 198, 54, 77, + 148, 251, 98, 82, 77, 148, 251, 98, 248, 79, 77, 148, 251, 98, 232, 240, + 77, 148, 251, 98, 205, 58, 77, 148, 251, 98, 199, 1, 77, 148, 251, 98, + 232, 123, 77, 148, 251, 98, 229, 222, 77, 148, 251, 98, 234, 210, 77, + 148, 251, 98, 217, 93, 77, 248, 90, 1, 248, 12, 248, 90, 1, 191, 30, 248, + 90, 1, 222, 246, 248, 90, 1, 230, 181, 248, 90, 1, 234, 190, 248, 90, 1, + 234, 87, 248, 90, 1, 211, 89, 248, 90, 1, 211, 93, 248, 90, 1, 223, 79, + 248, 90, 1, 251, 100, 248, 90, 1, 223, 130, 248, 90, 1, 196, 83, 248, 90, + 1, 223, 182, 248, 90, 1, 214, 50, 248, 90, 1, 251, 231, 248, 90, 1, 250, + 160, 248, 90, 1, 251, 151, 248, 90, 1, 211, 115, 248, 90, 1, 211, 96, + 248, 90, 1, 223, 127, 248, 90, 53, 1, 210, 238, 248, 90, 53, 1, 200, 43, + 248, 90, 53, 1, 222, 154, 248, 90, 53, 1, 230, 118, 248, 90, 1, 231, 94, + 248, 90, 1, 219, 162, 248, 90, 1, 190, 231, 248, 90, 53, 1, 232, 53, 248, + 90, 1, 230, 138, 248, 90, 1, 220, 182, 248, 90, 1, 211, 153, 248, 90, 1, + 251, 247, 12, 201, 29, 200, 43, 12, 201, 29, 193, 98, 12, 201, 29, 192, + 209, 12, 201, 29, 247, 208, 12, 201, 29, 200, 151, 12, 201, 29, 228, 80, + 12, 201, 29, 228, 84, 12, 201, 29, 228, 171, 12, 201, 29, 228, 81, 12, + 201, 29, 200, 46, 12, 201, 29, 228, 83, 12, 201, 29, 228, 79, 12, 201, + 29, 228, 169, 12, 201, 29, 228, 82, 12, 201, 29, 228, 78, 12, 201, 29, + 215, 63, 12, 201, 29, 230, 118, 12, 201, 29, 206, 9, 12, 201, 29, 210, + 238, 12, 201, 29, 201, 251, 12, 201, 29, 238, 129, 12, 201, 29, 228, 85, + 12, 201, 29, 229, 180, 12, 201, 29, 200, 55, 12, 201, 29, 200, 128, 12, + 201, 29, 201, 119, 12, 201, 29, 203, 174, 12, 201, 29, 210, 69, 12, 201, + 29, 208, 108, 12, 201, 29, 198, 99, 12, 201, 29, 200, 45, 12, 201, 29, + 200, 140, 12, 201, 29, 228, 96, 12, 201, 29, 228, 77, 12, 201, 29, 209, + 232, 12, 201, 29, 208, 106, 148, 237, 87, 246, 242, 200, 225, 72, 1, 2, + 220, 234, 72, 1, 2, 202, 223, 72, 1, 2, 201, 5, 72, 1, 2, 159, 72, 1, 2, + 212, 180, 72, 1, 2, 140, 72, 1, 2, 229, 160, 72, 1, 2, 228, 161, 72, 1, + 2, 229, 247, 72, 1, 2, 229, 25, 72, 1, 2, 215, 157, 72, 1, 2, 165, 72, 1, + 2, 207, 2, 72, 1, 2, 206, 69, 72, 1, 2, 207, 115, 72, 1, 2, 206, 163, + 127, 30, 221, 115, 127, 30, 213, 206, 127, 30, 198, 168, 127, 30, 206, + 240, 127, 30, 216, 79, 127, 30, 209, 171, 127, 30, 202, 161, 127, 30, + 223, 224, 127, 30, 243, 26, 127, 30, 243, 93, 127, 30, 221, 190, 127, 30, + 199, 7, 127, 30, 209, 211, 127, 30, 229, 144, 127, 30, 221, 116, 65, 127, + 30, 213, 207, 65, 127, 30, 198, 169, 65, 127, 30, 206, 241, 65, 127, 30, + 216, 80, 65, 127, 30, 209, 172, 65, 127, 30, 202, 162, 65, 127, 30, 223, + 225, 65, 127, 30, 243, 27, 65, 127, 30, 243, 94, 65, 127, 30, 221, 191, + 65, 127, 30, 199, 8, 65, 127, 30, 209, 212, 65, 127, 30, 229, 145, 65, + 127, 30, 243, 27, 66, 127, 221, 34, 246, 242, 211, 131, 127, 221, 34, + 246, 242, 187, 228, 161, 127, 228, 16, 107, 127, 228, 16, 109, 127, 228, + 16, 138, 127, 228, 16, 134, 127, 228, 16, 150, 127, 228, 16, 169, 127, + 228, 16, 175, 127, 228, 16, 171, 127, 228, 16, 178, 127, 228, 16, 199, + 95, 127, 228, 16, 215, 207, 127, 228, 16, 232, 245, 127, 228, 16, 193, + 143, 127, 228, 16, 193, 28, 127, 228, 16, 216, 167, 127, 228, 16, 234, + 209, 127, 228, 16, 200, 198, 127, 228, 16, 201, 67, 127, 228, 16, 230, 1, + 127, 228, 16, 202, 36, 127, 228, 16, 214, 229, 127, 228, 16, 201, 232, + 127, 228, 16, 233, 0, 127, 228, 16, 239, 52, 127, 228, 16, 220, 116, 127, + 228, 16, 207, 43, 127, 228, 16, 247, 140, 127, 228, 16, 201, 11, 127, + 228, 16, 200, 178, 127, 228, 16, 234, 77, 127, 228, 16, 207, 33, 127, + 228, 16, 251, 170, 127, 228, 16, 233, 33, 127, 228, 16, 207, 31, 127, + 228, 16, 204, 33, 127, 228, 16, 207, 110, 47, 228, 16, 208, 14, 47, 228, + 16, 221, 142, 47, 228, 16, 205, 90, 47, 228, 16, 221, 29, 47, 31, 199, + 96, 211, 107, 62, 201, 191, 47, 31, 197, 33, 211, 107, 62, 201, 191, 47, + 31, 198, 250, 211, 107, 62, 201, 191, 47, 31, 232, 138, 211, 107, 62, + 201, 191, 47, 31, 233, 18, 211, 107, 62, 201, 191, 47, 31, 202, 122, 211, + 107, 62, 201, 191, 47, 31, 203, 243, 211, 107, 62, 201, 191, 47, 31, 234, + 156, 211, 107, 62, 201, 191, 210, 105, 56, 47, 31, 197, 33, 107, 47, 31, + 197, 33, 109, 47, 31, 197, 33, 138, 47, 31, 197, 33, 134, 47, 31, 197, + 33, 150, 47, 31, 197, 33, 169, 47, 31, 197, 33, 175, 47, 31, 197, 33, + 171, 47, 31, 197, 33, 178, 47, 31, 198, 249, 47, 31, 198, 250, 107, 47, + 31, 198, 250, 109, 47, 31, 198, 250, 138, 47, 31, 198, 250, 134, 47, 31, + 198, 250, 150, 47, 30, 221, 115, 47, 30, 213, 206, 47, 30, 198, 168, 47, + 30, 206, 240, 47, 30, 216, 79, 47, 30, 209, 171, 47, 30, 202, 161, 47, + 30, 223, 224, 47, 30, 243, 26, 47, 30, 243, 93, 47, 30, 221, 190, 47, 30, + 199, 7, 47, 30, 209, 211, 47, 30, 229, 144, 47, 30, 221, 116, 65, 47, 30, + 213, 207, 65, 47, 30, 198, 169, 65, 47, 30, 206, 241, 65, 47, 30, 216, + 80, 65, 47, 30, 209, 172, 65, 47, 30, 202, 162, 65, 47, 30, 223, 225, 65, + 47, 30, 243, 27, 65, 47, 30, 243, 94, 65, 47, 30, 221, 191, 65, 47, 30, + 199, 8, 65, 47, 30, 209, 212, 65, 47, 30, 229, 145, 65, 47, 221, 34, 246, + 242, 246, 249, 47, 221, 34, 246, 242, 222, 180, 47, 30, 223, 225, 66, + 221, 34, 201, 107, 113, 47, 228, 16, 107, 47, 228, 16, 109, 47, 228, 16, + 138, 47, 228, 16, 134, 47, 228, 16, 150, 47, 228, 16, 169, 47, 228, 16, + 175, 47, 228, 16, 171, 47, 228, 16, 178, 47, 228, 16, 199, 95, 47, 228, + 16, 215, 207, 47, 228, 16, 232, 245, 47, 228, 16, 193, 143, 47, 228, 16, + 193, 28, 47, 228, 16, 216, 167, 47, 228, 16, 234, 209, 47, 228, 16, 200, + 198, 47, 228, 16, 201, 67, 47, 228, 16, 230, 1, 47, 228, 16, 202, 36, 47, + 228, 16, 214, 229, 47, 228, 16, 201, 232, 47, 228, 16, 233, 0, 47, 228, + 16, 239, 52, 47, 228, 16, 220, 116, 47, 228, 16, 205, 56, 47, 228, 16, + 217, 98, 47, 228, 16, 233, 43, 47, 228, 16, 200, 210, 47, 228, 16, 233, + 222, 47, 228, 16, 208, 213, 47, 228, 16, 250, 169, 47, 228, 16, 223, 54, + 47, 228, 16, 207, 31, 47, 228, 16, 239, 10, 47, 228, 16, 238, 253, 47, + 228, 16, 229, 137, 47, 228, 16, 247, 23, 47, 228, 16, 218, 243, 47, 228, + 16, 219, 226, 47, 228, 16, 179, 47, 228, 16, 216, 217, 47, 228, 16, 207, + 61, 47, 228, 16, 201, 11, 47, 228, 16, 200, 178, 47, 228, 16, 234, 77, + 47, 228, 16, 207, 33, 47, 228, 16, 251, 170, 47, 228, 16, 213, 192, 47, 31, 198, 250, 169, 47, 31, 198, 250, 175, 47, 31, 198, 250, 171, 47, 31, - 198, 250, 178, 47, 31, 232, 135, 47, 31, 232, 136, 107, 47, 31, 232, 136, - 109, 47, 31, 232, 136, 138, 47, 31, 232, 136, 134, 47, 31, 232, 136, 149, - 47, 31, 232, 136, 169, 47, 31, 232, 136, 175, 47, 31, 232, 136, 171, 47, - 31, 232, 136, 178, 47, 31, 233, 15, 154, 199, 109, 16, 40, 223, 21, 154, - 199, 109, 16, 40, 233, 53, 154, 199, 109, 16, 40, 217, 58, 154, 199, 109, - 16, 40, 251, 39, 154, 199, 109, 16, 40, 217, 21, 154, 199, 109, 16, 40, - 222, 175, 154, 199, 109, 16, 40, 222, 176, 154, 199, 109, 16, 40, 250, - 159, 154, 199, 109, 16, 40, 204, 9, 154, 199, 109, 16, 40, 211, 157, 154, - 199, 109, 16, 40, 212, 255, 154, 199, 109, 16, 40, 237, 140, 51, 229, - 178, 51, 234, 30, 51, 233, 230, 219, 118, 219, 145, 56, 47, 72, 65, 47, + 198, 250, 178, 47, 31, 232, 137, 47, 31, 232, 138, 107, 47, 31, 232, 138, + 109, 47, 31, 232, 138, 138, 47, 31, 232, 138, 134, 47, 31, 232, 138, 150, + 47, 31, 232, 138, 169, 47, 31, 232, 138, 175, 47, 31, 232, 138, 171, 47, + 31, 232, 138, 178, 47, 31, 233, 17, 148, 199, 109, 16, 40, 223, 23, 148, + 199, 109, 16, 40, 233, 55, 148, 199, 109, 16, 40, 217, 60, 148, 199, 109, + 16, 40, 251, 41, 148, 199, 109, 16, 40, 217, 23, 148, 199, 109, 16, 40, + 222, 177, 148, 199, 109, 16, 40, 222, 178, 148, 199, 109, 16, 40, 250, + 161, 148, 199, 109, 16, 40, 204, 10, 148, 199, 109, 16, 40, 211, 159, + 148, 199, 109, 16, 40, 213, 1, 148, 199, 109, 16, 40, 237, 142, 51, 229, + 180, 51, 234, 32, 51, 233, 232, 219, 120, 219, 147, 56, 47, 72, 65, 47, 72, 68, 47, 72, 66, 47, 72, 71, 47, 72, 74, 47, 72, 155, 47, 72, 221, - 166, 47, 72, 220, 232, 47, 72, 222, 22, 47, 72, 221, 67, 47, 72, 188, 47, - 72, 202, 222, 47, 72, 201, 4, 47, 72, 205, 68, 47, 72, 202, 46, 47, 72, + 168, 47, 72, 220, 234, 47, 72, 222, 24, 47, 72, 221, 69, 47, 72, 188, 47, + 72, 202, 223, 47, 72, 201, 5, 47, 72, 205, 69, 47, 72, 202, 47, 47, 72, 190, 190, 47, 72, 198, 193, 47, 72, 197, 94, 47, 72, 199, 145, 47, 72, - 159, 47, 72, 180, 47, 72, 213, 219, 47, 72, 212, 178, 47, 72, 214, 121, - 47, 72, 213, 43, 47, 72, 140, 47, 72, 229, 158, 47, 72, 228, 159, 47, 72, - 229, 245, 47, 72, 229, 23, 47, 72, 174, 47, 72, 216, 100, 47, 72, 215, - 155, 47, 72, 216, 232, 47, 72, 216, 12, 47, 72, 170, 47, 72, 191, 225, - 47, 72, 192, 12, 47, 72, 165, 47, 72, 207, 1, 47, 72, 206, 68, 47, 72, - 207, 113, 47, 72, 206, 162, 47, 72, 193, 190, 47, 72, 193, 86, 47, 72, - 193, 125, 47, 72, 193, 48, 51, 234, 33, 214, 228, 207, 68, 51, 251, 64, - 51, 250, 221, 51, 251, 92, 51, 252, 163, 51, 223, 130, 51, 223, 97, 51, - 196, 80, 51, 234, 2, 51, 234, 185, 51, 211, 90, 51, 211, 83, 51, 222, - 100, 51, 222, 63, 51, 222, 58, 51, 231, 195, 51, 231, 205, 51, 231, 41, - 51, 231, 35, 51, 220, 144, 51, 231, 26, 51, 221, 131, 51, 221, 130, 51, - 221, 129, 51, 221, 128, 51, 230, 146, 51, 230, 145, 51, 220, 193, 51, - 220, 196, 51, 222, 9, 51, 221, 29, 51, 221, 38, 51, 205, 180, 51, 205, - 133, 51, 202, 141, 51, 204, 15, 51, 204, 14, 51, 238, 28, 51, 237, 81, - 51, 236, 141, 51, 198, 81, 51, 214, 221, 51, 213, 0, 51, 230, 75, 51, - 210, 214, 51, 210, 213, 51, 249, 150, 51, 209, 181, 51, 209, 143, 51, - 209, 144, 51, 248, 156, 51, 228, 154, 51, 228, 148, 51, 247, 221, 51, - 228, 132, 51, 229, 206, 51, 209, 241, 51, 210, 29, 51, 229, 187, 51, 210, - 25, 51, 210, 43, 51, 248, 252, 51, 209, 57, 51, 248, 84, 51, 228, 255, - 51, 209, 38, 51, 228, 246, 51, 228, 248, 51, 217, 110, 51, 217, 106, 51, - 217, 115, 51, 217, 44, 51, 217, 76, 51, 216, 56, 51, 216, 29, 51, 216, - 28, 51, 216, 203, 51, 216, 200, 51, 216, 204, 51, 192, 139, 51, 192, 137, - 51, 191, 210, 51, 206, 178, 51, 206, 182, 51, 206, 35, 51, 206, 28, 51, - 207, 57, 51, 207, 54, 51, 193, 141, 154, 199, 109, 16, 40, 228, 177, 191, - 77, 154, 199, 109, 16, 40, 228, 177, 107, 154, 199, 109, 16, 40, 228, - 177, 109, 154, 199, 109, 16, 40, 228, 177, 138, 154, 199, 109, 16, 40, - 228, 177, 134, 154, 199, 109, 16, 40, 228, 177, 149, 154, 199, 109, 16, - 40, 228, 177, 169, 154, 199, 109, 16, 40, 228, 177, 175, 154, 199, 109, - 16, 40, 228, 177, 171, 154, 199, 109, 16, 40, 228, 177, 178, 154, 199, - 109, 16, 40, 228, 177, 199, 95, 154, 199, 109, 16, 40, 228, 177, 234, - 127, 154, 199, 109, 16, 40, 228, 177, 197, 37, 154, 199, 109, 16, 40, - 228, 177, 198, 251, 154, 199, 109, 16, 40, 228, 177, 232, 122, 154, 199, - 109, 16, 40, 228, 177, 233, 19, 154, 199, 109, 16, 40, 228, 177, 202, - 130, 154, 199, 109, 16, 40, 228, 177, 203, 244, 154, 199, 109, 16, 40, - 228, 177, 234, 161, 154, 199, 109, 16, 40, 228, 177, 213, 171, 154, 199, - 109, 16, 40, 228, 177, 197, 32, 154, 199, 109, 16, 40, 228, 177, 197, 25, - 154, 199, 109, 16, 40, 228, 177, 197, 20, 154, 199, 109, 16, 40, 228, - 177, 197, 22, 154, 199, 109, 16, 40, 228, 177, 197, 27, 51, 228, 168, 51, - 238, 32, 51, 250, 163, 51, 164, 51, 211, 9, 51, 210, 68, 51, 236, 177, - 51, 236, 178, 201, 189, 51, 236, 178, 238, 189, 51, 223, 49, 51, 234, 33, - 214, 228, 229, 207, 51, 234, 33, 214, 228, 200, 66, 51, 234, 33, 214, - 228, 199, 212, 51, 234, 33, 214, 228, 216, 199, 51, 238, 253, 51, 210, - 221, 251, 135, 51, 180, 51, 215, 156, 65, 51, 174, 51, 155, 51, 222, 25, - 51, 217, 16, 51, 231, 183, 51, 247, 144, 51, 222, 24, 51, 209, 231, 51, - 214, 72, 51, 215, 156, 233, 175, 51, 215, 156, 232, 51, 51, 216, 141, 51, - 221, 217, 51, 228, 83, 51, 221, 168, 51, 216, 102, 51, 231, 55, 51, 198, - 195, 51, 215, 156, 172, 51, 216, 20, 51, 236, 187, 51, 221, 95, 51, 232, - 177, 51, 213, 81, 51, 215, 156, 218, 168, 51, 216, 17, 51, 242, 199, 51, - 221, 81, 51, 216, 18, 201, 189, 51, 242, 200, 201, 189, 51, 218, 169, - 201, 189, 51, 221, 82, 201, 189, 51, 216, 18, 238, 189, 51, 242, 200, - 238, 189, 51, 218, 169, 238, 189, 51, 221, 82, 238, 189, 51, 218, 169, - 139, 206, 8, 51, 218, 169, 139, 206, 9, 201, 189, 51, 168, 51, 221, 21, - 51, 215, 166, 51, 230, 229, 51, 207, 168, 51, 207, 169, 139, 206, 8, 51, - 207, 169, 139, 206, 9, 201, 189, 51, 208, 178, 51, 212, 219, 51, 215, - 156, 206, 8, 51, 215, 158, 51, 208, 124, 51, 212, 112, 51, 215, 156, 196, - 12, 51, 215, 87, 51, 220, 182, 51, 215, 88, 216, 203, 51, 208, 123, 51, - 212, 111, 51, 215, 156, 193, 224, 51, 215, 81, 51, 220, 180, 51, 215, 82, - 216, 203, 51, 222, 153, 211, 134, 51, 218, 169, 211, 134, 51, 251, 149, - 51, 248, 57, 51, 247, 66, 51, 247, 43, 51, 247, 194, 139, 221, 217, 51, - 242, 99, 51, 237, 200, 51, 230, 129, 51, 140, 51, 228, 169, 51, 223, 162, - 51, 221, 102, 51, 221, 82, 247, 110, 51, 220, 234, 51, 219, 46, 51, 219, - 45, 51, 219, 30, 51, 218, 184, 51, 217, 17, 202, 70, 51, 216, 55, 51, - 215, 233, 51, 209, 229, 51, 209, 76, 51, 208, 249, 51, 208, 247, 51, 201, - 180, 51, 200, 158, 51, 193, 127, 51, 196, 13, 139, 218, 168, 51, 42, 139, - 218, 168, 154, 199, 109, 16, 40, 237, 204, 107, 154, 199, 109, 16, 40, - 237, 204, 109, 154, 199, 109, 16, 40, 237, 204, 138, 154, 199, 109, 16, - 40, 237, 204, 134, 154, 199, 109, 16, 40, 237, 204, 149, 154, 199, 109, - 16, 40, 237, 204, 169, 154, 199, 109, 16, 40, 237, 204, 175, 154, 199, - 109, 16, 40, 237, 204, 171, 154, 199, 109, 16, 40, 237, 204, 178, 154, - 199, 109, 16, 40, 237, 204, 199, 95, 154, 199, 109, 16, 40, 237, 204, - 234, 127, 154, 199, 109, 16, 40, 237, 204, 197, 37, 154, 199, 109, 16, - 40, 237, 204, 198, 251, 154, 199, 109, 16, 40, 237, 204, 232, 122, 154, - 199, 109, 16, 40, 237, 204, 233, 19, 154, 199, 109, 16, 40, 237, 204, - 202, 130, 154, 199, 109, 16, 40, 237, 204, 203, 244, 154, 199, 109, 16, - 40, 237, 204, 234, 161, 154, 199, 109, 16, 40, 237, 204, 213, 171, 154, - 199, 109, 16, 40, 237, 204, 197, 32, 154, 199, 109, 16, 40, 237, 204, - 197, 25, 154, 199, 109, 16, 40, 237, 204, 197, 20, 154, 199, 109, 16, 40, - 237, 204, 197, 22, 154, 199, 109, 16, 40, 237, 204, 197, 27, 154, 199, - 109, 16, 40, 237, 204, 197, 28, 154, 199, 109, 16, 40, 237, 204, 197, 23, - 154, 199, 109, 16, 40, 237, 204, 197, 24, 154, 199, 109, 16, 40, 237, - 204, 197, 31, 154, 199, 109, 16, 40, 237, 204, 197, 26, 154, 199, 109, - 16, 40, 237, 204, 198, 249, 154, 199, 109, 16, 40, 237, 204, 198, 247, - 51, 231, 222, 229, 181, 40, 199, 34, 238, 231, 229, 219, 229, 181, 40, - 199, 34, 207, 100, 234, 207, 229, 181, 40, 237, 14, 250, 183, 199, 34, - 248, 247, 229, 181, 40, 191, 238, 232, 168, 229, 181, 40, 193, 171, 229, - 181, 40, 239, 53, 229, 181, 40, 199, 34, 250, 246, 229, 181, 40, 229, 6, - 198, 87, 229, 181, 40, 2, 199, 194, 229, 181, 40, 198, 1, 229, 181, 40, - 210, 60, 229, 181, 40, 201, 104, 229, 181, 40, 233, 43, 229, 181, 40, - 230, 206, 209, 21, 229, 181, 40, 215, 254, 229, 181, 40, 234, 74, 229, - 181, 40, 232, 169, 229, 181, 40, 193, 21, 211, 105, 199, 34, 237, 141, - 229, 181, 40, 251, 43, 229, 181, 40, 239, 31, 229, 181, 40, 248, 145, - 198, 215, 229, 181, 40, 230, 227, 229, 181, 40, 201, 208, 251, 63, 229, - 181, 40, 207, 22, 229, 181, 40, 223, 124, 229, 181, 40, 230, 206, 199, - 194, 229, 181, 40, 215, 180, 239, 0, 229, 181, 40, 230, 206, 208, 224, - 229, 181, 40, 199, 34, 252, 65, 193, 143, 229, 181, 40, 199, 34, 242, - 227, 232, 243, 229, 181, 40, 223, 138, 229, 181, 40, 235, 64, 229, 181, - 40, 207, 25, 229, 181, 40, 230, 206, 208, 254, 229, 181, 40, 208, 197, - 229, 181, 40, 237, 220, 79, 199, 34, 219, 132, 229, 181, 40, 199, 34, - 233, 81, 229, 181, 40, 211, 62, 229, 181, 40, 211, 167, 229, 181, 40, - 237, 111, 229, 181, 40, 237, 133, 229, 181, 40, 223, 153, 229, 181, 40, - 248, 41, 229, 181, 40, 242, 76, 119, 216, 206, 229, 181, 40, 231, 190, - 198, 87, 229, 181, 40, 208, 135, 196, 67, 229, 181, 40, 211, 61, 229, - 181, 40, 199, 34, 193, 109, 229, 181, 40, 207, 13, 229, 181, 40, 199, 34, - 247, 72, 229, 181, 40, 199, 34, 250, 242, 198, 209, 229, 181, 40, 199, - 34, 222, 10, 201, 70, 215, 184, 229, 181, 40, 237, 76, 229, 181, 40, 199, - 34, 217, 47, 217, 111, 229, 181, 40, 252, 66, 229, 181, 40, 199, 34, 193, - 161, 229, 181, 40, 199, 34, 231, 145, 193, 66, 229, 181, 40, 199, 34, - 222, 184, 220, 43, 229, 181, 40, 236, 219, 229, 181, 40, 219, 119, 229, - 181, 40, 223, 127, 197, 176, 229, 181, 40, 2, 208, 224, 229, 181, 40, - 251, 254, 242, 66, 229, 181, 40, 248, 250, 242, 66, 11, 5, 223, 53, 11, - 5, 223, 45, 11, 5, 68, 11, 5, 223, 80, 11, 5, 223, 224, 11, 5, 223, 207, - 11, 5, 223, 226, 11, 5, 223, 225, 11, 5, 250, 182, 11, 5, 250, 133, 11, - 5, 65, 11, 5, 251, 65, 11, 5, 196, 78, 11, 5, 196, 82, 11, 5, 196, 79, - 11, 5, 211, 30, 11, 5, 210, 247, 11, 5, 74, 11, 5, 211, 78, 11, 5, 233, - 221, 11, 5, 71, 11, 5, 193, 0, 11, 5, 248, 148, 11, 5, 248, 143, 11, 5, - 248, 188, 11, 5, 248, 161, 11, 5, 248, 177, 11, 5, 248, 176, 11, 5, 248, - 179, 11, 5, 248, 178, 11, 5, 249, 64, 11, 5, 249, 56, 11, 5, 249, 153, - 11, 5, 249, 89, 11, 5, 247, 234, 11, 5, 247, 238, 11, 5, 247, 235, 11, 5, - 248, 81, 11, 5, 248, 62, 11, 5, 248, 111, 11, 5, 248, 89, 11, 5, 248, - 206, 11, 5, 249, 17, 11, 5, 248, 219, 11, 5, 247, 217, 11, 5, 247, 211, - 11, 5, 248, 10, 11, 5, 247, 232, 11, 5, 247, 225, 11, 5, 247, 230, 11, 5, - 247, 199, 11, 5, 247, 197, 11, 5, 247, 204, 11, 5, 247, 202, 11, 5, 247, - 200, 11, 5, 247, 201, 11, 5, 209, 117, 11, 5, 209, 113, 11, 5, 209, 185, - 11, 5, 209, 129, 11, 5, 209, 149, 11, 5, 209, 176, 11, 5, 209, 172, 11, - 5, 210, 89, 11, 5, 210, 73, 11, 5, 168, 11, 5, 210, 137, 11, 5, 208, 145, - 11, 5, 208, 147, 11, 5, 208, 146, 11, 5, 209, 14, 11, 5, 208, 252, 11, 5, - 209, 73, 11, 5, 209, 33, 11, 5, 208, 131, 11, 5, 208, 126, 11, 5, 208, - 165, 11, 5, 208, 144, 11, 5, 208, 136, 11, 5, 208, 142, 11, 5, 208, 108, - 11, 5, 208, 107, 11, 5, 208, 112, 11, 5, 208, 111, 11, 5, 208, 109, 11, - 5, 208, 110, 11, 5, 249, 38, 11, 5, 249, 37, 11, 5, 249, 44, 11, 5, 249, - 39, 11, 5, 249, 41, 11, 5, 249, 40, 11, 5, 249, 43, 11, 5, 249, 42, 11, - 5, 249, 50, 11, 5, 249, 49, 11, 5, 249, 53, 11, 5, 249, 51, 11, 5, 249, - 29, 11, 5, 249, 31, 11, 5, 249, 30, 11, 5, 249, 34, 11, 5, 249, 33, 11, - 5, 249, 36, 11, 5, 249, 35, 11, 5, 249, 45, 11, 5, 249, 48, 11, 5, 249, - 46, 11, 5, 249, 25, 11, 5, 249, 24, 11, 5, 249, 32, 11, 5, 249, 28, 11, - 5, 249, 26, 11, 5, 249, 27, 11, 5, 249, 21, 11, 5, 249, 20, 11, 5, 249, - 23, 11, 5, 249, 22, 11, 5, 214, 185, 11, 5, 214, 184, 11, 5, 214, 190, - 11, 5, 214, 186, 11, 5, 214, 187, 11, 5, 214, 189, 11, 5, 214, 188, 11, - 5, 214, 193, 11, 5, 214, 192, 11, 5, 214, 195, 11, 5, 214, 194, 11, 5, - 214, 181, 11, 5, 214, 180, 11, 5, 214, 183, 11, 5, 214, 182, 11, 5, 214, - 174, 11, 5, 214, 173, 11, 5, 214, 178, 11, 5, 214, 177, 11, 5, 214, 175, - 11, 5, 214, 176, 11, 5, 214, 168, 11, 5, 214, 167, 11, 5, 214, 172, 11, - 5, 214, 171, 11, 5, 214, 169, 11, 5, 214, 170, 11, 5, 229, 67, 11, 5, - 229, 66, 11, 5, 229, 72, 11, 5, 229, 68, 11, 5, 229, 69, 11, 5, 229, 71, - 11, 5, 229, 70, 11, 5, 229, 75, 11, 5, 229, 74, 11, 5, 229, 77, 11, 5, - 229, 76, 11, 5, 229, 58, 11, 5, 229, 60, 11, 5, 229, 59, 11, 5, 229, 63, - 11, 5, 229, 62, 11, 5, 229, 65, 11, 5, 229, 64, 11, 5, 229, 54, 11, 5, - 229, 53, 11, 5, 229, 61, 11, 5, 229, 57, 11, 5, 229, 55, 11, 5, 229, 56, - 11, 5, 229, 48, 11, 5, 229, 52, 11, 5, 229, 51, 11, 5, 229, 49, 11, 5, - 229, 50, 11, 5, 216, 23, 11, 5, 216, 22, 11, 5, 216, 100, 11, 5, 216, 31, - 11, 5, 216, 63, 11, 5, 216, 81, 11, 5, 216, 79, 11, 5, 217, 30, 11, 5, - 217, 24, 11, 5, 174, 11, 5, 217, 71, 11, 5, 215, 115, 11, 5, 215, 114, - 11, 5, 215, 118, 11, 5, 215, 116, 11, 5, 215, 195, 11, 5, 215, 168, 11, - 5, 216, 12, 11, 5, 215, 202, 11, 5, 216, 152, 11, 5, 216, 232, 11, 5, - 215, 95, 11, 5, 215, 89, 11, 5, 215, 155, 11, 5, 215, 111, 11, 5, 215, - 104, 11, 5, 215, 109, 11, 5, 215, 65, 11, 5, 215, 64, 11, 5, 215, 70, 11, - 5, 215, 67, 11, 5, 232, 229, 11, 5, 232, 222, 11, 5, 233, 23, 11, 5, 232, - 245, 11, 5, 233, 72, 11, 5, 233, 63, 11, 5, 233, 109, 11, 5, 233, 77, 11, - 5, 232, 119, 11, 5, 232, 175, 11, 5, 232, 154, 11, 5, 232, 68, 11, 5, - 232, 67, 11, 5, 232, 86, 11, 5, 232, 73, 11, 5, 232, 71, 11, 5, 232, 72, - 11, 5, 232, 54, 11, 5, 232, 53, 11, 5, 232, 57, 11, 5, 232, 55, 11, 5, + 159, 47, 72, 181, 47, 72, 213, 221, 47, 72, 212, 180, 47, 72, 214, 123, + 47, 72, 213, 45, 47, 72, 140, 47, 72, 229, 160, 47, 72, 228, 161, 47, 72, + 229, 247, 47, 72, 229, 25, 47, 72, 174, 47, 72, 216, 102, 47, 72, 215, + 157, 47, 72, 216, 234, 47, 72, 216, 14, 47, 72, 170, 47, 72, 191, 225, + 47, 72, 192, 12, 47, 72, 165, 47, 72, 207, 2, 47, 72, 206, 69, 47, 72, + 207, 115, 47, 72, 206, 163, 47, 72, 193, 190, 47, 72, 193, 86, 47, 72, + 193, 125, 47, 72, 193, 48, 51, 234, 35, 214, 230, 207, 69, 51, 251, 66, + 51, 250, 223, 51, 251, 94, 51, 252, 165, 51, 223, 132, 51, 223, 99, 51, + 196, 80, 51, 234, 4, 51, 234, 187, 51, 211, 92, 51, 211, 85, 51, 222, + 102, 51, 222, 65, 51, 222, 60, 51, 231, 197, 51, 231, 207, 51, 231, 43, + 51, 231, 37, 51, 220, 146, 51, 231, 28, 51, 221, 133, 51, 221, 132, 51, + 221, 131, 51, 221, 130, 51, 230, 148, 51, 230, 147, 51, 220, 195, 51, + 220, 198, 51, 222, 11, 51, 221, 31, 51, 221, 40, 51, 205, 181, 51, 205, + 134, 51, 202, 142, 51, 204, 16, 51, 204, 15, 51, 238, 30, 51, 237, 83, + 51, 236, 143, 51, 198, 81, 51, 214, 223, 51, 213, 2, 51, 230, 77, 51, + 210, 216, 51, 210, 215, 51, 249, 152, 51, 209, 183, 51, 209, 145, 51, + 209, 146, 51, 248, 158, 51, 228, 156, 51, 228, 150, 51, 247, 223, 51, + 228, 134, 51, 229, 208, 51, 209, 243, 51, 210, 31, 51, 229, 189, 51, 210, + 27, 51, 210, 45, 51, 248, 254, 51, 209, 59, 51, 248, 86, 51, 229, 1, 51, + 209, 40, 51, 228, 248, 51, 228, 250, 51, 217, 112, 51, 217, 108, 51, 217, + 117, 51, 217, 46, 51, 217, 78, 51, 216, 58, 51, 216, 31, 51, 216, 30, 51, + 216, 205, 51, 216, 202, 51, 216, 206, 51, 192, 139, 51, 192, 137, 51, + 191, 210, 51, 206, 179, 51, 206, 183, 51, 206, 36, 51, 206, 29, 51, 207, + 58, 51, 207, 55, 51, 193, 141, 148, 199, 109, 16, 40, 228, 179, 191, 77, + 148, 199, 109, 16, 40, 228, 179, 107, 148, 199, 109, 16, 40, 228, 179, + 109, 148, 199, 109, 16, 40, 228, 179, 138, 148, 199, 109, 16, 40, 228, + 179, 134, 148, 199, 109, 16, 40, 228, 179, 150, 148, 199, 109, 16, 40, + 228, 179, 169, 148, 199, 109, 16, 40, 228, 179, 175, 148, 199, 109, 16, + 40, 228, 179, 171, 148, 199, 109, 16, 40, 228, 179, 178, 148, 199, 109, + 16, 40, 228, 179, 199, 95, 148, 199, 109, 16, 40, 228, 179, 234, 129, + 148, 199, 109, 16, 40, 228, 179, 197, 37, 148, 199, 109, 16, 40, 228, + 179, 198, 251, 148, 199, 109, 16, 40, 228, 179, 232, 124, 148, 199, 109, + 16, 40, 228, 179, 233, 21, 148, 199, 109, 16, 40, 228, 179, 202, 131, + 148, 199, 109, 16, 40, 228, 179, 203, 245, 148, 199, 109, 16, 40, 228, + 179, 234, 163, 148, 199, 109, 16, 40, 228, 179, 213, 173, 148, 199, 109, + 16, 40, 228, 179, 197, 32, 148, 199, 109, 16, 40, 228, 179, 197, 25, 148, + 199, 109, 16, 40, 228, 179, 197, 20, 148, 199, 109, 16, 40, 228, 179, + 197, 22, 148, 199, 109, 16, 40, 228, 179, 197, 27, 51, 228, 170, 51, 238, + 34, 51, 250, 165, 51, 164, 51, 211, 11, 51, 210, 70, 51, 236, 179, 51, + 236, 180, 201, 190, 51, 236, 180, 238, 191, 51, 223, 51, 51, 234, 35, + 214, 230, 229, 209, 51, 234, 35, 214, 230, 200, 66, 51, 234, 35, 214, + 230, 199, 212, 51, 234, 35, 214, 230, 216, 201, 51, 238, 255, 51, 210, + 223, 251, 137, 51, 181, 51, 215, 158, 65, 51, 174, 51, 155, 51, 222, 27, + 51, 217, 18, 51, 231, 185, 51, 247, 146, 51, 222, 26, 51, 209, 233, 51, + 214, 74, 51, 215, 158, 233, 177, 51, 215, 158, 232, 53, 51, 216, 143, 51, + 221, 219, 51, 228, 85, 51, 221, 170, 51, 216, 104, 51, 231, 57, 51, 198, + 195, 51, 215, 158, 172, 51, 216, 22, 51, 236, 189, 51, 221, 97, 51, 232, + 179, 51, 213, 83, 51, 215, 158, 218, 170, 51, 216, 19, 51, 242, 201, 51, + 221, 83, 51, 216, 20, 201, 190, 51, 242, 202, 201, 190, 51, 218, 171, + 201, 190, 51, 221, 84, 201, 190, 51, 216, 20, 238, 191, 51, 242, 202, + 238, 191, 51, 218, 171, 238, 191, 51, 221, 84, 238, 191, 51, 218, 171, + 139, 206, 9, 51, 218, 171, 139, 206, 10, 201, 190, 51, 168, 51, 221, 23, + 51, 215, 168, 51, 230, 231, 51, 207, 170, 51, 207, 171, 139, 206, 9, 51, + 207, 171, 139, 206, 10, 201, 190, 51, 208, 180, 51, 212, 221, 51, 215, + 158, 206, 9, 51, 215, 160, 51, 208, 126, 51, 212, 114, 51, 215, 158, 196, + 12, 51, 215, 89, 51, 220, 184, 51, 215, 90, 216, 205, 51, 208, 125, 51, + 212, 113, 51, 215, 158, 193, 224, 51, 215, 83, 51, 220, 182, 51, 215, 84, + 216, 205, 51, 222, 155, 211, 136, 51, 218, 171, 211, 136, 51, 251, 151, + 51, 248, 59, 51, 247, 68, 51, 247, 45, 51, 247, 196, 139, 221, 219, 51, + 242, 101, 51, 237, 202, 51, 230, 131, 51, 140, 51, 228, 171, 51, 223, + 164, 51, 221, 104, 51, 221, 84, 247, 112, 51, 220, 236, 51, 219, 48, 51, + 219, 47, 51, 219, 32, 51, 218, 186, 51, 217, 19, 202, 71, 51, 216, 57, + 51, 215, 235, 51, 209, 231, 51, 209, 78, 51, 208, 251, 51, 208, 249, 51, + 201, 181, 51, 200, 158, 51, 193, 127, 51, 196, 13, 139, 218, 170, 51, 42, + 139, 218, 170, 148, 199, 109, 16, 40, 237, 206, 107, 148, 199, 109, 16, + 40, 237, 206, 109, 148, 199, 109, 16, 40, 237, 206, 138, 148, 199, 109, + 16, 40, 237, 206, 134, 148, 199, 109, 16, 40, 237, 206, 150, 148, 199, + 109, 16, 40, 237, 206, 169, 148, 199, 109, 16, 40, 237, 206, 175, 148, + 199, 109, 16, 40, 237, 206, 171, 148, 199, 109, 16, 40, 237, 206, 178, + 148, 199, 109, 16, 40, 237, 206, 199, 95, 148, 199, 109, 16, 40, 237, + 206, 234, 129, 148, 199, 109, 16, 40, 237, 206, 197, 37, 148, 199, 109, + 16, 40, 237, 206, 198, 251, 148, 199, 109, 16, 40, 237, 206, 232, 124, + 148, 199, 109, 16, 40, 237, 206, 233, 21, 148, 199, 109, 16, 40, 237, + 206, 202, 131, 148, 199, 109, 16, 40, 237, 206, 203, 245, 148, 199, 109, + 16, 40, 237, 206, 234, 163, 148, 199, 109, 16, 40, 237, 206, 213, 173, + 148, 199, 109, 16, 40, 237, 206, 197, 32, 148, 199, 109, 16, 40, 237, + 206, 197, 25, 148, 199, 109, 16, 40, 237, 206, 197, 20, 148, 199, 109, + 16, 40, 237, 206, 197, 22, 148, 199, 109, 16, 40, 237, 206, 197, 27, 148, + 199, 109, 16, 40, 237, 206, 197, 28, 148, 199, 109, 16, 40, 237, 206, + 197, 23, 148, 199, 109, 16, 40, 237, 206, 197, 24, 148, 199, 109, 16, 40, + 237, 206, 197, 31, 148, 199, 109, 16, 40, 237, 206, 197, 26, 148, 199, + 109, 16, 40, 237, 206, 198, 249, 148, 199, 109, 16, 40, 237, 206, 198, + 247, 51, 231, 224, 229, 183, 40, 199, 34, 238, 233, 229, 221, 229, 183, + 40, 199, 34, 207, 102, 234, 209, 229, 183, 40, 237, 16, 250, 185, 199, + 34, 248, 249, 229, 183, 40, 191, 238, 232, 170, 229, 183, 40, 193, 171, + 229, 183, 40, 239, 55, 229, 183, 40, 199, 34, 250, 248, 229, 183, 40, + 229, 8, 198, 87, 229, 183, 40, 2, 199, 194, 229, 183, 40, 198, 1, 229, + 183, 40, 210, 62, 229, 183, 40, 201, 105, 229, 183, 40, 233, 45, 229, + 183, 40, 230, 208, 209, 23, 229, 183, 40, 216, 0, 229, 183, 40, 234, 76, + 229, 183, 40, 232, 171, 229, 183, 40, 193, 21, 211, 107, 199, 34, 237, + 143, 229, 183, 40, 251, 45, 229, 183, 40, 239, 33, 229, 183, 40, 248, + 147, 198, 215, 229, 183, 40, 230, 229, 229, 183, 40, 201, 209, 251, 65, + 229, 183, 40, 207, 23, 229, 183, 40, 223, 126, 229, 183, 40, 230, 208, + 199, 194, 229, 183, 40, 215, 182, 239, 2, 229, 183, 40, 230, 208, 208, + 226, 229, 183, 40, 199, 34, 252, 67, 193, 143, 229, 183, 40, 199, 34, + 242, 229, 232, 245, 229, 183, 40, 223, 140, 229, 183, 40, 235, 66, 229, + 183, 40, 207, 26, 229, 183, 40, 230, 208, 209, 0, 229, 183, 40, 208, 199, + 229, 183, 40, 237, 222, 79, 199, 34, 219, 134, 229, 183, 40, 199, 34, + 233, 83, 229, 183, 40, 211, 64, 229, 183, 40, 211, 169, 229, 183, 40, + 237, 113, 229, 183, 40, 237, 135, 229, 183, 40, 223, 155, 229, 183, 40, + 248, 43, 229, 183, 40, 242, 78, 119, 216, 208, 229, 183, 40, 231, 192, + 198, 87, 229, 183, 40, 208, 137, 196, 67, 229, 183, 40, 211, 63, 229, + 183, 40, 199, 34, 193, 109, 229, 183, 40, 207, 14, 229, 183, 40, 199, 34, + 247, 74, 229, 183, 40, 199, 34, 250, 244, 198, 209, 229, 183, 40, 199, + 34, 222, 12, 201, 71, 215, 186, 229, 183, 40, 237, 78, 229, 183, 40, 199, + 34, 217, 49, 217, 113, 229, 183, 40, 252, 68, 229, 183, 40, 199, 34, 193, + 161, 229, 183, 40, 199, 34, 231, 147, 193, 66, 229, 183, 40, 199, 34, + 222, 186, 220, 45, 229, 183, 40, 236, 221, 229, 183, 40, 219, 121, 229, + 183, 40, 223, 129, 197, 176, 229, 183, 40, 2, 208, 226, 229, 183, 40, + 252, 0, 242, 68, 229, 183, 40, 248, 252, 242, 68, 11, 5, 223, 55, 11, 5, + 223, 47, 11, 5, 68, 11, 5, 223, 82, 11, 5, 223, 226, 11, 5, 223, 209, 11, + 5, 223, 228, 11, 5, 223, 227, 11, 5, 250, 184, 11, 5, 250, 135, 11, 5, + 65, 11, 5, 251, 67, 11, 5, 196, 78, 11, 5, 196, 82, 11, 5, 196, 79, 11, + 5, 211, 32, 11, 5, 210, 249, 11, 5, 74, 11, 5, 211, 80, 11, 5, 233, 223, + 11, 5, 71, 11, 5, 193, 0, 11, 5, 248, 150, 11, 5, 248, 145, 11, 5, 248, + 190, 11, 5, 248, 163, 11, 5, 248, 179, 11, 5, 248, 178, 11, 5, 248, 181, + 11, 5, 248, 180, 11, 5, 249, 66, 11, 5, 249, 58, 11, 5, 249, 155, 11, 5, + 249, 91, 11, 5, 247, 236, 11, 5, 247, 240, 11, 5, 247, 237, 11, 5, 248, + 83, 11, 5, 248, 64, 11, 5, 248, 113, 11, 5, 248, 91, 11, 5, 248, 208, 11, + 5, 249, 19, 11, 5, 248, 221, 11, 5, 247, 219, 11, 5, 247, 213, 11, 5, + 248, 12, 11, 5, 247, 234, 11, 5, 247, 227, 11, 5, 247, 232, 11, 5, 247, + 201, 11, 5, 247, 199, 11, 5, 247, 206, 11, 5, 247, 204, 11, 5, 247, 202, + 11, 5, 247, 203, 11, 5, 209, 119, 11, 5, 209, 115, 11, 5, 209, 187, 11, + 5, 209, 131, 11, 5, 209, 151, 11, 5, 209, 178, 11, 5, 209, 174, 11, 5, + 210, 91, 11, 5, 210, 75, 11, 5, 168, 11, 5, 210, 139, 11, 5, 208, 147, + 11, 5, 208, 149, 11, 5, 208, 148, 11, 5, 209, 16, 11, 5, 208, 254, 11, 5, + 209, 75, 11, 5, 209, 35, 11, 5, 208, 133, 11, 5, 208, 128, 11, 5, 208, + 167, 11, 5, 208, 146, 11, 5, 208, 138, 11, 5, 208, 144, 11, 5, 208, 110, + 11, 5, 208, 109, 11, 5, 208, 114, 11, 5, 208, 113, 11, 5, 208, 111, 11, + 5, 208, 112, 11, 5, 249, 40, 11, 5, 249, 39, 11, 5, 249, 46, 11, 5, 249, + 41, 11, 5, 249, 43, 11, 5, 249, 42, 11, 5, 249, 45, 11, 5, 249, 44, 11, + 5, 249, 52, 11, 5, 249, 51, 11, 5, 249, 55, 11, 5, 249, 53, 11, 5, 249, + 31, 11, 5, 249, 33, 11, 5, 249, 32, 11, 5, 249, 36, 11, 5, 249, 35, 11, + 5, 249, 38, 11, 5, 249, 37, 11, 5, 249, 47, 11, 5, 249, 50, 11, 5, 249, + 48, 11, 5, 249, 27, 11, 5, 249, 26, 11, 5, 249, 34, 11, 5, 249, 30, 11, + 5, 249, 28, 11, 5, 249, 29, 11, 5, 249, 23, 11, 5, 249, 22, 11, 5, 249, + 25, 11, 5, 249, 24, 11, 5, 214, 187, 11, 5, 214, 186, 11, 5, 214, 192, + 11, 5, 214, 188, 11, 5, 214, 189, 11, 5, 214, 191, 11, 5, 214, 190, 11, + 5, 214, 195, 11, 5, 214, 194, 11, 5, 214, 197, 11, 5, 214, 196, 11, 5, + 214, 183, 11, 5, 214, 182, 11, 5, 214, 185, 11, 5, 214, 184, 11, 5, 214, + 176, 11, 5, 214, 175, 11, 5, 214, 180, 11, 5, 214, 179, 11, 5, 214, 177, + 11, 5, 214, 178, 11, 5, 214, 170, 11, 5, 214, 169, 11, 5, 214, 174, 11, + 5, 214, 173, 11, 5, 214, 171, 11, 5, 214, 172, 11, 5, 229, 69, 11, 5, + 229, 68, 11, 5, 229, 74, 11, 5, 229, 70, 11, 5, 229, 71, 11, 5, 229, 73, + 11, 5, 229, 72, 11, 5, 229, 77, 11, 5, 229, 76, 11, 5, 229, 79, 11, 5, + 229, 78, 11, 5, 229, 60, 11, 5, 229, 62, 11, 5, 229, 61, 11, 5, 229, 65, + 11, 5, 229, 64, 11, 5, 229, 67, 11, 5, 229, 66, 11, 5, 229, 56, 11, 5, + 229, 55, 11, 5, 229, 63, 11, 5, 229, 59, 11, 5, 229, 57, 11, 5, 229, 58, + 11, 5, 229, 50, 11, 5, 229, 54, 11, 5, 229, 53, 11, 5, 229, 51, 11, 5, + 229, 52, 11, 5, 216, 25, 11, 5, 216, 24, 11, 5, 216, 102, 11, 5, 216, 33, + 11, 5, 216, 65, 11, 5, 216, 83, 11, 5, 216, 81, 11, 5, 217, 32, 11, 5, + 217, 26, 11, 5, 174, 11, 5, 217, 73, 11, 5, 215, 117, 11, 5, 215, 116, + 11, 5, 215, 120, 11, 5, 215, 118, 11, 5, 215, 197, 11, 5, 215, 170, 11, + 5, 216, 14, 11, 5, 215, 204, 11, 5, 216, 154, 11, 5, 216, 234, 11, 5, + 215, 97, 11, 5, 215, 91, 11, 5, 215, 157, 11, 5, 215, 113, 11, 5, 215, + 106, 11, 5, 215, 111, 11, 5, 215, 67, 11, 5, 215, 66, 11, 5, 215, 72, 11, + 5, 215, 69, 11, 5, 232, 231, 11, 5, 232, 224, 11, 5, 233, 25, 11, 5, 232, + 247, 11, 5, 233, 74, 11, 5, 233, 65, 11, 5, 233, 111, 11, 5, 233, 79, 11, + 5, 232, 121, 11, 5, 232, 177, 11, 5, 232, 156, 11, 5, 232, 70, 11, 5, + 232, 69, 11, 5, 232, 88, 11, 5, 232, 75, 11, 5, 232, 73, 11, 5, 232, 74, + 11, 5, 232, 56, 11, 5, 232, 55, 11, 5, 232, 59, 11, 5, 232, 57, 11, 5, 195, 32, 11, 5, 195, 26, 11, 5, 195, 69, 11, 5, 195, 41, 11, 5, 195, 58, 11, 5, 195, 53, 11, 5, 195, 61, 11, 5, 195, 60, 11, 5, 195, 162, 11, 5, 195, 157, 11, 5, 195, 188, 11, 5, 195, 175, 11, 5, 195, 4, 11, 5, 195, 0, 11, 5, 195, 24, 11, 5, 195, 6, 11, 5, 195, 73, 11, 5, 195, 141, 11, 5, 193, 242, 11, 5, 193, 240, 11, 5, 193, 249, 11, 5, 193, 245, 11, 5, 193, 243, 11, 5, 193, 244, 11, 5, 193, 229, 11, 5, 193, 228, 11, 5, 193, 235, - 11, 5, 193, 234, 11, 5, 193, 232, 11, 5, 193, 233, 11, 5, 236, 212, 11, - 5, 236, 197, 11, 5, 237, 44, 11, 5, 236, 240, 11, 5, 237, 19, 11, 5, 237, - 24, 11, 5, 237, 23, 11, 5, 237, 211, 11, 5, 237, 205, 11, 5, 238, 32, 11, - 5, 237, 231, 11, 5, 235, 69, 11, 5, 235, 70, 11, 5, 236, 140, 11, 5, 235, - 117, 11, 5, 236, 174, 11, 5, 236, 143, 11, 5, 237, 74, 11, 5, 237, 146, - 11, 5, 237, 96, 11, 5, 235, 60, 11, 5, 235, 58, 11, 5, 235, 89, 11, 5, - 235, 68, 11, 5, 235, 63, 11, 5, 235, 66, 11, 5, 198, 125, 11, 5, 198, + 11, 5, 193, 234, 11, 5, 193, 232, 11, 5, 193, 233, 11, 5, 236, 214, 11, + 5, 236, 199, 11, 5, 237, 46, 11, 5, 236, 242, 11, 5, 237, 21, 11, 5, 237, + 26, 11, 5, 237, 25, 11, 5, 237, 213, 11, 5, 237, 207, 11, 5, 238, 34, 11, + 5, 237, 233, 11, 5, 235, 71, 11, 5, 235, 72, 11, 5, 236, 142, 11, 5, 235, + 119, 11, 5, 236, 176, 11, 5, 236, 145, 11, 5, 237, 76, 11, 5, 237, 148, + 11, 5, 237, 98, 11, 5, 235, 62, 11, 5, 235, 60, 11, 5, 235, 91, 11, 5, + 235, 70, 11, 5, 235, 65, 11, 5, 235, 68, 11, 5, 198, 125, 11, 5, 198, 117, 11, 5, 198, 193, 11, 5, 198, 135, 11, 5, 198, 176, 11, 5, 198, 178, 11, 5, 198, 177, 11, 5, 199, 171, 11, 5, 199, 156, 11, 5, 190, 190, 11, 5, 199, 183, 11, 5, 197, 69, 11, 5, 197, 68, 11, 5, 197, 71, 11, 5, 197, 70, 11, 5, 198, 40, 11, 5, 198, 29, 11, 5, 159, 11, 5, 198, 53, 11, 5, 199, 55, 11, 5, 199, 145, 11, 5, 199, 82, 11, 5, 197, 52, 11, 5, 197, 47, 11, 5, 197, 94, 11, 5, 197, 67, 11, 5, 197, 53, 11, 5, 197, 64, 11, 5, - 237, 163, 11, 5, 237, 162, 11, 5, 237, 168, 11, 5, 237, 164, 11, 5, 237, - 165, 11, 5, 237, 167, 11, 5, 237, 166, 11, 5, 237, 184, 11, 5, 237, 183, - 11, 5, 237, 191, 11, 5, 237, 185, 11, 5, 237, 153, 11, 5, 237, 155, 11, - 5, 237, 154, 11, 5, 237, 158, 11, 5, 237, 157, 11, 5, 237, 161, 11, 5, - 237, 159, 11, 5, 237, 176, 11, 5, 237, 179, 11, 5, 237, 177, 11, 5, 237, - 149, 11, 5, 237, 148, 11, 5, 237, 156, 11, 5, 237, 152, 11, 5, 237, 150, - 11, 5, 237, 151, 11, 5, 214, 140, 11, 5, 214, 139, 11, 5, 214, 147, 11, - 5, 214, 142, 11, 5, 214, 143, 11, 5, 214, 144, 11, 5, 214, 156, 11, 5, - 214, 155, 11, 5, 214, 162, 11, 5, 214, 157, 11, 5, 214, 132, 11, 5, 214, - 131, 11, 5, 214, 138, 11, 5, 214, 133, 11, 5, 214, 148, 11, 5, 214, 154, - 11, 5, 214, 152, 11, 5, 214, 124, 11, 5, 214, 123, 11, 5, 214, 129, 11, - 5, 214, 127, 11, 5, 214, 125, 11, 5, 214, 126, 11, 5, 229, 33, 11, 5, - 229, 32, 11, 5, 229, 39, 11, 5, 229, 34, 11, 5, 229, 36, 11, 5, 229, 35, - 11, 5, 229, 38, 11, 5, 229, 37, 11, 5, 229, 45, 11, 5, 229, 43, 11, 5, - 229, 47, 11, 5, 229, 46, 11, 5, 229, 26, 11, 5, 229, 27, 11, 5, 229, 30, - 11, 5, 229, 29, 11, 5, 229, 31, 11, 5, 229, 40, 11, 5, 229, 42, 11, 5, - 229, 41, 11, 5, 229, 25, 11, 5, 213, 162, 11, 5, 213, 160, 11, 5, 213, - 219, 11, 5, 213, 165, 11, 5, 213, 193, 11, 5, 213, 207, 11, 5, 213, 206, - 11, 5, 214, 200, 11, 5, 180, 11, 5, 214, 218, 11, 5, 212, 122, 11, 5, - 212, 124, 11, 5, 212, 123, 11, 5, 213, 11, 11, 5, 212, 251, 11, 5, 213, - 43, 11, 5, 213, 22, 11, 5, 214, 74, 11, 5, 214, 121, 11, 5, 214, 97, 11, - 5, 212, 117, 11, 5, 212, 113, 11, 5, 212, 178, 11, 5, 212, 121, 11, 5, - 212, 119, 11, 5, 212, 120, 11, 5, 229, 98, 11, 5, 229, 97, 11, 5, 229, - 103, 11, 5, 229, 99, 11, 5, 229, 100, 11, 5, 229, 102, 11, 5, 229, 101, - 11, 5, 229, 109, 11, 5, 229, 107, 11, 5, 229, 111, 11, 5, 229, 110, 11, - 5, 229, 90, 11, 5, 229, 92, 11, 5, 229, 91, 11, 5, 229, 94, 11, 5, 229, - 96, 11, 5, 229, 95, 11, 5, 229, 104, 11, 5, 229, 106, 11, 5, 229, 105, - 11, 5, 229, 86, 11, 5, 229, 85, 11, 5, 229, 93, 11, 5, 229, 89, 11, 5, - 229, 87, 11, 5, 229, 88, 11, 5, 229, 80, 11, 5, 229, 79, 11, 5, 229, 84, - 11, 5, 229, 83, 11, 5, 229, 81, 11, 5, 229, 82, 11, 5, 219, 87, 11, 5, - 219, 79, 11, 5, 219, 146, 11, 5, 219, 98, 11, 5, 219, 137, 11, 5, 219, - 136, 11, 5, 219, 140, 11, 5, 219, 138, 11, 5, 220, 5, 11, 5, 219, 249, - 11, 5, 173, 11, 5, 220, 16, 11, 5, 218, 201, 11, 5, 218, 200, 11, 5, 218, - 203, 11, 5, 218, 202, 11, 5, 218, 249, 11, 5, 218, 234, 11, 5, 219, 43, - 11, 5, 219, 1, 11, 5, 219, 164, 11, 5, 219, 238, 11, 5, 219, 184, 11, 5, - 218, 195, 11, 5, 218, 193, 11, 5, 218, 225, 11, 5, 218, 199, 11, 5, 218, - 197, 11, 5, 218, 198, 11, 5, 218, 173, 11, 5, 218, 172, 11, 5, 218, 183, - 11, 5, 218, 176, 11, 5, 218, 174, 11, 5, 218, 175, 11, 5, 231, 22, 11, 5, - 231, 21, 11, 5, 231, 53, 11, 5, 231, 34, 11, 5, 231, 45, 11, 5, 231, 44, - 11, 5, 231, 47, 11, 5, 231, 46, 11, 5, 231, 192, 11, 5, 231, 187, 11, 5, - 231, 240, 11, 5, 231, 203, 11, 5, 230, 152, 11, 5, 230, 151, 11, 5, 230, - 154, 11, 5, 230, 153, 11, 5, 230, 232, 11, 5, 230, 230, 11, 5, 231, 3, - 11, 5, 230, 242, 11, 5, 231, 131, 11, 5, 231, 129, 11, 5, 231, 165, 11, - 5, 231, 142, 11, 5, 230, 140, 11, 5, 230, 139, 11, 5, 230, 179, 11, 5, - 230, 150, 11, 5, 230, 141, 11, 5, 230, 149, 11, 5, 221, 120, 11, 5, 221, - 115, 11, 5, 221, 166, 11, 5, 221, 134, 11, 5, 221, 147, 11, 5, 221, 151, - 11, 5, 221, 149, 11, 5, 222, 49, 11, 5, 222, 30, 11, 5, 155, 11, 5, 222, - 78, 11, 5, 220, 202, 11, 5, 220, 207, 11, 5, 220, 204, 11, 5, 221, 28, - 11, 5, 221, 23, 11, 5, 221, 67, 11, 5, 221, 36, 11, 5, 221, 241, 11, 5, - 221, 224, 11, 5, 222, 22, 11, 5, 221, 245, 11, 5, 220, 188, 11, 5, 220, - 184, 11, 5, 220, 232, 11, 5, 220, 201, 11, 5, 220, 192, 11, 5, 220, 197, - 11, 5, 231, 113, 11, 5, 231, 112, 11, 5, 231, 117, 11, 5, 231, 114, 11, - 5, 231, 116, 11, 5, 231, 115, 11, 5, 231, 124, 11, 5, 231, 123, 11, 5, - 231, 127, 11, 5, 231, 125, 11, 5, 231, 104, 11, 5, 231, 103, 11, 5, 231, - 106, 11, 5, 231, 105, 11, 5, 231, 109, 11, 5, 231, 108, 11, 5, 231, 111, - 11, 5, 231, 110, 11, 5, 231, 119, 11, 5, 231, 118, 11, 5, 231, 122, 11, - 5, 231, 120, 11, 5, 231, 99, 11, 5, 231, 98, 11, 5, 231, 107, 11, 5, 231, - 102, 11, 5, 231, 100, 11, 5, 231, 101, 11, 5, 216, 119, 11, 5, 216, 120, - 11, 5, 216, 138, 11, 5, 216, 137, 11, 5, 216, 140, 11, 5, 216, 139, 11, - 5, 216, 110, 11, 5, 216, 112, 11, 5, 216, 111, 11, 5, 216, 115, 11, 5, - 216, 114, 11, 5, 216, 117, 11, 5, 216, 116, 11, 5, 216, 121, 11, 5, 216, - 123, 11, 5, 216, 122, 11, 5, 216, 106, 11, 5, 216, 105, 11, 5, 216, 113, - 11, 5, 216, 109, 11, 5, 216, 107, 11, 5, 216, 108, 11, 5, 228, 104, 11, - 5, 228, 103, 11, 5, 228, 110, 11, 5, 228, 105, 11, 5, 228, 107, 11, 5, - 228, 106, 11, 5, 228, 109, 11, 5, 228, 108, 11, 5, 228, 115, 11, 5, 228, - 114, 11, 5, 228, 117, 11, 5, 228, 116, 11, 5, 228, 96, 11, 5, 228, 95, - 11, 5, 228, 98, 11, 5, 228, 97, 11, 5, 228, 100, 11, 5, 228, 99, 11, 5, - 228, 102, 11, 5, 228, 101, 11, 5, 228, 111, 11, 5, 228, 113, 11, 5, 228, - 112, 11, 5, 214, 13, 11, 5, 214, 15, 11, 5, 214, 14, 11, 5, 214, 58, 11, - 5, 214, 56, 11, 5, 214, 68, 11, 5, 214, 61, 11, 5, 213, 230, 11, 5, 213, - 229, 11, 5, 213, 231, 11, 5, 213, 241, 11, 5, 213, 238, 11, 5, 213, 249, - 11, 5, 213, 243, 11, 5, 214, 49, 11, 5, 214, 55, 11, 5, 214, 51, 11, 5, - 229, 117, 11, 5, 229, 136, 11, 5, 229, 145, 11, 5, 230, 9, 11, 5, 229, - 253, 11, 5, 140, 11, 5, 230, 21, 11, 5, 228, 134, 11, 5, 228, 133, 11, 5, - 228, 136, 11, 5, 228, 135, 11, 5, 228, 180, 11, 5, 228, 171, 11, 5, 229, - 23, 11, 5, 228, 244, 11, 5, 229, 183, 11, 5, 229, 245, 11, 5, 229, 195, - 11, 5, 193, 146, 11, 5, 193, 131, 11, 5, 193, 190, 11, 5, 193, 158, 11, - 5, 192, 245, 11, 5, 192, 247, 11, 5, 192, 246, 11, 5, 193, 13, 11, 5, - 193, 48, 11, 5, 193, 24, 11, 5, 193, 99, 11, 5, 193, 125, 11, 5, 193, - 106, 11, 5, 191, 15, 11, 5, 191, 14, 11, 5, 191, 30, 11, 5, 191, 18, 11, - 5, 191, 23, 11, 5, 191, 25, 11, 5, 191, 24, 11, 5, 191, 96, 11, 5, 191, - 93, 11, 5, 191, 123, 11, 5, 191, 104, 11, 5, 190, 244, 11, 5, 190, 246, - 11, 5, 190, 245, 11, 5, 191, 2, 11, 5, 191, 1, 11, 5, 191, 7, 11, 5, 191, - 3, 11, 5, 191, 73, 11, 5, 191, 87, 11, 5, 191, 79, 11, 5, 190, 240, 11, - 5, 190, 239, 11, 5, 190, 251, 11, 5, 190, 243, 11, 5, 190, 241, 11, 5, - 190, 242, 11, 5, 190, 226, 11, 5, 190, 225, 11, 5, 190, 231, 11, 5, 190, - 229, 11, 5, 190, 227, 11, 5, 190, 228, 11, 5, 242, 255, 11, 5, 242, 248, - 11, 5, 243, 29, 11, 5, 243, 12, 11, 5, 243, 26, 11, 5, 243, 20, 11, 5, - 243, 28, 11, 5, 243, 27, 11, 5, 247, 78, 11, 5, 247, 69, 11, 5, 247, 160, - 11, 5, 247, 111, 11, 5, 238, 183, 11, 5, 238, 185, 11, 5, 238, 184, 11, - 5, 238, 249, 11, 5, 238, 237, 11, 5, 242, 99, 11, 5, 239, 13, 11, 5, 247, - 5, 11, 5, 247, 42, 11, 5, 247, 11, 11, 5, 238, 154, 11, 5, 238, 152, 11, - 5, 238, 195, 11, 5, 238, 181, 11, 5, 238, 160, 11, 5, 238, 176, 11, 5, - 238, 130, 11, 5, 238, 129, 11, 5, 238, 143, 11, 5, 238, 137, 11, 5, 238, - 131, 11, 5, 238, 133, 11, 5, 190, 209, 11, 5, 190, 208, 11, 5, 190, 215, - 11, 5, 190, 210, 11, 5, 190, 212, 11, 5, 190, 211, 11, 5, 190, 214, 11, - 5, 190, 213, 11, 5, 190, 221, 11, 5, 190, 220, 11, 5, 190, 224, 11, 5, - 190, 222, 11, 5, 190, 205, 11, 5, 190, 207, 11, 5, 190, 206, 11, 5, 190, - 216, 11, 5, 190, 219, 11, 5, 190, 217, 11, 5, 190, 198, 11, 5, 190, 202, - 11, 5, 190, 201, 11, 5, 190, 199, 11, 5, 190, 200, 11, 5, 190, 192, 11, - 5, 190, 191, 11, 5, 190, 197, 11, 5, 190, 195, 11, 5, 190, 193, 11, 5, - 190, 194, 11, 5, 212, 33, 11, 5, 212, 32, 11, 5, 212, 38, 11, 5, 212, 34, - 11, 5, 212, 35, 11, 5, 212, 37, 11, 5, 212, 36, 11, 5, 212, 43, 11, 5, - 212, 42, 11, 5, 212, 46, 11, 5, 212, 45, 11, 5, 212, 26, 11, 5, 212, 27, - 11, 5, 212, 30, 11, 5, 212, 31, 11, 5, 212, 39, 11, 5, 212, 41, 11, 5, - 212, 21, 11, 5, 212, 29, 11, 5, 212, 25, 11, 5, 212, 22, 11, 5, 212, 23, - 11, 5, 212, 16, 11, 5, 212, 15, 11, 5, 212, 20, 11, 5, 212, 19, 11, 5, - 212, 17, 11, 5, 212, 18, 11, 5, 202, 138, 11, 5, 169, 11, 5, 202, 222, - 11, 5, 202, 142, 11, 5, 202, 202, 11, 5, 202, 205, 11, 5, 202, 203, 11, - 5, 205, 122, 11, 5, 205, 106, 11, 5, 188, 11, 5, 205, 130, 11, 5, 200, - 188, 11, 5, 200, 190, 11, 5, 200, 189, 11, 5, 202, 8, 11, 5, 201, 253, - 11, 5, 202, 46, 11, 5, 202, 14, 11, 5, 203, 238, 11, 5, 205, 68, 11, 5, - 204, 13, 11, 5, 200, 163, 11, 5, 200, 159, 11, 5, 201, 4, 11, 5, 200, + 237, 165, 11, 5, 237, 164, 11, 5, 237, 170, 11, 5, 237, 166, 11, 5, 237, + 167, 11, 5, 237, 169, 11, 5, 237, 168, 11, 5, 237, 186, 11, 5, 237, 185, + 11, 5, 237, 193, 11, 5, 237, 187, 11, 5, 237, 155, 11, 5, 237, 157, 11, + 5, 237, 156, 11, 5, 237, 160, 11, 5, 237, 159, 11, 5, 237, 163, 11, 5, + 237, 161, 11, 5, 237, 178, 11, 5, 237, 181, 11, 5, 237, 179, 11, 5, 237, + 151, 11, 5, 237, 150, 11, 5, 237, 158, 11, 5, 237, 154, 11, 5, 237, 152, + 11, 5, 237, 153, 11, 5, 214, 142, 11, 5, 214, 141, 11, 5, 214, 149, 11, + 5, 214, 144, 11, 5, 214, 145, 11, 5, 214, 146, 11, 5, 214, 158, 11, 5, + 214, 157, 11, 5, 214, 164, 11, 5, 214, 159, 11, 5, 214, 134, 11, 5, 214, + 133, 11, 5, 214, 140, 11, 5, 214, 135, 11, 5, 214, 150, 11, 5, 214, 156, + 11, 5, 214, 154, 11, 5, 214, 126, 11, 5, 214, 125, 11, 5, 214, 131, 11, + 5, 214, 129, 11, 5, 214, 127, 11, 5, 214, 128, 11, 5, 229, 35, 11, 5, + 229, 34, 11, 5, 229, 41, 11, 5, 229, 36, 11, 5, 229, 38, 11, 5, 229, 37, + 11, 5, 229, 40, 11, 5, 229, 39, 11, 5, 229, 47, 11, 5, 229, 45, 11, 5, + 229, 49, 11, 5, 229, 48, 11, 5, 229, 28, 11, 5, 229, 29, 11, 5, 229, 32, + 11, 5, 229, 31, 11, 5, 229, 33, 11, 5, 229, 42, 11, 5, 229, 44, 11, 5, + 229, 43, 11, 5, 229, 27, 11, 5, 213, 164, 11, 5, 213, 162, 11, 5, 213, + 221, 11, 5, 213, 167, 11, 5, 213, 195, 11, 5, 213, 209, 11, 5, 213, 208, + 11, 5, 214, 202, 11, 5, 181, 11, 5, 214, 220, 11, 5, 212, 124, 11, 5, + 212, 126, 11, 5, 212, 125, 11, 5, 213, 13, 11, 5, 212, 253, 11, 5, 213, + 45, 11, 5, 213, 24, 11, 5, 214, 76, 11, 5, 214, 123, 11, 5, 214, 99, 11, + 5, 212, 119, 11, 5, 212, 115, 11, 5, 212, 180, 11, 5, 212, 123, 11, 5, + 212, 121, 11, 5, 212, 122, 11, 5, 229, 100, 11, 5, 229, 99, 11, 5, 229, + 105, 11, 5, 229, 101, 11, 5, 229, 102, 11, 5, 229, 104, 11, 5, 229, 103, + 11, 5, 229, 111, 11, 5, 229, 109, 11, 5, 229, 113, 11, 5, 229, 112, 11, + 5, 229, 92, 11, 5, 229, 94, 11, 5, 229, 93, 11, 5, 229, 96, 11, 5, 229, + 98, 11, 5, 229, 97, 11, 5, 229, 106, 11, 5, 229, 108, 11, 5, 229, 107, + 11, 5, 229, 88, 11, 5, 229, 87, 11, 5, 229, 95, 11, 5, 229, 91, 11, 5, + 229, 89, 11, 5, 229, 90, 11, 5, 229, 82, 11, 5, 229, 81, 11, 5, 229, 86, + 11, 5, 229, 85, 11, 5, 229, 83, 11, 5, 229, 84, 11, 5, 219, 89, 11, 5, + 219, 81, 11, 5, 219, 148, 11, 5, 219, 100, 11, 5, 219, 139, 11, 5, 219, + 138, 11, 5, 219, 142, 11, 5, 219, 140, 11, 5, 220, 7, 11, 5, 219, 251, + 11, 5, 173, 11, 5, 220, 18, 11, 5, 218, 203, 11, 5, 218, 202, 11, 5, 218, + 205, 11, 5, 218, 204, 11, 5, 218, 251, 11, 5, 218, 236, 11, 5, 219, 45, + 11, 5, 219, 3, 11, 5, 219, 166, 11, 5, 219, 240, 11, 5, 219, 186, 11, 5, + 218, 197, 11, 5, 218, 195, 11, 5, 218, 227, 11, 5, 218, 201, 11, 5, 218, + 199, 11, 5, 218, 200, 11, 5, 218, 175, 11, 5, 218, 174, 11, 5, 218, 185, + 11, 5, 218, 178, 11, 5, 218, 176, 11, 5, 218, 177, 11, 5, 231, 24, 11, 5, + 231, 23, 11, 5, 231, 55, 11, 5, 231, 36, 11, 5, 231, 47, 11, 5, 231, 46, + 11, 5, 231, 49, 11, 5, 231, 48, 11, 5, 231, 194, 11, 5, 231, 189, 11, 5, + 231, 242, 11, 5, 231, 205, 11, 5, 230, 154, 11, 5, 230, 153, 11, 5, 230, + 156, 11, 5, 230, 155, 11, 5, 230, 234, 11, 5, 230, 232, 11, 5, 231, 5, + 11, 5, 230, 244, 11, 5, 231, 133, 11, 5, 231, 131, 11, 5, 231, 167, 11, + 5, 231, 144, 11, 5, 230, 142, 11, 5, 230, 141, 11, 5, 230, 181, 11, 5, + 230, 152, 11, 5, 230, 143, 11, 5, 230, 151, 11, 5, 221, 122, 11, 5, 221, + 117, 11, 5, 221, 168, 11, 5, 221, 136, 11, 5, 221, 149, 11, 5, 221, 153, + 11, 5, 221, 151, 11, 5, 222, 51, 11, 5, 222, 32, 11, 5, 155, 11, 5, 222, + 80, 11, 5, 220, 204, 11, 5, 220, 209, 11, 5, 220, 206, 11, 5, 221, 30, + 11, 5, 221, 25, 11, 5, 221, 69, 11, 5, 221, 38, 11, 5, 221, 243, 11, 5, + 221, 226, 11, 5, 222, 24, 11, 5, 221, 247, 11, 5, 220, 190, 11, 5, 220, + 186, 11, 5, 220, 234, 11, 5, 220, 203, 11, 5, 220, 194, 11, 5, 220, 199, + 11, 5, 231, 115, 11, 5, 231, 114, 11, 5, 231, 119, 11, 5, 231, 116, 11, + 5, 231, 118, 11, 5, 231, 117, 11, 5, 231, 126, 11, 5, 231, 125, 11, 5, + 231, 129, 11, 5, 231, 127, 11, 5, 231, 106, 11, 5, 231, 105, 11, 5, 231, + 108, 11, 5, 231, 107, 11, 5, 231, 111, 11, 5, 231, 110, 11, 5, 231, 113, + 11, 5, 231, 112, 11, 5, 231, 121, 11, 5, 231, 120, 11, 5, 231, 124, 11, + 5, 231, 122, 11, 5, 231, 101, 11, 5, 231, 100, 11, 5, 231, 109, 11, 5, + 231, 104, 11, 5, 231, 102, 11, 5, 231, 103, 11, 5, 216, 121, 11, 5, 216, + 122, 11, 5, 216, 140, 11, 5, 216, 139, 11, 5, 216, 142, 11, 5, 216, 141, + 11, 5, 216, 112, 11, 5, 216, 114, 11, 5, 216, 113, 11, 5, 216, 117, 11, + 5, 216, 116, 11, 5, 216, 119, 11, 5, 216, 118, 11, 5, 216, 123, 11, 5, + 216, 125, 11, 5, 216, 124, 11, 5, 216, 108, 11, 5, 216, 107, 11, 5, 216, + 115, 11, 5, 216, 111, 11, 5, 216, 109, 11, 5, 216, 110, 11, 5, 228, 106, + 11, 5, 228, 105, 11, 5, 228, 112, 11, 5, 228, 107, 11, 5, 228, 109, 11, + 5, 228, 108, 11, 5, 228, 111, 11, 5, 228, 110, 11, 5, 228, 117, 11, 5, + 228, 116, 11, 5, 228, 119, 11, 5, 228, 118, 11, 5, 228, 98, 11, 5, 228, + 97, 11, 5, 228, 100, 11, 5, 228, 99, 11, 5, 228, 102, 11, 5, 228, 101, + 11, 5, 228, 104, 11, 5, 228, 103, 11, 5, 228, 113, 11, 5, 228, 115, 11, + 5, 228, 114, 11, 5, 214, 15, 11, 5, 214, 17, 11, 5, 214, 16, 11, 5, 214, + 60, 11, 5, 214, 58, 11, 5, 214, 70, 11, 5, 214, 63, 11, 5, 213, 232, 11, + 5, 213, 231, 11, 5, 213, 233, 11, 5, 213, 243, 11, 5, 213, 240, 11, 5, + 213, 251, 11, 5, 213, 245, 11, 5, 214, 51, 11, 5, 214, 57, 11, 5, 214, + 53, 11, 5, 229, 119, 11, 5, 229, 138, 11, 5, 229, 147, 11, 5, 230, 11, + 11, 5, 229, 255, 11, 5, 140, 11, 5, 230, 23, 11, 5, 228, 136, 11, 5, 228, + 135, 11, 5, 228, 138, 11, 5, 228, 137, 11, 5, 228, 182, 11, 5, 228, 173, + 11, 5, 229, 25, 11, 5, 228, 246, 11, 5, 229, 185, 11, 5, 229, 247, 11, 5, + 229, 197, 11, 5, 193, 146, 11, 5, 193, 131, 11, 5, 193, 190, 11, 5, 193, + 158, 11, 5, 192, 245, 11, 5, 192, 247, 11, 5, 192, 246, 11, 5, 193, 13, + 11, 5, 193, 48, 11, 5, 193, 24, 11, 5, 193, 99, 11, 5, 193, 125, 11, 5, + 193, 106, 11, 5, 191, 15, 11, 5, 191, 14, 11, 5, 191, 30, 11, 5, 191, 18, + 11, 5, 191, 23, 11, 5, 191, 25, 11, 5, 191, 24, 11, 5, 191, 96, 11, 5, + 191, 93, 11, 5, 191, 123, 11, 5, 191, 104, 11, 5, 190, 244, 11, 5, 190, + 246, 11, 5, 190, 245, 11, 5, 191, 2, 11, 5, 191, 1, 11, 5, 191, 7, 11, 5, + 191, 3, 11, 5, 191, 73, 11, 5, 191, 87, 11, 5, 191, 79, 11, 5, 190, 240, + 11, 5, 190, 239, 11, 5, 190, 251, 11, 5, 190, 243, 11, 5, 190, 241, 11, + 5, 190, 242, 11, 5, 190, 226, 11, 5, 190, 225, 11, 5, 190, 231, 11, 5, + 190, 229, 11, 5, 190, 227, 11, 5, 190, 228, 11, 5, 243, 1, 11, 5, 242, + 250, 11, 5, 243, 31, 11, 5, 243, 14, 11, 5, 243, 28, 11, 5, 243, 22, 11, + 5, 243, 30, 11, 5, 243, 29, 11, 5, 247, 80, 11, 5, 247, 71, 11, 5, 247, + 162, 11, 5, 247, 113, 11, 5, 238, 185, 11, 5, 238, 187, 11, 5, 238, 186, + 11, 5, 238, 251, 11, 5, 238, 239, 11, 5, 242, 101, 11, 5, 239, 15, 11, 5, + 247, 7, 11, 5, 247, 44, 11, 5, 247, 13, 11, 5, 238, 156, 11, 5, 238, 154, + 11, 5, 238, 197, 11, 5, 238, 183, 11, 5, 238, 162, 11, 5, 238, 178, 11, + 5, 238, 132, 11, 5, 238, 131, 11, 5, 238, 145, 11, 5, 238, 139, 11, 5, + 238, 133, 11, 5, 238, 135, 11, 5, 190, 209, 11, 5, 190, 208, 11, 5, 190, + 215, 11, 5, 190, 210, 11, 5, 190, 212, 11, 5, 190, 211, 11, 5, 190, 214, + 11, 5, 190, 213, 11, 5, 190, 221, 11, 5, 190, 220, 11, 5, 190, 224, 11, + 5, 190, 222, 11, 5, 190, 205, 11, 5, 190, 207, 11, 5, 190, 206, 11, 5, + 190, 216, 11, 5, 190, 219, 11, 5, 190, 217, 11, 5, 190, 198, 11, 5, 190, + 202, 11, 5, 190, 201, 11, 5, 190, 199, 11, 5, 190, 200, 11, 5, 190, 192, + 11, 5, 190, 191, 11, 5, 190, 197, 11, 5, 190, 195, 11, 5, 190, 193, 11, + 5, 190, 194, 11, 5, 212, 35, 11, 5, 212, 34, 11, 5, 212, 40, 11, 5, 212, + 36, 11, 5, 212, 37, 11, 5, 212, 39, 11, 5, 212, 38, 11, 5, 212, 45, 11, + 5, 212, 44, 11, 5, 212, 48, 11, 5, 212, 47, 11, 5, 212, 28, 11, 5, 212, + 29, 11, 5, 212, 32, 11, 5, 212, 33, 11, 5, 212, 41, 11, 5, 212, 43, 11, + 5, 212, 23, 11, 5, 212, 31, 11, 5, 212, 27, 11, 5, 212, 24, 11, 5, 212, + 25, 11, 5, 212, 18, 11, 5, 212, 17, 11, 5, 212, 22, 11, 5, 212, 21, 11, + 5, 212, 19, 11, 5, 212, 20, 11, 5, 202, 139, 11, 5, 169, 11, 5, 202, 223, + 11, 5, 202, 143, 11, 5, 202, 203, 11, 5, 202, 206, 11, 5, 202, 204, 11, + 5, 205, 123, 11, 5, 205, 107, 11, 5, 188, 11, 5, 205, 131, 11, 5, 200, + 188, 11, 5, 200, 190, 11, 5, 200, 189, 11, 5, 202, 9, 11, 5, 201, 254, + 11, 5, 202, 47, 11, 5, 202, 15, 11, 5, 203, 239, 11, 5, 205, 69, 11, 5, + 204, 14, 11, 5, 200, 163, 11, 5, 200, 159, 11, 5, 201, 5, 11, 5, 200, 187, 11, 5, 200, 167, 11, 5, 200, 175, 11, 5, 200, 57, 11, 5, 200, 56, 11, 5, 200, 127, 11, 5, 200, 65, 11, 5, 200, 59, 11, 5, 200, 64, 11, 5, - 201, 136, 11, 5, 201, 135, 11, 5, 201, 142, 11, 5, 201, 137, 11, 5, 201, - 139, 11, 5, 201, 141, 11, 5, 201, 140, 11, 5, 201, 151, 11, 5, 201, 149, - 11, 5, 201, 175, 11, 5, 201, 152, 11, 5, 201, 131, 11, 5, 201, 130, 11, - 5, 201, 134, 11, 5, 201, 132, 11, 5, 201, 145, 11, 5, 201, 148, 11, 5, - 201, 146, 11, 5, 201, 127, 11, 5, 201, 125, 11, 5, 201, 129, 11, 5, 201, - 128, 11, 5, 201, 120, 11, 5, 201, 119, 11, 5, 201, 124, 11, 5, 201, 123, - 11, 5, 201, 121, 11, 5, 201, 122, 11, 5, 191, 66, 11, 5, 191, 65, 11, 5, + 201, 137, 11, 5, 201, 136, 11, 5, 201, 143, 11, 5, 201, 138, 11, 5, 201, + 140, 11, 5, 201, 142, 11, 5, 201, 141, 11, 5, 201, 152, 11, 5, 201, 150, + 11, 5, 201, 176, 11, 5, 201, 153, 11, 5, 201, 132, 11, 5, 201, 131, 11, + 5, 201, 135, 11, 5, 201, 133, 11, 5, 201, 146, 11, 5, 201, 149, 11, 5, + 201, 147, 11, 5, 201, 128, 11, 5, 201, 126, 11, 5, 201, 130, 11, 5, 201, + 129, 11, 5, 201, 121, 11, 5, 201, 120, 11, 5, 201, 125, 11, 5, 201, 124, + 11, 5, 201, 122, 11, 5, 201, 123, 11, 5, 191, 66, 11, 5, 191, 65, 11, 5, 191, 71, 11, 5, 191, 68, 11, 5, 191, 45, 11, 5, 191, 47, 11, 5, 191, 46, 11, 5, 191, 50, 11, 5, 191, 49, 11, 5, 191, 54, 11, 5, 191, 51, 11, 5, 191, 59, 11, 5, 191, 58, 11, 5, 191, 62, 11, 5, 191, 60, 11, 5, 191, 41, 11, 5, 191, 40, 11, 5, 191, 48, 11, 5, 191, 44, 11, 5, 191, 42, 11, 5, 191, 43, 11, 5, 191, 33, 11, 5, 191, 32, 11, 5, 191, 37, 11, 5, 191, 36, - 11, 5, 191, 34, 11, 5, 191, 35, 11, 5, 243, 133, 11, 5, 243, 129, 11, 5, - 247, 1, 11, 5, 246, 243, 11, 5, 243, 44, 11, 5, 243, 43, 11, 5, 243, 46, - 11, 5, 243, 45, 11, 5, 243, 59, 11, 5, 243, 58, 11, 5, 243, 68, 11, 5, - 243, 63, 11, 5, 243, 102, 11, 5, 243, 99, 11, 5, 243, 127, 11, 5, 243, - 110, 11, 5, 243, 38, 11, 5, 243, 48, 11, 5, 243, 42, 11, 5, 243, 39, 11, - 5, 243, 41, 11, 5, 243, 31, 11, 5, 243, 30, 11, 5, 243, 35, 11, 5, 243, - 34, 11, 5, 243, 32, 11, 5, 243, 33, 11, 5, 206, 105, 11, 5, 206, 109, 11, - 5, 206, 87, 11, 5, 206, 88, 11, 5, 206, 92, 11, 5, 206, 91, 11, 5, 206, - 95, 11, 5, 206, 93, 11, 5, 206, 99, 11, 5, 206, 98, 11, 5, 206, 104, 11, - 5, 206, 100, 11, 5, 206, 83, 11, 5, 206, 81, 11, 5, 206, 89, 11, 5, 206, - 86, 11, 5, 206, 84, 11, 5, 206, 85, 11, 5, 206, 76, 11, 5, 206, 75, 11, - 5, 206, 80, 11, 5, 206, 79, 11, 5, 206, 77, 11, 5, 206, 78, 11, 5, 212, - 242, 11, 5, 212, 241, 11, 5, 212, 244, 11, 5, 212, 243, 11, 5, 212, 233, - 11, 5, 212, 235, 11, 5, 212, 234, 11, 5, 212, 237, 11, 5, 212, 236, 11, - 5, 212, 240, 11, 5, 212, 239, 11, 5, 212, 227, 11, 5, 212, 226, 11, 5, - 212, 232, 11, 5, 212, 230, 11, 5, 212, 228, 11, 5, 212, 229, 11, 5, 212, - 221, 11, 5, 212, 220, 11, 5, 212, 225, 11, 5, 212, 224, 11, 5, 212, 222, - 11, 5, 212, 223, 11, 5, 203, 123, 11, 5, 203, 118, 11, 5, 203, 165, 11, - 5, 203, 136, 11, 5, 202, 249, 11, 5, 202, 251, 11, 5, 202, 250, 11, 5, - 203, 24, 11, 5, 203, 19, 11, 5, 203, 56, 11, 5, 203, 44, 11, 5, 203, 91, - 11, 5, 203, 84, 11, 5, 203, 113, 11, 5, 203, 100, 11, 5, 202, 245, 11, 5, - 202, 242, 11, 5, 203, 5, 11, 5, 202, 248, 11, 5, 202, 246, 11, 5, 202, - 247, 11, 5, 202, 225, 11, 5, 202, 224, 11, 5, 202, 231, 11, 5, 202, 228, - 11, 5, 202, 226, 11, 5, 202, 227, 11, 5, 207, 130, 11, 5, 207, 123, 11, - 5, 165, 11, 5, 207, 136, 11, 5, 206, 38, 11, 5, 206, 40, 11, 5, 206, 39, - 11, 5, 206, 123, 11, 5, 206, 111, 11, 5, 206, 162, 11, 5, 206, 127, 11, - 5, 207, 11, 11, 5, 207, 113, 11, 5, 207, 53, 11, 5, 206, 30, 11, 5, 206, - 27, 11, 5, 206, 68, 11, 5, 206, 37, 11, 5, 206, 33, 11, 5, 206, 34, 11, - 5, 206, 12, 11, 5, 206, 11, 11, 5, 206, 17, 11, 5, 206, 15, 11, 5, 206, - 13, 11, 5, 206, 14, 11, 5, 222, 232, 11, 5, 222, 231, 11, 5, 222, 244, - 11, 5, 222, 233, 11, 5, 222, 240, 11, 5, 222, 239, 11, 5, 222, 242, 11, - 5, 222, 241, 11, 5, 222, 170, 11, 5, 222, 169, 11, 5, 222, 172, 11, 5, - 222, 171, 11, 5, 222, 188, 11, 5, 222, 186, 11, 5, 222, 201, 11, 5, 222, - 190, 11, 5, 222, 163, 11, 5, 222, 161, 11, 5, 222, 182, 11, 5, 222, 168, - 11, 5, 222, 165, 11, 5, 222, 166, 11, 5, 222, 155, 11, 5, 222, 154, 11, - 5, 222, 159, 11, 5, 222, 158, 11, 5, 222, 156, 11, 5, 222, 157, 11, 5, - 208, 49, 11, 5, 208, 47, 11, 5, 208, 57, 11, 5, 208, 50, 11, 5, 208, 54, - 11, 5, 208, 53, 11, 5, 208, 56, 11, 5, 208, 55, 11, 5, 207, 253, 11, 5, - 207, 250, 11, 5, 207, 255, 11, 5, 207, 254, 11, 5, 208, 36, 11, 5, 208, - 35, 11, 5, 208, 45, 11, 5, 208, 39, 11, 5, 207, 245, 11, 5, 207, 241, 11, - 5, 208, 33, 11, 5, 207, 249, 11, 5, 207, 247, 11, 5, 207, 248, 11, 5, - 207, 225, 11, 5, 207, 223, 11, 5, 207, 235, 11, 5, 207, 228, 11, 5, 207, - 226, 11, 5, 207, 227, 11, 5, 222, 221, 11, 5, 222, 220, 11, 5, 222, 227, - 11, 5, 222, 222, 11, 5, 222, 224, 11, 5, 222, 223, 11, 5, 222, 226, 11, - 5, 222, 225, 11, 5, 222, 212, 11, 5, 222, 214, 11, 5, 222, 213, 11, 5, - 222, 217, 11, 5, 222, 216, 11, 5, 222, 219, 11, 5, 222, 218, 11, 5, 222, - 208, 11, 5, 222, 207, 11, 5, 222, 215, 11, 5, 222, 211, 11, 5, 222, 209, - 11, 5, 222, 210, 11, 5, 222, 204, 11, 5, 222, 203, 11, 5, 222, 206, 11, - 5, 222, 205, 11, 5, 213, 134, 11, 5, 213, 133, 11, 5, 213, 141, 11, 5, - 213, 135, 11, 5, 213, 137, 11, 5, 213, 136, 11, 5, 213, 140, 11, 5, 213, - 138, 11, 5, 213, 123, 11, 5, 213, 124, 11, 5, 213, 129, 11, 5, 213, 128, - 11, 5, 213, 132, 11, 5, 213, 130, 11, 5, 213, 118, 11, 5, 213, 127, 11, - 5, 213, 122, 11, 5, 213, 119, 11, 5, 213, 120, 11, 5, 213, 113, 11, 5, - 213, 112, 11, 5, 213, 117, 11, 5, 213, 116, 11, 5, 213, 114, 11, 5, 213, - 115, 11, 5, 212, 68, 11, 5, 212, 67, 11, 5, 212, 81, 11, 5, 212, 72, 11, - 5, 212, 77, 11, 5, 212, 76, 11, 5, 212, 79, 11, 5, 212, 78, 11, 5, 212, - 53, 11, 5, 212, 55, 11, 5, 212, 54, 11, 5, 212, 60, 11, 5, 212, 59, 11, - 5, 212, 65, 11, 5, 212, 61, 11, 5, 212, 51, 11, 5, 212, 49, 11, 5, 212, - 58, 11, 5, 212, 52, 11, 5, 192, 198, 11, 5, 192, 197, 11, 5, 192, 207, - 11, 5, 192, 200, 11, 5, 192, 202, 11, 5, 192, 201, 11, 5, 192, 204, 11, - 5, 192, 203, 11, 5, 192, 186, 11, 5, 192, 187, 11, 5, 192, 191, 11, 5, - 192, 190, 11, 5, 192, 196, 11, 5, 192, 194, 11, 5, 192, 163, 11, 5, 192, - 161, 11, 5, 192, 176, 11, 5, 192, 166, 11, 5, 192, 164, 11, 5, 192, 165, - 11, 5, 192, 18, 11, 5, 192, 16, 11, 5, 192, 33, 11, 5, 192, 19, 11, 5, - 192, 27, 11, 5, 192, 26, 11, 5, 192, 30, 11, 5, 192, 28, 11, 5, 191, 198, - 11, 5, 191, 197, 11, 5, 191, 201, 11, 5, 191, 199, 11, 5, 191, 240, 11, - 5, 191, 235, 11, 5, 192, 12, 11, 5, 191, 245, 11, 5, 191, 189, 11, 5, - 191, 185, 11, 5, 191, 225, 11, 5, 191, 196, 11, 5, 191, 192, 11, 5, 191, - 193, 11, 5, 191, 169, 11, 5, 191, 168, 11, 5, 191, 176, 11, 5, 191, 172, - 11, 5, 191, 170, 11, 5, 191, 171, 11, 48, 208, 36, 11, 48, 219, 146, 11, - 48, 221, 120, 11, 48, 212, 72, 11, 48, 238, 137, 11, 48, 201, 142, 11, - 48, 231, 110, 11, 48, 231, 142, 11, 48, 216, 100, 11, 48, 228, 104, 11, - 48, 218, 175, 11, 48, 249, 25, 11, 48, 215, 202, 11, 48, 192, 12, 11, 48, - 208, 131, 11, 48, 228, 98, 11, 48, 199, 171, 11, 48, 231, 240, 11, 48, - 190, 243, 11, 48, 238, 130, 11, 48, 237, 151, 11, 48, 247, 230, 11, 48, - 231, 106, 11, 48, 212, 61, 11, 48, 197, 94, 11, 48, 211, 78, 11, 48, 222, - 208, 11, 48, 191, 2, 11, 48, 208, 108, 11, 48, 229, 65, 11, 48, 192, 18, - 11, 48, 193, 244, 11, 48, 202, 231, 11, 48, 195, 141, 11, 48, 191, 123, - 11, 48, 222, 201, 11, 48, 212, 25, 11, 48, 222, 206, 11, 48, 230, 232, - 11, 48, 222, 226, 11, 48, 193, 48, 11, 48, 235, 89, 11, 48, 202, 247, 11, - 48, 219, 140, 11, 48, 238, 143, 11, 48, 238, 184, 11, 48, 243, 12, 11, - 48, 228, 101, 11, 48, 203, 123, 11, 48, 190, 242, 11, 48, 203, 44, 11, - 48, 243, 127, 11, 48, 190, 212, 11, 48, 214, 189, 11, 48, 222, 22, 219, - 88, 1, 249, 153, 219, 88, 1, 168, 219, 88, 1, 209, 228, 219, 88, 1, 238, - 32, 219, 88, 1, 190, 190, 219, 88, 1, 199, 49, 219, 88, 1, 231, 240, 219, - 88, 1, 155, 219, 88, 1, 221, 215, 219, 88, 1, 223, 32, 219, 88, 1, 247, - 160, 219, 88, 1, 247, 1, 219, 88, 1, 235, 35, 219, 88, 1, 197, 168, 219, - 88, 1, 197, 157, 219, 88, 1, 174, 219, 88, 1, 180, 219, 88, 1, 173, 219, - 88, 1, 188, 219, 88, 1, 191, 71, 219, 88, 1, 191, 123, 219, 88, 1, 214, - 68, 219, 88, 1, 140, 219, 88, 1, 192, 220, 219, 88, 1, 229, 177, 219, 88, - 1, 233, 109, 219, 88, 1, 193, 190, 219, 88, 1, 203, 165, 219, 88, 1, 170, - 219, 88, 1, 231, 91, 219, 88, 1, 65, 219, 88, 1, 252, 25, 219, 88, 1, 71, - 219, 88, 1, 233, 242, 219, 88, 1, 68, 219, 88, 1, 74, 219, 88, 1, 66, - 219, 88, 1, 196, 152, 219, 88, 1, 196, 141, 219, 88, 1, 211, 151, 219, - 88, 1, 163, 215, 69, 198, 193, 219, 88, 1, 163, 215, 7, 209, 73, 219, 88, - 1, 163, 215, 69, 238, 142, 219, 88, 1, 163, 215, 69, 248, 111, 219, 88, - 1, 163, 215, 69, 180, 219, 88, 1, 163, 215, 69, 222, 253, 219, 88, 208, - 152, 242, 74, 219, 88, 208, 152, 232, 80, 201, 63, 59, 5, 234, 188, 59, - 5, 234, 184, 59, 5, 229, 215, 59, 5, 193, 114, 59, 5, 193, 113, 59, 5, - 210, 49, 59, 5, 248, 195, 59, 5, 249, 1, 59, 5, 217, 3, 59, 5, 221, 16, - 59, 5, 216, 132, 59, 5, 231, 178, 59, 5, 233, 52, 59, 5, 195, 148, 59, 5, - 199, 121, 59, 5, 199, 31, 59, 5, 237, 58, 59, 5, 237, 55, 59, 5, 219, - 228, 59, 5, 207, 84, 59, 5, 237, 131, 59, 5, 214, 153, 59, 5, 205, 50, - 59, 5, 203, 111, 59, 5, 191, 84, 59, 5, 191, 61, 59, 5, 247, 34, 59, 5, - 223, 8, 59, 5, 213, 148, 59, 5, 192, 77, 59, 5, 222, 13, 59, 5, 214, 41, - 59, 5, 231, 157, 59, 5, 216, 211, 59, 5, 214, 110, 59, 5, 212, 89, 59, 5, - 68, 59, 5, 223, 162, 59, 5, 229, 158, 59, 5, 229, 128, 59, 5, 193, 86, - 59, 5, 193, 68, 59, 5, 209, 185, 59, 5, 248, 193, 59, 5, 248, 188, 59, 5, - 216, 252, 59, 5, 221, 13, 59, 5, 216, 129, 59, 5, 231, 174, 59, 5, 233, - 23, 59, 5, 195, 69, 59, 5, 198, 193, 59, 5, 199, 11, 59, 5, 237, 50, 59, - 5, 237, 54, 59, 5, 219, 146, 59, 5, 207, 1, 59, 5, 237, 44, 59, 5, 214, - 147, 59, 5, 202, 222, 59, 5, 203, 81, 59, 5, 191, 30, 59, 5, 191, 57, 59, - 5, 243, 29, 59, 5, 222, 244, 59, 5, 213, 141, 59, 5, 192, 33, 59, 5, 221, - 166, 59, 5, 214, 33, 59, 5, 231, 53, 59, 5, 216, 100, 59, 5, 213, 219, - 59, 5, 212, 81, 59, 5, 65, 59, 5, 251, 132, 59, 5, 214, 63, 59, 5, 140, - 59, 5, 230, 56, 59, 5, 193, 190, 59, 5, 193, 164, 59, 5, 168, 59, 5, 248, - 203, 59, 5, 249, 153, 59, 5, 217, 11, 59, 5, 221, 21, 59, 5, 221, 19, 59, - 5, 216, 136, 59, 5, 231, 182, 59, 5, 233, 109, 59, 5, 195, 188, 59, 5, - 190, 190, 59, 5, 199, 49, 59, 5, 237, 68, 59, 5, 237, 57, 59, 5, 173, 59, - 5, 165, 59, 5, 238, 32, 59, 5, 214, 162, 59, 5, 188, 59, 5, 203, 165, 59, - 5, 191, 123, 59, 5, 191, 71, 59, 5, 247, 160, 59, 5, 223, 32, 59, 5, 213, - 157, 59, 5, 170, 59, 5, 155, 59, 5, 222, 87, 59, 5, 214, 47, 59, 5, 231, - 240, 59, 5, 174, 59, 5, 180, 59, 5, 212, 101, 59, 5, 211, 87, 59, 5, 211, - 82, 59, 5, 228, 252, 59, 5, 193, 29, 59, 5, 193, 25, 59, 5, 209, 37, 59, - 5, 248, 191, 59, 5, 248, 97, 59, 5, 216, 247, 59, 5, 221, 11, 59, 5, 216, - 125, 59, 5, 231, 170, 59, 5, 232, 162, 59, 5, 195, 8, 59, 5, 198, 59, 59, - 5, 198, 235, 59, 5, 237, 47, 59, 5, 237, 52, 59, 5, 219, 8, 59, 5, 206, - 134, 59, 5, 236, 146, 59, 5, 214, 134, 59, 5, 202, 16, 59, 5, 203, 48, - 59, 5, 191, 4, 59, 5, 191, 52, 59, 5, 239, 18, 59, 5, 222, 191, 59, 5, - 213, 131, 59, 5, 191, 246, 59, 5, 221, 41, 59, 5, 214, 31, 59, 5, 230, - 245, 59, 5, 215, 211, 59, 5, 213, 26, 59, 5, 212, 62, 59, 5, 66, 59, 5, - 196, 113, 59, 5, 228, 159, 59, 5, 228, 142, 59, 5, 193, 0, 59, 5, 192, - 249, 59, 5, 208, 165, 59, 5, 248, 190, 59, 5, 248, 10, 59, 5, 216, 246, - 59, 5, 221, 9, 59, 5, 216, 124, 59, 5, 231, 169, 59, 5, 232, 86, 59, 5, - 193, 249, 59, 5, 197, 94, 59, 5, 198, 213, 59, 5, 237, 45, 59, 5, 237, - 51, 59, 5, 218, 225, 59, 5, 206, 68, 59, 5, 235, 89, 59, 5, 214, 129, 59, - 5, 201, 4, 59, 5, 203, 5, 59, 5, 190, 251, 59, 5, 191, 48, 59, 5, 238, - 195, 59, 5, 222, 182, 59, 5, 213, 127, 59, 5, 191, 225, 59, 5, 220, 232, - 59, 5, 214, 30, 59, 5, 230, 179, 59, 5, 215, 155, 59, 5, 212, 178, 59, 5, - 212, 58, 59, 5, 74, 59, 5, 211, 104, 59, 5, 213, 245, 59, 5, 229, 23, 59, - 5, 228, 255, 59, 5, 193, 48, 59, 5, 193, 30, 59, 5, 209, 73, 59, 5, 248, - 192, 59, 5, 248, 111, 59, 5, 216, 248, 59, 5, 221, 12, 59, 5, 216, 127, - 59, 5, 231, 172, 59, 5, 231, 171, 59, 5, 232, 175, 59, 5, 195, 24, 59, 5, - 159, 59, 5, 198, 241, 59, 5, 237, 48, 59, 5, 237, 53, 59, 5, 219, 43, 59, - 5, 206, 162, 59, 5, 236, 174, 59, 5, 214, 138, 59, 5, 202, 46, 59, 5, - 203, 56, 59, 5, 191, 7, 59, 5, 191, 54, 59, 5, 242, 99, 59, 5, 222, 201, - 59, 5, 213, 132, 59, 5, 192, 12, 59, 5, 221, 67, 59, 5, 214, 32, 59, 5, - 231, 3, 59, 5, 216, 12, 59, 5, 213, 43, 59, 5, 212, 65, 59, 5, 71, 59, 5, - 234, 103, 59, 5, 214, 52, 59, 5, 229, 245, 59, 5, 229, 198, 59, 5, 193, - 125, 59, 5, 193, 108, 59, 5, 210, 63, 59, 5, 248, 196, 59, 5, 249, 17, - 59, 5, 217, 4, 59, 5, 221, 17, 59, 5, 221, 15, 59, 5, 216, 133, 59, 5, - 231, 179, 59, 5, 231, 177, 59, 5, 233, 59, 59, 5, 195, 153, 59, 5, 199, - 145, 59, 5, 199, 33, 59, 5, 237, 59, 59, 5, 237, 56, 59, 5, 219, 238, 59, - 5, 207, 113, 59, 5, 237, 146, 59, 5, 214, 154, 59, 5, 205, 68, 59, 5, - 203, 113, 59, 5, 191, 87, 59, 5, 191, 62, 59, 5, 247, 42, 59, 5, 223, 10, - 59, 5, 213, 150, 59, 5, 192, 80, 59, 5, 222, 22, 59, 5, 214, 42, 59, 5, - 214, 38, 59, 5, 231, 165, 59, 5, 231, 151, 59, 5, 216, 232, 59, 5, 214, - 121, 59, 5, 212, 90, 59, 5, 214, 70, 59, 5, 219, 190, 59, 242, 74, 59, - 232, 80, 201, 63, 59, 208, 13, 77, 59, 5, 214, 137, 233, 109, 59, 5, 214, - 137, 155, 59, 5, 214, 137, 202, 16, 59, 16, 233, 48, 59, 16, 222, 11, 59, - 16, 198, 140, 59, 16, 213, 186, 59, 16, 249, 95, 59, 16, 233, 108, 59, - 16, 199, 245, 59, 16, 237, 236, 59, 16, 236, 145, 59, 16, 220, 208, 59, - 16, 198, 63, 59, 16, 236, 173, 59, 16, 222, 192, 59, 17, 191, 77, 59, 17, - 107, 59, 17, 109, 59, 17, 138, 59, 17, 134, 59, 17, 149, 59, 17, 169, 59, - 17, 175, 59, 17, 171, 59, 17, 178, 59, 5, 214, 137, 174, 59, 5, 214, 137, - 236, 174, 38, 6, 1, 191, 81, 38, 2, 1, 191, 81, 38, 6, 1, 235, 30, 38, 2, - 1, 235, 30, 38, 6, 1, 207, 18, 235, 32, 38, 2, 1, 207, 18, 235, 32, 38, - 6, 1, 223, 83, 38, 2, 1, 223, 83, 38, 6, 1, 236, 191, 38, 2, 1, 236, 191, - 38, 6, 1, 215, 219, 196, 128, 38, 2, 1, 215, 219, 196, 128, 38, 6, 1, - 248, 24, 211, 110, 38, 2, 1, 248, 24, 211, 110, 38, 6, 1, 214, 82, 192, - 62, 38, 2, 1, 214, 82, 192, 62, 38, 6, 1, 192, 59, 4, 249, 147, 192, 62, - 38, 2, 1, 192, 59, 4, 249, 147, 192, 62, 38, 6, 1, 223, 81, 192, 95, 38, - 2, 1, 223, 81, 192, 95, 38, 6, 1, 207, 18, 191, 225, 38, 2, 1, 207, 18, - 191, 225, 38, 6, 1, 223, 81, 65, 38, 2, 1, 223, 81, 65, 38, 6, 1, 242, - 219, 219, 83, 191, 190, 38, 2, 1, 242, 219, 219, 83, 191, 190, 38, 6, 1, - 248, 131, 191, 190, 38, 2, 1, 248, 131, 191, 190, 38, 6, 1, 223, 81, 242, - 219, 219, 83, 191, 190, 38, 2, 1, 223, 81, 242, 219, 219, 83, 191, 190, - 38, 6, 1, 192, 14, 38, 2, 1, 192, 14, 38, 6, 1, 207, 18, 197, 161, 38, 2, - 1, 207, 18, 197, 161, 38, 6, 1, 202, 32, 237, 146, 38, 2, 1, 202, 32, - 237, 146, 38, 6, 1, 202, 32, 234, 140, 38, 2, 1, 202, 32, 234, 140, 38, - 6, 1, 202, 32, 234, 114, 38, 2, 1, 202, 32, 234, 114, 38, 6, 1, 215, 223, - 74, 38, 2, 1, 215, 223, 74, 38, 6, 1, 248, 164, 74, 38, 2, 1, 248, 164, - 74, 38, 6, 1, 55, 215, 223, 74, 38, 2, 1, 55, 215, 223, 74, 38, 1, 215, - 130, 74, 33, 38, 193, 226, 33, 38, 199, 96, 216, 48, 56, 33, 38, 228, - 141, 216, 48, 56, 33, 38, 198, 230, 216, 48, 56, 202, 95, 250, 193, 33, - 38, 1, 196, 125, 223, 226, 33, 38, 1, 68, 33, 38, 1, 192, 33, 33, 38, 1, - 66, 33, 38, 1, 230, 17, 56, 33, 38, 1, 192, 58, 33, 38, 1, 202, 32, 56, - 33, 38, 1, 211, 110, 33, 38, 222, 35, 33, 38, 210, 70, 38, 222, 35, 38, - 210, 70, 38, 6, 1, 235, 45, 38, 2, 1, 235, 45, 38, 6, 1, 235, 21, 38, 2, - 1, 235, 21, 38, 6, 1, 191, 38, 38, 2, 1, 191, 38, 38, 6, 1, 247, 58, 38, - 2, 1, 247, 58, 38, 6, 1, 235, 17, 38, 2, 1, 235, 17, 38, 6, 1, 199, 146, + 11, 5, 191, 34, 11, 5, 191, 35, 11, 5, 243, 135, 11, 5, 243, 131, 11, 5, + 247, 3, 11, 5, 246, 245, 11, 5, 243, 46, 11, 5, 243, 45, 11, 5, 243, 48, + 11, 5, 243, 47, 11, 5, 243, 61, 11, 5, 243, 60, 11, 5, 243, 70, 11, 5, + 243, 65, 11, 5, 243, 104, 11, 5, 243, 101, 11, 5, 243, 129, 11, 5, 243, + 112, 11, 5, 243, 40, 11, 5, 243, 50, 11, 5, 243, 44, 11, 5, 243, 41, 11, + 5, 243, 43, 11, 5, 243, 33, 11, 5, 243, 32, 11, 5, 243, 37, 11, 5, 243, + 36, 11, 5, 243, 34, 11, 5, 243, 35, 11, 5, 206, 106, 11, 5, 206, 110, 11, + 5, 206, 88, 11, 5, 206, 89, 11, 5, 206, 93, 11, 5, 206, 92, 11, 5, 206, + 96, 11, 5, 206, 94, 11, 5, 206, 100, 11, 5, 206, 99, 11, 5, 206, 105, 11, + 5, 206, 101, 11, 5, 206, 84, 11, 5, 206, 82, 11, 5, 206, 90, 11, 5, 206, + 87, 11, 5, 206, 85, 11, 5, 206, 86, 11, 5, 206, 77, 11, 5, 206, 76, 11, + 5, 206, 81, 11, 5, 206, 80, 11, 5, 206, 78, 11, 5, 206, 79, 11, 5, 212, + 244, 11, 5, 212, 243, 11, 5, 212, 246, 11, 5, 212, 245, 11, 5, 212, 235, + 11, 5, 212, 237, 11, 5, 212, 236, 11, 5, 212, 239, 11, 5, 212, 238, 11, + 5, 212, 242, 11, 5, 212, 241, 11, 5, 212, 229, 11, 5, 212, 228, 11, 5, + 212, 234, 11, 5, 212, 232, 11, 5, 212, 230, 11, 5, 212, 231, 11, 5, 212, + 223, 11, 5, 212, 222, 11, 5, 212, 227, 11, 5, 212, 226, 11, 5, 212, 224, + 11, 5, 212, 225, 11, 5, 203, 124, 11, 5, 203, 119, 11, 5, 203, 166, 11, + 5, 203, 137, 11, 5, 202, 250, 11, 5, 202, 252, 11, 5, 202, 251, 11, 5, + 203, 25, 11, 5, 203, 20, 11, 5, 203, 57, 11, 5, 203, 45, 11, 5, 203, 92, + 11, 5, 203, 85, 11, 5, 203, 114, 11, 5, 203, 101, 11, 5, 202, 246, 11, 5, + 202, 243, 11, 5, 203, 6, 11, 5, 202, 249, 11, 5, 202, 247, 11, 5, 202, + 248, 11, 5, 202, 226, 11, 5, 202, 225, 11, 5, 202, 232, 11, 5, 202, 229, + 11, 5, 202, 227, 11, 5, 202, 228, 11, 5, 207, 132, 11, 5, 207, 125, 11, + 5, 165, 11, 5, 207, 138, 11, 5, 206, 39, 11, 5, 206, 41, 11, 5, 206, 40, + 11, 5, 206, 124, 11, 5, 206, 112, 11, 5, 206, 163, 11, 5, 206, 128, 11, + 5, 207, 12, 11, 5, 207, 115, 11, 5, 207, 54, 11, 5, 206, 31, 11, 5, 206, + 28, 11, 5, 206, 69, 11, 5, 206, 38, 11, 5, 206, 34, 11, 5, 206, 35, 11, + 5, 206, 13, 11, 5, 206, 12, 11, 5, 206, 18, 11, 5, 206, 16, 11, 5, 206, + 14, 11, 5, 206, 15, 11, 5, 222, 234, 11, 5, 222, 233, 11, 5, 222, 246, + 11, 5, 222, 235, 11, 5, 222, 242, 11, 5, 222, 241, 11, 5, 222, 244, 11, + 5, 222, 243, 11, 5, 222, 172, 11, 5, 222, 171, 11, 5, 222, 174, 11, 5, + 222, 173, 11, 5, 222, 190, 11, 5, 222, 188, 11, 5, 222, 203, 11, 5, 222, + 192, 11, 5, 222, 165, 11, 5, 222, 163, 11, 5, 222, 184, 11, 5, 222, 170, + 11, 5, 222, 167, 11, 5, 222, 168, 11, 5, 222, 157, 11, 5, 222, 156, 11, + 5, 222, 161, 11, 5, 222, 160, 11, 5, 222, 158, 11, 5, 222, 159, 11, 5, + 208, 51, 11, 5, 208, 49, 11, 5, 208, 59, 11, 5, 208, 52, 11, 5, 208, 56, + 11, 5, 208, 55, 11, 5, 208, 58, 11, 5, 208, 57, 11, 5, 207, 255, 11, 5, + 207, 252, 11, 5, 208, 1, 11, 5, 208, 0, 11, 5, 208, 38, 11, 5, 208, 37, + 11, 5, 208, 47, 11, 5, 208, 41, 11, 5, 207, 247, 11, 5, 207, 243, 11, 5, + 208, 35, 11, 5, 207, 251, 11, 5, 207, 249, 11, 5, 207, 250, 11, 5, 207, + 227, 11, 5, 207, 225, 11, 5, 207, 237, 11, 5, 207, 230, 11, 5, 207, 228, + 11, 5, 207, 229, 11, 5, 222, 223, 11, 5, 222, 222, 11, 5, 222, 229, 11, + 5, 222, 224, 11, 5, 222, 226, 11, 5, 222, 225, 11, 5, 222, 228, 11, 5, + 222, 227, 11, 5, 222, 214, 11, 5, 222, 216, 11, 5, 222, 215, 11, 5, 222, + 219, 11, 5, 222, 218, 11, 5, 222, 221, 11, 5, 222, 220, 11, 5, 222, 210, + 11, 5, 222, 209, 11, 5, 222, 217, 11, 5, 222, 213, 11, 5, 222, 211, 11, + 5, 222, 212, 11, 5, 222, 206, 11, 5, 222, 205, 11, 5, 222, 208, 11, 5, + 222, 207, 11, 5, 213, 136, 11, 5, 213, 135, 11, 5, 213, 143, 11, 5, 213, + 137, 11, 5, 213, 139, 11, 5, 213, 138, 11, 5, 213, 142, 11, 5, 213, 140, + 11, 5, 213, 125, 11, 5, 213, 126, 11, 5, 213, 131, 11, 5, 213, 130, 11, + 5, 213, 134, 11, 5, 213, 132, 11, 5, 213, 120, 11, 5, 213, 129, 11, 5, + 213, 124, 11, 5, 213, 121, 11, 5, 213, 122, 11, 5, 213, 115, 11, 5, 213, + 114, 11, 5, 213, 119, 11, 5, 213, 118, 11, 5, 213, 116, 11, 5, 213, 117, + 11, 5, 212, 70, 11, 5, 212, 69, 11, 5, 212, 83, 11, 5, 212, 74, 11, 5, + 212, 79, 11, 5, 212, 78, 11, 5, 212, 81, 11, 5, 212, 80, 11, 5, 212, 55, + 11, 5, 212, 57, 11, 5, 212, 56, 11, 5, 212, 62, 11, 5, 212, 61, 11, 5, + 212, 67, 11, 5, 212, 63, 11, 5, 212, 53, 11, 5, 212, 51, 11, 5, 212, 60, + 11, 5, 212, 54, 11, 5, 192, 198, 11, 5, 192, 197, 11, 5, 192, 207, 11, 5, + 192, 200, 11, 5, 192, 202, 11, 5, 192, 201, 11, 5, 192, 204, 11, 5, 192, + 203, 11, 5, 192, 186, 11, 5, 192, 187, 11, 5, 192, 191, 11, 5, 192, 190, + 11, 5, 192, 196, 11, 5, 192, 194, 11, 5, 192, 163, 11, 5, 192, 161, 11, + 5, 192, 176, 11, 5, 192, 166, 11, 5, 192, 164, 11, 5, 192, 165, 11, 5, + 192, 18, 11, 5, 192, 16, 11, 5, 192, 33, 11, 5, 192, 19, 11, 5, 192, 27, + 11, 5, 192, 26, 11, 5, 192, 30, 11, 5, 192, 28, 11, 5, 191, 198, 11, 5, + 191, 197, 11, 5, 191, 201, 11, 5, 191, 199, 11, 5, 191, 240, 11, 5, 191, + 235, 11, 5, 192, 12, 11, 5, 191, 245, 11, 5, 191, 189, 11, 5, 191, 185, + 11, 5, 191, 225, 11, 5, 191, 196, 11, 5, 191, 192, 11, 5, 191, 193, 11, + 5, 191, 169, 11, 5, 191, 168, 11, 5, 191, 176, 11, 5, 191, 172, 11, 5, + 191, 170, 11, 5, 191, 171, 11, 48, 208, 38, 11, 48, 219, 148, 11, 48, + 221, 122, 11, 48, 212, 74, 11, 48, 238, 139, 11, 48, 201, 143, 11, 48, + 231, 112, 11, 48, 231, 144, 11, 48, 216, 102, 11, 48, 228, 106, 11, 48, + 218, 177, 11, 48, 249, 27, 11, 48, 215, 204, 11, 48, 192, 12, 11, 48, + 208, 133, 11, 48, 228, 100, 11, 48, 199, 171, 11, 48, 231, 242, 11, 48, + 190, 243, 11, 48, 238, 132, 11, 48, 237, 153, 11, 48, 247, 232, 11, 48, + 231, 108, 11, 48, 212, 63, 11, 48, 197, 94, 11, 48, 211, 80, 11, 48, 222, + 210, 11, 48, 191, 2, 11, 48, 208, 110, 11, 48, 229, 67, 11, 48, 192, 18, + 11, 48, 193, 244, 11, 48, 202, 232, 11, 48, 195, 141, 11, 48, 191, 123, + 11, 48, 222, 203, 11, 48, 212, 27, 11, 48, 222, 208, 11, 48, 230, 234, + 11, 48, 222, 228, 11, 48, 193, 48, 11, 48, 235, 91, 11, 48, 202, 248, 11, + 48, 219, 142, 11, 48, 238, 145, 11, 48, 238, 186, 11, 48, 243, 14, 11, + 48, 228, 103, 11, 48, 203, 124, 11, 48, 190, 242, 11, 48, 203, 45, 11, + 48, 243, 129, 11, 48, 190, 212, 11, 48, 214, 191, 11, 48, 222, 24, 219, + 90, 1, 249, 155, 219, 90, 1, 168, 219, 90, 1, 209, 230, 219, 90, 1, 238, + 34, 219, 90, 1, 190, 190, 219, 90, 1, 199, 49, 219, 90, 1, 231, 242, 219, + 90, 1, 155, 219, 90, 1, 221, 217, 219, 90, 1, 223, 34, 219, 90, 1, 247, + 162, 219, 90, 1, 247, 3, 219, 90, 1, 235, 37, 219, 90, 1, 197, 168, 219, + 90, 1, 197, 157, 219, 90, 1, 174, 219, 90, 1, 181, 219, 90, 1, 173, 219, + 90, 1, 188, 219, 90, 1, 191, 71, 219, 90, 1, 191, 123, 219, 90, 1, 214, + 70, 219, 90, 1, 140, 219, 90, 1, 192, 220, 219, 90, 1, 229, 179, 219, 90, + 1, 233, 111, 219, 90, 1, 193, 190, 219, 90, 1, 203, 166, 219, 90, 1, 170, + 219, 90, 1, 231, 93, 219, 90, 1, 65, 219, 90, 1, 252, 27, 219, 90, 1, 71, + 219, 90, 1, 233, 244, 219, 90, 1, 68, 219, 90, 1, 74, 219, 90, 1, 66, + 219, 90, 1, 196, 152, 219, 90, 1, 196, 141, 219, 90, 1, 211, 153, 219, + 90, 1, 163, 215, 71, 198, 193, 219, 90, 1, 163, 215, 9, 209, 75, 219, 90, + 1, 163, 215, 71, 238, 144, 219, 90, 1, 163, 215, 71, 248, 113, 219, 90, + 1, 163, 215, 71, 181, 219, 90, 1, 163, 215, 71, 222, 255, 219, 90, 208, + 154, 242, 76, 219, 90, 208, 154, 232, 82, 201, 64, 59, 5, 234, 190, 59, + 5, 234, 186, 59, 5, 229, 217, 59, 5, 193, 114, 59, 5, 193, 113, 59, 5, + 210, 51, 59, 5, 248, 197, 59, 5, 249, 3, 59, 5, 217, 5, 59, 5, 221, 18, + 59, 5, 216, 134, 59, 5, 231, 180, 59, 5, 233, 54, 59, 5, 195, 148, 59, 5, + 199, 121, 59, 5, 199, 31, 59, 5, 237, 60, 59, 5, 237, 57, 59, 5, 219, + 230, 59, 5, 207, 86, 59, 5, 237, 133, 59, 5, 214, 155, 59, 5, 205, 51, + 59, 5, 203, 112, 59, 5, 191, 84, 59, 5, 191, 61, 59, 5, 247, 36, 59, 5, + 223, 10, 59, 5, 213, 150, 59, 5, 192, 77, 59, 5, 222, 15, 59, 5, 214, 43, + 59, 5, 231, 159, 59, 5, 216, 213, 59, 5, 214, 112, 59, 5, 212, 91, 59, 5, + 68, 59, 5, 223, 164, 59, 5, 229, 160, 59, 5, 229, 130, 59, 5, 193, 86, + 59, 5, 193, 68, 59, 5, 209, 187, 59, 5, 248, 195, 59, 5, 248, 190, 59, 5, + 216, 254, 59, 5, 221, 15, 59, 5, 216, 131, 59, 5, 231, 176, 59, 5, 233, + 25, 59, 5, 195, 69, 59, 5, 198, 193, 59, 5, 199, 11, 59, 5, 237, 52, 59, + 5, 237, 56, 59, 5, 219, 148, 59, 5, 207, 2, 59, 5, 237, 46, 59, 5, 214, + 149, 59, 5, 202, 223, 59, 5, 203, 82, 59, 5, 191, 30, 59, 5, 191, 57, 59, + 5, 243, 31, 59, 5, 222, 246, 59, 5, 213, 143, 59, 5, 192, 33, 59, 5, 221, + 168, 59, 5, 214, 35, 59, 5, 231, 55, 59, 5, 216, 102, 59, 5, 213, 221, + 59, 5, 212, 83, 59, 5, 65, 59, 5, 251, 134, 59, 5, 214, 65, 59, 5, 140, + 59, 5, 230, 58, 59, 5, 193, 190, 59, 5, 193, 164, 59, 5, 168, 59, 5, 248, + 205, 59, 5, 249, 155, 59, 5, 217, 13, 59, 5, 221, 23, 59, 5, 221, 21, 59, + 5, 216, 138, 59, 5, 231, 184, 59, 5, 233, 111, 59, 5, 195, 188, 59, 5, + 190, 190, 59, 5, 199, 49, 59, 5, 237, 70, 59, 5, 237, 59, 59, 5, 173, 59, + 5, 165, 59, 5, 238, 34, 59, 5, 214, 164, 59, 5, 188, 59, 5, 203, 166, 59, + 5, 191, 123, 59, 5, 191, 71, 59, 5, 247, 162, 59, 5, 223, 34, 59, 5, 213, + 159, 59, 5, 170, 59, 5, 155, 59, 5, 222, 89, 59, 5, 214, 49, 59, 5, 231, + 242, 59, 5, 174, 59, 5, 181, 59, 5, 212, 103, 59, 5, 211, 89, 59, 5, 211, + 84, 59, 5, 228, 254, 59, 5, 193, 29, 59, 5, 193, 25, 59, 5, 209, 39, 59, + 5, 248, 193, 59, 5, 248, 99, 59, 5, 216, 249, 59, 5, 221, 13, 59, 5, 216, + 127, 59, 5, 231, 172, 59, 5, 232, 164, 59, 5, 195, 8, 59, 5, 198, 59, 59, + 5, 198, 235, 59, 5, 237, 49, 59, 5, 237, 54, 59, 5, 219, 10, 59, 5, 206, + 135, 59, 5, 236, 148, 59, 5, 214, 136, 59, 5, 202, 17, 59, 5, 203, 49, + 59, 5, 191, 4, 59, 5, 191, 52, 59, 5, 239, 20, 59, 5, 222, 193, 59, 5, + 213, 133, 59, 5, 191, 246, 59, 5, 221, 43, 59, 5, 214, 33, 59, 5, 230, + 247, 59, 5, 215, 213, 59, 5, 213, 28, 59, 5, 212, 64, 59, 5, 66, 59, 5, + 196, 113, 59, 5, 228, 161, 59, 5, 228, 144, 59, 5, 193, 0, 59, 5, 192, + 249, 59, 5, 208, 167, 59, 5, 248, 192, 59, 5, 248, 12, 59, 5, 216, 248, + 59, 5, 221, 11, 59, 5, 216, 126, 59, 5, 231, 171, 59, 5, 232, 88, 59, 5, + 193, 249, 59, 5, 197, 94, 59, 5, 198, 213, 59, 5, 237, 47, 59, 5, 237, + 53, 59, 5, 218, 227, 59, 5, 206, 69, 59, 5, 235, 91, 59, 5, 214, 131, 59, + 5, 201, 5, 59, 5, 203, 6, 59, 5, 190, 251, 59, 5, 191, 48, 59, 5, 238, + 197, 59, 5, 222, 184, 59, 5, 213, 129, 59, 5, 191, 225, 59, 5, 220, 234, + 59, 5, 214, 32, 59, 5, 230, 181, 59, 5, 215, 157, 59, 5, 212, 180, 59, 5, + 212, 60, 59, 5, 74, 59, 5, 211, 106, 59, 5, 213, 247, 59, 5, 229, 25, 59, + 5, 229, 1, 59, 5, 193, 48, 59, 5, 193, 30, 59, 5, 209, 75, 59, 5, 248, + 194, 59, 5, 248, 113, 59, 5, 216, 250, 59, 5, 221, 14, 59, 5, 216, 129, + 59, 5, 231, 174, 59, 5, 231, 173, 59, 5, 232, 177, 59, 5, 195, 24, 59, 5, + 159, 59, 5, 198, 241, 59, 5, 237, 50, 59, 5, 237, 55, 59, 5, 219, 45, 59, + 5, 206, 163, 59, 5, 236, 176, 59, 5, 214, 140, 59, 5, 202, 47, 59, 5, + 203, 57, 59, 5, 191, 7, 59, 5, 191, 54, 59, 5, 242, 101, 59, 5, 222, 203, + 59, 5, 213, 134, 59, 5, 192, 12, 59, 5, 221, 69, 59, 5, 214, 34, 59, 5, + 231, 5, 59, 5, 216, 14, 59, 5, 213, 45, 59, 5, 212, 67, 59, 5, 71, 59, 5, + 234, 105, 59, 5, 214, 54, 59, 5, 229, 247, 59, 5, 229, 200, 59, 5, 193, + 125, 59, 5, 193, 108, 59, 5, 210, 65, 59, 5, 248, 198, 59, 5, 249, 19, + 59, 5, 217, 6, 59, 5, 221, 19, 59, 5, 221, 17, 59, 5, 216, 135, 59, 5, + 231, 181, 59, 5, 231, 179, 59, 5, 233, 61, 59, 5, 195, 153, 59, 5, 199, + 145, 59, 5, 199, 33, 59, 5, 237, 61, 59, 5, 237, 58, 59, 5, 219, 240, 59, + 5, 207, 115, 59, 5, 237, 148, 59, 5, 214, 156, 59, 5, 205, 69, 59, 5, + 203, 114, 59, 5, 191, 87, 59, 5, 191, 62, 59, 5, 247, 44, 59, 5, 223, 12, + 59, 5, 213, 152, 59, 5, 192, 80, 59, 5, 222, 24, 59, 5, 214, 44, 59, 5, + 214, 40, 59, 5, 231, 167, 59, 5, 231, 153, 59, 5, 216, 234, 59, 5, 214, + 123, 59, 5, 212, 92, 59, 5, 214, 72, 59, 5, 219, 192, 59, 242, 76, 59, + 232, 82, 201, 64, 59, 208, 15, 77, 59, 5, 214, 139, 233, 111, 59, 5, 214, + 139, 155, 59, 5, 214, 139, 202, 17, 59, 16, 233, 50, 59, 16, 222, 13, 59, + 16, 198, 140, 59, 16, 213, 188, 59, 16, 249, 97, 59, 16, 233, 110, 59, + 16, 199, 245, 59, 16, 237, 238, 59, 16, 236, 147, 59, 16, 220, 210, 59, + 16, 198, 63, 59, 16, 236, 175, 59, 16, 222, 194, 59, 17, 191, 77, 59, 17, + 107, 59, 17, 109, 59, 17, 138, 59, 17, 134, 59, 17, 150, 59, 17, 169, 59, + 17, 175, 59, 17, 171, 59, 17, 178, 59, 5, 214, 139, 174, 59, 5, 214, 139, + 236, 176, 38, 6, 1, 191, 81, 38, 2, 1, 191, 81, 38, 6, 1, 235, 32, 38, 2, + 1, 235, 32, 38, 6, 1, 207, 19, 235, 34, 38, 2, 1, 207, 19, 235, 34, 38, + 6, 1, 223, 85, 38, 2, 1, 223, 85, 38, 6, 1, 236, 193, 38, 2, 1, 236, 193, + 38, 6, 1, 215, 221, 196, 128, 38, 2, 1, 215, 221, 196, 128, 38, 6, 1, + 248, 26, 211, 112, 38, 2, 1, 248, 26, 211, 112, 38, 6, 1, 214, 84, 192, + 62, 38, 2, 1, 214, 84, 192, 62, 38, 6, 1, 192, 59, 4, 249, 149, 192, 62, + 38, 2, 1, 192, 59, 4, 249, 149, 192, 62, 38, 6, 1, 223, 83, 192, 95, 38, + 2, 1, 223, 83, 192, 95, 38, 6, 1, 207, 19, 191, 225, 38, 2, 1, 207, 19, + 191, 225, 38, 6, 1, 223, 83, 65, 38, 2, 1, 223, 83, 65, 38, 6, 1, 242, + 221, 219, 85, 191, 190, 38, 2, 1, 242, 221, 219, 85, 191, 190, 38, 6, 1, + 248, 133, 191, 190, 38, 2, 1, 248, 133, 191, 190, 38, 6, 1, 223, 83, 242, + 221, 219, 85, 191, 190, 38, 2, 1, 223, 83, 242, 221, 219, 85, 191, 190, + 38, 6, 1, 192, 14, 38, 2, 1, 192, 14, 38, 6, 1, 207, 19, 197, 161, 38, 2, + 1, 207, 19, 197, 161, 38, 6, 1, 202, 33, 237, 148, 38, 2, 1, 202, 33, + 237, 148, 38, 6, 1, 202, 33, 234, 142, 38, 2, 1, 202, 33, 234, 142, 38, + 6, 1, 202, 33, 234, 116, 38, 2, 1, 202, 33, 234, 116, 38, 6, 1, 215, 225, + 74, 38, 2, 1, 215, 225, 74, 38, 6, 1, 248, 166, 74, 38, 2, 1, 248, 166, + 74, 38, 6, 1, 55, 215, 225, 74, 38, 2, 1, 55, 215, 225, 74, 38, 1, 215, + 132, 74, 33, 38, 193, 226, 33, 38, 199, 96, 216, 50, 56, 33, 38, 228, + 143, 216, 50, 56, 33, 38, 198, 230, 216, 50, 56, 202, 96, 250, 195, 33, + 38, 1, 196, 125, 223, 228, 33, 38, 1, 68, 33, 38, 1, 192, 33, 33, 38, 1, + 66, 33, 38, 1, 230, 19, 56, 33, 38, 1, 192, 58, 33, 38, 1, 202, 33, 56, + 33, 38, 1, 211, 112, 33, 38, 222, 37, 33, 38, 210, 72, 38, 222, 37, 38, + 210, 72, 38, 6, 1, 235, 47, 38, 2, 1, 235, 47, 38, 6, 1, 235, 23, 38, 2, + 1, 235, 23, 38, 6, 1, 191, 38, 38, 2, 1, 191, 38, 38, 6, 1, 247, 60, 38, + 2, 1, 247, 60, 38, 6, 1, 235, 19, 38, 2, 1, 235, 19, 38, 6, 1, 199, 146, 4, 82, 102, 38, 2, 1, 199, 146, 4, 82, 102, 38, 6, 1, 197, 41, 38, 2, 1, 197, 41, 38, 6, 1, 197, 136, 38, 2, 1, 197, 136, 38, 6, 1, 197, 141, 38, 2, 1, 197, 141, 38, 6, 1, 199, 151, 38, 2, 1, 199, 151, 38, 6, 1, 228, - 122, 38, 2, 1, 228, 122, 38, 6, 1, 202, 237, 38, 2, 1, 202, 237, 38, 6, - 1, 55, 74, 38, 2, 1, 55, 74, 38, 6, 1, 238, 214, 74, 38, 2, 1, 238, 214, - 74, 52, 1, 38, 230, 17, 56, 52, 1, 38, 202, 32, 56, 33, 38, 1, 234, 181, - 33, 38, 1, 223, 81, 71, 26, 1, 65, 26, 1, 155, 26, 1, 66, 26, 1, 220, - 232, 26, 1, 234, 188, 26, 1, 207, 84, 26, 1, 199, 226, 26, 1, 74, 26, 1, - 212, 81, 26, 1, 68, 26, 1, 173, 26, 1, 168, 26, 1, 206, 195, 26, 1, 206, - 242, 26, 1, 219, 227, 26, 1, 216, 210, 26, 1, 199, 245, 26, 1, 214, 160, - 26, 1, 213, 155, 26, 1, 218, 168, 26, 1, 200, 160, 26, 1, 215, 155, 26, - 1, 203, 76, 26, 1, 202, 222, 26, 1, 203, 86, 26, 1, 203, 248, 26, 1, 220, - 149, 26, 1, 221, 241, 26, 1, 212, 146, 26, 1, 212, 178, 26, 1, 213, 126, - 26, 1, 191, 243, 26, 1, 203, 5, 26, 1, 191, 194, 26, 1, 170, 26, 1, 212, - 215, 26, 1, 221, 227, 26, 1, 209, 232, 26, 1, 213, 148, 26, 1, 212, 195, - 26, 1, 208, 156, 26, 1, 192, 253, 26, 1, 210, 49, 26, 1, 233, 52, 26, 1, - 206, 68, 26, 1, 218, 225, 26, 1, 216, 100, 26, 1, 213, 219, 26, 1, 207, - 20, 26, 1, 207, 163, 26, 1, 221, 251, 26, 1, 213, 252, 26, 1, 214, 47, - 26, 1, 214, 68, 26, 1, 203, 56, 26, 1, 208, 161, 26, 1, 232, 86, 26, 1, - 232, 167, 26, 1, 193, 190, 26, 1, 180, 26, 1, 219, 146, 26, 1, 209, 185, - 26, 1, 219, 0, 26, 1, 221, 67, 26, 1, 217, 1, 26, 1, 207, 55, 26, 1, 216, - 186, 26, 1, 174, 26, 1, 198, 193, 26, 1, 221, 166, 26, 1, 216, 12, 26, 1, - 217, 9, 26, 1, 199, 73, 26, 1, 221, 21, 26, 1, 199, 95, 26, 1, 212, 181, - 26, 1, 205, 150, 26, 1, 233, 105, 26, 1, 221, 24, 26, 1, 221, 57, 26, 33, - 87, 221, 34, 26, 33, 87, 197, 79, 26, 213, 154, 26, 232, 80, 201, 63, 26, - 242, 83, 26, 242, 74, 26, 204, 25, 26, 208, 13, 77, 52, 1, 243, 80, 163, - 192, 22, 209, 132, 52, 1, 243, 80, 163, 192, 107, 209, 132, 52, 1, 243, - 80, 163, 192, 22, 203, 137, 52, 1, 243, 80, 163, 192, 107, 203, 137, 52, - 1, 243, 80, 163, 192, 22, 208, 33, 52, 1, 243, 80, 163, 192, 107, 208, - 33, 52, 1, 243, 80, 163, 192, 22, 206, 68, 52, 1, 243, 80, 163, 192, 107, - 206, 68, 52, 1, 233, 200, 235, 138, 163, 164, 52, 1, 137, 235, 138, 163, - 164, 52, 1, 216, 87, 235, 138, 163, 164, 52, 1, 130, 235, 138, 163, 164, - 52, 1, 233, 199, 235, 138, 163, 164, 52, 1, 233, 200, 235, 138, 219, 216, - 163, 164, 52, 1, 137, 235, 138, 219, 216, 163, 164, 52, 1, 216, 87, 235, - 138, 219, 216, 163, 164, 52, 1, 130, 235, 138, 219, 216, 163, 164, 52, 1, - 233, 199, 235, 138, 219, 216, 163, 164, 52, 1, 233, 200, 219, 216, 163, - 164, 52, 1, 137, 219, 216, 163, 164, 52, 1, 216, 87, 219, 216, 163, 164, - 52, 1, 130, 219, 216, 163, 164, 52, 1, 233, 199, 219, 216, 163, 164, 52, - 1, 75, 81, 164, 52, 1, 75, 202, 97, 52, 1, 75, 228, 241, 164, 52, 1, 110, - 50, 239, 2, 251, 115, 52, 1, 207, 147, 133, 57, 52, 1, 207, 147, 144, 57, - 52, 1, 207, 147, 233, 216, 77, 52, 1, 207, 147, 223, 93, 233, 216, 77, - 52, 1, 130, 223, 93, 233, 216, 77, 52, 1, 201, 38, 23, 137, 198, 79, 52, - 1, 201, 38, 23, 130, 198, 79, 8, 6, 1, 234, 175, 251, 192, 8, 2, 1, 234, - 175, 251, 192, 8, 6, 1, 234, 175, 251, 230, 8, 2, 1, 234, 175, 251, 230, - 8, 6, 1, 229, 196, 8, 2, 1, 229, 196, 8, 6, 1, 196, 241, 8, 2, 1, 196, - 241, 8, 6, 1, 197, 248, 8, 2, 1, 197, 248, 8, 6, 1, 238, 192, 8, 2, 1, - 238, 192, 8, 6, 1, 238, 193, 4, 242, 74, 8, 2, 1, 238, 193, 4, 242, 74, - 8, 1, 2, 6, 233, 175, 8, 1, 2, 6, 206, 8, 8, 6, 1, 252, 206, 8, 2, 1, - 252, 206, 8, 6, 1, 251, 68, 8, 2, 1, 251, 68, 8, 6, 1, 250, 163, 8, 2, 1, - 250, 163, 8, 6, 1, 250, 146, 8, 2, 1, 250, 146, 8, 6, 1, 250, 147, 4, - 228, 241, 164, 8, 2, 1, 250, 147, 4, 228, 241, 164, 8, 6, 1, 250, 131, 8, - 2, 1, 250, 131, 8, 6, 1, 207, 18, 247, 194, 4, 236, 140, 8, 2, 1, 207, - 18, 247, 194, 4, 236, 140, 8, 6, 1, 222, 153, 4, 106, 8, 2, 1, 222, 153, - 4, 106, 8, 6, 1, 222, 153, 4, 237, 39, 106, 8, 2, 1, 222, 153, 4, 237, - 39, 106, 8, 6, 1, 222, 153, 4, 201, 28, 23, 237, 39, 106, 8, 2, 1, 222, - 153, 4, 201, 28, 23, 237, 39, 106, 8, 6, 1, 248, 22, 172, 8, 2, 1, 248, - 22, 172, 8, 6, 1, 220, 143, 4, 137, 106, 8, 2, 1, 220, 143, 4, 137, 106, - 8, 6, 1, 187, 4, 179, 201, 28, 210, 255, 8, 2, 1, 187, 4, 179, 201, 28, - 210, 255, 8, 6, 1, 187, 4, 219, 4, 8, 2, 1, 187, 4, 219, 4, 8, 6, 1, 211, - 87, 8, 2, 1, 211, 87, 8, 6, 1, 210, 237, 4, 201, 28, 198, 216, 237, 87, - 8, 2, 1, 210, 237, 4, 201, 28, 198, 216, 237, 87, 8, 6, 1, 210, 237, 4, - 232, 188, 8, 2, 1, 210, 237, 4, 232, 188, 8, 6, 1, 210, 237, 4, 201, 182, - 199, 215, 8, 2, 1, 210, 237, 4, 201, 182, 199, 215, 8, 6, 1, 208, 105, 4, - 201, 28, 198, 216, 237, 87, 8, 2, 1, 208, 105, 4, 201, 28, 198, 216, 237, - 87, 8, 6, 1, 208, 105, 4, 237, 39, 106, 8, 2, 1, 208, 105, 4, 237, 39, - 106, 8, 6, 1, 207, 222, 206, 116, 8, 2, 1, 207, 222, 206, 116, 8, 6, 1, - 206, 49, 206, 116, 8, 2, 1, 206, 49, 206, 116, 8, 6, 1, 196, 13, 4, 237, - 39, 106, 8, 2, 1, 196, 13, 4, 237, 39, 106, 8, 6, 1, 193, 235, 8, 2, 1, + 124, 38, 2, 1, 228, 124, 38, 6, 1, 202, 238, 38, 2, 1, 202, 238, 38, 6, + 1, 55, 74, 38, 2, 1, 55, 74, 38, 6, 1, 238, 216, 74, 38, 2, 1, 238, 216, + 74, 52, 1, 38, 230, 19, 56, 52, 1, 38, 202, 33, 56, 33, 38, 1, 234, 183, + 33, 38, 1, 223, 83, 71, 26, 1, 65, 26, 1, 155, 26, 1, 66, 26, 1, 220, + 234, 26, 1, 234, 190, 26, 1, 207, 86, 26, 1, 199, 226, 26, 1, 74, 26, 1, + 212, 83, 26, 1, 68, 26, 1, 173, 26, 1, 168, 26, 1, 206, 196, 26, 1, 206, + 243, 26, 1, 219, 229, 26, 1, 216, 212, 26, 1, 199, 245, 26, 1, 214, 162, + 26, 1, 213, 157, 26, 1, 218, 170, 26, 1, 200, 160, 26, 1, 215, 157, 26, + 1, 203, 77, 26, 1, 202, 223, 26, 1, 203, 87, 26, 1, 203, 249, 26, 1, 220, + 151, 26, 1, 221, 243, 26, 1, 212, 148, 26, 1, 212, 180, 26, 1, 213, 128, + 26, 1, 191, 243, 26, 1, 203, 6, 26, 1, 191, 194, 26, 1, 170, 26, 1, 212, + 217, 26, 1, 221, 229, 26, 1, 209, 234, 26, 1, 213, 150, 26, 1, 212, 197, + 26, 1, 208, 158, 26, 1, 192, 253, 26, 1, 210, 51, 26, 1, 233, 54, 26, 1, + 206, 69, 26, 1, 218, 227, 26, 1, 216, 102, 26, 1, 213, 221, 26, 1, 207, + 21, 26, 1, 207, 165, 26, 1, 221, 253, 26, 1, 213, 254, 26, 1, 214, 49, + 26, 1, 214, 70, 26, 1, 203, 57, 26, 1, 208, 163, 26, 1, 232, 88, 26, 1, + 232, 169, 26, 1, 193, 190, 26, 1, 181, 26, 1, 219, 148, 26, 1, 209, 187, + 26, 1, 219, 2, 26, 1, 221, 69, 26, 1, 217, 3, 26, 1, 207, 56, 26, 1, 216, + 188, 26, 1, 174, 26, 1, 198, 193, 26, 1, 221, 168, 26, 1, 216, 14, 26, 1, + 217, 11, 26, 1, 199, 73, 26, 1, 221, 23, 26, 1, 199, 95, 26, 1, 212, 183, + 26, 1, 205, 151, 26, 1, 233, 107, 26, 1, 221, 26, 26, 1, 221, 59, 26, 33, + 87, 221, 36, 26, 33, 87, 197, 79, 26, 213, 156, 26, 232, 82, 201, 64, 26, + 242, 85, 26, 242, 76, 26, 204, 26, 26, 208, 15, 77, 52, 1, 243, 82, 163, + 192, 22, 209, 134, 52, 1, 243, 82, 163, 192, 107, 209, 134, 52, 1, 243, + 82, 163, 192, 22, 203, 138, 52, 1, 243, 82, 163, 192, 107, 203, 138, 52, + 1, 243, 82, 163, 192, 22, 208, 35, 52, 1, 243, 82, 163, 192, 107, 208, + 35, 52, 1, 243, 82, 163, 192, 22, 206, 69, 52, 1, 243, 82, 163, 192, 107, + 206, 69, 52, 1, 233, 202, 235, 140, 163, 164, 52, 1, 137, 235, 140, 163, + 164, 52, 1, 216, 89, 235, 140, 163, 164, 52, 1, 130, 235, 140, 163, 164, + 52, 1, 233, 201, 235, 140, 163, 164, 52, 1, 233, 202, 235, 140, 219, 218, + 163, 164, 52, 1, 137, 235, 140, 219, 218, 163, 164, 52, 1, 216, 89, 235, + 140, 219, 218, 163, 164, 52, 1, 130, 235, 140, 219, 218, 163, 164, 52, 1, + 233, 201, 235, 140, 219, 218, 163, 164, 52, 1, 233, 202, 219, 218, 163, + 164, 52, 1, 137, 219, 218, 163, 164, 52, 1, 216, 89, 219, 218, 163, 164, + 52, 1, 130, 219, 218, 163, 164, 52, 1, 233, 201, 219, 218, 163, 164, 52, + 1, 75, 81, 164, 52, 1, 75, 202, 98, 52, 1, 75, 228, 243, 164, 52, 1, 110, + 50, 239, 4, 251, 117, 52, 1, 207, 149, 133, 57, 52, 1, 207, 149, 144, 57, + 52, 1, 207, 149, 233, 218, 77, 52, 1, 207, 149, 223, 95, 233, 218, 77, + 52, 1, 130, 223, 95, 233, 218, 77, 52, 1, 201, 39, 23, 137, 198, 79, 52, + 1, 201, 39, 23, 130, 198, 79, 8, 6, 1, 234, 177, 251, 194, 8, 2, 1, 234, + 177, 251, 194, 8, 6, 1, 234, 177, 251, 232, 8, 2, 1, 234, 177, 251, 232, + 8, 6, 1, 229, 198, 8, 2, 1, 229, 198, 8, 6, 1, 196, 241, 8, 2, 1, 196, + 241, 8, 6, 1, 197, 248, 8, 2, 1, 197, 248, 8, 6, 1, 238, 194, 8, 2, 1, + 238, 194, 8, 6, 1, 238, 195, 4, 242, 76, 8, 2, 1, 238, 195, 4, 242, 76, + 8, 1, 2, 6, 233, 177, 8, 1, 2, 6, 206, 9, 8, 6, 1, 252, 208, 8, 2, 1, + 252, 208, 8, 6, 1, 251, 70, 8, 2, 1, 251, 70, 8, 6, 1, 250, 165, 8, 2, 1, + 250, 165, 8, 6, 1, 250, 148, 8, 2, 1, 250, 148, 8, 6, 1, 250, 149, 4, + 228, 243, 164, 8, 2, 1, 250, 149, 4, 228, 243, 164, 8, 6, 1, 250, 133, 8, + 2, 1, 250, 133, 8, 6, 1, 207, 19, 247, 196, 4, 236, 142, 8, 2, 1, 207, + 19, 247, 196, 4, 236, 142, 8, 6, 1, 222, 155, 4, 106, 8, 2, 1, 222, 155, + 4, 106, 8, 6, 1, 222, 155, 4, 237, 41, 106, 8, 2, 1, 222, 155, 4, 237, + 41, 106, 8, 6, 1, 222, 155, 4, 201, 29, 23, 237, 41, 106, 8, 2, 1, 222, + 155, 4, 201, 29, 23, 237, 41, 106, 8, 6, 1, 248, 24, 172, 8, 2, 1, 248, + 24, 172, 8, 6, 1, 220, 145, 4, 137, 106, 8, 2, 1, 220, 145, 4, 137, 106, + 8, 6, 1, 187, 4, 180, 201, 29, 211, 1, 8, 2, 1, 187, 4, 180, 201, 29, + 211, 1, 8, 6, 1, 187, 4, 219, 6, 8, 2, 1, 187, 4, 219, 6, 8, 6, 1, 211, + 89, 8, 2, 1, 211, 89, 8, 6, 1, 210, 239, 4, 201, 29, 198, 216, 237, 89, + 8, 2, 1, 210, 239, 4, 201, 29, 198, 216, 237, 89, 8, 6, 1, 210, 239, 4, + 232, 190, 8, 2, 1, 210, 239, 4, 232, 190, 8, 6, 1, 210, 239, 4, 201, 183, + 199, 215, 8, 2, 1, 210, 239, 4, 201, 183, 199, 215, 8, 6, 1, 208, 107, 4, + 201, 29, 198, 216, 237, 89, 8, 2, 1, 208, 107, 4, 201, 29, 198, 216, 237, + 89, 8, 6, 1, 208, 107, 4, 237, 41, 106, 8, 2, 1, 208, 107, 4, 237, 41, + 106, 8, 6, 1, 207, 224, 206, 117, 8, 2, 1, 207, 224, 206, 117, 8, 6, 1, + 206, 50, 206, 117, 8, 2, 1, 206, 50, 206, 117, 8, 6, 1, 196, 13, 4, 237, + 41, 106, 8, 2, 1, 196, 13, 4, 237, 41, 106, 8, 6, 1, 193, 235, 8, 2, 1, 193, 235, 8, 6, 1, 195, 33, 191, 166, 8, 2, 1, 195, 33, 191, 166, 8, 6, 1, 198, 234, 4, 106, 8, 2, 1, 198, 234, 4, 106, 8, 6, 1, 198, 234, 4, - 201, 28, 198, 216, 237, 87, 8, 2, 1, 198, 234, 4, 201, 28, 198, 216, 237, - 87, 8, 6, 1, 195, 142, 8, 2, 1, 195, 142, 8, 6, 1, 233, 255, 8, 2, 1, - 233, 255, 8, 6, 1, 223, 68, 8, 2, 1, 223, 68, 8, 6, 1, 239, 57, 8, 2, 1, - 239, 57, 52, 1, 196, 45, 8, 2, 1, 235, 77, 8, 2, 1, 218, 208, 8, 2, 1, - 215, 123, 8, 2, 1, 212, 137, 8, 2, 1, 206, 48, 8, 1, 2, 6, 206, 48, 8, 2, - 1, 197, 76, 8, 2, 1, 196, 120, 8, 6, 1, 223, 115, 238, 127, 8, 2, 1, 223, - 115, 238, 127, 8, 6, 1, 223, 115, 233, 175, 8, 2, 1, 223, 115, 233, 175, - 8, 6, 1, 223, 115, 232, 51, 8, 6, 1, 153, 223, 115, 232, 51, 8, 2, 1, - 153, 223, 115, 232, 51, 8, 6, 1, 153, 172, 8, 2, 1, 153, 172, 8, 6, 1, - 223, 115, 146, 8, 2, 1, 223, 115, 146, 8, 6, 1, 223, 115, 206, 8, 8, 2, - 1, 223, 115, 206, 8, 8, 6, 1, 223, 115, 200, 43, 8, 2, 1, 223, 115, 200, - 43, 52, 1, 130, 243, 2, 252, 60, 52, 1, 242, 83, 52, 1, 203, 40, 234, 43, - 56, 8, 6, 1, 205, 156, 8, 2, 1, 205, 156, 8, 6, 1, 153, 230, 116, 8, 2, - 1, 220, 143, 4, 207, 24, 228, 251, 23, 248, 231, 8, 1, 202, 163, 236, - 140, 8, 6, 1, 215, 62, 4, 237, 87, 8, 2, 1, 215, 62, 4, 237, 87, 8, 6, 1, - 247, 194, 4, 164, 8, 2, 1, 247, 194, 4, 164, 8, 2, 1, 247, 194, 4, 210, - 192, 102, 8, 2, 1, 230, 117, 4, 210, 192, 102, 8, 6, 1, 78, 4, 232, 188, - 8, 2, 1, 78, 4, 232, 188, 8, 6, 1, 233, 176, 4, 106, 8, 2, 1, 233, 176, - 4, 106, 8, 6, 1, 195, 15, 252, 25, 8, 2, 1, 195, 15, 252, 25, 8, 6, 1, - 195, 15, 211, 151, 8, 2, 1, 195, 15, 211, 151, 8, 6, 1, 195, 15, 196, - 152, 8, 2, 1, 195, 15, 196, 152, 8, 6, 1, 232, 52, 4, 211, 172, 106, 8, - 2, 1, 232, 52, 4, 211, 172, 106, 8, 6, 1, 222, 153, 4, 211, 172, 106, 8, - 2, 1, 222, 153, 4, 211, 172, 106, 8, 6, 1, 215, 62, 4, 211, 172, 106, 8, - 2, 1, 215, 62, 4, 211, 172, 106, 8, 6, 1, 207, 222, 4, 211, 172, 106, 8, - 2, 1, 207, 222, 4, 211, 172, 106, 8, 6, 1, 206, 9, 4, 211, 172, 106, 8, - 2, 1, 206, 9, 4, 211, 172, 106, 8, 6, 1, 230, 117, 4, 102, 8, 6, 1, 207, - 18, 211, 77, 71, 8, 6, 1, 27, 232, 51, 8, 6, 1, 220, 143, 4, 248, 231, 8, - 6, 1, 2, 6, 68, 8, 1, 2, 6, 208, 104, 8, 6, 1, 153, 222, 152, 8, 6, 1, - 153, 200, 43, 8, 6, 1, 223, 36, 4, 238, 212, 8, 6, 1, 243, 95, 8, 6, 1, - 248, 212, 8, 2, 1, 248, 212, 8, 6, 1, 211, 110, 8, 2, 1, 211, 110, 8, 6, - 1, 126, 4, 106, 8, 2, 1, 126, 4, 106, 8, 6, 1, 231, 11, 65, 8, 2, 1, 231, - 11, 65, 8, 6, 1, 231, 11, 68, 8, 2, 1, 231, 11, 68, 8, 6, 1, 231, 11, 66, - 8, 2, 1, 231, 11, 66, 8, 6, 1, 39, 209, 49, 74, 8, 2, 1, 39, 209, 49, 74, - 8, 6, 1, 251, 112, 193, 224, 8, 2, 1, 251, 112, 193, 224, 8, 6, 1, 247, - 194, 4, 210, 192, 102, 8, 6, 1, 206, 9, 4, 102, 8, 6, 1, 191, 167, 4, - 210, 192, 102, 8, 6, 1, 238, 128, 4, 203, 40, 201, 28, 210, 255, 8, 2, 1, - 238, 128, 4, 203, 40, 201, 28, 210, 255, 8, 6, 1, 206, 9, 4, 203, 40, - 201, 28, 210, 255, 8, 2, 1, 206, 9, 4, 203, 40, 201, 28, 210, 255, 8, 6, - 1, 242, 219, 223, 115, 232, 51, 8, 2, 1, 242, 219, 223, 115, 232, 51, 8, - 2, 1, 55, 198, 233, 8, 2, 1, 55, 192, 238, 8, 6, 1, 82, 205, 79, 206, 8, - 8, 2, 1, 82, 205, 79, 206, 8, 8, 6, 1, 202, 195, 206, 8, 8, 2, 1, 202, - 195, 206, 8, 52, 1, 6, 247, 193, 52, 1, 6, 233, 175, 52, 1, 6, 208, 104, - 8, 6, 1, 207, 18, 132, 230, 116, 8, 2, 1, 207, 18, 132, 230, 116, 8, 234, - 50, 1, 202, 206, 68, 52, 1, 6, 230, 117, 4, 106, 52, 1, 2, 34, 211, 151, - 8, 1, 2, 6, 153, 218, 168, 8, 234, 50, 1, 207, 18, 233, 175, 8, 234, 50, - 1, 207, 18, 210, 236, 8, 234, 50, 1, 223, 93, 218, 168, 8, 234, 50, 1, - 228, 74, 219, 10, 8, 234, 50, 1, 251, 14, 218, 168, 200, 124, 214, 238, - 1, 65, 200, 124, 214, 238, 1, 68, 200, 124, 214, 238, 3, 235, 54, 200, - 124, 214, 238, 1, 66, 200, 124, 214, 238, 1, 71, 200, 124, 214, 238, 1, - 74, 200, 124, 214, 238, 3, 230, 11, 200, 124, 214, 238, 1, 221, 67, 200, - 124, 214, 238, 1, 221, 183, 200, 124, 214, 238, 1, 231, 3, 200, 124, 214, - 238, 1, 231, 63, 200, 124, 214, 238, 3, 251, 71, 200, 124, 214, 238, 1, - 242, 99, 200, 124, 214, 238, 1, 243, 68, 200, 124, 214, 238, 1, 222, 201, - 200, 124, 214, 238, 1, 222, 246, 200, 124, 214, 238, 1, 197, 109, 200, - 124, 214, 238, 1, 197, 115, 200, 124, 214, 238, 1, 237, 161, 200, 124, - 214, 238, 1, 237, 170, 200, 124, 214, 238, 1, 159, 200, 124, 214, 238, 1, - 198, 241, 200, 124, 214, 238, 1, 236, 174, 200, 124, 214, 238, 1, 237, - 48, 200, 124, 214, 238, 1, 213, 43, 200, 124, 214, 238, 1, 209, 73, 200, - 124, 214, 238, 1, 209, 199, 200, 124, 214, 238, 1, 248, 111, 200, 124, - 214, 238, 1, 248, 192, 200, 124, 214, 238, 1, 216, 12, 200, 124, 214, - 238, 1, 206, 162, 200, 124, 214, 238, 1, 219, 43, 200, 124, 214, 238, 1, - 206, 95, 200, 124, 214, 238, 1, 202, 46, 200, 124, 214, 238, 1, 229, 23, - 200, 124, 214, 238, 18, 3, 65, 200, 124, 214, 238, 18, 3, 68, 200, 124, - 214, 238, 18, 3, 66, 200, 124, 214, 238, 18, 3, 71, 200, 124, 214, 238, - 18, 3, 211, 87, 200, 124, 214, 238, 209, 63, 217, 55, 200, 124, 214, 238, - 209, 63, 217, 54, 200, 124, 214, 238, 209, 63, 217, 53, 200, 124, 214, - 238, 209, 63, 217, 52, 200, 124, 214, 238, 3, 251, 157, 230, 11, 186, - 223, 146, 232, 118, 91, 208, 22, 186, 223, 146, 232, 118, 91, 230, 70, - 186, 223, 146, 232, 118, 115, 208, 20, 186, 223, 146, 232, 118, 91, 202, - 128, 186, 223, 146, 232, 118, 91, 234, 159, 186, 223, 146, 232, 118, 115, - 202, 125, 186, 223, 146, 208, 23, 77, 186, 223, 146, 209, 107, 77, 186, - 223, 146, 206, 36, 77, 186, 223, 146, 208, 25, 77, 209, 224, 1, 155, 209, - 224, 1, 221, 215, 209, 224, 1, 231, 240, 209, 224, 1, 214, 68, 209, 224, - 1, 247, 160, 209, 224, 1, 247, 1, 209, 224, 1, 223, 32, 209, 224, 1, 212, - 101, 209, 224, 1, 190, 190, 209, 224, 1, 199, 49, 209, 224, 1, 238, 32, - 209, 224, 1, 180, 209, 224, 1, 168, 209, 224, 1, 209, 228, 209, 224, 1, - 249, 153, 209, 224, 1, 174, 209, 224, 1, 197, 168, 209, 224, 1, 197, 157, - 209, 224, 1, 235, 35, 209, 224, 1, 193, 190, 209, 224, 1, 191, 71, 209, - 224, 1, 191, 123, 209, 224, 1, 2, 65, 209, 224, 1, 170, 209, 224, 1, 165, - 209, 224, 1, 173, 209, 224, 1, 203, 165, 209, 224, 1, 188, 209, 224, 1, - 140, 209, 224, 1, 65, 209, 224, 1, 68, 209, 224, 1, 66, 209, 224, 1, 71, - 209, 224, 1, 74, 209, 224, 1, 208, 96, 209, 224, 1, 192, 220, 209, 224, - 1, 233, 109, 209, 224, 1, 231, 127, 209, 224, 1, 234, 188, 209, 224, 200, - 239, 1, 193, 190, 209, 224, 200, 239, 1, 170, 209, 224, 1, 197, 132, 209, - 224, 1, 197, 120, 209, 224, 1, 237, 191, 209, 224, 1, 213, 79, 209, 224, - 1, 251, 157, 170, 209, 224, 1, 195, 19, 203, 165, 209, 224, 1, 195, 20, - 140, 209, 224, 1, 250, 200, 233, 109, 209, 224, 200, 239, 1, 165, 209, - 224, 200, 185, 1, 165, 209, 224, 1, 247, 119, 209, 224, 202, 170, 229, - 236, 77, 209, 224, 55, 229, 236, 77, 209, 224, 87, 203, 157, 209, 224, - 87, 55, 203, 157, 205, 111, 3, 251, 71, 205, 111, 3, 195, 35, 205, 111, - 1, 65, 205, 111, 1, 252, 206, 205, 111, 1, 68, 205, 111, 1, 223, 199, - 205, 111, 1, 66, 205, 111, 1, 196, 30, 205, 111, 1, 117, 146, 205, 111, - 1, 117, 206, 110, 205, 111, 1, 117, 172, 205, 111, 1, 117, 219, 74, 205, - 111, 1, 71, 205, 111, 1, 234, 188, 205, 111, 1, 251, 236, 205, 111, 1, - 74, 205, 111, 1, 211, 87, 205, 111, 1, 250, 163, 205, 111, 1, 155, 205, - 111, 1, 221, 215, 205, 111, 1, 231, 240, 205, 111, 1, 231, 91, 205, 111, - 1, 214, 68, 205, 111, 1, 247, 160, 205, 111, 1, 247, 1, 205, 111, 1, 223, - 32, 205, 111, 1, 222, 252, 205, 111, 1, 212, 101, 205, 111, 1, 197, 132, - 205, 111, 1, 197, 120, 205, 111, 1, 237, 191, 205, 111, 1, 237, 175, 205, - 111, 1, 213, 79, 205, 111, 1, 190, 190, 205, 111, 1, 199, 49, 205, 111, - 1, 238, 32, 205, 111, 1, 237, 68, 205, 111, 1, 180, 205, 111, 1, 168, - 205, 111, 1, 209, 228, 205, 111, 1, 249, 153, 205, 111, 1, 248, 203, 205, - 111, 1, 174, 205, 111, 1, 170, 205, 111, 1, 165, 205, 111, 1, 173, 205, - 111, 1, 195, 188, 205, 111, 1, 203, 165, 205, 111, 1, 201, 175, 205, 111, - 1, 188, 205, 111, 1, 140, 205, 111, 1, 219, 73, 205, 111, 120, 3, 230, - 89, 205, 111, 18, 3, 252, 206, 205, 111, 18, 3, 68, 205, 111, 18, 3, 223, - 199, 205, 111, 18, 3, 66, 205, 111, 18, 3, 196, 30, 205, 111, 18, 3, 117, - 146, 205, 111, 18, 3, 117, 206, 110, 205, 111, 18, 3, 117, 172, 205, 111, - 18, 3, 117, 219, 74, 205, 111, 18, 3, 71, 205, 111, 18, 3, 234, 188, 205, - 111, 18, 3, 251, 236, 205, 111, 18, 3, 74, 205, 111, 18, 3, 211, 87, 205, - 111, 18, 3, 250, 163, 205, 111, 3, 195, 40, 205, 111, 3, 247, 119, 205, - 111, 237, 238, 205, 111, 55, 237, 238, 205, 111, 17, 191, 77, 205, 111, - 17, 107, 205, 111, 17, 109, 205, 111, 17, 138, 205, 111, 17, 134, 205, - 111, 17, 149, 205, 111, 17, 169, 205, 111, 17, 175, 205, 111, 17, 171, - 205, 111, 17, 178, 33, 100, 17, 191, 77, 33, 100, 17, 107, 33, 100, 17, - 109, 33, 100, 17, 138, 33, 100, 17, 134, 33, 100, 17, 149, 33, 100, 17, + 201, 29, 198, 216, 237, 89, 8, 2, 1, 198, 234, 4, 201, 29, 198, 216, 237, + 89, 8, 6, 1, 195, 142, 8, 2, 1, 195, 142, 8, 6, 1, 234, 1, 8, 2, 1, 234, + 1, 8, 6, 1, 223, 70, 8, 2, 1, 223, 70, 8, 6, 1, 239, 59, 8, 2, 1, 239, + 59, 52, 1, 196, 45, 8, 2, 1, 235, 79, 8, 2, 1, 218, 210, 8, 2, 1, 215, + 125, 8, 2, 1, 212, 139, 8, 2, 1, 206, 49, 8, 1, 2, 6, 206, 49, 8, 2, 1, + 197, 76, 8, 2, 1, 196, 120, 8, 6, 1, 223, 117, 238, 129, 8, 2, 1, 223, + 117, 238, 129, 8, 6, 1, 223, 117, 233, 177, 8, 2, 1, 223, 117, 233, 177, + 8, 6, 1, 223, 117, 232, 53, 8, 6, 1, 154, 223, 117, 232, 53, 8, 2, 1, + 154, 223, 117, 232, 53, 8, 6, 1, 154, 172, 8, 2, 1, 154, 172, 8, 6, 1, + 223, 117, 146, 8, 2, 1, 223, 117, 146, 8, 6, 1, 223, 117, 206, 9, 8, 2, + 1, 223, 117, 206, 9, 8, 6, 1, 223, 117, 200, 43, 8, 2, 1, 223, 117, 200, + 43, 52, 1, 130, 243, 4, 252, 62, 52, 1, 242, 85, 52, 1, 203, 41, 234, 45, + 56, 8, 6, 1, 205, 157, 8, 2, 1, 205, 157, 8, 6, 1, 154, 230, 118, 8, 2, + 1, 220, 145, 4, 207, 25, 228, 253, 23, 248, 233, 8, 1, 202, 164, 236, + 142, 8, 6, 1, 215, 64, 4, 237, 89, 8, 2, 1, 215, 64, 4, 237, 89, 8, 6, 1, + 247, 196, 4, 164, 8, 2, 1, 247, 196, 4, 164, 8, 2, 1, 247, 196, 4, 210, + 194, 102, 8, 2, 1, 230, 119, 4, 210, 194, 102, 8, 6, 1, 78, 4, 232, 190, + 8, 2, 1, 78, 4, 232, 190, 8, 6, 1, 233, 178, 4, 106, 8, 2, 1, 233, 178, + 4, 106, 8, 6, 1, 195, 15, 252, 27, 8, 2, 1, 195, 15, 252, 27, 8, 6, 1, + 195, 15, 211, 153, 8, 2, 1, 195, 15, 211, 153, 8, 6, 1, 195, 15, 196, + 152, 8, 2, 1, 195, 15, 196, 152, 8, 6, 1, 232, 54, 4, 211, 174, 106, 8, + 2, 1, 232, 54, 4, 211, 174, 106, 8, 6, 1, 222, 155, 4, 211, 174, 106, 8, + 2, 1, 222, 155, 4, 211, 174, 106, 8, 6, 1, 215, 64, 4, 211, 174, 106, 8, + 2, 1, 215, 64, 4, 211, 174, 106, 8, 6, 1, 207, 224, 4, 211, 174, 106, 8, + 2, 1, 207, 224, 4, 211, 174, 106, 8, 6, 1, 206, 10, 4, 211, 174, 106, 8, + 2, 1, 206, 10, 4, 211, 174, 106, 8, 6, 1, 230, 119, 4, 102, 8, 6, 1, 207, + 19, 211, 79, 71, 8, 6, 1, 27, 232, 53, 8, 6, 1, 220, 145, 4, 248, 233, 8, + 6, 1, 2, 6, 68, 8, 1, 2, 6, 208, 106, 8, 6, 1, 154, 222, 154, 8, 6, 1, + 154, 200, 43, 8, 6, 1, 223, 38, 4, 238, 214, 8, 6, 1, 243, 97, 8, 6, 1, + 248, 214, 8, 2, 1, 248, 214, 8, 6, 1, 211, 112, 8, 2, 1, 211, 112, 8, 6, + 1, 126, 4, 106, 8, 2, 1, 126, 4, 106, 8, 6, 1, 231, 13, 65, 8, 2, 1, 231, + 13, 65, 8, 6, 1, 231, 13, 68, 8, 2, 1, 231, 13, 68, 8, 6, 1, 231, 13, 66, + 8, 2, 1, 231, 13, 66, 8, 6, 1, 39, 209, 51, 74, 8, 2, 1, 39, 209, 51, 74, + 8, 6, 1, 251, 114, 193, 224, 8, 2, 1, 251, 114, 193, 224, 8, 6, 1, 247, + 196, 4, 210, 194, 102, 8, 6, 1, 206, 10, 4, 102, 8, 6, 1, 191, 167, 4, + 210, 194, 102, 8, 6, 1, 238, 130, 4, 203, 41, 201, 29, 211, 1, 8, 2, 1, + 238, 130, 4, 203, 41, 201, 29, 211, 1, 8, 6, 1, 206, 10, 4, 203, 41, 201, + 29, 211, 1, 8, 2, 1, 206, 10, 4, 203, 41, 201, 29, 211, 1, 8, 6, 1, 242, + 221, 223, 117, 232, 53, 8, 2, 1, 242, 221, 223, 117, 232, 53, 8, 2, 1, + 55, 198, 233, 8, 2, 1, 55, 192, 238, 8, 6, 1, 82, 205, 80, 206, 9, 8, 2, + 1, 82, 205, 80, 206, 9, 8, 6, 1, 202, 196, 206, 9, 8, 2, 1, 202, 196, + 206, 9, 52, 1, 6, 247, 195, 52, 1, 6, 233, 177, 52, 1, 6, 208, 106, 8, 6, + 1, 207, 19, 132, 230, 118, 8, 2, 1, 207, 19, 132, 230, 118, 8, 234, 52, + 1, 202, 207, 68, 52, 1, 6, 230, 119, 4, 106, 52, 1, 2, 34, 211, 153, 8, + 1, 2, 6, 154, 218, 170, 8, 234, 52, 1, 207, 19, 233, 177, 8, 234, 52, 1, + 207, 19, 210, 238, 8, 234, 52, 1, 223, 95, 218, 170, 8, 234, 52, 1, 228, + 76, 219, 12, 8, 234, 52, 1, 251, 16, 218, 170, 200, 124, 214, 240, 1, 65, + 200, 124, 214, 240, 1, 68, 200, 124, 214, 240, 3, 235, 56, 200, 124, 214, + 240, 1, 66, 200, 124, 214, 240, 1, 71, 200, 124, 214, 240, 1, 74, 200, + 124, 214, 240, 3, 230, 13, 200, 124, 214, 240, 1, 221, 69, 200, 124, 214, + 240, 1, 221, 185, 200, 124, 214, 240, 1, 231, 5, 200, 124, 214, 240, 1, + 231, 65, 200, 124, 214, 240, 3, 251, 73, 200, 124, 214, 240, 1, 242, 101, + 200, 124, 214, 240, 1, 243, 70, 200, 124, 214, 240, 1, 222, 203, 200, + 124, 214, 240, 1, 222, 248, 200, 124, 214, 240, 1, 197, 109, 200, 124, + 214, 240, 1, 197, 115, 200, 124, 214, 240, 1, 237, 163, 200, 124, 214, + 240, 1, 237, 172, 200, 124, 214, 240, 1, 159, 200, 124, 214, 240, 1, 198, + 241, 200, 124, 214, 240, 1, 236, 176, 200, 124, 214, 240, 1, 237, 50, + 200, 124, 214, 240, 1, 213, 45, 200, 124, 214, 240, 1, 209, 75, 200, 124, + 214, 240, 1, 209, 201, 200, 124, 214, 240, 1, 248, 113, 200, 124, 214, + 240, 1, 248, 194, 200, 124, 214, 240, 1, 216, 14, 200, 124, 214, 240, 1, + 206, 163, 200, 124, 214, 240, 1, 219, 45, 200, 124, 214, 240, 1, 206, 96, + 200, 124, 214, 240, 1, 202, 47, 200, 124, 214, 240, 1, 229, 25, 200, 124, + 214, 240, 18, 3, 65, 200, 124, 214, 240, 18, 3, 68, 200, 124, 214, 240, + 18, 3, 66, 200, 124, 214, 240, 18, 3, 71, 200, 124, 214, 240, 18, 3, 211, + 89, 200, 124, 214, 240, 209, 65, 217, 57, 200, 124, 214, 240, 209, 65, + 217, 56, 200, 124, 214, 240, 209, 65, 217, 55, 200, 124, 214, 240, 209, + 65, 217, 54, 200, 124, 214, 240, 3, 251, 159, 230, 13, 186, 223, 148, + 232, 120, 91, 208, 24, 186, 223, 148, 232, 120, 91, 230, 72, 186, 223, + 148, 232, 120, 115, 208, 22, 186, 223, 148, 232, 120, 91, 202, 129, 186, + 223, 148, 232, 120, 91, 234, 161, 186, 223, 148, 232, 120, 115, 202, 126, + 186, 223, 148, 208, 25, 77, 186, 223, 148, 209, 109, 77, 186, 223, 148, + 206, 37, 77, 186, 223, 148, 208, 27, 77, 209, 226, 1, 155, 209, 226, 1, + 221, 217, 209, 226, 1, 231, 242, 209, 226, 1, 214, 70, 209, 226, 1, 247, + 162, 209, 226, 1, 247, 3, 209, 226, 1, 223, 34, 209, 226, 1, 212, 103, + 209, 226, 1, 190, 190, 209, 226, 1, 199, 49, 209, 226, 1, 238, 34, 209, + 226, 1, 181, 209, 226, 1, 168, 209, 226, 1, 209, 230, 209, 226, 1, 249, + 155, 209, 226, 1, 174, 209, 226, 1, 197, 168, 209, 226, 1, 197, 157, 209, + 226, 1, 235, 37, 209, 226, 1, 193, 190, 209, 226, 1, 191, 71, 209, 226, + 1, 191, 123, 209, 226, 1, 2, 65, 209, 226, 1, 170, 209, 226, 1, 165, 209, + 226, 1, 173, 209, 226, 1, 203, 166, 209, 226, 1, 188, 209, 226, 1, 140, + 209, 226, 1, 65, 209, 226, 1, 68, 209, 226, 1, 66, 209, 226, 1, 71, 209, + 226, 1, 74, 209, 226, 1, 208, 98, 209, 226, 1, 192, 220, 209, 226, 1, + 233, 111, 209, 226, 1, 231, 129, 209, 226, 1, 234, 190, 209, 226, 200, + 240, 1, 193, 190, 209, 226, 200, 240, 1, 170, 209, 226, 1, 197, 132, 209, + 226, 1, 197, 120, 209, 226, 1, 237, 193, 209, 226, 1, 213, 81, 209, 226, + 1, 251, 159, 170, 209, 226, 1, 195, 19, 203, 166, 209, 226, 1, 195, 20, + 140, 209, 226, 1, 250, 202, 233, 111, 209, 226, 200, 240, 1, 165, 209, + 226, 200, 185, 1, 165, 209, 226, 1, 247, 121, 209, 226, 202, 171, 229, + 238, 77, 209, 226, 55, 229, 238, 77, 209, 226, 87, 203, 158, 209, 226, + 87, 55, 203, 158, 205, 112, 3, 251, 73, 205, 112, 3, 195, 35, 205, 112, + 1, 65, 205, 112, 1, 252, 208, 205, 112, 1, 68, 205, 112, 1, 223, 201, + 205, 112, 1, 66, 205, 112, 1, 196, 30, 205, 112, 1, 117, 146, 205, 112, + 1, 117, 206, 111, 205, 112, 1, 117, 172, 205, 112, 1, 117, 219, 76, 205, + 112, 1, 71, 205, 112, 1, 234, 190, 205, 112, 1, 251, 238, 205, 112, 1, + 74, 205, 112, 1, 211, 89, 205, 112, 1, 250, 165, 205, 112, 1, 155, 205, + 112, 1, 221, 217, 205, 112, 1, 231, 242, 205, 112, 1, 231, 93, 205, 112, + 1, 214, 70, 205, 112, 1, 247, 162, 205, 112, 1, 247, 3, 205, 112, 1, 223, + 34, 205, 112, 1, 222, 254, 205, 112, 1, 212, 103, 205, 112, 1, 197, 132, + 205, 112, 1, 197, 120, 205, 112, 1, 237, 193, 205, 112, 1, 237, 177, 205, + 112, 1, 213, 81, 205, 112, 1, 190, 190, 205, 112, 1, 199, 49, 205, 112, + 1, 238, 34, 205, 112, 1, 237, 70, 205, 112, 1, 181, 205, 112, 1, 168, + 205, 112, 1, 209, 230, 205, 112, 1, 249, 155, 205, 112, 1, 248, 205, 205, + 112, 1, 174, 205, 112, 1, 170, 205, 112, 1, 165, 205, 112, 1, 173, 205, + 112, 1, 195, 188, 205, 112, 1, 203, 166, 205, 112, 1, 201, 176, 205, 112, + 1, 188, 205, 112, 1, 140, 205, 112, 1, 219, 75, 205, 112, 120, 3, 230, + 91, 205, 112, 18, 3, 252, 208, 205, 112, 18, 3, 68, 205, 112, 18, 3, 223, + 201, 205, 112, 18, 3, 66, 205, 112, 18, 3, 196, 30, 205, 112, 18, 3, 117, + 146, 205, 112, 18, 3, 117, 206, 111, 205, 112, 18, 3, 117, 172, 205, 112, + 18, 3, 117, 219, 76, 205, 112, 18, 3, 71, 205, 112, 18, 3, 234, 190, 205, + 112, 18, 3, 251, 238, 205, 112, 18, 3, 74, 205, 112, 18, 3, 211, 89, 205, + 112, 18, 3, 250, 165, 205, 112, 3, 195, 40, 205, 112, 3, 247, 121, 205, + 112, 237, 240, 205, 112, 55, 237, 240, 205, 112, 17, 191, 77, 205, 112, + 17, 107, 205, 112, 17, 109, 205, 112, 17, 138, 205, 112, 17, 134, 205, + 112, 17, 150, 205, 112, 17, 169, 205, 112, 17, 175, 205, 112, 17, 171, + 205, 112, 17, 178, 33, 100, 17, 191, 77, 33, 100, 17, 107, 33, 100, 17, + 109, 33, 100, 17, 138, 33, 100, 17, 134, 33, 100, 17, 150, 33, 100, 17, 169, 33, 100, 17, 175, 33, 100, 17, 171, 33, 100, 17, 178, 33, 100, 1, - 65, 33, 100, 1, 66, 33, 100, 1, 155, 33, 100, 1, 180, 33, 100, 1, 168, - 33, 100, 1, 165, 33, 100, 1, 195, 69, 33, 100, 3, 250, 145, 100, 3, 201, - 246, 247, 119, 100, 3, 247, 120, 195, 40, 100, 3, 55, 247, 120, 195, 40, - 100, 3, 247, 120, 109, 100, 3, 247, 120, 138, 100, 3, 247, 120, 250, 145, - 100, 3, 208, 134, 100, 231, 204, 233, 3, 100, 247, 96, 100, 229, 227, - 100, 3, 202, 210, 100, 223, 24, 211, 113, 100, 1, 250, 131, 100, 18, 3, - 250, 131, 222, 28, 219, 147, 17, 191, 77, 222, 28, 219, 147, 17, 107, - 222, 28, 219, 147, 17, 109, 222, 28, 219, 147, 17, 138, 222, 28, 219, - 147, 17, 134, 222, 28, 219, 147, 17, 149, 222, 28, 219, 147, 17, 169, - 222, 28, 219, 147, 17, 175, 222, 28, 219, 147, 17, 171, 222, 28, 219, - 147, 17, 178, 222, 28, 219, 147, 1, 155, 222, 28, 219, 147, 1, 221, 215, - 222, 28, 219, 147, 1, 231, 240, 222, 28, 219, 147, 1, 214, 68, 222, 28, - 219, 147, 1, 188, 222, 28, 219, 147, 1, 203, 165, 222, 28, 219, 147, 1, - 191, 123, 222, 28, 219, 147, 1, 212, 101, 222, 28, 219, 147, 1, 190, 190, - 222, 28, 219, 147, 1, 228, 164, 222, 28, 219, 147, 1, 180, 222, 28, 219, - 147, 1, 168, 222, 28, 219, 147, 1, 209, 228, 222, 28, 219, 147, 1, 174, - 222, 28, 219, 147, 1, 238, 32, 222, 28, 219, 147, 1, 249, 153, 222, 28, - 219, 147, 1, 165, 222, 28, 219, 147, 1, 170, 222, 28, 219, 147, 1, 173, - 222, 28, 219, 147, 1, 193, 190, 222, 28, 219, 147, 1, 199, 49, 222, 28, - 219, 147, 1, 140, 222, 28, 219, 147, 1, 195, 188, 222, 28, 219, 147, 1, - 247, 160, 222, 28, 219, 147, 1, 65, 222, 28, 219, 147, 1, 211, 151, 222, - 28, 219, 147, 1, 68, 222, 28, 219, 147, 1, 211, 87, 222, 28, 219, 147, - 18, 196, 152, 222, 28, 219, 147, 18, 71, 222, 28, 219, 147, 18, 66, 222, - 28, 219, 147, 18, 234, 188, 222, 28, 219, 147, 18, 74, 222, 28, 219, 147, - 163, 209, 90, 222, 28, 219, 147, 163, 247, 135, 222, 28, 219, 147, 163, - 247, 136, 209, 90, 222, 28, 219, 147, 3, 238, 147, 222, 28, 219, 147, 3, - 202, 230, 207, 67, 1, 155, 207, 67, 1, 231, 240, 207, 67, 1, 214, 68, - 207, 67, 1, 190, 190, 207, 67, 1, 238, 32, 207, 67, 1, 180, 207, 67, 1, - 168, 207, 67, 1, 249, 153, 207, 67, 1, 174, 207, 67, 1, 247, 160, 207, - 67, 1, 223, 32, 207, 67, 1, 212, 101, 207, 67, 1, 188, 207, 67, 1, 165, - 207, 67, 1, 173, 207, 67, 1, 170, 207, 67, 1, 193, 190, 207, 67, 1, 140, - 207, 67, 1, 217, 11, 207, 67, 1, 214, 47, 207, 67, 1, 214, 162, 207, 67, - 1, 212, 66, 207, 67, 1, 65, 207, 67, 18, 3, 68, 207, 67, 18, 3, 66, 207, - 67, 18, 3, 71, 207, 67, 18, 3, 251, 236, 207, 67, 18, 3, 74, 207, 67, 18, - 3, 250, 163, 207, 67, 18, 3, 233, 242, 207, 67, 18, 3, 234, 217, 207, 67, - 120, 3, 214, 70, 207, 67, 120, 3, 215, 61, 207, 67, 120, 3, 146, 207, 67, - 120, 3, 230, 116, 207, 67, 195, 40, 207, 67, 205, 54, 77, 30, 147, 198, + 65, 33, 100, 1, 66, 33, 100, 1, 155, 33, 100, 1, 181, 33, 100, 1, 168, + 33, 100, 1, 165, 33, 100, 1, 195, 69, 33, 100, 3, 250, 147, 100, 3, 201, + 247, 247, 121, 100, 3, 247, 122, 195, 40, 100, 3, 55, 247, 122, 195, 40, + 100, 3, 247, 122, 109, 100, 3, 247, 122, 138, 100, 3, 247, 122, 250, 147, + 100, 3, 208, 136, 100, 231, 206, 233, 5, 100, 247, 98, 100, 229, 229, + 100, 3, 202, 211, 100, 223, 26, 211, 115, 100, 1, 250, 133, 100, 18, 3, + 250, 133, 222, 30, 219, 149, 17, 191, 77, 222, 30, 219, 149, 17, 107, + 222, 30, 219, 149, 17, 109, 222, 30, 219, 149, 17, 138, 222, 30, 219, + 149, 17, 134, 222, 30, 219, 149, 17, 150, 222, 30, 219, 149, 17, 169, + 222, 30, 219, 149, 17, 175, 222, 30, 219, 149, 17, 171, 222, 30, 219, + 149, 17, 178, 222, 30, 219, 149, 1, 155, 222, 30, 219, 149, 1, 221, 217, + 222, 30, 219, 149, 1, 231, 242, 222, 30, 219, 149, 1, 214, 70, 222, 30, + 219, 149, 1, 188, 222, 30, 219, 149, 1, 203, 166, 222, 30, 219, 149, 1, + 191, 123, 222, 30, 219, 149, 1, 212, 103, 222, 30, 219, 149, 1, 190, 190, + 222, 30, 219, 149, 1, 228, 166, 222, 30, 219, 149, 1, 181, 222, 30, 219, + 149, 1, 168, 222, 30, 219, 149, 1, 209, 230, 222, 30, 219, 149, 1, 174, + 222, 30, 219, 149, 1, 238, 34, 222, 30, 219, 149, 1, 249, 155, 222, 30, + 219, 149, 1, 165, 222, 30, 219, 149, 1, 170, 222, 30, 219, 149, 1, 173, + 222, 30, 219, 149, 1, 193, 190, 222, 30, 219, 149, 1, 199, 49, 222, 30, + 219, 149, 1, 140, 222, 30, 219, 149, 1, 195, 188, 222, 30, 219, 149, 1, + 247, 162, 222, 30, 219, 149, 1, 65, 222, 30, 219, 149, 1, 211, 153, 222, + 30, 219, 149, 1, 68, 222, 30, 219, 149, 1, 211, 89, 222, 30, 219, 149, + 18, 196, 152, 222, 30, 219, 149, 18, 71, 222, 30, 219, 149, 18, 66, 222, + 30, 219, 149, 18, 234, 190, 222, 30, 219, 149, 18, 74, 222, 30, 219, 149, + 163, 209, 92, 222, 30, 219, 149, 163, 247, 137, 222, 30, 219, 149, 163, + 247, 138, 209, 92, 222, 30, 219, 149, 3, 238, 149, 222, 30, 219, 149, 3, + 202, 231, 207, 68, 1, 155, 207, 68, 1, 231, 242, 207, 68, 1, 214, 70, + 207, 68, 1, 190, 190, 207, 68, 1, 238, 34, 207, 68, 1, 181, 207, 68, 1, + 168, 207, 68, 1, 249, 155, 207, 68, 1, 174, 207, 68, 1, 247, 162, 207, + 68, 1, 223, 34, 207, 68, 1, 212, 103, 207, 68, 1, 188, 207, 68, 1, 165, + 207, 68, 1, 173, 207, 68, 1, 170, 207, 68, 1, 193, 190, 207, 68, 1, 140, + 207, 68, 1, 217, 13, 207, 68, 1, 214, 49, 207, 68, 1, 214, 164, 207, 68, + 1, 212, 68, 207, 68, 1, 65, 207, 68, 18, 3, 68, 207, 68, 18, 3, 66, 207, + 68, 18, 3, 71, 207, 68, 18, 3, 251, 238, 207, 68, 18, 3, 74, 207, 68, 18, + 3, 250, 165, 207, 68, 18, 3, 233, 244, 207, 68, 18, 3, 234, 219, 207, 68, + 120, 3, 214, 72, 207, 68, 120, 3, 215, 63, 207, 68, 120, 3, 146, 207, 68, + 120, 3, 230, 118, 207, 68, 195, 40, 207, 68, 205, 55, 77, 30, 147, 198, 164, 30, 147, 198, 163, 30, 147, 198, 161, 30, 147, 198, 166, 30, 147, - 206, 234, 30, 147, 206, 218, 30, 147, 206, 213, 30, 147, 206, 215, 30, - 147, 206, 231, 30, 147, 206, 224, 30, 147, 206, 217, 30, 147, 206, 236, - 30, 147, 206, 219, 30, 147, 206, 238, 30, 147, 206, 235, 30, 147, 216, - 73, 30, 147, 216, 64, 30, 147, 216, 67, 30, 147, 209, 154, 30, 147, 209, - 165, 30, 147, 209, 166, 30, 147, 201, 159, 30, 147, 223, 212, 30, 147, - 223, 219, 30, 147, 201, 170, 30, 147, 201, 157, 30, 147, 209, 208, 30, - 147, 229, 137, 30, 147, 201, 154, 223, 16, 3, 210, 143, 223, 16, 3, 247, - 39, 223, 16, 3, 219, 246, 223, 16, 3, 193, 71, 223, 16, 1, 65, 223, 16, - 1, 228, 74, 222, 32, 223, 16, 1, 68, 223, 16, 1, 223, 199, 223, 16, 1, - 66, 223, 16, 1, 210, 221, 247, 9, 223, 16, 1, 214, 69, 219, 203, 223, 16, - 1, 214, 69, 219, 204, 207, 131, 223, 16, 1, 71, 223, 16, 1, 251, 236, - 223, 16, 1, 74, 223, 16, 1, 155, 223, 16, 1, 222, 142, 205, 124, 223, 16, - 1, 222, 142, 215, 107, 223, 16, 1, 231, 240, 223, 16, 1, 231, 241, 215, - 107, 223, 16, 1, 214, 68, 223, 16, 1, 247, 160, 223, 16, 1, 247, 161, - 215, 107, 223, 16, 1, 223, 32, 223, 16, 1, 212, 102, 215, 107, 223, 16, - 1, 223, 33, 217, 116, 223, 16, 1, 212, 101, 223, 16, 1, 197, 132, 223, - 16, 1, 197, 133, 217, 116, 223, 16, 1, 237, 191, 223, 16, 1, 237, 192, - 217, 116, 223, 16, 1, 215, 7, 215, 107, 223, 16, 1, 190, 190, 223, 16, 1, - 199, 252, 215, 107, 223, 16, 1, 238, 32, 223, 16, 1, 238, 33, 217, 116, - 223, 16, 1, 180, 223, 16, 1, 168, 223, 16, 1, 210, 221, 215, 107, 223, - 16, 1, 249, 153, 223, 16, 1, 249, 154, 215, 107, 223, 16, 1, 174, 223, - 16, 1, 170, 223, 16, 1, 165, 223, 16, 1, 207, 186, 251, 246, 223, 16, 1, - 173, 223, 16, 1, 193, 190, 223, 16, 1, 205, 207, 215, 107, 223, 16, 1, - 205, 207, 217, 116, 223, 16, 1, 188, 223, 16, 1, 140, 223, 16, 3, 247, - 40, 199, 100, 223, 16, 18, 3, 199, 175, 223, 16, 18, 3, 198, 84, 223, 16, - 18, 3, 192, 250, 223, 16, 18, 3, 192, 251, 216, 198, 223, 16, 18, 3, 200, - 208, 223, 16, 18, 3, 200, 209, 216, 185, 223, 16, 18, 3, 199, 201, 223, - 16, 18, 3, 236, 230, 215, 106, 223, 16, 18, 3, 210, 16, 223, 16, 120, 3, - 221, 244, 223, 16, 120, 3, 210, 31, 223, 16, 120, 3, 247, 145, 223, 16, - 210, 157, 223, 16, 45, 207, 40, 223, 16, 50, 207, 40, 223, 16, 210, 209, - 251, 124, 223, 16, 210, 209, 217, 137, 223, 16, 210, 209, 218, 212, 223, - 16, 210, 209, 193, 64, 223, 16, 210, 209, 210, 158, 223, 16, 210, 209, - 219, 104, 223, 16, 210, 209, 218, 204, 223, 16, 210, 209, 252, 36, 223, - 16, 210, 209, 252, 37, 252, 36, 223, 16, 210, 209, 209, 119, 223, 16, - 153, 210, 209, 209, 119, 223, 16, 210, 153, 223, 16, 17, 191, 77, 223, - 16, 17, 107, 223, 16, 17, 109, 223, 16, 17, 138, 223, 16, 17, 134, 223, - 16, 17, 149, 223, 16, 17, 169, 223, 16, 17, 175, 223, 16, 17, 171, 223, - 16, 17, 178, 223, 16, 210, 209, 198, 127, 197, 73, 223, 16, 210, 209, - 223, 64, 80, 1, 203, 139, 231, 91, 80, 1, 203, 139, 247, 1, 80, 1, 203, - 139, 222, 252, 80, 1, 203, 139, 213, 79, 80, 1, 203, 139, 248, 203, 80, - 3, 203, 139, 205, 108, 80, 52, 1, 203, 139, 207, 85, 80, 1, 54, 220, 95, - 212, 101, 80, 1, 54, 220, 95, 233, 109, 80, 1, 54, 220, 95, 231, 240, 80, - 1, 54, 220, 95, 231, 91, 80, 1, 54, 220, 95, 223, 32, 80, 1, 54, 220, 95, - 222, 252, 80, 1, 54, 220, 95, 237, 191, 80, 1, 54, 220, 95, 237, 175, 80, - 1, 54, 220, 95, 213, 79, 80, 54, 220, 95, 17, 191, 77, 80, 54, 220, 95, - 17, 107, 80, 54, 220, 95, 17, 109, 80, 54, 220, 95, 17, 138, 80, 54, 220, - 95, 17, 134, 80, 54, 220, 95, 17, 149, 80, 54, 220, 95, 17, 169, 80, 54, - 220, 95, 17, 175, 80, 54, 220, 95, 17, 171, 80, 54, 220, 95, 17, 178, 80, - 1, 54, 220, 95, 219, 73, 80, 1, 54, 220, 95, 238, 32, 80, 1, 54, 220, 95, - 237, 68, 80, 1, 54, 220, 95, 249, 153, 80, 1, 54, 220, 95, 248, 203, 246, - 250, 1, 65, 246, 250, 1, 68, 246, 250, 1, 66, 246, 250, 1, 71, 246, 250, - 1, 251, 236, 246, 250, 1, 74, 246, 250, 1, 155, 246, 250, 1, 221, 215, - 246, 250, 1, 231, 240, 246, 250, 1, 231, 91, 246, 250, 1, 213, 233, 246, - 250, 1, 214, 68, 246, 250, 1, 247, 1, 246, 250, 1, 243, 98, 246, 250, 1, - 223, 32, 246, 250, 1, 222, 252, 246, 250, 1, 213, 221, 246, 250, 1, 213, - 224, 246, 250, 1, 213, 222, 246, 250, 1, 190, 190, 246, 250, 1, 199, 49, - 246, 250, 1, 238, 32, 246, 250, 1, 237, 68, 246, 250, 1, 212, 144, 246, - 250, 1, 180, 246, 250, 1, 237, 191, 246, 250, 1, 168, 246, 250, 1, 208, - 250, 246, 250, 1, 209, 228, 246, 250, 1, 249, 153, 246, 250, 1, 248, 203, - 246, 250, 1, 215, 143, 246, 250, 1, 174, 246, 250, 1, 249, 53, 246, 250, - 1, 170, 246, 250, 1, 165, 246, 250, 1, 173, 246, 250, 1, 195, 188, 246, - 250, 1, 201, 175, 246, 250, 1, 188, 246, 250, 1, 140, 246, 250, 18, 3, - 252, 206, 246, 250, 18, 3, 68, 246, 250, 18, 3, 223, 199, 246, 250, 18, - 3, 234, 166, 246, 250, 18, 3, 66, 246, 250, 18, 3, 211, 151, 246, 250, - 18, 3, 74, 246, 250, 18, 3, 251, 236, 246, 250, 18, 3, 250, 163, 246, - 250, 18, 3, 196, 152, 246, 250, 120, 3, 170, 246, 250, 120, 3, 165, 246, - 250, 120, 3, 173, 246, 250, 120, 3, 193, 190, 246, 250, 1, 53, 222, 152, - 246, 250, 1, 53, 232, 51, 246, 250, 1, 53, 214, 70, 246, 250, 120, 3, 53, - 214, 70, 246, 250, 1, 53, 247, 3, 246, 250, 1, 53, 200, 43, 246, 250, 1, - 53, 215, 61, 246, 250, 1, 53, 210, 236, 246, 250, 1, 53, 192, 159, 246, - 250, 1, 53, 146, 246, 250, 1, 53, 172, 246, 250, 1, 53, 201, 178, 246, - 250, 120, 3, 53, 218, 168, 246, 250, 120, 3, 53, 230, 116, 246, 250, 17, - 191, 77, 246, 250, 17, 107, 246, 250, 17, 109, 246, 250, 17, 138, 246, - 250, 17, 134, 246, 250, 17, 149, 246, 250, 17, 169, 246, 250, 17, 175, - 246, 250, 17, 171, 246, 250, 17, 178, 246, 250, 208, 152, 201, 217, 246, - 250, 208, 152, 237, 238, 246, 250, 208, 152, 55, 237, 238, 246, 250, 208, - 152, 197, 225, 237, 238, 80, 1, 221, 206, 231, 240, 80, 1, 221, 206, 247, - 160, 80, 1, 221, 206, 247, 1, 80, 1, 221, 206, 223, 32, 80, 1, 221, 206, - 222, 252, 80, 1, 221, 206, 212, 101, 80, 1, 221, 206, 197, 132, 80, 1, - 221, 206, 197, 120, 80, 1, 221, 206, 237, 191, 80, 1, 221, 206, 237, 175, - 80, 1, 221, 206, 237, 68, 80, 1, 221, 206, 180, 80, 1, 221, 206, 188, 80, - 1, 221, 206, 140, 80, 1, 221, 206, 229, 177, 80, 1, 221, 206, 233, 109, - 80, 52, 1, 221, 206, 207, 85, 80, 1, 221, 206, 192, 220, 80, 1, 221, 206, - 191, 123, 80, 1, 221, 206, 165, 80, 219, 28, 221, 206, 211, 179, 80, 219, - 28, 221, 206, 208, 46, 80, 219, 28, 221, 206, 229, 78, 80, 16, 251, 222, - 233, 215, 80, 16, 251, 222, 107, 80, 16, 251, 222, 109, 80, 1, 251, 222, - 165, 80, 3, 210, 139, 222, 62, 198, 79, 80, 3, 54, 220, 95, 198, 77, 80, - 3, 54, 220, 95, 198, 74, 80, 1, 202, 238, 210, 189, 247, 1, 80, 1, 202, - 238, 210, 189, 203, 165, 54, 195, 59, 1, 130, 221, 67, 54, 195, 59, 1, - 137, 221, 67, 54, 195, 59, 1, 130, 221, 183, 54, 195, 59, 1, 137, 221, - 183, 54, 195, 59, 1, 130, 221, 192, 54, 195, 59, 1, 137, 221, 192, 54, - 195, 59, 1, 130, 231, 3, 54, 195, 59, 1, 137, 231, 3, 54, 195, 59, 1, - 130, 213, 249, 54, 195, 59, 1, 137, 213, 249, 54, 195, 59, 1, 130, 242, - 99, 54, 195, 59, 1, 137, 242, 99, 54, 195, 59, 1, 130, 243, 68, 54, 195, - 59, 1, 137, 243, 68, 54, 195, 59, 1, 130, 202, 46, 54, 195, 59, 1, 137, - 202, 46, 54, 195, 59, 1, 130, 212, 65, 54, 195, 59, 1, 137, 212, 65, 54, - 195, 59, 1, 130, 236, 174, 54, 195, 59, 1, 137, 236, 174, 54, 195, 59, 1, - 130, 159, 54, 195, 59, 1, 137, 159, 54, 195, 59, 1, 130, 198, 241, 54, - 195, 59, 1, 137, 198, 241, 54, 195, 59, 1, 130, 213, 43, 54, 195, 59, 1, - 137, 213, 43, 54, 195, 59, 1, 130, 248, 111, 54, 195, 59, 1, 137, 248, - 111, 54, 195, 59, 1, 130, 209, 73, 54, 195, 59, 1, 137, 209, 73, 54, 195, - 59, 1, 130, 209, 199, 54, 195, 59, 1, 137, 209, 199, 54, 195, 59, 1, 130, - 232, 175, 54, 195, 59, 1, 137, 232, 175, 54, 195, 59, 1, 130, 216, 12, - 54, 195, 59, 1, 137, 216, 12, 54, 195, 59, 1, 130, 192, 12, 54, 195, 59, - 1, 137, 192, 12, 54, 195, 59, 1, 130, 206, 162, 54, 195, 59, 1, 137, 206, - 162, 54, 195, 59, 1, 130, 219, 43, 54, 195, 59, 1, 137, 219, 43, 54, 195, + 206, 235, 30, 147, 206, 219, 30, 147, 206, 214, 30, 147, 206, 216, 30, + 147, 206, 232, 30, 147, 206, 225, 30, 147, 206, 218, 30, 147, 206, 237, + 30, 147, 206, 220, 30, 147, 206, 239, 30, 147, 206, 236, 30, 147, 216, + 75, 30, 147, 216, 66, 30, 147, 216, 69, 30, 147, 209, 156, 30, 147, 209, + 167, 30, 147, 209, 168, 30, 147, 201, 160, 30, 147, 223, 214, 30, 147, + 223, 221, 30, 147, 201, 171, 30, 147, 201, 158, 30, 147, 209, 210, 30, + 147, 229, 139, 30, 147, 201, 155, 223, 18, 3, 210, 145, 223, 18, 3, 247, + 41, 223, 18, 3, 219, 248, 223, 18, 3, 193, 71, 223, 18, 1, 65, 223, 18, + 1, 228, 76, 222, 34, 223, 18, 1, 68, 223, 18, 1, 223, 201, 223, 18, 1, + 66, 223, 18, 1, 210, 223, 247, 11, 223, 18, 1, 214, 71, 219, 205, 223, + 18, 1, 214, 71, 219, 206, 207, 133, 223, 18, 1, 71, 223, 18, 1, 251, 238, + 223, 18, 1, 74, 223, 18, 1, 155, 223, 18, 1, 222, 144, 205, 125, 223, 18, + 1, 222, 144, 215, 109, 223, 18, 1, 231, 242, 223, 18, 1, 231, 243, 215, + 109, 223, 18, 1, 214, 70, 223, 18, 1, 247, 162, 223, 18, 1, 247, 163, + 215, 109, 223, 18, 1, 223, 34, 223, 18, 1, 212, 104, 215, 109, 223, 18, + 1, 223, 35, 217, 118, 223, 18, 1, 212, 103, 223, 18, 1, 197, 132, 223, + 18, 1, 197, 133, 217, 118, 223, 18, 1, 237, 193, 223, 18, 1, 237, 194, + 217, 118, 223, 18, 1, 215, 9, 215, 109, 223, 18, 1, 190, 190, 223, 18, 1, + 199, 252, 215, 109, 223, 18, 1, 238, 34, 223, 18, 1, 238, 35, 217, 118, + 223, 18, 1, 181, 223, 18, 1, 168, 223, 18, 1, 210, 223, 215, 109, 223, + 18, 1, 249, 155, 223, 18, 1, 249, 156, 215, 109, 223, 18, 1, 174, 223, + 18, 1, 170, 223, 18, 1, 165, 223, 18, 1, 207, 188, 251, 248, 223, 18, 1, + 173, 223, 18, 1, 193, 190, 223, 18, 1, 205, 208, 215, 109, 223, 18, 1, + 205, 208, 217, 118, 223, 18, 1, 188, 223, 18, 1, 140, 223, 18, 3, 247, + 42, 199, 100, 223, 18, 18, 3, 199, 175, 223, 18, 18, 3, 198, 84, 223, 18, + 18, 3, 192, 250, 223, 18, 18, 3, 192, 251, 216, 200, 223, 18, 18, 3, 200, + 208, 223, 18, 18, 3, 200, 209, 216, 187, 223, 18, 18, 3, 199, 201, 223, + 18, 18, 3, 236, 232, 215, 108, 223, 18, 18, 3, 210, 18, 223, 18, 120, 3, + 221, 246, 223, 18, 120, 3, 210, 33, 223, 18, 120, 3, 247, 147, 223, 18, + 210, 159, 223, 18, 45, 207, 41, 223, 18, 50, 207, 41, 223, 18, 210, 211, + 251, 126, 223, 18, 210, 211, 217, 139, 223, 18, 210, 211, 218, 214, 223, + 18, 210, 211, 193, 64, 223, 18, 210, 211, 210, 160, 223, 18, 210, 211, + 219, 106, 223, 18, 210, 211, 218, 206, 223, 18, 210, 211, 252, 38, 223, + 18, 210, 211, 252, 39, 252, 38, 223, 18, 210, 211, 209, 121, 223, 18, + 154, 210, 211, 209, 121, 223, 18, 210, 155, 223, 18, 17, 191, 77, 223, + 18, 17, 107, 223, 18, 17, 109, 223, 18, 17, 138, 223, 18, 17, 134, 223, + 18, 17, 150, 223, 18, 17, 169, 223, 18, 17, 175, 223, 18, 17, 171, 223, + 18, 17, 178, 223, 18, 210, 211, 198, 127, 197, 73, 223, 18, 210, 211, + 223, 66, 80, 1, 203, 140, 231, 93, 80, 1, 203, 140, 247, 3, 80, 1, 203, + 140, 222, 254, 80, 1, 203, 140, 213, 81, 80, 1, 203, 140, 248, 205, 80, + 3, 203, 140, 205, 109, 80, 52, 1, 203, 140, 207, 87, 80, 1, 54, 220, 97, + 212, 103, 80, 1, 54, 220, 97, 233, 111, 80, 1, 54, 220, 97, 231, 242, 80, + 1, 54, 220, 97, 231, 93, 80, 1, 54, 220, 97, 223, 34, 80, 1, 54, 220, 97, + 222, 254, 80, 1, 54, 220, 97, 237, 193, 80, 1, 54, 220, 97, 237, 177, 80, + 1, 54, 220, 97, 213, 81, 80, 54, 220, 97, 17, 191, 77, 80, 54, 220, 97, + 17, 107, 80, 54, 220, 97, 17, 109, 80, 54, 220, 97, 17, 138, 80, 54, 220, + 97, 17, 134, 80, 54, 220, 97, 17, 150, 80, 54, 220, 97, 17, 169, 80, 54, + 220, 97, 17, 175, 80, 54, 220, 97, 17, 171, 80, 54, 220, 97, 17, 178, 80, + 1, 54, 220, 97, 219, 75, 80, 1, 54, 220, 97, 238, 34, 80, 1, 54, 220, 97, + 237, 70, 80, 1, 54, 220, 97, 249, 155, 80, 1, 54, 220, 97, 248, 205, 246, + 252, 1, 65, 246, 252, 1, 68, 246, 252, 1, 66, 246, 252, 1, 71, 246, 252, + 1, 251, 238, 246, 252, 1, 74, 246, 252, 1, 155, 246, 252, 1, 221, 217, + 246, 252, 1, 231, 242, 246, 252, 1, 231, 93, 246, 252, 1, 213, 235, 246, + 252, 1, 214, 70, 246, 252, 1, 247, 3, 246, 252, 1, 243, 100, 246, 252, 1, + 223, 34, 246, 252, 1, 222, 254, 246, 252, 1, 213, 223, 246, 252, 1, 213, + 226, 246, 252, 1, 213, 224, 246, 252, 1, 190, 190, 246, 252, 1, 199, 49, + 246, 252, 1, 238, 34, 246, 252, 1, 237, 70, 246, 252, 1, 212, 146, 246, + 252, 1, 181, 246, 252, 1, 237, 193, 246, 252, 1, 168, 246, 252, 1, 208, + 252, 246, 252, 1, 209, 230, 246, 252, 1, 249, 155, 246, 252, 1, 248, 205, + 246, 252, 1, 215, 145, 246, 252, 1, 174, 246, 252, 1, 249, 55, 246, 252, + 1, 170, 246, 252, 1, 165, 246, 252, 1, 173, 246, 252, 1, 195, 188, 246, + 252, 1, 201, 176, 246, 252, 1, 188, 246, 252, 1, 140, 246, 252, 18, 3, + 252, 208, 246, 252, 18, 3, 68, 246, 252, 18, 3, 223, 201, 246, 252, 18, + 3, 234, 168, 246, 252, 18, 3, 66, 246, 252, 18, 3, 211, 153, 246, 252, + 18, 3, 74, 246, 252, 18, 3, 251, 238, 246, 252, 18, 3, 250, 165, 246, + 252, 18, 3, 196, 152, 246, 252, 120, 3, 170, 246, 252, 120, 3, 165, 246, + 252, 120, 3, 173, 246, 252, 120, 3, 193, 190, 246, 252, 1, 53, 222, 154, + 246, 252, 1, 53, 232, 53, 246, 252, 1, 53, 214, 72, 246, 252, 120, 3, 53, + 214, 72, 246, 252, 1, 53, 247, 5, 246, 252, 1, 53, 200, 43, 246, 252, 1, + 53, 215, 63, 246, 252, 1, 53, 210, 238, 246, 252, 1, 53, 192, 159, 246, + 252, 1, 53, 146, 246, 252, 1, 53, 172, 246, 252, 1, 53, 201, 179, 246, + 252, 120, 3, 53, 218, 170, 246, 252, 120, 3, 53, 230, 118, 246, 252, 17, + 191, 77, 246, 252, 17, 107, 246, 252, 17, 109, 246, 252, 17, 138, 246, + 252, 17, 134, 246, 252, 17, 150, 246, 252, 17, 169, 246, 252, 17, 175, + 246, 252, 17, 171, 246, 252, 17, 178, 246, 252, 208, 154, 201, 218, 246, + 252, 208, 154, 237, 240, 246, 252, 208, 154, 55, 237, 240, 246, 252, 208, + 154, 197, 225, 237, 240, 80, 1, 221, 208, 231, 242, 80, 1, 221, 208, 247, + 162, 80, 1, 221, 208, 247, 3, 80, 1, 221, 208, 223, 34, 80, 1, 221, 208, + 222, 254, 80, 1, 221, 208, 212, 103, 80, 1, 221, 208, 197, 132, 80, 1, + 221, 208, 197, 120, 80, 1, 221, 208, 237, 193, 80, 1, 221, 208, 237, 177, + 80, 1, 221, 208, 237, 70, 80, 1, 221, 208, 181, 80, 1, 221, 208, 188, 80, + 1, 221, 208, 140, 80, 1, 221, 208, 229, 179, 80, 1, 221, 208, 233, 111, + 80, 52, 1, 221, 208, 207, 87, 80, 1, 221, 208, 192, 220, 80, 1, 221, 208, + 191, 123, 80, 1, 221, 208, 165, 80, 219, 30, 221, 208, 211, 181, 80, 219, + 30, 221, 208, 208, 48, 80, 219, 30, 221, 208, 229, 80, 80, 16, 251, 224, + 233, 217, 80, 16, 251, 224, 107, 80, 16, 251, 224, 109, 80, 1, 251, 224, + 165, 80, 3, 210, 141, 222, 64, 198, 79, 80, 3, 54, 220, 97, 198, 77, 80, + 3, 54, 220, 97, 198, 74, 80, 1, 202, 239, 210, 191, 247, 3, 80, 1, 202, + 239, 210, 191, 203, 166, 54, 195, 59, 1, 130, 221, 69, 54, 195, 59, 1, + 137, 221, 69, 54, 195, 59, 1, 130, 221, 185, 54, 195, 59, 1, 137, 221, + 185, 54, 195, 59, 1, 130, 221, 194, 54, 195, 59, 1, 137, 221, 194, 54, + 195, 59, 1, 130, 231, 5, 54, 195, 59, 1, 137, 231, 5, 54, 195, 59, 1, + 130, 213, 251, 54, 195, 59, 1, 137, 213, 251, 54, 195, 59, 1, 130, 242, + 101, 54, 195, 59, 1, 137, 242, 101, 54, 195, 59, 1, 130, 243, 70, 54, + 195, 59, 1, 137, 243, 70, 54, 195, 59, 1, 130, 202, 47, 54, 195, 59, 1, + 137, 202, 47, 54, 195, 59, 1, 130, 212, 67, 54, 195, 59, 1, 137, 212, 67, + 54, 195, 59, 1, 130, 236, 176, 54, 195, 59, 1, 137, 236, 176, 54, 195, + 59, 1, 130, 159, 54, 195, 59, 1, 137, 159, 54, 195, 59, 1, 130, 198, 241, + 54, 195, 59, 1, 137, 198, 241, 54, 195, 59, 1, 130, 213, 45, 54, 195, 59, + 1, 137, 213, 45, 54, 195, 59, 1, 130, 248, 113, 54, 195, 59, 1, 137, 248, + 113, 54, 195, 59, 1, 130, 209, 75, 54, 195, 59, 1, 137, 209, 75, 54, 195, + 59, 1, 130, 209, 201, 54, 195, 59, 1, 137, 209, 201, 54, 195, 59, 1, 130, + 232, 177, 54, 195, 59, 1, 137, 232, 177, 54, 195, 59, 1, 130, 216, 14, + 54, 195, 59, 1, 137, 216, 14, 54, 195, 59, 1, 130, 192, 12, 54, 195, 59, + 1, 137, 192, 12, 54, 195, 59, 1, 130, 206, 163, 54, 195, 59, 1, 137, 206, + 163, 54, 195, 59, 1, 130, 219, 45, 54, 195, 59, 1, 137, 219, 45, 54, 195, 59, 1, 130, 195, 24, 54, 195, 59, 1, 137, 195, 24, 54, 195, 59, 1, 130, - 229, 23, 54, 195, 59, 1, 137, 229, 23, 54, 195, 59, 1, 130, 74, 54, 195, - 59, 1, 137, 74, 54, 195, 59, 217, 113, 222, 83, 54, 195, 59, 18, 252, - 206, 54, 195, 59, 18, 68, 54, 195, 59, 18, 196, 152, 54, 195, 59, 18, 66, - 54, 195, 59, 18, 71, 54, 195, 59, 18, 74, 54, 195, 59, 217, 113, 221, - 186, 54, 195, 59, 18, 228, 35, 54, 195, 59, 18, 196, 151, 54, 195, 59, - 18, 196, 168, 54, 195, 59, 18, 250, 161, 54, 195, 59, 18, 250, 131, 54, - 195, 59, 18, 251, 132, 54, 195, 59, 18, 251, 149, 54, 195, 59, 163, 217, - 113, 234, 147, 54, 195, 59, 163, 217, 113, 212, 143, 54, 195, 59, 163, - 217, 113, 198, 241, 54, 195, 59, 163, 217, 113, 202, 18, 54, 195, 59, 16, - 221, 44, 54, 195, 59, 16, 212, 143, 54, 195, 59, 16, 205, 152, 54, 195, - 59, 16, 229, 24, 229, 10, 54, 195, 59, 16, 221, 55, 221, 54, 216, 205, - 217, 18, 1, 71, 216, 205, 217, 18, 1, 74, 216, 205, 217, 18, 1, 247, 1, - 216, 205, 217, 18, 1, 212, 101, 216, 205, 217, 18, 1, 197, 132, 216, 205, - 217, 18, 1, 197, 120, 216, 205, 217, 18, 1, 237, 191, 216, 205, 217, 18, - 1, 237, 175, 216, 205, 217, 18, 1, 213, 79, 216, 205, 217, 18, 1, 203, - 165, 216, 205, 217, 18, 1, 201, 175, 216, 205, 217, 18, 18, 3, 223, 199, - 216, 205, 217, 18, 18, 3, 196, 30, 216, 205, 217, 18, 18, 3, 252, 170, - 216, 205, 217, 18, 18, 3, 250, 163, 216, 205, 217, 18, 18, 3, 252, 162, - 216, 205, 217, 18, 243, 116, 216, 205, 217, 18, 251, 242, 221, 173, 216, - 205, 217, 18, 251, 100, 216, 205, 217, 18, 5, 207, 46, 77, 216, 205, 217, - 18, 193, 23, 207, 46, 77, 216, 205, 217, 18, 18, 3, 195, 35, 216, 205, - 217, 18, 195, 40, 36, 5, 197, 113, 36, 5, 197, 116, 36, 5, 197, 119, 36, - 5, 197, 117, 36, 5, 197, 118, 36, 5, 197, 115, 36, 5, 237, 169, 36, 5, - 237, 171, 36, 5, 237, 174, 36, 5, 237, 172, 36, 5, 237, 173, 36, 5, 237, - 170, 36, 5, 235, 22, 36, 5, 235, 26, 36, 5, 235, 34, 36, 5, 235, 31, 36, - 5, 235, 32, 36, 5, 235, 23, 36, 5, 247, 56, 36, 5, 247, 50, 36, 5, 247, - 52, 36, 5, 247, 55, 36, 5, 247, 53, 36, 5, 247, 54, 36, 5, 247, 51, 36, - 5, 249, 53, 36, 5, 249, 32, 36, 5, 249, 44, 36, 5, 249, 52, 36, 5, 249, - 47, 36, 5, 249, 48, 36, 5, 249, 36, 8, 2, 1, 249, 82, 251, 160, 8, 2, 1, - 42, 207, 16, 8, 2, 1, 248, 135, 71, 8, 2, 1, 249, 82, 71, 8, 2, 1, 235, - 15, 4, 232, 188, 8, 2, 1, 219, 189, 233, 175, 8, 2, 1, 27, 232, 52, 4, - 238, 212, 8, 2, 1, 220, 143, 4, 223, 93, 219, 245, 206, 8, 8, 2, 1, 220, - 143, 4, 55, 82, 198, 152, 8, 2, 1, 220, 143, 4, 82, 206, 188, 8, 2, 1, - 218, 169, 4, 238, 212, 8, 2, 1, 215, 62, 4, 238, 212, 8, 2, 1, 234, 89, - 4, 238, 212, 8, 2, 1, 248, 135, 74, 8, 2, 1, 248, 135, 187, 4, 106, 8, 2, - 1, 211, 77, 187, 4, 106, 8, 2, 1, 223, 93, 211, 151, 8, 2, 1, 153, 211, - 152, 4, 106, 8, 2, 1, 153, 211, 152, 4, 228, 241, 106, 8, 2, 1, 153, 187, - 211, 72, 8, 2, 1, 153, 187, 211, 73, 4, 106, 8, 2, 1, 201, 68, 146, 8, 1, - 2, 6, 207, 222, 4, 50, 219, 212, 8, 2, 1, 207, 222, 193, 51, 230, 31, 8, - 2, 1, 55, 146, 8, 2, 1, 207, 222, 4, 238, 212, 8, 2, 1, 55, 207, 222, 4, - 238, 212, 8, 2, 1, 27, 146, 8, 2, 1, 27, 207, 222, 4, 206, 188, 8, 2, 1, - 249, 72, 234, 12, 8, 2, 1, 126, 4, 203, 40, 50, 219, 212, 8, 2, 1, 126, - 249, 88, 4, 203, 40, 50, 219, 212, 8, 2, 1, 196, 139, 8, 2, 1, 153, 196, - 139, 8, 2, 1, 126, 4, 45, 102, 8, 2, 1, 243, 95, 8, 2, 1, 243, 96, 4, - 130, 50, 206, 188, 8, 2, 1, 243, 96, 4, 130, 45, 204, 5, 8, 2, 1, 192, - 236, 4, 130, 50, 206, 188, 8, 2, 1, 192, 236, 4, 179, 45, 219, 212, 8, 2, - 1, 192, 236, 4, 179, 45, 219, 213, 23, 130, 50, 206, 188, 8, 2, 1, 192, - 236, 4, 179, 45, 219, 213, 4, 204, 5, 8, 2, 1, 192, 160, 4, 203, 40, 50, - 219, 212, 52, 248, 37, 4, 223, 93, 248, 36, 52, 1, 2, 229, 196, 52, 1, 2, - 220, 143, 4, 223, 93, 219, 245, 206, 8, 52, 1, 2, 220, 143, 4, 82, 198, - 152, 52, 1, 2, 126, 4, 45, 102, 8, 2, 1, 205, 174, 192, 95, 8, 2, 1, 223, - 81, 71, 8, 2, 1, 211, 77, 211, 151, 8, 2, 1, 196, 82, 8, 2, 1, 223, 93, - 251, 160, 35, 1, 2, 6, 211, 110, 8, 2, 1, 235, 37, 237, 3, 4, 207, 24, - 102, 8, 2, 1, 197, 170, 237, 3, 4, 207, 24, 102, 8, 2, 1, 153, 207, 222, - 4, 82, 198, 152, 52, 1, 2, 153, 193, 224, 52, 1, 45, 199, 228, 52, 1, 50, + 229, 25, 54, 195, 59, 1, 137, 229, 25, 54, 195, 59, 1, 130, 74, 54, 195, + 59, 1, 137, 74, 54, 195, 59, 217, 115, 222, 85, 54, 195, 59, 18, 252, + 208, 54, 195, 59, 18, 68, 54, 195, 59, 18, 196, 152, 54, 195, 59, 18, 66, + 54, 195, 59, 18, 71, 54, 195, 59, 18, 74, 54, 195, 59, 217, 115, 221, + 188, 54, 195, 59, 18, 228, 37, 54, 195, 59, 18, 196, 151, 54, 195, 59, + 18, 196, 168, 54, 195, 59, 18, 250, 163, 54, 195, 59, 18, 250, 133, 54, + 195, 59, 18, 251, 134, 54, 195, 59, 18, 251, 151, 54, 195, 59, 163, 217, + 115, 234, 149, 54, 195, 59, 163, 217, 115, 212, 145, 54, 195, 59, 163, + 217, 115, 198, 241, 54, 195, 59, 163, 217, 115, 202, 19, 54, 195, 59, 16, + 221, 46, 54, 195, 59, 16, 212, 145, 54, 195, 59, 16, 205, 153, 54, 195, + 59, 16, 229, 26, 229, 12, 54, 195, 59, 16, 221, 57, 221, 56, 216, 207, + 217, 20, 1, 71, 216, 207, 217, 20, 1, 74, 216, 207, 217, 20, 1, 247, 3, + 216, 207, 217, 20, 1, 212, 103, 216, 207, 217, 20, 1, 197, 132, 216, 207, + 217, 20, 1, 197, 120, 216, 207, 217, 20, 1, 237, 193, 216, 207, 217, 20, + 1, 237, 177, 216, 207, 217, 20, 1, 213, 81, 216, 207, 217, 20, 1, 203, + 166, 216, 207, 217, 20, 1, 201, 176, 216, 207, 217, 20, 18, 3, 223, 201, + 216, 207, 217, 20, 18, 3, 196, 30, 216, 207, 217, 20, 18, 3, 252, 172, + 216, 207, 217, 20, 18, 3, 250, 165, 216, 207, 217, 20, 18, 3, 252, 164, + 216, 207, 217, 20, 243, 118, 216, 207, 217, 20, 251, 244, 221, 175, 216, + 207, 217, 20, 251, 102, 216, 207, 217, 20, 5, 207, 47, 77, 216, 207, 217, + 20, 193, 23, 207, 47, 77, 216, 207, 217, 20, 18, 3, 195, 35, 216, 207, + 217, 20, 195, 40, 36, 5, 197, 113, 36, 5, 197, 116, 36, 5, 197, 119, 36, + 5, 197, 117, 36, 5, 197, 118, 36, 5, 197, 115, 36, 5, 237, 171, 36, 5, + 237, 173, 36, 5, 237, 176, 36, 5, 237, 174, 36, 5, 237, 175, 36, 5, 237, + 172, 36, 5, 235, 24, 36, 5, 235, 28, 36, 5, 235, 36, 36, 5, 235, 33, 36, + 5, 235, 34, 36, 5, 235, 25, 36, 5, 247, 58, 36, 5, 247, 52, 36, 5, 247, + 54, 36, 5, 247, 57, 36, 5, 247, 55, 36, 5, 247, 56, 36, 5, 247, 53, 36, + 5, 249, 55, 36, 5, 249, 34, 36, 5, 249, 46, 36, 5, 249, 54, 36, 5, 249, + 49, 36, 5, 249, 50, 36, 5, 249, 38, 8, 2, 1, 249, 84, 251, 162, 8, 2, 1, + 42, 207, 17, 8, 2, 1, 248, 137, 71, 8, 2, 1, 249, 84, 71, 8, 2, 1, 235, + 17, 4, 232, 190, 8, 2, 1, 219, 191, 233, 177, 8, 2, 1, 27, 232, 54, 4, + 238, 214, 8, 2, 1, 220, 145, 4, 223, 95, 219, 247, 206, 9, 8, 2, 1, 220, + 145, 4, 55, 82, 198, 152, 8, 2, 1, 220, 145, 4, 82, 206, 189, 8, 2, 1, + 218, 171, 4, 238, 214, 8, 2, 1, 215, 64, 4, 238, 214, 8, 2, 1, 234, 91, + 4, 238, 214, 8, 2, 1, 248, 137, 74, 8, 2, 1, 248, 137, 187, 4, 106, 8, 2, + 1, 211, 79, 187, 4, 106, 8, 2, 1, 223, 95, 211, 153, 8, 2, 1, 154, 211, + 154, 4, 106, 8, 2, 1, 154, 211, 154, 4, 228, 243, 106, 8, 2, 1, 154, 187, + 211, 74, 8, 2, 1, 154, 187, 211, 75, 4, 106, 8, 2, 1, 201, 69, 146, 8, 1, + 2, 6, 207, 224, 4, 50, 219, 214, 8, 2, 1, 207, 224, 193, 51, 230, 33, 8, + 2, 1, 55, 146, 8, 2, 1, 207, 224, 4, 238, 214, 8, 2, 1, 55, 207, 224, 4, + 238, 214, 8, 2, 1, 27, 146, 8, 2, 1, 27, 207, 224, 4, 206, 189, 8, 2, 1, + 249, 74, 234, 14, 8, 2, 1, 126, 4, 203, 41, 50, 219, 214, 8, 2, 1, 126, + 249, 90, 4, 203, 41, 50, 219, 214, 8, 2, 1, 196, 139, 8, 2, 1, 154, 196, + 139, 8, 2, 1, 126, 4, 45, 102, 8, 2, 1, 243, 97, 8, 2, 1, 243, 98, 4, + 130, 50, 206, 189, 8, 2, 1, 243, 98, 4, 130, 45, 204, 6, 8, 2, 1, 192, + 236, 4, 130, 50, 206, 189, 8, 2, 1, 192, 236, 4, 180, 45, 219, 214, 8, 2, + 1, 192, 236, 4, 180, 45, 219, 215, 23, 130, 50, 206, 189, 8, 2, 1, 192, + 236, 4, 180, 45, 219, 215, 4, 204, 6, 8, 2, 1, 192, 160, 4, 203, 41, 50, + 219, 214, 52, 248, 39, 4, 223, 95, 248, 38, 52, 1, 2, 229, 198, 52, 1, 2, + 220, 145, 4, 223, 95, 219, 247, 206, 9, 52, 1, 2, 220, 145, 4, 82, 198, + 152, 52, 1, 2, 126, 4, 45, 102, 8, 2, 1, 205, 175, 192, 95, 8, 2, 1, 223, + 83, 71, 8, 2, 1, 211, 79, 211, 153, 8, 2, 1, 196, 82, 8, 2, 1, 223, 95, + 251, 162, 35, 1, 2, 6, 211, 112, 8, 2, 1, 235, 39, 237, 5, 4, 207, 25, + 102, 8, 2, 1, 197, 170, 237, 5, 4, 207, 25, 102, 8, 2, 1, 154, 207, 224, + 4, 82, 198, 152, 52, 1, 2, 154, 193, 224, 52, 1, 45, 199, 228, 52, 1, 50, 199, 228, 103, 2, 1, 65, 103, 2, 1, 71, 103, 2, 1, 68, 103, 2, 1, 74, - 103, 2, 1, 66, 103, 2, 1, 196, 12, 103, 2, 1, 231, 240, 103, 2, 1, 155, - 103, 2, 1, 231, 165, 103, 2, 1, 231, 53, 103, 2, 1, 231, 3, 103, 2, 1, - 230, 179, 103, 2, 1, 230, 138, 103, 2, 1, 140, 103, 2, 1, 229, 245, 103, - 2, 1, 229, 158, 103, 2, 1, 229, 23, 103, 2, 1, 228, 159, 103, 2, 1, 228, - 126, 103, 2, 1, 173, 103, 2, 1, 219, 238, 103, 2, 1, 219, 146, 103, 2, 1, - 219, 43, 103, 2, 1, 218, 225, 103, 2, 1, 218, 192, 103, 2, 1, 174, 103, - 2, 1, 216, 232, 103, 2, 1, 216, 100, 103, 2, 1, 216, 12, 103, 2, 1, 215, - 155, 103, 2, 1, 180, 103, 2, 1, 229, 47, 103, 2, 1, 214, 237, 103, 2, 1, - 214, 121, 103, 2, 1, 213, 219, 103, 2, 1, 213, 43, 103, 2, 1, 212, 178, - 103, 2, 1, 212, 112, 103, 2, 1, 208, 32, 103, 2, 1, 208, 16, 103, 2, 1, - 208, 9, 103, 2, 1, 207, 255, 103, 2, 1, 207, 244, 103, 2, 1, 207, 242, - 103, 2, 1, 188, 103, 2, 1, 206, 8, 103, 2, 1, 205, 68, 103, 2, 1, 202, - 222, 103, 2, 1, 202, 46, 103, 2, 1, 201, 4, 103, 2, 1, 200, 158, 103, 2, - 1, 238, 32, 103, 2, 1, 190, 190, 103, 2, 1, 237, 146, 103, 2, 1, 199, - 145, 103, 2, 1, 237, 44, 103, 2, 1, 198, 193, 103, 2, 1, 236, 174, 103, - 2, 1, 235, 89, 103, 2, 1, 235, 57, 103, 2, 1, 236, 186, 103, 2, 1, 198, + 103, 2, 1, 66, 103, 2, 1, 196, 12, 103, 2, 1, 231, 242, 103, 2, 1, 155, + 103, 2, 1, 231, 167, 103, 2, 1, 231, 55, 103, 2, 1, 231, 5, 103, 2, 1, + 230, 181, 103, 2, 1, 230, 140, 103, 2, 1, 140, 103, 2, 1, 229, 247, 103, + 2, 1, 229, 160, 103, 2, 1, 229, 25, 103, 2, 1, 228, 161, 103, 2, 1, 228, + 128, 103, 2, 1, 173, 103, 2, 1, 219, 240, 103, 2, 1, 219, 148, 103, 2, 1, + 219, 45, 103, 2, 1, 218, 227, 103, 2, 1, 218, 194, 103, 2, 1, 174, 103, + 2, 1, 216, 234, 103, 2, 1, 216, 102, 103, 2, 1, 216, 14, 103, 2, 1, 215, + 157, 103, 2, 1, 181, 103, 2, 1, 229, 49, 103, 2, 1, 214, 239, 103, 2, 1, + 214, 123, 103, 2, 1, 213, 221, 103, 2, 1, 213, 45, 103, 2, 1, 212, 180, + 103, 2, 1, 212, 114, 103, 2, 1, 208, 34, 103, 2, 1, 208, 18, 103, 2, 1, + 208, 11, 103, 2, 1, 208, 1, 103, 2, 1, 207, 246, 103, 2, 1, 207, 244, + 103, 2, 1, 188, 103, 2, 1, 206, 9, 103, 2, 1, 205, 69, 103, 2, 1, 202, + 223, 103, 2, 1, 202, 47, 103, 2, 1, 201, 5, 103, 2, 1, 200, 158, 103, 2, + 1, 238, 34, 103, 2, 1, 190, 190, 103, 2, 1, 237, 148, 103, 2, 1, 199, + 145, 103, 2, 1, 237, 46, 103, 2, 1, 198, 193, 103, 2, 1, 236, 176, 103, + 2, 1, 235, 91, 103, 2, 1, 235, 59, 103, 2, 1, 236, 188, 103, 2, 1, 198, 115, 103, 2, 1, 198, 114, 103, 2, 1, 198, 103, 103, 2, 1, 198, 102, 103, 2, 1, 198, 101, 103, 2, 1, 198, 100, 103, 2, 1, 197, 168, 103, 2, 1, 197, 161, 103, 2, 1, 197, 146, 103, 2, 1, 197, 144, 103, 2, 1, 197, 140, 103, 2, 1, 197, 139, 103, 2, 1, 193, 190, 103, 2, 1, 193, 125, 103, 2, 1, 193, 86, 103, 2, 1, 193, 48, 103, 2, 1, 193, 0, 103, 2, 1, 192, 243, 103, 2, - 1, 170, 216, 205, 217, 18, 1, 221, 51, 216, 205, 217, 18, 1, 205, 152, - 216, 205, 217, 18, 1, 220, 96, 216, 205, 217, 18, 1, 216, 23, 216, 205, - 217, 18, 1, 168, 216, 205, 217, 18, 1, 180, 216, 205, 217, 18, 1, 243, - 87, 216, 205, 217, 18, 1, 198, 154, 216, 205, 217, 18, 1, 221, 176, 216, - 205, 217, 18, 1, 213, 239, 216, 205, 217, 18, 1, 198, 232, 216, 205, 217, - 18, 1, 193, 173, 216, 205, 217, 18, 1, 192, 106, 216, 205, 217, 18, 1, - 228, 147, 216, 205, 217, 18, 1, 196, 113, 216, 205, 217, 18, 1, 68, 216, - 205, 217, 18, 1, 209, 222, 216, 205, 217, 18, 1, 250, 175, 216, 205, 217, - 18, 1, 230, 251, 216, 205, 217, 18, 1, 222, 250, 216, 205, 217, 18, 1, - 207, 156, 216, 205, 217, 18, 1, 249, 153, 216, 205, 217, 18, 1, 222, 234, - 216, 205, 217, 18, 1, 237, 1, 216, 205, 217, 18, 1, 231, 60, 216, 205, - 217, 18, 1, 237, 46, 216, 205, 217, 18, 1, 248, 198, 216, 205, 217, 18, - 1, 221, 52, 219, 9, 216, 205, 217, 18, 1, 220, 97, 219, 9, 216, 205, 217, - 18, 1, 216, 24, 219, 9, 216, 205, 217, 18, 1, 210, 221, 219, 9, 216, 205, - 217, 18, 1, 215, 7, 219, 9, 216, 205, 217, 18, 1, 198, 155, 219, 9, 216, - 205, 217, 18, 1, 213, 240, 219, 9, 216, 205, 217, 18, 1, 228, 74, 219, 9, - 216, 205, 217, 18, 18, 3, 211, 102, 216, 205, 217, 18, 18, 3, 223, 160, - 216, 205, 217, 18, 18, 3, 251, 130, 216, 205, 217, 18, 18, 3, 192, 69, - 216, 205, 217, 18, 18, 3, 202, 6, 216, 205, 217, 18, 18, 3, 196, 110, - 216, 205, 217, 18, 18, 3, 243, 114, 216, 205, 217, 18, 18, 3, 212, 127, - 216, 205, 217, 18, 243, 115, 216, 205, 217, 18, 218, 209, 223, 42, 216, - 205, 217, 18, 251, 38, 223, 42, 216, 205, 217, 18, 17, 191, 77, 216, 205, - 217, 18, 17, 107, 216, 205, 217, 18, 17, 109, 216, 205, 217, 18, 17, 138, - 216, 205, 217, 18, 17, 134, 216, 205, 217, 18, 17, 149, 216, 205, 217, - 18, 17, 169, 216, 205, 217, 18, 17, 175, 216, 205, 217, 18, 17, 171, 216, - 205, 217, 18, 17, 178, 30, 222, 174, 212, 3, 30, 222, 174, 212, 8, 30, - 222, 174, 192, 5, 30, 222, 174, 192, 4, 30, 222, 174, 192, 3, 30, 222, - 174, 196, 218, 30, 222, 174, 196, 222, 30, 222, 174, 191, 219, 30, 222, - 174, 191, 215, 30, 222, 174, 233, 241, 30, 222, 174, 233, 239, 30, 222, - 174, 233, 240, 30, 222, 174, 233, 237, 30, 222, 174, 228, 60, 30, 222, - 174, 228, 59, 30, 222, 174, 228, 57, 30, 222, 174, 228, 58, 30, 222, 174, - 228, 63, 30, 222, 174, 228, 56, 30, 222, 174, 228, 55, 30, 222, 174, 228, - 65, 30, 222, 174, 251, 24, 30, 222, 174, 251, 23, 30, 125, 213, 197, 30, - 125, 213, 203, 30, 125, 201, 156, 30, 125, 201, 155, 30, 125, 198, 163, - 30, 125, 198, 161, 30, 125, 198, 160, 30, 125, 198, 166, 30, 125, 198, - 167, 30, 125, 198, 159, 30, 125, 206, 218, 30, 125, 206, 233, 30, 125, - 201, 162, 30, 125, 206, 230, 30, 125, 206, 220, 30, 125, 206, 222, 30, - 125, 206, 209, 30, 125, 206, 210, 30, 125, 222, 68, 30, 125, 216, 72, 30, - 125, 216, 66, 30, 125, 201, 166, 30, 125, 216, 69, 30, 125, 216, 75, 30, - 125, 209, 150, 30, 125, 209, 159, 30, 125, 209, 163, 30, 125, 201, 164, - 30, 125, 209, 153, 30, 125, 209, 167, 30, 125, 209, 168, 30, 125, 202, - 152, 30, 125, 202, 155, 30, 125, 201, 160, 30, 125, 201, 158, 30, 125, - 202, 150, 30, 125, 202, 158, 30, 125, 202, 159, 30, 125, 202, 144, 30, - 125, 202, 157, 30, 125, 210, 147, 30, 125, 210, 148, 30, 125, 192, 53, - 30, 125, 192, 56, 30, 125, 243, 22, 30, 125, 243, 21, 30, 125, 201, 171, - 30, 125, 209, 206, 30, 125, 209, 205, 12, 15, 225, 190, 12, 15, 225, 189, - 12, 15, 225, 188, 12, 15, 225, 187, 12, 15, 225, 186, 12, 15, 225, 185, - 12, 15, 225, 184, 12, 15, 225, 183, 12, 15, 225, 182, 12, 15, 225, 181, - 12, 15, 225, 180, 12, 15, 225, 179, 12, 15, 225, 178, 12, 15, 225, 177, - 12, 15, 225, 176, 12, 15, 225, 175, 12, 15, 225, 174, 12, 15, 225, 173, - 12, 15, 225, 172, 12, 15, 225, 171, 12, 15, 225, 170, 12, 15, 225, 169, - 12, 15, 225, 168, 12, 15, 225, 167, 12, 15, 225, 166, 12, 15, 225, 165, - 12, 15, 225, 164, 12, 15, 225, 163, 12, 15, 225, 162, 12, 15, 225, 161, - 12, 15, 225, 160, 12, 15, 225, 159, 12, 15, 225, 158, 12, 15, 225, 157, - 12, 15, 225, 156, 12, 15, 225, 155, 12, 15, 225, 154, 12, 15, 225, 153, - 12, 15, 225, 152, 12, 15, 225, 151, 12, 15, 225, 150, 12, 15, 225, 149, - 12, 15, 225, 148, 12, 15, 225, 147, 12, 15, 225, 146, 12, 15, 225, 145, - 12, 15, 225, 144, 12, 15, 225, 143, 12, 15, 225, 142, 12, 15, 225, 141, - 12, 15, 225, 140, 12, 15, 225, 139, 12, 15, 225, 138, 12, 15, 225, 137, - 12, 15, 225, 136, 12, 15, 225, 135, 12, 15, 225, 134, 12, 15, 225, 133, - 12, 15, 225, 132, 12, 15, 225, 131, 12, 15, 225, 130, 12, 15, 225, 129, - 12, 15, 225, 128, 12, 15, 225, 127, 12, 15, 225, 126, 12, 15, 225, 125, - 12, 15, 225, 124, 12, 15, 225, 123, 12, 15, 225, 122, 12, 15, 225, 121, - 12, 15, 225, 120, 12, 15, 225, 119, 12, 15, 225, 118, 12, 15, 225, 117, - 12, 15, 225, 116, 12, 15, 225, 115, 12, 15, 225, 114, 12, 15, 225, 113, - 12, 15, 225, 112, 12, 15, 225, 111, 12, 15, 225, 110, 12, 15, 225, 109, - 12, 15, 225, 108, 12, 15, 225, 107, 12, 15, 225, 106, 12, 15, 225, 105, - 12, 15, 225, 104, 12, 15, 225, 103, 12, 15, 225, 102, 12, 15, 225, 101, - 12, 15, 225, 100, 12, 15, 225, 99, 12, 15, 225, 98, 12, 15, 225, 97, 12, - 15, 225, 96, 12, 15, 225, 95, 12, 15, 225, 94, 12, 15, 225, 93, 12, 15, - 225, 92, 12, 15, 225, 91, 12, 15, 225, 90, 12, 15, 225, 89, 12, 15, 225, - 88, 12, 15, 225, 87, 12, 15, 225, 86, 12, 15, 225, 85, 12, 15, 225, 84, - 12, 15, 225, 83, 12, 15, 225, 82, 12, 15, 225, 81, 12, 15, 225, 80, 12, - 15, 225, 79, 12, 15, 225, 78, 12, 15, 225, 77, 12, 15, 225, 76, 12, 15, - 225, 75, 12, 15, 225, 74, 12, 15, 225, 73, 12, 15, 225, 72, 12, 15, 225, - 71, 12, 15, 225, 70, 12, 15, 225, 69, 12, 15, 225, 68, 12, 15, 225, 67, - 12, 15, 225, 66, 12, 15, 225, 65, 12, 15, 225, 64, 12, 15, 225, 63, 12, - 15, 225, 62, 12, 15, 225, 61, 12, 15, 225, 60, 12, 15, 225, 59, 12, 15, - 225, 58, 12, 15, 225, 57, 12, 15, 225, 56, 12, 15, 225, 55, 12, 15, 225, - 54, 12, 15, 225, 53, 12, 15, 225, 52, 12, 15, 225, 51, 12, 15, 225, 50, - 12, 15, 225, 49, 12, 15, 225, 48, 12, 15, 225, 47, 12, 15, 225, 46, 12, - 15, 225, 45, 12, 15, 225, 44, 12, 15, 225, 43, 12, 15, 225, 42, 12, 15, - 225, 41, 12, 15, 225, 40, 12, 15, 225, 39, 12, 15, 225, 38, 12, 15, 225, - 37, 12, 15, 225, 36, 12, 15, 225, 35, 12, 15, 225, 34, 12, 15, 225, 33, - 12, 15, 225, 32, 12, 15, 225, 31, 12, 15, 225, 30, 12, 15, 225, 29, 12, - 15, 225, 28, 12, 15, 225, 27, 12, 15, 225, 26, 12, 15, 225, 25, 12, 15, - 225, 24, 12, 15, 225, 23, 12, 15, 225, 22, 12, 15, 225, 21, 12, 15, 225, - 20, 12, 15, 225, 19, 12, 15, 225, 18, 12, 15, 225, 17, 12, 15, 225, 16, - 12, 15, 225, 15, 12, 15, 225, 14, 12, 15, 225, 13, 12, 15, 225, 12, 12, - 15, 225, 11, 12, 15, 225, 10, 12, 15, 225, 9, 12, 15, 225, 8, 12, 15, - 225, 7, 12, 15, 225, 6, 12, 15, 225, 5, 12, 15, 225, 4, 12, 15, 225, 3, - 12, 15, 225, 2, 12, 15, 225, 1, 12, 15, 225, 0, 12, 15, 224, 255, 12, 15, - 224, 254, 12, 15, 224, 253, 12, 15, 224, 252, 12, 15, 224, 251, 12, 15, - 224, 250, 12, 15, 224, 249, 12, 15, 224, 248, 12, 15, 224, 247, 12, 15, - 224, 246, 12, 15, 224, 245, 12, 15, 224, 244, 12, 15, 224, 243, 12, 15, - 224, 242, 12, 15, 224, 241, 12, 15, 224, 240, 12, 15, 224, 239, 12, 15, - 224, 238, 12, 15, 224, 237, 12, 15, 224, 236, 12, 15, 224, 235, 12, 15, - 224, 234, 12, 15, 224, 233, 12, 15, 224, 232, 12, 15, 224, 231, 12, 15, - 224, 230, 12, 15, 224, 229, 12, 15, 224, 228, 12, 15, 224, 227, 12, 15, - 224, 226, 12, 15, 224, 225, 12, 15, 224, 224, 12, 15, 224, 223, 12, 15, - 224, 222, 12, 15, 224, 221, 12, 15, 224, 220, 12, 15, 224, 219, 12, 15, - 224, 218, 12, 15, 224, 217, 12, 15, 224, 216, 12, 15, 224, 215, 12, 15, - 224, 214, 12, 15, 224, 213, 12, 15, 224, 212, 12, 15, 224, 211, 12, 15, - 224, 210, 12, 15, 224, 209, 12, 15, 224, 208, 12, 15, 224, 207, 12, 15, - 224, 206, 12, 15, 224, 205, 12, 15, 224, 204, 12, 15, 224, 203, 12, 15, - 224, 202, 12, 15, 224, 201, 12, 15, 224, 200, 12, 15, 224, 199, 12, 15, - 224, 198, 12, 15, 224, 197, 12, 15, 224, 196, 12, 15, 224, 195, 12, 15, - 224, 194, 12, 15, 224, 193, 12, 15, 224, 192, 12, 15, 224, 191, 12, 15, - 224, 190, 12, 15, 224, 189, 12, 15, 224, 188, 12, 15, 224, 187, 12, 15, - 224, 186, 12, 15, 224, 185, 12, 15, 224, 184, 12, 15, 224, 183, 12, 15, - 224, 182, 12, 15, 224, 181, 12, 15, 224, 180, 12, 15, 224, 179, 12, 15, - 224, 178, 12, 15, 224, 177, 12, 15, 224, 176, 12, 15, 224, 175, 12, 15, - 224, 174, 12, 15, 224, 173, 12, 15, 224, 172, 12, 15, 224, 171, 12, 15, - 224, 170, 12, 15, 224, 169, 12, 15, 224, 168, 12, 15, 224, 167, 12, 15, - 224, 166, 12, 15, 224, 165, 12, 15, 224, 164, 12, 15, 224, 163, 12, 15, - 224, 162, 12, 15, 224, 161, 12, 15, 224, 160, 12, 15, 224, 159, 12, 15, - 224, 158, 12, 15, 224, 157, 12, 15, 224, 156, 12, 15, 224, 155, 12, 15, - 224, 154, 12, 15, 224, 153, 12, 15, 224, 152, 12, 15, 224, 151, 12, 15, - 224, 150, 12, 15, 224, 149, 12, 15, 224, 148, 12, 15, 224, 147, 12, 15, - 224, 146, 12, 15, 224, 145, 12, 15, 224, 144, 12, 15, 224, 143, 12, 15, - 224, 142, 12, 15, 224, 141, 12, 15, 224, 140, 12, 15, 224, 139, 12, 15, - 224, 138, 12, 15, 224, 137, 12, 15, 224, 136, 12, 15, 224, 135, 12, 15, - 224, 134, 12, 15, 224, 133, 12, 15, 224, 132, 12, 15, 224, 131, 12, 15, - 224, 130, 12, 15, 224, 129, 12, 15, 224, 128, 12, 15, 224, 127, 12, 15, - 224, 126, 12, 15, 224, 125, 12, 15, 224, 124, 12, 15, 224, 123, 12, 15, - 224, 122, 12, 15, 224, 121, 12, 15, 224, 120, 12, 15, 224, 119, 12, 15, - 224, 118, 12, 15, 224, 117, 12, 15, 224, 116, 12, 15, 224, 115, 12, 15, - 224, 114, 12, 15, 224, 113, 12, 15, 224, 112, 12, 15, 224, 111, 12, 15, - 224, 110, 12, 15, 224, 109, 12, 15, 224, 108, 12, 15, 224, 107, 12, 15, - 224, 106, 12, 15, 224, 105, 12, 15, 224, 104, 12, 15, 224, 103, 12, 15, - 224, 102, 12, 15, 224, 101, 12, 15, 224, 100, 12, 15, 224, 99, 12, 15, - 224, 98, 12, 15, 224, 97, 12, 15, 224, 96, 12, 15, 224, 95, 12, 15, 224, - 94, 12, 15, 224, 93, 12, 15, 224, 92, 12, 15, 224, 91, 12, 15, 224, 90, - 12, 15, 224, 89, 12, 15, 224, 88, 12, 15, 224, 87, 12, 15, 224, 86, 12, - 15, 224, 85, 12, 15, 224, 84, 12, 15, 224, 83, 12, 15, 224, 82, 12, 15, - 224, 81, 12, 15, 224, 80, 12, 15, 224, 79, 12, 15, 224, 78, 12, 15, 224, - 77, 12, 15, 224, 76, 12, 15, 224, 75, 12, 15, 224, 74, 12, 15, 224, 73, - 12, 15, 224, 72, 12, 15, 224, 71, 12, 15, 224, 70, 12, 15, 224, 69, 12, - 15, 224, 68, 12, 15, 224, 67, 12, 15, 224, 66, 12, 15, 224, 65, 12, 15, - 224, 64, 12, 15, 224, 63, 12, 15, 224, 62, 12, 15, 224, 61, 12, 15, 224, - 60, 12, 15, 224, 59, 12, 15, 224, 58, 12, 15, 224, 57, 12, 15, 224, 56, - 12, 15, 224, 55, 12, 15, 224, 54, 12, 15, 224, 53, 12, 15, 224, 52, 12, - 15, 224, 51, 12, 15, 224, 50, 12, 15, 224, 49, 12, 15, 224, 48, 12, 15, - 224, 47, 12, 15, 224, 46, 12, 15, 224, 45, 12, 15, 224, 44, 12, 15, 224, - 43, 12, 15, 224, 42, 12, 15, 224, 41, 12, 15, 224, 40, 12, 15, 224, 39, - 12, 15, 224, 38, 12, 15, 224, 37, 12, 15, 224, 36, 12, 15, 224, 35, 12, - 15, 224, 34, 12, 15, 224, 33, 12, 15, 224, 32, 12, 15, 224, 31, 12, 15, - 224, 30, 12, 15, 224, 29, 12, 15, 224, 28, 12, 15, 224, 27, 12, 15, 224, - 26, 12, 15, 224, 25, 12, 15, 224, 24, 12, 15, 224, 23, 12, 15, 224, 22, - 12, 15, 224, 21, 12, 15, 224, 20, 12, 15, 224, 19, 12, 15, 224, 18, 12, - 15, 224, 17, 12, 15, 224, 16, 12, 15, 224, 15, 12, 15, 224, 14, 12, 15, - 224, 13, 12, 15, 224, 12, 12, 15, 224, 11, 12, 15, 224, 10, 12, 15, 224, - 9, 12, 15, 224, 8, 12, 15, 224, 7, 12, 15, 224, 6, 12, 15, 224, 5, 12, - 15, 224, 4, 12, 15, 224, 3, 12, 15, 224, 2, 12, 15, 224, 1, 12, 15, 224, - 0, 12, 15, 223, 255, 12, 15, 223, 254, 12, 15, 223, 253, 12, 15, 223, - 252, 12, 15, 223, 251, 12, 15, 223, 250, 12, 15, 223, 249, 12, 15, 223, - 248, 12, 15, 223, 247, 12, 15, 223, 246, 12, 15, 223, 245, 12, 15, 223, - 244, 12, 15, 223, 243, 12, 15, 223, 242, 12, 15, 223, 241, 12, 15, 223, - 240, 12, 15, 223, 239, 12, 15, 223, 238, 12, 15, 223, 237, 12, 15, 223, - 236, 12, 15, 223, 235, 12, 15, 223, 234, 12, 15, 223, 233, 12, 15, 223, - 232, 12, 15, 223, 231, 8, 2, 34, 233, 27, 8, 2, 34, 233, 23, 8, 2, 34, - 232, 220, 8, 2, 34, 233, 26, 8, 2, 34, 233, 25, 8, 2, 34, 179, 206, 9, - 200, 43, 8, 2, 34, 201, 118, 250, 249, 2, 34, 216, 187, 212, 253, 250, - 249, 2, 34, 216, 187, 234, 195, 250, 249, 2, 34, 216, 187, 223, 131, 250, - 249, 2, 34, 195, 75, 212, 253, 250, 249, 2, 34, 216, 187, 192, 212, 136, - 1, 191, 251, 4, 229, 119, 136, 209, 62, 222, 181, 195, 166, 136, 34, 192, - 31, 191, 251, 191, 251, 210, 88, 136, 1, 251, 152, 250, 126, 136, 1, 193, - 78, 251, 192, 136, 1, 193, 78, 237, 253, 136, 1, 193, 78, 229, 245, 136, - 1, 193, 78, 222, 106, 136, 1, 193, 78, 220, 27, 136, 1, 193, 78, 53, 216, - 193, 136, 1, 193, 78, 207, 38, 136, 1, 193, 78, 199, 162, 136, 1, 251, - 152, 108, 56, 136, 1, 203, 70, 4, 203, 70, 236, 140, 136, 1, 203, 70, 4, - 202, 175, 236, 140, 136, 1, 203, 70, 4, 238, 17, 23, 203, 70, 236, 140, - 136, 1, 203, 70, 4, 238, 17, 23, 202, 175, 236, 140, 136, 1, 131, 4, 210, - 88, 136, 1, 131, 4, 208, 84, 136, 1, 131, 4, 217, 70, 136, 1, 248, 215, - 4, 238, 16, 136, 1, 231, 39, 4, 238, 16, 136, 1, 237, 254, 4, 238, 16, - 136, 1, 229, 246, 4, 217, 70, 136, 1, 195, 159, 4, 238, 16, 136, 1, 191, - 92, 4, 238, 16, 136, 1, 199, 74, 4, 238, 16, 136, 1, 191, 251, 4, 238, - 16, 136, 1, 53, 222, 107, 4, 238, 16, 136, 1, 222, 107, 4, 238, 16, 136, - 1, 220, 28, 4, 238, 16, 136, 1, 216, 194, 4, 238, 16, 136, 1, 212, 131, - 4, 238, 16, 136, 1, 205, 149, 4, 238, 16, 136, 1, 53, 210, 64, 4, 238, - 16, 136, 1, 210, 64, 4, 238, 16, 136, 1, 197, 164, 4, 238, 16, 136, 1, - 208, 43, 4, 238, 16, 136, 1, 207, 39, 4, 238, 16, 136, 1, 203, 70, 4, - 238, 16, 136, 1, 199, 163, 4, 238, 16, 136, 1, 195, 159, 4, 229, 7, 136, - 1, 248, 215, 4, 207, 161, 136, 1, 222, 107, 4, 207, 161, 136, 1, 210, 64, - 4, 207, 161, 136, 34, 131, 220, 27, 9, 1, 131, 193, 151, 76, 20, 9, 1, - 131, 193, 151, 53, 20, 9, 1, 249, 0, 76, 20, 9, 1, 249, 0, 53, 20, 9, 1, - 249, 0, 89, 20, 9, 1, 249, 0, 216, 217, 20, 9, 1, 210, 42, 76, 20, 9, 1, - 210, 42, 53, 20, 9, 1, 210, 42, 89, 20, 9, 1, 210, 42, 216, 217, 20, 9, - 1, 248, 244, 76, 20, 9, 1, 248, 244, 53, 20, 9, 1, 248, 244, 89, 20, 9, - 1, 248, 244, 216, 217, 20, 9, 1, 197, 123, 76, 20, 9, 1, 197, 123, 53, - 20, 9, 1, 197, 123, 89, 20, 9, 1, 197, 123, 216, 217, 20, 9, 1, 199, 113, - 76, 20, 9, 1, 199, 113, 53, 20, 9, 1, 199, 113, 89, 20, 9, 1, 199, 113, - 216, 217, 20, 9, 1, 197, 125, 76, 20, 9, 1, 197, 125, 53, 20, 9, 1, 197, - 125, 89, 20, 9, 1, 197, 125, 216, 217, 20, 9, 1, 195, 147, 76, 20, 9, 1, - 195, 147, 53, 20, 9, 1, 195, 147, 89, 20, 9, 1, 195, 147, 216, 217, 20, - 9, 1, 210, 40, 76, 20, 9, 1, 210, 40, 53, 20, 9, 1, 210, 40, 89, 20, 9, - 1, 210, 40, 216, 217, 20, 9, 1, 235, 42, 76, 20, 9, 1, 235, 42, 53, 20, - 9, 1, 235, 42, 89, 20, 9, 1, 235, 42, 216, 217, 20, 9, 1, 212, 88, 76, - 20, 9, 1, 212, 88, 53, 20, 9, 1, 212, 88, 89, 20, 9, 1, 212, 88, 216, - 217, 20, 9, 1, 199, 150, 76, 20, 9, 1, 199, 150, 53, 20, 9, 1, 199, 150, - 89, 20, 9, 1, 199, 150, 216, 217, 20, 9, 1, 199, 148, 76, 20, 9, 1, 199, - 148, 53, 20, 9, 1, 199, 148, 89, 20, 9, 1, 199, 148, 216, 217, 20, 9, 1, - 237, 189, 76, 20, 9, 1, 237, 189, 53, 20, 9, 1, 238, 11, 76, 20, 9, 1, - 238, 11, 53, 20, 9, 1, 235, 79, 76, 20, 9, 1, 235, 79, 53, 20, 9, 1, 237, - 187, 76, 20, 9, 1, 237, 187, 53, 20, 9, 1, 223, 4, 76, 20, 9, 1, 223, 4, - 53, 20, 9, 1, 206, 102, 76, 20, 9, 1, 206, 102, 53, 20, 9, 1, 222, 5, 76, - 20, 9, 1, 222, 5, 53, 20, 9, 1, 222, 5, 89, 20, 9, 1, 222, 5, 216, 217, - 20, 9, 1, 231, 228, 76, 20, 9, 1, 231, 228, 53, 20, 9, 1, 231, 228, 89, - 20, 9, 1, 231, 228, 216, 217, 20, 9, 1, 230, 167, 76, 20, 9, 1, 230, 167, - 53, 20, 9, 1, 230, 167, 89, 20, 9, 1, 230, 167, 216, 217, 20, 9, 1, 213, - 248, 76, 20, 9, 1, 213, 248, 53, 20, 9, 1, 213, 248, 89, 20, 9, 1, 213, - 248, 216, 217, 20, 9, 1, 213, 25, 231, 58, 76, 20, 9, 1, 213, 25, 231, - 58, 53, 20, 9, 1, 206, 166, 76, 20, 9, 1, 206, 166, 53, 20, 9, 1, 206, - 166, 89, 20, 9, 1, 206, 166, 216, 217, 20, 9, 1, 229, 211, 4, 99, 93, 76, - 20, 9, 1, 229, 211, 4, 99, 93, 53, 20, 9, 1, 229, 211, 231, 1, 76, 20, 9, - 1, 229, 211, 231, 1, 53, 20, 9, 1, 229, 211, 231, 1, 89, 20, 9, 1, 229, - 211, 231, 1, 216, 217, 20, 9, 1, 229, 211, 236, 171, 76, 20, 9, 1, 229, - 211, 236, 171, 53, 20, 9, 1, 229, 211, 236, 171, 89, 20, 9, 1, 229, 211, - 236, 171, 216, 217, 20, 9, 1, 99, 249, 81, 76, 20, 9, 1, 99, 249, 81, 53, - 20, 9, 1, 99, 249, 81, 4, 230, 58, 93, 76, 20, 9, 1, 99, 249, 81, 4, 230, - 58, 93, 53, 20, 9, 16, 75, 58, 9, 16, 75, 60, 9, 16, 105, 185, 58, 9, 16, - 105, 185, 60, 9, 16, 115, 185, 58, 9, 16, 115, 185, 60, 9, 16, 115, 185, - 209, 58, 235, 119, 58, 9, 16, 115, 185, 209, 58, 235, 119, 60, 9, 16, - 232, 128, 185, 58, 9, 16, 232, 128, 185, 60, 9, 16, 55, 81, 249, 88, 60, - 9, 16, 105, 185, 195, 85, 58, 9, 16, 105, 185, 195, 85, 60, 9, 16, 206, - 188, 9, 16, 2, 199, 220, 58, 9, 16, 2, 199, 220, 60, 9, 16, 193, 151, 58, - 9, 1, 214, 71, 76, 20, 9, 1, 214, 71, 53, 20, 9, 1, 214, 71, 89, 20, 9, - 1, 214, 71, 216, 217, 20, 9, 1, 126, 76, 20, 9, 1, 126, 53, 20, 9, 1, - 211, 152, 76, 20, 9, 1, 211, 152, 53, 20, 9, 1, 191, 226, 76, 20, 9, 1, - 191, 226, 53, 20, 9, 1, 126, 4, 230, 58, 93, 76, 20, 9, 1, 195, 154, 76, - 20, 9, 1, 195, 154, 53, 20, 9, 1, 221, 132, 211, 152, 76, 20, 9, 1, 221, - 132, 211, 152, 53, 20, 9, 1, 221, 132, 191, 226, 76, 20, 9, 1, 221, 132, - 191, 226, 53, 20, 9, 1, 235, 15, 76, 20, 9, 1, 235, 15, 53, 20, 9, 1, - 235, 15, 89, 20, 9, 1, 235, 15, 216, 217, 20, 9, 1, 196, 137, 222, 26, - 221, 132, 131, 217, 100, 89, 20, 9, 1, 196, 137, 222, 26, 221, 132, 131, - 217, 100, 216, 217, 20, 9, 34, 99, 4, 230, 58, 93, 4, 131, 76, 20, 9, 34, - 99, 4, 230, 58, 93, 4, 131, 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 252, - 26, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, 252, 26, 53, 20, 9, 34, 99, 4, - 230, 58, 93, 4, 193, 134, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, 193, 134, - 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 126, 76, 20, 9, 34, 99, 4, 230, 58, - 93, 4, 126, 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 211, 152, 76, 20, 9, - 34, 99, 4, 230, 58, 93, 4, 211, 152, 53, 20, 9, 34, 99, 4, 230, 58, 93, - 4, 191, 226, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, 191, 226, 53, 20, 9, - 34, 99, 4, 230, 58, 93, 4, 235, 15, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, - 235, 15, 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 235, 15, 89, 20, 9, 34, - 196, 137, 221, 132, 99, 4, 230, 58, 93, 4, 131, 217, 100, 76, 20, 9, 34, - 196, 137, 221, 132, 99, 4, 230, 58, 93, 4, 131, 217, 100, 53, 20, 9, 34, - 196, 137, 221, 132, 99, 4, 230, 58, 93, 4, 131, 217, 100, 89, 20, 9, 1, - 233, 74, 99, 76, 20, 9, 1, 233, 74, 99, 53, 20, 9, 1, 233, 74, 99, 89, - 20, 9, 1, 233, 74, 99, 216, 217, 20, 9, 34, 99, 4, 230, 58, 93, 4, 223, - 7, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, 182, 76, 20, 9, 34, 99, 4, 230, - 58, 93, 4, 92, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, 131, 217, 100, 76, - 20, 9, 34, 99, 4, 230, 58, 93, 4, 99, 76, 20, 9, 34, 248, 246, 4, 223, 7, - 76, 20, 9, 34, 248, 246, 4, 182, 76, 20, 9, 34, 248, 246, 4, 221, 211, - 76, 20, 9, 34, 248, 246, 4, 92, 76, 20, 9, 34, 248, 246, 4, 131, 217, - 100, 76, 20, 9, 34, 248, 246, 4, 99, 76, 20, 9, 34, 199, 115, 4, 223, 7, - 76, 20, 9, 34, 199, 115, 4, 182, 76, 20, 9, 34, 199, 115, 4, 221, 211, - 76, 20, 9, 34, 199, 115, 4, 92, 76, 20, 9, 34, 199, 115, 4, 131, 217, - 100, 76, 20, 9, 34, 199, 115, 4, 99, 76, 20, 9, 34, 199, 30, 4, 223, 7, - 76, 20, 9, 34, 199, 30, 4, 92, 76, 20, 9, 34, 199, 30, 4, 131, 217, 100, - 76, 20, 9, 34, 199, 30, 4, 99, 76, 20, 9, 34, 223, 7, 4, 182, 76, 20, 9, - 34, 223, 7, 4, 92, 76, 20, 9, 34, 182, 4, 223, 7, 76, 20, 9, 34, 182, 4, - 92, 76, 20, 9, 34, 221, 211, 4, 223, 7, 76, 20, 9, 34, 221, 211, 4, 182, - 76, 20, 9, 34, 221, 211, 4, 92, 76, 20, 9, 34, 205, 47, 4, 223, 7, 76, - 20, 9, 34, 205, 47, 4, 182, 76, 20, 9, 34, 205, 47, 4, 221, 211, 76, 20, - 9, 34, 205, 47, 4, 92, 76, 20, 9, 34, 205, 193, 4, 182, 76, 20, 9, 34, - 205, 193, 4, 92, 76, 20, 9, 34, 238, 27, 4, 223, 7, 76, 20, 9, 34, 238, - 27, 4, 182, 76, 20, 9, 34, 238, 27, 4, 221, 211, 76, 20, 9, 34, 238, 27, - 4, 92, 76, 20, 9, 34, 199, 220, 4, 182, 76, 20, 9, 34, 199, 220, 4, 92, - 76, 20, 9, 34, 191, 117, 4, 92, 76, 20, 9, 34, 251, 231, 4, 223, 7, 76, - 20, 9, 34, 251, 231, 4, 92, 76, 20, 9, 34, 231, 87, 4, 223, 7, 76, 20, 9, - 34, 231, 87, 4, 92, 76, 20, 9, 34, 233, 47, 4, 223, 7, 76, 20, 9, 34, - 233, 47, 4, 182, 76, 20, 9, 34, 233, 47, 4, 221, 211, 76, 20, 9, 34, 233, - 47, 4, 92, 76, 20, 9, 34, 233, 47, 4, 131, 217, 100, 76, 20, 9, 34, 233, - 47, 4, 99, 76, 20, 9, 34, 208, 90, 4, 182, 76, 20, 9, 34, 208, 90, 4, 92, - 76, 20, 9, 34, 208, 90, 4, 131, 217, 100, 76, 20, 9, 34, 208, 90, 4, 99, - 76, 20, 9, 34, 222, 107, 4, 131, 76, 20, 9, 34, 222, 107, 4, 223, 7, 76, - 20, 9, 34, 222, 107, 4, 182, 76, 20, 9, 34, 222, 107, 4, 221, 211, 76, - 20, 9, 34, 222, 107, 4, 220, 36, 76, 20, 9, 34, 222, 107, 4, 92, 76, 20, - 9, 34, 222, 107, 4, 131, 217, 100, 76, 20, 9, 34, 222, 107, 4, 99, 76, - 20, 9, 34, 220, 36, 4, 223, 7, 76, 20, 9, 34, 220, 36, 4, 182, 76, 20, 9, - 34, 220, 36, 4, 221, 211, 76, 20, 9, 34, 220, 36, 4, 92, 76, 20, 9, 34, - 220, 36, 4, 131, 217, 100, 76, 20, 9, 34, 220, 36, 4, 99, 76, 20, 9, 34, - 92, 4, 223, 7, 76, 20, 9, 34, 92, 4, 182, 76, 20, 9, 34, 92, 4, 221, 211, - 76, 20, 9, 34, 92, 4, 92, 76, 20, 9, 34, 92, 4, 131, 217, 100, 76, 20, 9, - 34, 92, 4, 99, 76, 20, 9, 34, 213, 25, 4, 223, 7, 76, 20, 9, 34, 213, 25, - 4, 182, 76, 20, 9, 34, 213, 25, 4, 221, 211, 76, 20, 9, 34, 213, 25, 4, - 92, 76, 20, 9, 34, 213, 25, 4, 131, 217, 100, 76, 20, 9, 34, 213, 25, 4, - 99, 76, 20, 9, 34, 229, 211, 4, 223, 7, 76, 20, 9, 34, 229, 211, 4, 92, - 76, 20, 9, 34, 229, 211, 4, 131, 217, 100, 76, 20, 9, 34, 229, 211, 4, - 99, 76, 20, 9, 34, 99, 4, 223, 7, 76, 20, 9, 34, 99, 4, 182, 76, 20, 9, - 34, 99, 4, 221, 211, 76, 20, 9, 34, 99, 4, 92, 76, 20, 9, 34, 99, 4, 131, - 217, 100, 76, 20, 9, 34, 99, 4, 99, 76, 20, 9, 34, 199, 42, 4, 200, 182, - 131, 76, 20, 9, 34, 207, 72, 4, 200, 182, 131, 76, 20, 9, 34, 131, 217, - 100, 4, 200, 182, 131, 76, 20, 9, 34, 203, 156, 4, 237, 244, 76, 20, 9, - 34, 203, 156, 4, 222, 51, 76, 20, 9, 34, 203, 156, 4, 233, 71, 76, 20, 9, - 34, 203, 156, 4, 237, 246, 76, 20, 9, 34, 203, 156, 4, 222, 53, 76, 20, - 9, 34, 203, 156, 4, 200, 182, 131, 76, 20, 9, 34, 99, 4, 230, 58, 93, 4, - 207, 72, 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 191, 114, 53, 20, 9, 34, - 99, 4, 230, 58, 93, 4, 92, 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 213, 25, - 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 131, 217, 100, 53, 20, 9, 34, 99, - 4, 230, 58, 93, 4, 99, 53, 20, 9, 34, 248, 246, 4, 207, 72, 53, 20, 9, - 34, 248, 246, 4, 191, 114, 53, 20, 9, 34, 248, 246, 4, 92, 53, 20, 9, 34, - 248, 246, 4, 213, 25, 53, 20, 9, 34, 248, 246, 4, 131, 217, 100, 53, 20, - 9, 34, 248, 246, 4, 99, 53, 20, 9, 34, 199, 115, 4, 207, 72, 53, 20, 9, - 34, 199, 115, 4, 191, 114, 53, 20, 9, 34, 199, 115, 4, 92, 53, 20, 9, 34, - 199, 115, 4, 213, 25, 53, 20, 9, 34, 199, 115, 4, 131, 217, 100, 53, 20, - 9, 34, 199, 115, 4, 99, 53, 20, 9, 34, 199, 30, 4, 207, 72, 53, 20, 9, - 34, 199, 30, 4, 191, 114, 53, 20, 9, 34, 199, 30, 4, 92, 53, 20, 9, 34, - 199, 30, 4, 213, 25, 53, 20, 9, 34, 199, 30, 4, 131, 217, 100, 53, 20, 9, - 34, 199, 30, 4, 99, 53, 20, 9, 34, 233, 47, 4, 131, 217, 100, 53, 20, 9, - 34, 233, 47, 4, 99, 53, 20, 9, 34, 208, 90, 4, 131, 217, 100, 53, 20, 9, - 34, 208, 90, 4, 99, 53, 20, 9, 34, 222, 107, 4, 131, 53, 20, 9, 34, 222, - 107, 4, 220, 36, 53, 20, 9, 34, 222, 107, 4, 92, 53, 20, 9, 34, 222, 107, - 4, 131, 217, 100, 53, 20, 9, 34, 222, 107, 4, 99, 53, 20, 9, 34, 220, 36, - 4, 92, 53, 20, 9, 34, 220, 36, 4, 131, 217, 100, 53, 20, 9, 34, 220, 36, - 4, 99, 53, 20, 9, 34, 92, 4, 131, 53, 20, 9, 34, 92, 4, 92, 53, 20, 9, - 34, 213, 25, 4, 207, 72, 53, 20, 9, 34, 213, 25, 4, 191, 114, 53, 20, 9, - 34, 213, 25, 4, 92, 53, 20, 9, 34, 213, 25, 4, 213, 25, 53, 20, 9, 34, - 213, 25, 4, 131, 217, 100, 53, 20, 9, 34, 213, 25, 4, 99, 53, 20, 9, 34, - 131, 217, 100, 4, 200, 182, 131, 53, 20, 9, 34, 99, 4, 207, 72, 53, 20, - 9, 34, 99, 4, 191, 114, 53, 20, 9, 34, 99, 4, 92, 53, 20, 9, 34, 99, 4, - 213, 25, 53, 20, 9, 34, 99, 4, 131, 217, 100, 53, 20, 9, 34, 99, 4, 99, - 53, 20, 9, 34, 99, 4, 230, 58, 93, 4, 223, 7, 89, 20, 9, 34, 99, 4, 230, - 58, 93, 4, 182, 89, 20, 9, 34, 99, 4, 230, 58, 93, 4, 221, 211, 89, 20, - 9, 34, 99, 4, 230, 58, 93, 4, 92, 89, 20, 9, 34, 99, 4, 230, 58, 93, 4, - 229, 211, 89, 20, 9, 34, 248, 246, 4, 223, 7, 89, 20, 9, 34, 248, 246, 4, - 182, 89, 20, 9, 34, 248, 246, 4, 221, 211, 89, 20, 9, 34, 248, 246, 4, - 92, 89, 20, 9, 34, 248, 246, 4, 229, 211, 89, 20, 9, 34, 199, 115, 4, - 223, 7, 89, 20, 9, 34, 199, 115, 4, 182, 89, 20, 9, 34, 199, 115, 4, 221, - 211, 89, 20, 9, 34, 199, 115, 4, 92, 89, 20, 9, 34, 199, 115, 4, 229, - 211, 89, 20, 9, 34, 199, 30, 4, 92, 89, 20, 9, 34, 223, 7, 4, 182, 89, - 20, 9, 34, 223, 7, 4, 92, 89, 20, 9, 34, 182, 4, 223, 7, 89, 20, 9, 34, - 182, 4, 92, 89, 20, 9, 34, 221, 211, 4, 223, 7, 89, 20, 9, 34, 221, 211, - 4, 92, 89, 20, 9, 34, 205, 47, 4, 223, 7, 89, 20, 9, 34, 205, 47, 4, 182, - 89, 20, 9, 34, 205, 47, 4, 221, 211, 89, 20, 9, 34, 205, 47, 4, 92, 89, - 20, 9, 34, 205, 193, 4, 182, 89, 20, 9, 34, 205, 193, 4, 221, 211, 89, - 20, 9, 34, 205, 193, 4, 92, 89, 20, 9, 34, 238, 27, 4, 223, 7, 89, 20, 9, - 34, 238, 27, 4, 182, 89, 20, 9, 34, 238, 27, 4, 221, 211, 89, 20, 9, 34, - 238, 27, 4, 92, 89, 20, 9, 34, 199, 220, 4, 182, 89, 20, 9, 34, 191, 117, - 4, 92, 89, 20, 9, 34, 251, 231, 4, 223, 7, 89, 20, 9, 34, 251, 231, 4, - 92, 89, 20, 9, 34, 231, 87, 4, 223, 7, 89, 20, 9, 34, 231, 87, 4, 92, 89, - 20, 9, 34, 233, 47, 4, 223, 7, 89, 20, 9, 34, 233, 47, 4, 182, 89, 20, 9, - 34, 233, 47, 4, 221, 211, 89, 20, 9, 34, 233, 47, 4, 92, 89, 20, 9, 34, - 208, 90, 4, 182, 89, 20, 9, 34, 208, 90, 4, 92, 89, 20, 9, 34, 222, 107, - 4, 223, 7, 89, 20, 9, 34, 222, 107, 4, 182, 89, 20, 9, 34, 222, 107, 4, - 221, 211, 89, 20, 9, 34, 222, 107, 4, 220, 36, 89, 20, 9, 34, 222, 107, - 4, 92, 89, 20, 9, 34, 220, 36, 4, 223, 7, 89, 20, 9, 34, 220, 36, 4, 182, - 89, 20, 9, 34, 220, 36, 4, 221, 211, 89, 20, 9, 34, 220, 36, 4, 92, 89, - 20, 9, 34, 220, 36, 4, 229, 211, 89, 20, 9, 34, 92, 4, 223, 7, 89, 20, 9, - 34, 92, 4, 182, 89, 20, 9, 34, 92, 4, 221, 211, 89, 20, 9, 34, 92, 4, 92, - 89, 20, 9, 34, 213, 25, 4, 223, 7, 89, 20, 9, 34, 213, 25, 4, 182, 89, - 20, 9, 34, 213, 25, 4, 221, 211, 89, 20, 9, 34, 213, 25, 4, 92, 89, 20, - 9, 34, 213, 25, 4, 229, 211, 89, 20, 9, 34, 229, 211, 4, 223, 7, 89, 20, - 9, 34, 229, 211, 4, 92, 89, 20, 9, 34, 229, 211, 4, 200, 182, 131, 89, - 20, 9, 34, 99, 4, 223, 7, 89, 20, 9, 34, 99, 4, 182, 89, 20, 9, 34, 99, - 4, 221, 211, 89, 20, 9, 34, 99, 4, 92, 89, 20, 9, 34, 99, 4, 229, 211, - 89, 20, 9, 34, 99, 4, 230, 58, 93, 4, 92, 216, 217, 20, 9, 34, 99, 4, - 230, 58, 93, 4, 229, 211, 216, 217, 20, 9, 34, 248, 246, 4, 92, 216, 217, - 20, 9, 34, 248, 246, 4, 229, 211, 216, 217, 20, 9, 34, 199, 115, 4, 92, - 216, 217, 20, 9, 34, 199, 115, 4, 229, 211, 216, 217, 20, 9, 34, 199, 30, - 4, 92, 216, 217, 20, 9, 34, 199, 30, 4, 229, 211, 216, 217, 20, 9, 34, - 205, 47, 4, 92, 216, 217, 20, 9, 34, 205, 47, 4, 229, 211, 216, 217, 20, - 9, 34, 203, 110, 4, 92, 216, 217, 20, 9, 34, 203, 110, 4, 229, 211, 216, - 217, 20, 9, 34, 222, 107, 4, 220, 36, 216, 217, 20, 9, 34, 222, 107, 4, - 92, 216, 217, 20, 9, 34, 220, 36, 4, 92, 216, 217, 20, 9, 34, 213, 25, 4, - 92, 216, 217, 20, 9, 34, 213, 25, 4, 229, 211, 216, 217, 20, 9, 34, 99, - 4, 92, 216, 217, 20, 9, 34, 99, 4, 229, 211, 216, 217, 20, 9, 34, 203, - 156, 4, 233, 71, 216, 217, 20, 9, 34, 203, 156, 4, 237, 246, 216, 217, - 20, 9, 34, 203, 156, 4, 222, 53, 216, 217, 20, 9, 34, 199, 220, 4, 131, - 217, 100, 76, 20, 9, 34, 199, 220, 4, 99, 76, 20, 9, 34, 251, 231, 4, - 131, 217, 100, 76, 20, 9, 34, 251, 231, 4, 99, 76, 20, 9, 34, 231, 87, 4, - 131, 217, 100, 76, 20, 9, 34, 231, 87, 4, 99, 76, 20, 9, 34, 205, 47, 4, - 131, 217, 100, 76, 20, 9, 34, 205, 47, 4, 99, 76, 20, 9, 34, 203, 110, 4, - 131, 217, 100, 76, 20, 9, 34, 203, 110, 4, 99, 76, 20, 9, 34, 182, 4, - 131, 217, 100, 76, 20, 9, 34, 182, 4, 99, 76, 20, 9, 34, 223, 7, 4, 131, - 217, 100, 76, 20, 9, 34, 223, 7, 4, 99, 76, 20, 9, 34, 221, 211, 4, 131, - 217, 100, 76, 20, 9, 34, 221, 211, 4, 99, 76, 20, 9, 34, 205, 193, 4, - 131, 217, 100, 76, 20, 9, 34, 205, 193, 4, 99, 76, 20, 9, 34, 238, 27, 4, - 131, 217, 100, 76, 20, 9, 34, 238, 27, 4, 99, 76, 20, 9, 34, 203, 110, 4, - 223, 7, 76, 20, 9, 34, 203, 110, 4, 182, 76, 20, 9, 34, 203, 110, 4, 221, - 211, 76, 20, 9, 34, 203, 110, 4, 92, 76, 20, 9, 34, 203, 110, 4, 207, 72, - 76, 20, 9, 34, 205, 47, 4, 207, 72, 76, 20, 9, 34, 205, 193, 4, 207, 72, - 76, 20, 9, 34, 238, 27, 4, 207, 72, 76, 20, 9, 34, 199, 220, 4, 131, 217, - 100, 53, 20, 9, 34, 199, 220, 4, 99, 53, 20, 9, 34, 251, 231, 4, 131, - 217, 100, 53, 20, 9, 34, 251, 231, 4, 99, 53, 20, 9, 34, 231, 87, 4, 131, - 217, 100, 53, 20, 9, 34, 231, 87, 4, 99, 53, 20, 9, 34, 205, 47, 4, 131, - 217, 100, 53, 20, 9, 34, 205, 47, 4, 99, 53, 20, 9, 34, 203, 110, 4, 131, - 217, 100, 53, 20, 9, 34, 203, 110, 4, 99, 53, 20, 9, 34, 182, 4, 131, - 217, 100, 53, 20, 9, 34, 182, 4, 99, 53, 20, 9, 34, 223, 7, 4, 131, 217, - 100, 53, 20, 9, 34, 223, 7, 4, 99, 53, 20, 9, 34, 221, 211, 4, 131, 217, - 100, 53, 20, 9, 34, 221, 211, 4, 99, 53, 20, 9, 34, 205, 193, 4, 131, - 217, 100, 53, 20, 9, 34, 205, 193, 4, 99, 53, 20, 9, 34, 238, 27, 4, 131, - 217, 100, 53, 20, 9, 34, 238, 27, 4, 99, 53, 20, 9, 34, 203, 110, 4, 223, - 7, 53, 20, 9, 34, 203, 110, 4, 182, 53, 20, 9, 34, 203, 110, 4, 221, 211, - 53, 20, 9, 34, 203, 110, 4, 92, 53, 20, 9, 34, 203, 110, 4, 207, 72, 53, - 20, 9, 34, 205, 47, 4, 207, 72, 53, 20, 9, 34, 205, 193, 4, 207, 72, 53, - 20, 9, 34, 238, 27, 4, 207, 72, 53, 20, 9, 34, 203, 110, 4, 223, 7, 89, - 20, 9, 34, 203, 110, 4, 182, 89, 20, 9, 34, 203, 110, 4, 221, 211, 89, - 20, 9, 34, 203, 110, 4, 92, 89, 20, 9, 34, 205, 47, 4, 229, 211, 89, 20, - 9, 34, 203, 110, 4, 229, 211, 89, 20, 9, 34, 199, 220, 4, 92, 89, 20, 9, - 34, 205, 47, 4, 223, 7, 216, 217, 20, 9, 34, 205, 47, 4, 182, 216, 217, - 20, 9, 34, 205, 47, 4, 221, 211, 216, 217, 20, 9, 34, 203, 110, 4, 223, - 7, 216, 217, 20, 9, 34, 203, 110, 4, 182, 216, 217, 20, 9, 34, 203, 110, - 4, 221, 211, 216, 217, 20, 9, 34, 199, 220, 4, 92, 216, 217, 20, 9, 34, - 191, 117, 4, 92, 216, 217, 20, 9, 34, 131, 4, 233, 69, 53, 20, 9, 34, - 131, 4, 233, 69, 76, 20, 211, 40, 45, 210, 113, 211, 40, 50, 210, 113, 9, - 34, 207, 159, 251, 173, 9, 34, 207, 167, 251, 172, 251, 107, 9, 34, 207, - 167, 251, 172, 251, 106, 9, 34, 207, 167, 251, 172, 251, 104, 9, 34, 207, - 167, 251, 172, 251, 103, 9, 34, 207, 167, 251, 172, 251, 102, 9, 34, 205, - 162, 251, 197, 193, 184, 9, 34, 251, 197, 250, 217, 9, 34, 251, 196, 250, - 217, 9, 34, 251, 195, 250, 217, 9, 34, 251, 197, 250, 216, 193, 154, 9, - 34, 208, 17, 202, 140, 9, 34, 205, 160, 251, 197, 193, 180, 193, 183, 9, - 34, 251, 200, 250, 217, 9, 34, 199, 235, 193, 182, 9, 34, 207, 158, 251, - 173, 9, 34, 199, 115, 4, 223, 7, 4, 92, 89, 20, 9, 34, 199, 115, 4, 182, - 4, 223, 7, 53, 20, 9, 34, 199, 115, 4, 182, 4, 223, 7, 89, 20, 9, 34, - 199, 115, 4, 182, 4, 92, 89, 20, 9, 34, 199, 115, 4, 221, 211, 4, 92, 89, - 20, 9, 34, 199, 115, 4, 92, 4, 223, 7, 89, 20, 9, 34, 199, 115, 4, 92, 4, - 182, 89, 20, 9, 34, 199, 115, 4, 92, 4, 221, 211, 89, 20, 9, 34, 223, 7, - 4, 92, 4, 182, 53, 20, 9, 34, 223, 7, 4, 92, 4, 182, 89, 20, 9, 34, 182, - 4, 92, 4, 99, 53, 20, 9, 34, 182, 4, 92, 4, 131, 217, 100, 53, 20, 9, 34, - 205, 47, 4, 182, 4, 223, 7, 89, 20, 9, 34, 205, 47, 4, 223, 7, 4, 182, - 89, 20, 9, 34, 205, 47, 4, 223, 7, 4, 131, 217, 100, 53, 20, 9, 34, 205, - 47, 4, 92, 4, 182, 53, 20, 9, 34, 205, 47, 4, 92, 4, 182, 89, 20, 9, 34, - 205, 47, 4, 92, 4, 223, 7, 89, 20, 9, 34, 205, 47, 4, 92, 4, 92, 53, 20, - 9, 34, 205, 47, 4, 92, 4, 92, 89, 20, 9, 34, 205, 193, 4, 182, 4, 182, - 53, 20, 9, 34, 205, 193, 4, 182, 4, 182, 89, 20, 9, 34, 205, 193, 4, 92, - 4, 92, 53, 20, 9, 34, 203, 110, 4, 182, 4, 92, 53, 20, 9, 34, 203, 110, - 4, 182, 4, 92, 89, 20, 9, 34, 203, 110, 4, 223, 7, 4, 99, 53, 20, 9, 34, - 203, 110, 4, 92, 4, 221, 211, 53, 20, 9, 34, 203, 110, 4, 92, 4, 221, - 211, 89, 20, 9, 34, 203, 110, 4, 92, 4, 92, 53, 20, 9, 34, 203, 110, 4, - 92, 4, 92, 89, 20, 9, 34, 238, 27, 4, 182, 4, 131, 217, 100, 53, 20, 9, - 34, 238, 27, 4, 221, 211, 4, 92, 53, 20, 9, 34, 238, 27, 4, 221, 211, 4, - 92, 89, 20, 9, 34, 199, 220, 4, 92, 4, 182, 53, 20, 9, 34, 199, 220, 4, - 92, 4, 182, 89, 20, 9, 34, 199, 220, 4, 92, 4, 92, 89, 20, 9, 34, 199, - 220, 4, 92, 4, 99, 53, 20, 9, 34, 251, 231, 4, 223, 7, 4, 92, 53, 20, 9, - 34, 251, 231, 4, 92, 4, 92, 53, 20, 9, 34, 251, 231, 4, 92, 4, 92, 89, - 20, 9, 34, 251, 231, 4, 92, 4, 131, 217, 100, 53, 20, 9, 34, 231, 87, 4, - 92, 4, 92, 53, 20, 9, 34, 231, 87, 4, 92, 4, 99, 53, 20, 9, 34, 231, 87, - 4, 92, 4, 131, 217, 100, 53, 20, 9, 34, 233, 47, 4, 221, 211, 4, 92, 53, - 20, 9, 34, 233, 47, 4, 221, 211, 4, 92, 89, 20, 9, 34, 208, 90, 4, 92, 4, - 182, 53, 20, 9, 34, 208, 90, 4, 92, 4, 92, 53, 20, 9, 34, 220, 36, 4, - 182, 4, 92, 53, 20, 9, 34, 220, 36, 4, 182, 4, 99, 53, 20, 9, 34, 220, - 36, 4, 182, 4, 131, 217, 100, 53, 20, 9, 34, 220, 36, 4, 223, 7, 4, 223, - 7, 89, 20, 9, 34, 220, 36, 4, 223, 7, 4, 223, 7, 53, 20, 9, 34, 220, 36, - 4, 221, 211, 4, 92, 53, 20, 9, 34, 220, 36, 4, 221, 211, 4, 92, 89, 20, - 9, 34, 220, 36, 4, 92, 4, 182, 53, 20, 9, 34, 220, 36, 4, 92, 4, 182, 89, - 20, 9, 34, 92, 4, 182, 4, 223, 7, 89, 20, 9, 34, 92, 4, 182, 4, 92, 89, - 20, 9, 34, 92, 4, 182, 4, 99, 53, 20, 9, 34, 92, 4, 223, 7, 4, 182, 89, - 20, 9, 34, 92, 4, 223, 7, 4, 92, 89, 20, 9, 34, 92, 4, 221, 211, 4, 223, - 7, 89, 20, 9, 34, 92, 4, 221, 211, 4, 92, 89, 20, 9, 34, 92, 4, 223, 7, - 4, 221, 211, 89, 20, 9, 34, 229, 211, 4, 92, 4, 223, 7, 89, 20, 9, 34, - 229, 211, 4, 92, 4, 92, 89, 20, 9, 34, 213, 25, 4, 182, 4, 92, 89, 20, 9, - 34, 213, 25, 4, 182, 4, 131, 217, 100, 53, 20, 9, 34, 213, 25, 4, 223, 7, - 4, 92, 53, 20, 9, 34, 213, 25, 4, 223, 7, 4, 92, 89, 20, 9, 34, 213, 25, - 4, 223, 7, 4, 131, 217, 100, 53, 20, 9, 34, 213, 25, 4, 92, 4, 99, 53, - 20, 9, 34, 213, 25, 4, 92, 4, 131, 217, 100, 53, 20, 9, 34, 99, 4, 92, 4, - 92, 53, 20, 9, 34, 99, 4, 92, 4, 92, 89, 20, 9, 34, 248, 246, 4, 221, - 211, 4, 99, 53, 20, 9, 34, 199, 115, 4, 223, 7, 4, 99, 53, 20, 9, 34, - 199, 115, 4, 223, 7, 4, 131, 217, 100, 53, 20, 9, 34, 199, 115, 4, 221, - 211, 4, 99, 53, 20, 9, 34, 199, 115, 4, 221, 211, 4, 131, 217, 100, 53, - 20, 9, 34, 199, 115, 4, 92, 4, 99, 53, 20, 9, 34, 199, 115, 4, 92, 4, - 131, 217, 100, 53, 20, 9, 34, 223, 7, 4, 92, 4, 99, 53, 20, 9, 34, 223, - 7, 4, 182, 4, 131, 217, 100, 53, 20, 9, 34, 223, 7, 4, 92, 4, 131, 217, - 100, 53, 20, 9, 34, 205, 47, 4, 221, 211, 4, 131, 217, 100, 53, 20, 9, - 34, 205, 193, 4, 182, 4, 99, 53, 20, 9, 34, 203, 110, 4, 182, 4, 99, 53, - 20, 9, 34, 238, 27, 4, 182, 4, 99, 53, 20, 9, 34, 220, 36, 4, 223, 7, 4, - 99, 53, 20, 9, 34, 220, 36, 4, 92, 4, 99, 53, 20, 9, 34, 99, 4, 182, 4, - 99, 53, 20, 9, 34, 99, 4, 223, 7, 4, 99, 53, 20, 9, 34, 99, 4, 92, 4, 99, - 53, 20, 9, 34, 92, 4, 92, 4, 99, 53, 20, 9, 34, 208, 90, 4, 92, 4, 99, - 53, 20, 9, 34, 213, 25, 4, 182, 4, 99, 53, 20, 9, 34, 208, 90, 4, 92, 4, - 182, 89, 20, 9, 34, 220, 36, 4, 182, 4, 92, 89, 20, 9, 34, 251, 231, 4, - 92, 4, 99, 53, 20, 9, 34, 222, 107, 4, 92, 4, 99, 53, 20, 9, 34, 213, 25, - 4, 223, 7, 4, 182, 89, 20, 9, 34, 92, 4, 221, 211, 4, 99, 53, 20, 9, 34, - 220, 36, 4, 223, 7, 4, 92, 89, 20, 9, 34, 222, 107, 4, 92, 4, 92, 53, 20, - 9, 34, 220, 36, 4, 223, 7, 4, 92, 53, 20, 9, 34, 213, 25, 4, 223, 7, 4, - 182, 53, 20, 9, 34, 223, 7, 4, 182, 4, 99, 53, 20, 9, 34, 182, 4, 223, 7, - 4, 99, 53, 20, 9, 34, 92, 4, 223, 7, 4, 99, 53, 20, 9, 34, 233, 47, 4, - 92, 4, 99, 53, 20, 9, 34, 248, 246, 4, 182, 4, 99, 53, 20, 9, 34, 222, - 107, 4, 92, 4, 92, 89, 20, 9, 34, 251, 231, 4, 223, 7, 4, 92, 89, 20, 9, - 34, 205, 193, 4, 92, 4, 92, 89, 20, 9, 34, 205, 47, 4, 221, 211, 4, 99, - 53, 20, 9, 34, 213, 25, 4, 223, 7, 4, 99, 53, 20, 9, 34, 205, 166, 251, - 194, 9, 34, 205, 163, 196, 40, 250, 220, 221, 33, 201, 64, 3, 76, 20, 9, - 34, 208, 86, 196, 40, 250, 220, 221, 33, 201, 64, 3, 76, 20, 9, 34, 251, - 171, 76, 20, 9, 34, 251, 213, 76, 20, 9, 34, 215, 235, 76, 20, 9, 34, - 205, 164, 76, 20, 9, 34, 207, 132, 76, 20, 9, 34, 251, 199, 76, 20, 9, - 34, 193, 153, 76, 20, 9, 34, 205, 163, 76, 20, 9, 34, 205, 161, 251, 199, - 193, 152, 9, 34, 223, 22, 206, 249, 56, 9, 34, 248, 151, 251, 31, 251, - 32, 9, 34, 200, 242, 193, 191, 199, 244, 9, 34, 250, 121, 193, 191, 223, - 23, 67, 205, 33, 67, 204, 178, 67, 204, 110, 67, 204, 99, 67, 204, 88, - 67, 204, 77, 67, 204, 66, 67, 204, 55, 67, 204, 44, 67, 205, 32, 67, 205, - 21, 67, 205, 10, 67, 204, 255, 67, 204, 244, 67, 204, 233, 67, 204, 222, - 208, 221, 232, 146, 40, 81, 242, 74, 208, 221, 232, 146, 40, 81, 154, - 242, 74, 208, 221, 232, 146, 40, 81, 154, 232, 80, 201, 63, 208, 221, - 232, 146, 40, 81, 242, 83, 208, 221, 232, 146, 40, 81, 204, 25, 208, 221, - 232, 146, 40, 81, 233, 216, 77, 208, 221, 232, 146, 40, 81, 208, 13, 77, - 208, 221, 232, 146, 40, 81, 45, 63, 219, 187, 248, 53, 208, 221, 232, - 146, 40, 81, 50, 63, 219, 187, 248, 49, 208, 221, 232, 146, 40, 81, 228, - 241, 234, 120, 33, 34, 45, 230, 70, 33, 34, 50, 230, 70, 33, 55, 198, - 153, 45, 230, 70, 33, 55, 198, 153, 50, 230, 70, 33, 217, 147, 45, 230, - 70, 33, 217, 147, 50, 230, 70, 33, 239, 44, 217, 146, 33, 34, 45, 132, - 60, 33, 34, 50, 132, 60, 33, 198, 153, 45, 132, 60, 33, 198, 153, 50, - 132, 60, 33, 217, 147, 45, 132, 60, 33, 217, 147, 50, 132, 60, 33, 239, - 44, 217, 147, 60, 33, 38, 198, 123, 45, 230, 70, 33, 38, 198, 123, 50, - 230, 70, 208, 221, 232, 146, 40, 81, 105, 75, 219, 236, 208, 221, 232, - 146, 40, 81, 234, 115, 237, 215, 208, 221, 232, 146, 40, 81, 234, 104, - 237, 215, 208, 221, 232, 146, 40, 81, 130, 219, 112, 208, 221, 232, 146, - 40, 81, 193, 135, 130, 219, 112, 208, 221, 232, 146, 40, 81, 45, 210, - 113, 208, 221, 232, 146, 40, 81, 50, 210, 113, 208, 221, 232, 146, 40, - 81, 45, 238, 171, 248, 53, 208, 221, 232, 146, 40, 81, 50, 238, 171, 248, - 53, 208, 221, 232, 146, 40, 81, 45, 198, 42, 203, 103, 248, 53, 208, 221, - 232, 146, 40, 81, 50, 198, 42, 203, 103, 248, 53, 208, 221, 232, 146, 40, - 81, 45, 62, 219, 187, 248, 53, 208, 221, 232, 146, 40, 81, 50, 62, 219, - 187, 248, 53, 208, 221, 232, 146, 40, 81, 45, 55, 251, 116, 248, 53, 208, - 221, 232, 146, 40, 81, 50, 55, 251, 116, 248, 53, 208, 221, 232, 146, 40, - 81, 45, 251, 116, 248, 53, 208, 221, 232, 146, 40, 81, 50, 251, 116, 248, - 53, 208, 221, 232, 146, 40, 81, 45, 239, 2, 248, 53, 208, 221, 232, 146, - 40, 81, 50, 239, 2, 248, 53, 208, 221, 232, 146, 40, 81, 45, 63, 239, 2, - 248, 53, 208, 221, 232, 146, 40, 81, 50, 63, 239, 2, 248, 53, 204, 0, - 236, 140, 63, 204, 0, 236, 140, 208, 221, 232, 146, 40, 81, 45, 51, 248, - 53, 208, 221, 232, 146, 40, 81, 50, 51, 248, 53, 237, 214, 210, 254, 247, - 18, 210, 254, 193, 135, 210, 254, 55, 193, 135, 210, 254, 237, 214, 130, - 219, 112, 247, 18, 130, 219, 112, 193, 135, 130, 219, 112, 2, 242, 74, 2, - 154, 242, 74, 2, 232, 80, 201, 63, 2, 204, 25, 2, 242, 83, 2, 208, 13, - 77, 2, 233, 216, 77, 2, 234, 115, 237, 215, 2, 45, 210, 113, 2, 50, 210, - 113, 2, 45, 238, 171, 248, 53, 2, 50, 238, 171, 248, 53, 2, 45, 198, 42, - 203, 103, 248, 53, 2, 50, 198, 42, 203, 103, 248, 53, 2, 31, 56, 2, 251, - 137, 2, 250, 193, 2, 108, 56, 2, 228, 87, 2, 219, 180, 56, 2, 230, 204, - 56, 2, 234, 43, 56, 2, 207, 19, 202, 23, 2, 236, 155, 56, 2, 210, 13, 56, - 2, 242, 72, 250, 182, 9, 233, 69, 76, 20, 9, 199, 169, 4, 233, 69, 58, 9, - 237, 244, 76, 20, 9, 199, 216, 232, 117, 9, 222, 51, 76, 20, 9, 233, 71, - 76, 20, 9, 233, 71, 216, 217, 20, 9, 237, 246, 76, 20, 9, 237, 246, 216, - 217, 20, 9, 222, 53, 76, 20, 9, 222, 53, 216, 217, 20, 9, 203, 156, 76, - 20, 9, 203, 156, 216, 217, 20, 9, 200, 207, 76, 20, 9, 200, 207, 216, - 217, 20, 9, 1, 230, 58, 76, 20, 9, 1, 131, 4, 217, 142, 93, 76, 20, 9, 1, - 131, 4, 217, 142, 93, 53, 20, 9, 1, 131, 4, 230, 58, 93, 76, 20, 9, 1, - 131, 4, 230, 58, 93, 53, 20, 9, 1, 193, 134, 4, 230, 58, 93, 76, 20, 9, - 1, 193, 134, 4, 230, 58, 93, 53, 20, 9, 1, 131, 4, 230, 58, 248, 233, 76, - 20, 9, 1, 131, 4, 230, 58, 248, 233, 53, 20, 9, 1, 99, 4, 230, 58, 93, - 76, 20, 9, 1, 99, 4, 230, 58, 93, 53, 20, 9, 1, 99, 4, 230, 58, 93, 89, - 20, 9, 1, 99, 4, 230, 58, 93, 216, 217, 20, 9, 1, 131, 76, 20, 9, 1, 131, - 53, 20, 9, 1, 248, 246, 76, 20, 9, 1, 248, 246, 53, 20, 9, 1, 248, 246, - 89, 20, 9, 1, 248, 246, 216, 217, 20, 9, 1, 199, 115, 217, 63, 76, 20, 9, - 1, 199, 115, 217, 63, 53, 20, 9, 1, 199, 115, 76, 20, 9, 1, 199, 115, 53, - 20, 9, 1, 199, 115, 89, 20, 9, 1, 199, 115, 216, 217, 20, 9, 1, 199, 30, - 76, 20, 9, 1, 199, 30, 53, 20, 9, 1, 199, 30, 89, 20, 9, 1, 199, 30, 216, - 217, 20, 9, 1, 223, 7, 76, 20, 9, 1, 223, 7, 53, 20, 9, 1, 223, 7, 89, - 20, 9, 1, 223, 7, 216, 217, 20, 9, 1, 182, 76, 20, 9, 1, 182, 53, 20, 9, - 1, 182, 89, 20, 9, 1, 182, 216, 217, 20, 9, 1, 221, 211, 76, 20, 9, 1, - 221, 211, 53, 20, 9, 1, 221, 211, 89, 20, 9, 1, 221, 211, 216, 217, 20, - 9, 1, 238, 4, 76, 20, 9, 1, 238, 4, 53, 20, 9, 1, 199, 42, 76, 20, 9, 1, - 199, 42, 53, 20, 9, 1, 207, 72, 76, 20, 9, 1, 207, 72, 53, 20, 9, 1, 191, - 114, 76, 20, 9, 1, 191, 114, 53, 20, 9, 1, 205, 47, 76, 20, 9, 1, 205, - 47, 53, 20, 9, 1, 205, 47, 89, 20, 9, 1, 205, 47, 216, 217, 20, 9, 1, - 203, 110, 76, 20, 9, 1, 203, 110, 53, 20, 9, 1, 203, 110, 89, 20, 9, 1, - 203, 110, 216, 217, 20, 9, 1, 205, 193, 76, 20, 9, 1, 205, 193, 53, 20, - 9, 1, 205, 193, 89, 20, 9, 1, 205, 193, 216, 217, 20, 9, 1, 238, 27, 76, - 20, 9, 1, 238, 27, 53, 20, 9, 1, 238, 27, 89, 20, 9, 1, 238, 27, 216, - 217, 20, 9, 1, 199, 220, 76, 20, 9, 1, 199, 220, 53, 20, 9, 1, 199, 220, - 89, 20, 9, 1, 199, 220, 216, 217, 20, 9, 1, 191, 117, 76, 20, 9, 1, 191, - 117, 53, 20, 9, 1, 191, 117, 89, 20, 9, 1, 191, 117, 216, 217, 20, 9, 1, - 251, 231, 76, 20, 9, 1, 251, 231, 53, 20, 9, 1, 251, 231, 89, 20, 9, 1, - 251, 231, 216, 217, 20, 9, 1, 231, 87, 76, 20, 9, 1, 231, 87, 53, 20, 9, - 1, 231, 87, 89, 20, 9, 1, 231, 87, 216, 217, 20, 9, 1, 233, 47, 76, 20, - 9, 1, 233, 47, 53, 20, 9, 1, 233, 47, 89, 20, 9, 1, 233, 47, 216, 217, - 20, 9, 1, 208, 90, 76, 20, 9, 1, 208, 90, 53, 20, 9, 1, 208, 90, 89, 20, - 9, 1, 208, 90, 216, 217, 20, 9, 1, 222, 107, 76, 20, 9, 1, 222, 107, 53, - 20, 9, 1, 222, 107, 89, 20, 9, 1, 222, 107, 216, 217, 20, 9, 1, 220, 36, - 76, 20, 9, 1, 220, 36, 53, 20, 9, 1, 220, 36, 89, 20, 9, 1, 220, 36, 216, - 217, 20, 9, 1, 92, 76, 20, 9, 1, 92, 53, 20, 9, 1, 92, 89, 20, 9, 1, 92, - 216, 217, 20, 9, 1, 213, 25, 76, 20, 9, 1, 213, 25, 53, 20, 9, 1, 213, - 25, 89, 20, 9, 1, 213, 25, 216, 217, 20, 9, 1, 229, 211, 76, 20, 9, 1, - 229, 211, 53, 20, 9, 1, 229, 211, 89, 20, 9, 1, 229, 211, 216, 217, 20, - 9, 1, 193, 134, 76, 20, 9, 1, 193, 134, 53, 20, 9, 1, 131, 217, 100, 76, - 20, 9, 1, 131, 217, 100, 53, 20, 9, 1, 99, 76, 20, 9, 1, 99, 53, 20, 9, - 1, 99, 89, 20, 9, 1, 99, 216, 217, 20, 9, 34, 220, 36, 4, 131, 4, 217, - 142, 93, 76, 20, 9, 34, 220, 36, 4, 131, 4, 217, 142, 93, 53, 20, 9, 34, - 220, 36, 4, 131, 4, 230, 58, 93, 76, 20, 9, 34, 220, 36, 4, 131, 4, 230, - 58, 93, 53, 20, 9, 34, 220, 36, 4, 131, 4, 230, 58, 248, 233, 76, 20, 9, - 34, 220, 36, 4, 131, 4, 230, 58, 248, 233, 53, 20, 9, 34, 220, 36, 4, - 131, 76, 20, 9, 34, 220, 36, 4, 131, 53, 20, 191, 78, 193, 75, 213, 37, - 201, 247, 232, 78, 233, 216, 77, 232, 78, 207, 252, 77, 232, 78, 31, 56, - 232, 78, 236, 155, 56, 232, 78, 210, 13, 56, 232, 78, 251, 137, 232, 78, - 251, 49, 232, 78, 45, 210, 113, 232, 78, 50, 210, 113, 232, 78, 250, 193, - 232, 78, 108, 56, 232, 78, 242, 74, 232, 78, 228, 87, 232, 78, 232, 80, - 201, 63, 232, 78, 202, 23, 232, 78, 17, 191, 77, 232, 78, 17, 107, 232, - 78, 17, 109, 232, 78, 17, 138, 232, 78, 17, 134, 232, 78, 17, 149, 232, - 78, 17, 169, 232, 78, 17, 175, 232, 78, 17, 171, 232, 78, 17, 178, 232, - 78, 242, 83, 232, 78, 204, 25, 232, 78, 219, 180, 56, 232, 78, 234, 43, - 56, 232, 78, 230, 204, 56, 232, 78, 208, 13, 77, 232, 78, 242, 72, 250, - 182, 232, 78, 8, 6, 1, 65, 232, 78, 8, 6, 1, 250, 120, 232, 78, 8, 6, 1, - 247, 193, 232, 78, 8, 6, 1, 238, 127, 232, 78, 8, 6, 1, 71, 232, 78, 8, - 6, 1, 233, 175, 232, 78, 8, 6, 1, 232, 51, 232, 78, 8, 6, 1, 230, 116, - 232, 78, 8, 6, 1, 68, 232, 78, 8, 6, 1, 223, 35, 232, 78, 8, 6, 1, 222, - 152, 232, 78, 8, 6, 1, 172, 232, 78, 8, 6, 1, 218, 168, 232, 78, 8, 6, 1, - 215, 61, 232, 78, 8, 6, 1, 74, 232, 78, 8, 6, 1, 210, 236, 232, 78, 8, 6, - 1, 208, 104, 232, 78, 8, 6, 1, 146, 232, 78, 8, 6, 1, 206, 8, 232, 78, 8, - 6, 1, 200, 43, 232, 78, 8, 6, 1, 66, 232, 78, 8, 6, 1, 196, 12, 232, 78, - 8, 6, 1, 193, 224, 232, 78, 8, 6, 1, 192, 235, 232, 78, 8, 6, 1, 192, - 159, 232, 78, 8, 6, 1, 191, 166, 232, 78, 45, 51, 248, 53, 232, 78, 207, - 19, 202, 23, 232, 78, 50, 51, 248, 53, 232, 78, 243, 2, 252, 60, 232, 78, - 130, 219, 112, 232, 78, 230, 211, 252, 60, 232, 78, 8, 2, 1, 65, 232, 78, - 8, 2, 1, 250, 120, 232, 78, 8, 2, 1, 247, 193, 232, 78, 8, 2, 1, 238, - 127, 232, 78, 8, 2, 1, 71, 232, 78, 8, 2, 1, 233, 175, 232, 78, 8, 2, 1, - 232, 51, 232, 78, 8, 2, 1, 230, 116, 232, 78, 8, 2, 1, 68, 232, 78, 8, 2, - 1, 223, 35, 232, 78, 8, 2, 1, 222, 152, 232, 78, 8, 2, 1, 172, 232, 78, - 8, 2, 1, 218, 168, 232, 78, 8, 2, 1, 215, 61, 232, 78, 8, 2, 1, 74, 232, - 78, 8, 2, 1, 210, 236, 232, 78, 8, 2, 1, 208, 104, 232, 78, 8, 2, 1, 146, - 232, 78, 8, 2, 1, 206, 8, 232, 78, 8, 2, 1, 200, 43, 232, 78, 8, 2, 1, - 66, 232, 78, 8, 2, 1, 196, 12, 232, 78, 8, 2, 1, 193, 224, 232, 78, 8, 2, - 1, 192, 235, 232, 78, 8, 2, 1, 192, 159, 232, 78, 8, 2, 1, 191, 166, 232, - 78, 45, 238, 171, 248, 53, 232, 78, 81, 219, 112, 232, 78, 50, 238, 171, - 248, 53, 232, 78, 198, 152, 232, 78, 45, 63, 210, 113, 232, 78, 50, 63, - 210, 113, 150, 154, 232, 80, 201, 63, 150, 45, 239, 2, 248, 53, 150, 50, - 239, 2, 248, 53, 150, 154, 242, 74, 150, 72, 82, 236, 140, 150, 72, 1, - 193, 48, 150, 72, 1, 2, 65, 150, 72, 1, 2, 68, 150, 72, 1, 2, 66, 150, - 72, 1, 2, 71, 150, 72, 1, 2, 74, 150, 72, 1, 2, 170, 150, 72, 1, 2, 191, - 225, 150, 72, 1, 2, 192, 12, 150, 72, 1, 2, 197, 94, 150, 222, 48, 208, - 191, 202, 5, 77, 150, 72, 1, 65, 150, 72, 1, 68, 150, 72, 1, 66, 150, 72, - 1, 71, 150, 72, 1, 74, 150, 72, 1, 155, 150, 72, 1, 221, 166, 150, 72, 1, - 220, 232, 150, 72, 1, 222, 22, 150, 72, 1, 221, 67, 150, 72, 1, 188, 150, - 72, 1, 202, 222, 150, 72, 1, 201, 4, 150, 72, 1, 205, 68, 150, 72, 1, - 202, 46, 150, 72, 1, 190, 190, 150, 72, 1, 198, 193, 150, 72, 1, 197, 94, - 150, 72, 1, 199, 145, 150, 72, 1, 159, 150, 72, 1, 180, 150, 72, 1, 213, - 219, 150, 72, 1, 212, 178, 150, 72, 1, 214, 121, 150, 72, 1, 213, 43, - 150, 72, 1, 140, 150, 72, 1, 229, 158, 150, 72, 1, 228, 159, 150, 72, 1, - 229, 245, 150, 72, 1, 229, 23, 150, 72, 1, 174, 150, 72, 1, 216, 100, - 150, 72, 1, 215, 155, 150, 72, 1, 216, 232, 150, 72, 1, 216, 12, 150, 72, - 1, 170, 150, 72, 1, 191, 225, 150, 72, 1, 192, 12, 150, 72, 1, 165, 150, - 72, 1, 207, 1, 150, 72, 1, 206, 68, 150, 72, 1, 207, 113, 150, 72, 1, - 206, 162, 150, 72, 1, 193, 190, 150, 72, 1, 215, 61, 150, 72, 195, 20, - 202, 5, 77, 150, 72, 204, 30, 202, 5, 77, 150, 30, 233, 3, 150, 30, 1, - 221, 113, 150, 30, 1, 201, 167, 150, 30, 1, 221, 106, 150, 30, 1, 213, - 204, 150, 30, 1, 213, 202, 150, 30, 1, 213, 201, 150, 30, 1, 198, 168, - 150, 30, 1, 201, 156, 150, 30, 1, 206, 239, 150, 30, 1, 206, 234, 150, - 30, 1, 206, 231, 150, 30, 1, 206, 224, 150, 30, 1, 206, 219, 150, 30, 1, - 206, 214, 150, 30, 1, 206, 225, 150, 30, 1, 206, 237, 150, 30, 1, 216, - 77, 150, 30, 1, 209, 169, 150, 30, 1, 201, 164, 150, 30, 1, 209, 158, - 150, 30, 1, 202, 160, 150, 30, 1, 201, 161, 150, 30, 1, 223, 222, 150, - 30, 1, 243, 24, 150, 30, 1, 201, 171, 150, 30, 1, 243, 91, 150, 30, 1, - 221, 188, 150, 30, 1, 199, 7, 150, 30, 1, 209, 209, 150, 30, 1, 229, 142, - 150, 30, 1, 65, 150, 30, 1, 252, 25, 150, 30, 1, 170, 150, 30, 1, 192, - 129, 150, 30, 1, 234, 65, 150, 30, 1, 71, 150, 30, 1, 192, 67, 150, 30, - 1, 192, 80, 150, 30, 1, 74, 150, 30, 1, 193, 190, 150, 30, 1, 193, 176, - 150, 30, 1, 211, 151, 150, 30, 1, 192, 12, 150, 30, 1, 66, 150, 30, 1, - 193, 107, 150, 30, 1, 193, 125, 150, 30, 1, 193, 86, 150, 30, 1, 191, - 225, 150, 30, 1, 233, 242, 150, 30, 1, 192, 33, 150, 30, 1, 68, 232, 78, - 247, 24, 56, 232, 78, 209, 8, 56, 232, 78, 213, 12, 56, 232, 78, 217, - 146, 232, 78, 248, 22, 164, 232, 78, 192, 71, 56, 232, 78, 193, 31, 56, - 150, 232, 141, 156, 195, 135, 150, 118, 57, 150, 196, 66, 57, 150, 96, - 57, 150, 235, 119, 57, 150, 62, 201, 190, 150, 63, 243, 10, 223, 106, - 251, 96, 251, 127, 223, 106, 251, 96, 204, 10, 223, 106, 251, 96, 199, - 80, 211, 175, 207, 43, 246, 239, 207, 43, 246, 239, 32, 78, 5, 250, 104, - 65, 32, 78, 5, 250, 73, 71, 32, 78, 5, 250, 82, 68, 32, 78, 5, 250, 50, - 74, 32, 78, 5, 250, 100, 66, 32, 78, 5, 250, 119, 238, 32, 32, 78, 5, - 250, 66, 237, 146, 32, 78, 5, 250, 106, 237, 44, 32, 78, 5, 250, 96, 236, - 174, 32, 78, 5, 250, 60, 235, 89, 32, 78, 5, 250, 54, 223, 32, 32, 78, 5, - 250, 65, 223, 10, 32, 78, 5, 250, 75, 222, 201, 32, 78, 5, 250, 46, 222, - 182, 32, 78, 5, 250, 34, 155, 32, 78, 5, 250, 67, 222, 22, 32, 78, 5, - 250, 44, 221, 166, 32, 78, 5, 250, 41, 221, 67, 32, 78, 5, 250, 30, 220, - 232, 32, 78, 5, 250, 31, 174, 32, 78, 5, 250, 97, 216, 232, 32, 78, 5, - 250, 38, 216, 100, 32, 78, 5, 250, 95, 216, 12, 32, 78, 5, 250, 87, 215, - 155, 32, 78, 5, 250, 108, 180, 32, 78, 5, 250, 86, 214, 121, 32, 78, 5, - 250, 80, 213, 219, 32, 78, 5, 250, 59, 213, 43, 32, 78, 5, 250, 56, 212, - 178, 32, 78, 5, 250, 115, 168, 32, 78, 5, 250, 39, 210, 63, 32, 78, 5, - 250, 72, 209, 185, 32, 78, 5, 250, 99, 209, 73, 32, 78, 5, 250, 61, 208, - 165, 32, 78, 5, 250, 94, 208, 96, 32, 78, 5, 250, 33, 208, 75, 32, 78, 5, - 250, 89, 208, 57, 32, 78, 5, 250, 78, 208, 45, 32, 78, 5, 250, 51, 165, - 32, 78, 5, 250, 83, 207, 113, 32, 78, 5, 250, 58, 207, 1, 32, 78, 5, 250, - 117, 206, 162, 32, 78, 5, 250, 84, 206, 68, 32, 78, 5, 250, 79, 188, 32, - 78, 5, 250, 102, 205, 68, 32, 78, 5, 250, 70, 202, 222, 32, 78, 5, 250, - 98, 202, 46, 32, 78, 5, 250, 53, 201, 4, 32, 78, 5, 250, 52, 190, 190, - 32, 78, 5, 250, 113, 199, 145, 32, 78, 5, 250, 74, 198, 193, 32, 78, 5, - 250, 111, 159, 32, 78, 5, 250, 42, 197, 94, 32, 78, 5, 250, 57, 193, 190, - 32, 78, 5, 250, 36, 193, 125, 32, 78, 5, 250, 71, 193, 86, 32, 78, 5, - 250, 69, 193, 48, 32, 78, 5, 250, 93, 191, 123, 32, 78, 5, 250, 37, 191, - 87, 32, 78, 5, 250, 90, 191, 7, 32, 78, 5, 250, 85, 254, 215, 32, 78, 5, - 250, 68, 254, 103, 32, 78, 5, 250, 27, 250, 163, 32, 78, 5, 250, 40, 235, - 45, 32, 78, 5, 250, 23, 235, 44, 32, 78, 5, 250, 63, 212, 110, 32, 78, 5, - 250, 81, 208, 163, 32, 78, 5, 250, 49, 208, 167, 32, 78, 5, 250, 35, 207, - 180, 32, 78, 5, 250, 77, 207, 179, 32, 78, 5, 250, 43, 206, 155, 32, 78, - 5, 250, 45, 199, 246, 32, 78, 5, 250, 25, 197, 41, 32, 78, 5, 250, 22, - 109, 32, 78, 16, 250, 92, 32, 78, 16, 250, 91, 32, 78, 16, 250, 88, 32, - 78, 16, 250, 76, 32, 78, 16, 250, 64, 32, 78, 16, 250, 62, 32, 78, 16, - 250, 55, 32, 78, 16, 250, 48, 32, 78, 16, 250, 47, 32, 78, 16, 250, 32, - 32, 78, 16, 250, 29, 32, 78, 16, 250, 28, 32, 78, 16, 250, 26, 32, 78, - 16, 250, 24, 32, 78, 157, 250, 21, 217, 90, 32, 78, 157, 250, 20, 193, - 35, 32, 78, 157, 250, 19, 237, 128, 32, 78, 157, 250, 18, 234, 40, 32, - 78, 157, 250, 17, 217, 56, 32, 78, 157, 250, 16, 201, 110, 32, 78, 157, - 250, 15, 233, 223, 32, 78, 157, 250, 14, 207, 142, 32, 78, 157, 250, 13, - 203, 112, 32, 78, 157, 250, 12, 229, 237, 32, 78, 157, 250, 11, 201, 255, - 32, 78, 157, 250, 10, 248, 109, 32, 78, 157, 250, 9, 238, 239, 32, 78, - 157, 250, 8, 247, 250, 32, 78, 157, 250, 7, 193, 95, 32, 78, 157, 250, 6, - 249, 84, 32, 78, 157, 250, 5, 211, 115, 32, 78, 157, 250, 4, 201, 223, - 32, 78, 157, 250, 3, 238, 136, 32, 78, 215, 221, 250, 2, 222, 74, 32, 78, - 215, 221, 250, 1, 222, 85, 32, 78, 157, 250, 0, 211, 131, 32, 78, 157, - 249, 255, 193, 62, 32, 78, 157, 249, 254, 32, 78, 215, 221, 249, 253, - 251, 7, 32, 78, 215, 221, 249, 252, 216, 178, 32, 78, 157, 249, 251, 248, - 21, 32, 78, 157, 249, 250, 230, 250, 32, 78, 157, 249, 249, 32, 78, 157, - 249, 248, 193, 26, 32, 78, 157, 249, 247, 32, 78, 157, 249, 246, 32, 78, - 157, 249, 245, 228, 187, 32, 78, 157, 249, 244, 32, 78, 157, 249, 243, - 32, 78, 157, 249, 242, 32, 78, 215, 221, 249, 240, 197, 56, 32, 78, 157, - 249, 239, 32, 78, 157, 249, 238, 32, 78, 157, 249, 237, 242, 213, 32, 78, - 157, 249, 236, 32, 78, 157, 249, 235, 32, 78, 157, 249, 234, 231, 196, - 32, 78, 157, 249, 233, 250, 248, 32, 78, 157, 249, 232, 32, 78, 157, 249, - 231, 32, 78, 157, 249, 230, 32, 78, 157, 249, 229, 32, 78, 157, 249, 228, - 32, 78, 157, 249, 227, 32, 78, 157, 249, 226, 32, 78, 157, 249, 225, 32, - 78, 157, 249, 224, 32, 78, 157, 249, 223, 215, 213, 32, 78, 157, 249, - 222, 32, 78, 157, 249, 221, 197, 254, 32, 78, 157, 249, 220, 32, 78, 157, - 249, 219, 32, 78, 157, 249, 218, 32, 78, 157, 249, 217, 32, 78, 157, 249, - 216, 32, 78, 157, 249, 215, 32, 78, 157, 249, 214, 32, 78, 157, 249, 213, - 32, 78, 157, 249, 212, 32, 78, 157, 249, 211, 32, 78, 157, 249, 210, 32, - 78, 157, 249, 209, 229, 200, 32, 78, 157, 249, 188, 232, 155, 32, 78, - 157, 249, 185, 249, 59, 32, 78, 157, 249, 180, 201, 232, 32, 78, 157, - 249, 179, 57, 32, 78, 157, 249, 178, 32, 78, 157, 249, 177, 200, 131, 32, - 78, 157, 249, 176, 32, 78, 157, 249, 175, 32, 78, 157, 249, 174, 193, 90, - 243, 138, 32, 78, 157, 249, 173, 243, 138, 32, 78, 157, 249, 172, 243, - 139, 232, 113, 32, 78, 157, 249, 171, 193, 93, 32, 78, 157, 249, 170, 32, - 78, 157, 249, 169, 32, 78, 215, 221, 249, 168, 236, 235, 32, 78, 157, - 249, 167, 32, 78, 157, 249, 166, 32, 78, 157, 249, 164, 32, 78, 157, 249, - 163, 32, 78, 157, 249, 162, 32, 78, 157, 249, 161, 237, 218, 32, 78, 157, - 249, 160, 32, 78, 157, 249, 159, 32, 78, 157, 249, 158, 32, 78, 157, 249, - 157, 32, 78, 157, 249, 156, 32, 78, 157, 195, 82, 249, 241, 32, 78, 157, - 195, 82, 249, 208, 32, 78, 157, 195, 82, 249, 207, 32, 78, 157, 195, 82, - 249, 206, 32, 78, 157, 195, 82, 249, 205, 32, 78, 157, 195, 82, 249, 204, - 32, 78, 157, 195, 82, 249, 203, 32, 78, 157, 195, 82, 249, 202, 32, 78, - 157, 195, 82, 249, 201, 32, 78, 157, 195, 82, 249, 200, 32, 78, 157, 195, - 82, 249, 199, 32, 78, 157, 195, 82, 249, 198, 32, 78, 157, 195, 82, 249, - 197, 32, 78, 157, 195, 82, 249, 196, 32, 78, 157, 195, 82, 249, 195, 32, - 78, 157, 195, 82, 249, 194, 32, 78, 157, 195, 82, 249, 193, 32, 78, 157, - 195, 82, 249, 192, 32, 78, 157, 195, 82, 249, 191, 32, 78, 157, 195, 82, - 249, 190, 32, 78, 157, 195, 82, 249, 189, 32, 78, 157, 195, 82, 249, 187, - 32, 78, 157, 195, 82, 249, 186, 32, 78, 157, 195, 82, 249, 184, 32, 78, - 157, 195, 82, 249, 183, 32, 78, 157, 195, 82, 249, 182, 32, 78, 157, 195, - 82, 249, 181, 32, 78, 157, 195, 82, 249, 165, 32, 78, 157, 195, 82, 249, - 155, 252, 18, 193, 23, 204, 11, 219, 112, 252, 18, 193, 23, 204, 11, 236, - 140, 252, 18, 243, 126, 77, 252, 18, 31, 107, 252, 18, 31, 109, 252, 18, - 31, 138, 252, 18, 31, 134, 252, 18, 31, 149, 252, 18, 31, 169, 252, 18, - 31, 175, 252, 18, 31, 171, 252, 18, 31, 178, 252, 18, 31, 199, 95, 252, - 18, 31, 197, 32, 252, 18, 31, 198, 249, 252, 18, 31, 232, 135, 252, 18, - 31, 233, 15, 252, 18, 31, 202, 120, 252, 18, 31, 203, 241, 252, 18, 31, - 234, 153, 252, 18, 31, 213, 169, 252, 18, 31, 91, 228, 140, 252, 18, 31, - 105, 228, 140, 252, 18, 31, 115, 228, 140, 252, 18, 31, 232, 128, 228, - 140, 252, 18, 31, 232, 226, 228, 140, 252, 18, 31, 202, 136, 228, 140, - 252, 18, 31, 203, 247, 228, 140, 252, 18, 31, 234, 164, 228, 140, 252, - 18, 31, 213, 175, 228, 140, 252, 18, 31, 91, 189, 252, 18, 31, 105, 189, - 252, 18, 31, 115, 189, 252, 18, 31, 232, 128, 189, 252, 18, 31, 232, 226, - 189, 252, 18, 31, 202, 136, 189, 252, 18, 31, 203, 247, 189, 252, 18, 31, - 234, 164, 189, 252, 18, 31, 213, 175, 189, 252, 18, 31, 199, 96, 189, - 252, 18, 31, 197, 33, 189, 252, 18, 31, 198, 250, 189, 252, 18, 31, 232, - 136, 189, 252, 18, 31, 233, 16, 189, 252, 18, 31, 202, 121, 189, 252, 18, - 31, 203, 242, 189, 252, 18, 31, 234, 154, 189, 252, 18, 31, 213, 170, - 189, 252, 18, 193, 110, 249, 75, 196, 90, 252, 18, 193, 110, 232, 238, - 200, 224, 252, 18, 193, 110, 205, 57, 200, 224, 252, 18, 193, 110, 199, - 1, 200, 224, 252, 18, 193, 110, 232, 121, 200, 224, 252, 18, 235, 92, - 216, 228, 232, 238, 200, 224, 252, 18, 219, 93, 216, 228, 232, 238, 200, - 224, 252, 18, 216, 228, 205, 57, 200, 224, 252, 18, 216, 228, 199, 1, - 200, 224, 35, 252, 50, 250, 165, 91, 208, 22, 35, 252, 50, 250, 165, 91, - 230, 70, 35, 252, 50, 250, 165, 91, 235, 115, 35, 252, 50, 250, 165, 149, - 35, 252, 50, 250, 165, 233, 15, 35, 252, 50, 250, 165, 232, 226, 228, - 140, 35, 252, 50, 250, 165, 232, 226, 189, 35, 252, 50, 250, 165, 233, - 16, 189, 35, 252, 50, 250, 165, 232, 226, 199, 203, 35, 252, 50, 250, - 165, 199, 96, 199, 203, 35, 252, 50, 250, 165, 233, 16, 199, 203, 35, - 252, 50, 250, 165, 91, 228, 141, 199, 203, 35, 252, 50, 250, 165, 232, - 226, 228, 141, 199, 203, 35, 252, 50, 250, 165, 91, 198, 230, 199, 203, - 35, 252, 50, 250, 165, 232, 226, 198, 230, 199, 203, 35, 252, 50, 250, - 165, 232, 226, 201, 94, 35, 252, 50, 250, 165, 199, 96, 201, 94, 35, 252, - 50, 250, 165, 233, 16, 201, 94, 35, 252, 50, 250, 165, 91, 228, 141, 201, - 94, 35, 252, 50, 250, 165, 232, 226, 228, 141, 201, 94, 35, 252, 50, 250, - 165, 91, 198, 230, 201, 94, 35, 252, 50, 250, 165, 199, 96, 198, 230, - 201, 94, 35, 252, 50, 250, 165, 233, 16, 198, 230, 201, 94, 35, 252, 50, - 250, 165, 199, 96, 216, 15, 35, 252, 50, 229, 194, 91, 209, 92, 35, 252, - 50, 199, 17, 107, 35, 252, 50, 229, 190, 107, 35, 252, 50, 234, 51, 109, - 35, 252, 50, 199, 17, 109, 35, 252, 50, 238, 132, 105, 235, 114, 35, 252, - 50, 234, 51, 105, 235, 114, 35, 252, 50, 197, 216, 149, 35, 252, 50, 197, - 216, 199, 95, 35, 252, 50, 197, 216, 199, 96, 251, 157, 20, 35, 252, 50, - 229, 190, 199, 95, 35, 252, 50, 216, 167, 199, 95, 35, 252, 50, 199, 17, - 199, 95, 35, 252, 50, 199, 17, 198, 249, 35, 252, 50, 197, 216, 233, 15, - 35, 252, 50, 197, 216, 233, 16, 251, 157, 20, 35, 252, 50, 229, 190, 233, - 15, 35, 252, 50, 199, 17, 233, 15, 35, 252, 50, 199, 17, 91, 228, 140, - 35, 252, 50, 199, 17, 115, 228, 140, 35, 252, 50, 234, 51, 232, 226, 228, - 140, 35, 252, 50, 197, 216, 232, 226, 228, 140, 35, 252, 50, 199, 17, - 232, 226, 228, 140, 35, 252, 50, 247, 82, 232, 226, 228, 140, 35, 252, - 50, 214, 199, 232, 226, 228, 140, 35, 252, 50, 199, 17, 91, 189, 35, 252, - 50, 199, 17, 232, 226, 189, 35, 252, 50, 237, 109, 232, 226, 216, 15, 35, - 252, 50, 201, 47, 233, 16, 216, 15, 35, 91, 132, 56, 35, 91, 132, 3, 251, - 157, 20, 35, 105, 198, 254, 56, 35, 115, 208, 21, 56, 35, 192, 78, 56, - 35, 199, 204, 56, 35, 235, 116, 56, 35, 211, 170, 56, 35, 105, 211, 169, - 56, 35, 115, 211, 169, 56, 35, 232, 128, 211, 169, 56, 35, 232, 226, 211, - 169, 56, 35, 216, 161, 56, 35, 220, 151, 249, 75, 56, 35, 219, 85, 56, - 35, 211, 16, 56, 35, 192, 211, 56, 35, 250, 226, 56, 35, 250, 243, 56, - 35, 230, 220, 56, 35, 197, 171, 249, 75, 56, 35, 191, 78, 56, 35, 91, - 208, 23, 56, 35, 202, 162, 56, 35, 223, 143, 56, 213, 32, 56, 206, 136, - 203, 237, 56, 206, 136, 196, 106, 56, 206, 136, 204, 17, 56, 206, 136, - 203, 175, 56, 206, 136, 236, 250, 203, 175, 56, 206, 136, 202, 186, 56, - 206, 136, 237, 104, 56, 206, 136, 208, 5, 56, 206, 136, 203, 254, 56, - 206, 136, 235, 67, 56, 206, 136, 250, 220, 56, 206, 136, 247, 17, 56, - 250, 211, 113, 35, 16, 199, 167, 207, 3, 209, 223, 236, 227, 3, 210, 51, - 209, 223, 236, 227, 3, 209, 84, 229, 235, 209, 223, 236, 227, 3, 199, - 170, 229, 235, 209, 223, 236, 227, 3, 247, 105, 209, 223, 236, 227, 3, - 243, 86, 209, 223, 236, 227, 3, 193, 35, 209, 223, 236, 227, 3, 229, 200, - 209, 223, 236, 227, 3, 231, 188, 209, 223, 236, 227, 3, 198, 184, 209, - 223, 236, 227, 3, 57, 209, 223, 236, 227, 3, 248, 69, 209, 223, 236, 227, - 3, 203, 78, 209, 223, 236, 227, 3, 242, 206, 209, 223, 236, 227, 3, 217, - 89, 209, 223, 236, 227, 3, 217, 26, 209, 223, 236, 227, 3, 205, 108, 209, - 223, 236, 227, 3, 219, 141, 209, 223, 236, 227, 3, 248, 92, 209, 223, - 236, 227, 3, 247, 89, 209, 101, 209, 223, 236, 227, 3, 236, 156, 209, - 223, 236, 227, 3, 242, 80, 209, 223, 236, 227, 3, 202, 83, 209, 223, 236, - 227, 3, 242, 81, 209, 223, 236, 227, 3, 248, 254, 209, 223, 236, 227, 3, - 203, 65, 209, 223, 236, 227, 3, 228, 187, 209, 223, 236, 227, 3, 229, - 148, 209, 223, 236, 227, 3, 247, 245, 219, 212, 209, 223, 236, 227, 3, - 247, 78, 209, 223, 236, 227, 3, 207, 142, 209, 223, 236, 227, 3, 234, - 214, 209, 223, 236, 227, 3, 235, 124, 209, 223, 236, 227, 3, 197, 72, - 209, 223, 236, 227, 3, 249, 1, 209, 223, 236, 227, 3, 209, 102, 197, 254, - 209, 223, 236, 227, 3, 195, 47, 209, 223, 236, 227, 3, 210, 132, 209, - 223, 236, 227, 3, 206, 125, 209, 223, 236, 227, 3, 219, 125, 209, 223, - 236, 227, 3, 210, 248, 249, 146, 209, 223, 236, 227, 3, 232, 182, 209, - 223, 236, 227, 3, 230, 212, 209, 223, 236, 227, 3, 201, 50, 209, 223, - 236, 227, 3, 2, 250, 132, 209, 223, 236, 227, 3, 193, 135, 249, 97, 209, - 223, 236, 227, 3, 33, 211, 172, 106, 218, 181, 1, 65, 218, 181, 1, 71, - 218, 181, 1, 250, 120, 218, 181, 1, 248, 204, 218, 181, 1, 232, 51, 218, - 181, 1, 238, 127, 218, 181, 1, 68, 218, 181, 1, 193, 224, 218, 181, 1, - 191, 166, 218, 181, 1, 199, 51, 218, 181, 1, 223, 35, 218, 181, 1, 222, - 152, 218, 181, 1, 208, 104, 218, 181, 1, 172, 218, 181, 1, 218, 168, 218, - 181, 1, 215, 61, 218, 181, 1, 216, 17, 218, 181, 1, 213, 80, 218, 181, 1, - 66, 218, 181, 1, 210, 236, 218, 181, 1, 221, 102, 218, 181, 1, 146, 218, - 181, 1, 206, 8, 218, 181, 1, 200, 43, 218, 181, 1, 197, 135, 218, 181, 1, - 251, 132, 218, 181, 1, 234, 103, 218, 181, 1, 230, 116, 218, 181, 1, 192, - 235, 247, 95, 1, 65, 247, 95, 1, 210, 222, 247, 95, 1, 238, 127, 247, 95, - 1, 172, 247, 95, 1, 196, 28, 247, 95, 1, 146, 247, 95, 1, 219, 242, 247, - 95, 1, 254, 215, 247, 95, 1, 208, 104, 247, 95, 1, 250, 120, 247, 95, 1, - 218, 168, 247, 95, 1, 74, 247, 95, 1, 238, 34, 247, 95, 1, 200, 43, 247, - 95, 1, 203, 167, 247, 95, 1, 203, 166, 247, 95, 1, 206, 8, 247, 95, 1, - 247, 192, 247, 95, 1, 66, 247, 95, 1, 213, 80, 247, 95, 1, 192, 235, 247, - 95, 1, 215, 61, 247, 95, 1, 197, 134, 247, 95, 1, 210, 236, 247, 95, 1, - 201, 178, 247, 95, 1, 68, 247, 95, 1, 71, 247, 95, 1, 196, 25, 247, 95, - 1, 222, 152, 247, 95, 1, 222, 143, 247, 95, 1, 214, 164, 247, 95, 1, 196, - 30, 247, 95, 1, 232, 51, 247, 95, 1, 231, 242, 247, 95, 1, 201, 118, 247, - 95, 1, 201, 117, 247, 95, 1, 214, 70, 247, 95, 1, 223, 199, 247, 95, 1, - 247, 191, 247, 95, 1, 197, 135, 247, 95, 1, 196, 27, 247, 95, 1, 206, - 110, 247, 95, 1, 217, 16, 247, 95, 1, 217, 15, 247, 95, 1, 217, 14, 247, - 95, 1, 217, 13, 247, 95, 1, 219, 241, 247, 95, 1, 234, 218, 247, 95, 1, - 196, 26, 94, 234, 54, 198, 229, 77, 94, 234, 54, 17, 107, 94, 234, 54, - 17, 109, 94, 234, 54, 17, 138, 94, 234, 54, 17, 134, 94, 234, 54, 17, - 149, 94, 234, 54, 17, 169, 94, 234, 54, 17, 175, 94, 234, 54, 17, 171, - 94, 234, 54, 17, 178, 94, 234, 54, 31, 199, 95, 94, 234, 54, 31, 197, 32, - 94, 234, 54, 31, 198, 249, 94, 234, 54, 31, 232, 135, 94, 234, 54, 31, - 233, 15, 94, 234, 54, 31, 202, 120, 94, 234, 54, 31, 203, 241, 94, 234, - 54, 31, 234, 153, 94, 234, 54, 31, 213, 169, 94, 234, 54, 31, 91, 228, - 140, 94, 234, 54, 31, 105, 228, 140, 94, 234, 54, 31, 115, 228, 140, 94, - 234, 54, 31, 232, 128, 228, 140, 94, 234, 54, 31, 232, 226, 228, 140, 94, - 234, 54, 31, 202, 136, 228, 140, 94, 234, 54, 31, 203, 247, 228, 140, 94, - 234, 54, 31, 234, 164, 228, 140, 94, 234, 54, 31, 213, 175, 228, 140, 39, - 43, 1, 65, 39, 43, 1, 249, 17, 39, 43, 1, 222, 22, 39, 43, 1, 237, 146, - 39, 43, 1, 71, 39, 43, 1, 195, 153, 39, 43, 1, 191, 87, 39, 43, 1, 229, - 245, 39, 43, 1, 199, 33, 39, 43, 1, 68, 39, 43, 1, 155, 39, 43, 1, 234, - 140, 39, 43, 1, 234, 114, 39, 43, 1, 234, 103, 39, 43, 1, 234, 12, 39, - 43, 1, 74, 39, 43, 1, 210, 63, 39, 43, 1, 203, 113, 39, 43, 1, 220, 232, - 39, 43, 1, 234, 34, 39, 43, 1, 234, 22, 39, 43, 1, 199, 145, 39, 43, 1, - 66, 39, 43, 1, 234, 143, 39, 43, 1, 209, 214, 39, 43, 1, 221, 197, 39, - 43, 1, 234, 181, 39, 43, 1, 234, 24, 39, 43, 1, 243, 127, 39, 43, 1, 223, - 199, 39, 43, 1, 196, 30, 39, 43, 1, 234, 5, 39, 43, 212, 134, 107, 39, - 43, 212, 134, 149, 39, 43, 212, 134, 199, 95, 39, 43, 212, 134, 233, 15, - 39, 43, 1, 192, 80, 39, 43, 1, 213, 16, 197, 161, 39, 43, 1, 202, 0, 197, - 161, 230, 231, 1, 251, 239, 230, 231, 1, 249, 117, 230, 231, 1, 231, 50, - 230, 231, 1, 238, 13, 230, 231, 1, 251, 234, 230, 231, 1, 208, 87, 230, - 231, 1, 223, 48, 230, 231, 1, 230, 83, 230, 231, 1, 198, 243, 230, 231, - 1, 234, 151, 230, 231, 1, 220, 189, 230, 231, 1, 220, 100, 230, 231, 1, - 217, 80, 230, 231, 1, 214, 201, 230, 231, 1, 223, 1, 230, 231, 1, 196, - 48, 230, 231, 1, 210, 195, 230, 231, 1, 213, 169, 230, 231, 1, 207, 155, - 230, 231, 1, 205, 112, 230, 231, 1, 199, 111, 230, 231, 1, 193, 59, 230, - 231, 1, 233, 89, 230, 231, 1, 223, 203, 230, 231, 1, 228, 123, 230, 231, - 1, 211, 29, 230, 231, 1, 213, 175, 228, 140, 39, 210, 2, 1, 251, 132, 39, - 210, 2, 1, 247, 230, 39, 210, 2, 1, 231, 224, 39, 210, 2, 1, 236, 160, - 39, 210, 2, 1, 71, 39, 210, 2, 1, 191, 53, 39, 210, 2, 1, 235, 27, 39, - 210, 2, 1, 191, 95, 39, 210, 2, 1, 235, 25, 39, 210, 2, 1, 68, 39, 210, - 2, 1, 221, 50, 39, 210, 2, 1, 219, 208, 39, 210, 2, 1, 216, 184, 39, 210, - 2, 1, 214, 100, 39, 210, 2, 1, 195, 7, 39, 210, 2, 1, 210, 48, 39, 210, - 2, 1, 207, 70, 39, 210, 2, 1, 202, 193, 39, 210, 2, 1, 199, 217, 39, 210, - 2, 1, 66, 39, 210, 2, 1, 243, 106, 39, 210, 2, 1, 203, 47, 39, 210, 2, 1, - 203, 115, 39, 210, 2, 1, 191, 227, 39, 210, 2, 1, 192, 58, 39, 210, 2, 1, - 74, 39, 210, 2, 1, 211, 87, 39, 210, 2, 1, 234, 181, 39, 210, 2, 1, 140, - 39, 210, 2, 1, 197, 145, 39, 210, 2, 1, 195, 140, 39, 210, 2, 1, 192, 62, - 39, 210, 2, 1, 192, 60, 39, 210, 2, 1, 192, 95, 39, 210, 2, 1, 223, 226, - 39, 210, 2, 1, 191, 225, 39, 210, 2, 1, 170, 39, 210, 2, 1, 228, 35, 33, - 39, 210, 2, 1, 251, 132, 33, 39, 210, 2, 1, 236, 160, 33, 39, 210, 2, 1, - 191, 95, 33, 39, 210, 2, 1, 214, 100, 33, 39, 210, 2, 1, 202, 193, 196, - 142, 1, 251, 164, 196, 142, 1, 248, 212, 196, 142, 1, 231, 212, 196, 142, - 1, 221, 215, 196, 142, 1, 237, 106, 196, 142, 1, 229, 23, 196, 142, 1, - 193, 48, 196, 142, 1, 191, 76, 196, 142, 1, 228, 179, 196, 142, 1, 199, - 73, 196, 142, 1, 191, 250, 196, 142, 1, 222, 106, 196, 142, 1, 203, 69, - 196, 142, 1, 220, 31, 196, 142, 1, 216, 193, 196, 142, 1, 237, 64, 196, - 142, 1, 212, 130, 196, 142, 1, 190, 251, 196, 142, 1, 205, 147, 196, 142, - 1, 251, 230, 196, 142, 1, 208, 165, 196, 142, 1, 205, 191, 196, 142, 1, - 208, 38, 196, 142, 1, 207, 133, 196, 142, 1, 199, 37, 196, 142, 1, 231, - 86, 196, 142, 1, 159, 196, 142, 1, 68, 196, 142, 1, 66, 196, 142, 1, 201, - 129, 196, 142, 193, 23, 236, 205, 39, 209, 252, 3, 65, 39, 209, 252, 3, - 68, 39, 209, 252, 3, 66, 39, 209, 252, 3, 155, 39, 209, 252, 3, 220, 232, - 39, 209, 252, 3, 231, 240, 39, 209, 252, 3, 230, 179, 39, 209, 252, 3, - 192, 220, 39, 209, 252, 3, 247, 160, 39, 209, 252, 3, 223, 32, 39, 209, - 252, 3, 222, 244, 39, 209, 252, 3, 190, 190, 39, 209, 252, 3, 197, 94, - 39, 209, 252, 3, 238, 32, 39, 209, 252, 3, 237, 44, 39, 209, 252, 3, 235, - 89, 39, 209, 252, 3, 199, 49, 39, 209, 252, 3, 168, 39, 209, 252, 3, 249, - 153, 39, 209, 252, 3, 233, 109, 39, 209, 252, 3, 180, 39, 209, 252, 3, - 212, 178, 39, 209, 252, 3, 174, 39, 209, 252, 3, 216, 100, 39, 209, 252, - 3, 215, 155, 39, 209, 252, 3, 170, 39, 209, 252, 3, 195, 188, 39, 209, - 252, 3, 195, 69, 39, 209, 252, 3, 165, 39, 209, 252, 3, 206, 68, 39, 209, - 252, 3, 173, 39, 209, 252, 3, 188, 39, 209, 252, 3, 191, 123, 39, 209, - 252, 3, 203, 165, 39, 209, 252, 3, 201, 175, 39, 209, 252, 3, 140, 39, - 209, 252, 3, 250, 157, 39, 209, 252, 3, 250, 156, 39, 209, 252, 3, 250, - 155, 39, 209, 252, 3, 192, 189, 39, 209, 252, 3, 238, 9, 39, 209, 252, 3, - 238, 8, 39, 209, 252, 3, 249, 128, 39, 209, 252, 3, 247, 212, 39, 209, - 252, 193, 23, 236, 205, 39, 209, 252, 31, 107, 39, 209, 252, 31, 109, 39, - 209, 252, 31, 199, 95, 39, 209, 252, 31, 197, 32, 39, 209, 252, 31, 228, - 140, 237, 84, 6, 1, 179, 68, 237, 84, 6, 1, 179, 71, 237, 84, 6, 1, 179, - 65, 237, 84, 6, 1, 179, 251, 245, 237, 84, 6, 1, 179, 74, 237, 84, 6, 1, - 179, 211, 87, 237, 84, 6, 1, 203, 40, 68, 237, 84, 6, 1, 203, 40, 71, - 237, 84, 6, 1, 203, 40, 65, 237, 84, 6, 1, 203, 40, 251, 245, 237, 84, 6, - 1, 203, 40, 74, 237, 84, 6, 1, 203, 40, 211, 87, 237, 84, 6, 1, 250, 131, - 237, 84, 6, 1, 210, 250, 237, 84, 6, 1, 193, 0, 237, 84, 6, 1, 192, 77, - 237, 84, 6, 1, 230, 116, 237, 84, 6, 1, 210, 49, 237, 84, 6, 1, 249, 1, - 237, 84, 6, 1, 199, 121, 237, 84, 6, 1, 237, 131, 237, 84, 6, 1, 243, - 123, 237, 84, 6, 1, 223, 8, 237, 84, 6, 1, 222, 29, 237, 84, 6, 1, 231, - 186, 237, 84, 6, 1, 234, 181, 237, 84, 6, 1, 195, 148, 237, 84, 6, 1, - 233, 248, 237, 84, 6, 1, 199, 31, 237, 84, 6, 1, 234, 22, 237, 84, 6, 1, - 191, 84, 237, 84, 6, 1, 234, 12, 237, 84, 6, 1, 191, 61, 237, 84, 6, 1, - 234, 34, 237, 84, 6, 1, 234, 140, 237, 84, 6, 1, 234, 114, 237, 84, 6, 1, - 234, 103, 237, 84, 6, 1, 234, 88, 237, 84, 6, 1, 211, 133, 237, 84, 6, 1, - 233, 224, 237, 84, 2, 1, 179, 68, 237, 84, 2, 1, 179, 71, 237, 84, 2, 1, - 179, 65, 237, 84, 2, 1, 179, 251, 245, 237, 84, 2, 1, 179, 74, 237, 84, - 2, 1, 179, 211, 87, 237, 84, 2, 1, 203, 40, 68, 237, 84, 2, 1, 203, 40, - 71, 237, 84, 2, 1, 203, 40, 65, 237, 84, 2, 1, 203, 40, 251, 245, 237, - 84, 2, 1, 203, 40, 74, 237, 84, 2, 1, 203, 40, 211, 87, 237, 84, 2, 1, - 250, 131, 237, 84, 2, 1, 210, 250, 237, 84, 2, 1, 193, 0, 237, 84, 2, 1, - 192, 77, 237, 84, 2, 1, 230, 116, 237, 84, 2, 1, 210, 49, 237, 84, 2, 1, - 249, 1, 237, 84, 2, 1, 199, 121, 237, 84, 2, 1, 237, 131, 237, 84, 2, 1, - 243, 123, 237, 84, 2, 1, 223, 8, 237, 84, 2, 1, 222, 29, 237, 84, 2, 1, - 231, 186, 237, 84, 2, 1, 234, 181, 237, 84, 2, 1, 195, 148, 237, 84, 2, - 1, 233, 248, 237, 84, 2, 1, 199, 31, 237, 84, 2, 1, 234, 22, 237, 84, 2, - 1, 191, 84, 237, 84, 2, 1, 234, 12, 237, 84, 2, 1, 191, 61, 237, 84, 2, - 1, 234, 34, 237, 84, 2, 1, 234, 140, 237, 84, 2, 1, 234, 114, 237, 84, 2, - 1, 234, 103, 237, 84, 2, 1, 234, 88, 237, 84, 2, 1, 211, 133, 237, 84, 2, - 1, 233, 224, 203, 120, 1, 210, 45, 203, 120, 1, 198, 40, 203, 120, 1, - 221, 154, 203, 120, 1, 233, 52, 203, 120, 1, 199, 6, 203, 120, 1, 202, - 46, 203, 120, 1, 200, 172, 203, 120, 1, 243, 40, 203, 120, 1, 192, 79, - 203, 120, 1, 228, 137, 203, 120, 1, 248, 187, 203, 120, 1, 237, 145, 203, - 120, 1, 231, 226, 203, 120, 1, 195, 2, 203, 120, 1, 199, 12, 203, 120, 1, - 191, 4, 203, 120, 1, 216, 227, 203, 120, 1, 222, 180, 203, 120, 1, 193, - 39, 203, 120, 1, 230, 93, 203, 120, 1, 219, 25, 203, 120, 1, 216, 45, - 203, 120, 1, 223, 206, 203, 120, 1, 234, 179, 203, 120, 1, 250, 209, 203, - 120, 1, 252, 30, 203, 120, 1, 211, 104, 203, 120, 1, 193, 26, 203, 120, - 1, 211, 14, 203, 120, 1, 251, 245, 203, 120, 1, 206, 153, 203, 120, 1, - 212, 130, 203, 120, 1, 234, 200, 203, 120, 1, 251, 250, 203, 120, 1, 228, - 26, 203, 120, 1, 196, 77, 203, 120, 1, 211, 180, 203, 120, 1, 211, 79, - 203, 120, 1, 211, 131, 203, 120, 1, 250, 137, 203, 120, 1, 251, 9, 203, - 120, 1, 211, 56, 203, 120, 1, 251, 225, 203, 120, 1, 234, 26, 203, 120, - 1, 250, 240, 203, 120, 1, 234, 211, 203, 120, 1, 228, 34, 203, 120, 1, - 192, 41, 211, 33, 1, 251, 192, 211, 33, 1, 249, 153, 211, 33, 1, 190, - 190, 211, 33, 1, 223, 32, 211, 33, 1, 192, 220, 211, 33, 1, 221, 215, - 211, 33, 1, 237, 130, 211, 33, 1, 165, 211, 33, 1, 188, 211, 33, 1, 203, - 75, 211, 33, 1, 237, 68, 211, 33, 1, 247, 67, 211, 33, 1, 231, 240, 211, - 33, 1, 233, 109, 211, 33, 1, 208, 94, 211, 33, 1, 222, 123, 211, 33, 1, - 220, 121, 211, 33, 1, 216, 59, 211, 33, 1, 212, 114, 211, 33, 1, 193, - 133, 211, 33, 1, 140, 211, 33, 1, 170, 211, 33, 1, 65, 211, 33, 1, 71, - 211, 33, 1, 68, 211, 33, 1, 74, 211, 33, 1, 66, 211, 33, 1, 252, 206, - 211, 33, 1, 234, 188, 211, 33, 1, 211, 87, 211, 33, 17, 191, 77, 211, 33, - 17, 107, 211, 33, 17, 109, 211, 33, 17, 138, 211, 33, 17, 134, 211, 33, - 17, 149, 211, 33, 17, 169, 211, 33, 17, 175, 211, 33, 17, 171, 211, 33, - 17, 178, 211, 35, 6, 1, 65, 211, 35, 6, 1, 251, 236, 211, 35, 6, 1, 251, - 230, 211, 35, 6, 1, 251, 245, 211, 35, 6, 1, 248, 56, 211, 35, 6, 1, 247, - 1, 211, 35, 6, 1, 234, 172, 211, 35, 6, 1, 71, 211, 35, 6, 1, 234, 152, - 211, 35, 6, 1, 140, 211, 35, 6, 1, 228, 93, 211, 35, 6, 1, 68, 211, 35, - 6, 1, 155, 211, 35, 6, 1, 234, 171, 211, 35, 6, 1, 220, 153, 211, 35, 6, - 1, 173, 211, 35, 6, 1, 174, 211, 35, 6, 1, 180, 211, 35, 6, 1, 74, 211, - 35, 6, 1, 211, 130, 211, 35, 6, 1, 168, 211, 35, 6, 1, 234, 170, 211, 35, - 6, 1, 188, 211, 35, 6, 1, 203, 165, 211, 35, 6, 1, 190, 190, 211, 35, 6, - 1, 234, 169, 211, 35, 6, 1, 197, 168, 211, 35, 6, 1, 234, 168, 211, 35, - 6, 1, 197, 157, 211, 35, 6, 1, 237, 68, 211, 35, 6, 1, 66, 211, 35, 6, 1, - 193, 190, 211, 35, 6, 1, 221, 215, 211, 35, 6, 1, 231, 91, 211, 35, 6, 1, - 191, 123, 211, 35, 6, 1, 191, 71, 211, 35, 2, 1, 65, 211, 35, 2, 1, 251, - 236, 211, 35, 2, 1, 251, 230, 211, 35, 2, 1, 251, 245, 211, 35, 2, 1, - 248, 56, 211, 35, 2, 1, 247, 1, 211, 35, 2, 1, 234, 172, 211, 35, 2, 1, - 71, 211, 35, 2, 1, 234, 152, 211, 35, 2, 1, 140, 211, 35, 2, 1, 228, 93, - 211, 35, 2, 1, 68, 211, 35, 2, 1, 155, 211, 35, 2, 1, 234, 171, 211, 35, - 2, 1, 220, 153, 211, 35, 2, 1, 173, 211, 35, 2, 1, 174, 211, 35, 2, 1, - 180, 211, 35, 2, 1, 74, 211, 35, 2, 1, 211, 130, 211, 35, 2, 1, 168, 211, - 35, 2, 1, 234, 170, 211, 35, 2, 1, 188, 211, 35, 2, 1, 203, 165, 211, 35, - 2, 1, 190, 190, 211, 35, 2, 1, 234, 169, 211, 35, 2, 1, 197, 168, 211, - 35, 2, 1, 234, 168, 211, 35, 2, 1, 197, 157, 211, 35, 2, 1, 237, 68, 211, - 35, 2, 1, 66, 211, 35, 2, 1, 193, 190, 211, 35, 2, 1, 221, 215, 211, 35, - 2, 1, 231, 91, 211, 35, 2, 1, 191, 123, 211, 35, 2, 1, 191, 71, 234, 136, - 1, 65, 234, 136, 1, 249, 17, 234, 136, 1, 247, 42, 234, 136, 1, 243, 127, - 234, 136, 1, 237, 146, 234, 136, 1, 214, 154, 234, 136, 1, 237, 59, 234, - 136, 1, 234, 166, 234, 136, 1, 71, 234, 136, 1, 233, 59, 234, 136, 1, - 231, 165, 234, 136, 1, 231, 20, 234, 136, 1, 229, 245, 234, 136, 1, 68, - 234, 136, 1, 223, 10, 234, 136, 1, 222, 22, 234, 136, 1, 219, 238, 234, - 136, 1, 219, 68, 234, 136, 1, 216, 232, 234, 136, 1, 214, 121, 234, 136, - 1, 180, 234, 136, 1, 213, 150, 234, 136, 1, 74, 234, 136, 1, 210, 63, - 234, 136, 1, 208, 75, 234, 136, 1, 207, 113, 234, 136, 1, 206, 104, 234, - 136, 1, 205, 68, 234, 136, 1, 203, 113, 234, 136, 1, 199, 145, 234, 136, - 1, 199, 33, 234, 136, 1, 66, 234, 136, 1, 195, 153, 234, 136, 1, 192, - 214, 234, 136, 1, 192, 159, 234, 136, 1, 191, 87, 234, 136, 1, 191, 62, - 234, 136, 1, 231, 77, 234, 136, 1, 231, 83, 234, 136, 1, 221, 197, 247, - 75, 251, 193, 1, 251, 159, 247, 75, 251, 193, 1, 248, 214, 247, 75, 251, - 193, 1, 231, 40, 247, 75, 251, 193, 1, 237, 211, 247, 75, 251, 193, 1, - 234, 199, 247, 75, 251, 193, 1, 191, 98, 247, 75, 251, 193, 1, 233, 184, - 247, 75, 251, 193, 1, 191, 56, 247, 75, 251, 193, 1, 199, 174, 247, 75, - 251, 193, 1, 247, 1, 247, 75, 251, 193, 1, 191, 236, 247, 75, 251, 193, - 1, 191, 71, 247, 75, 251, 193, 1, 223, 76, 247, 75, 251, 193, 1, 203, - 165, 247, 75, 251, 193, 1, 220, 24, 247, 75, 251, 193, 1, 223, 89, 247, - 75, 251, 193, 1, 192, 210, 247, 75, 251, 193, 1, 235, 43, 247, 75, 251, - 193, 1, 247, 102, 247, 75, 251, 193, 1, 222, 245, 247, 75, 251, 193, 1, - 222, 65, 247, 75, 251, 193, 1, 218, 177, 247, 75, 251, 193, 1, 229, 179, - 247, 75, 251, 193, 1, 208, 76, 247, 75, 251, 193, 1, 251, 67, 247, 75, - 251, 193, 1, 243, 57, 247, 75, 251, 193, 1, 243, 95, 247, 75, 251, 193, - 1, 238, 140, 247, 75, 251, 193, 1, 217, 68, 247, 75, 251, 193, 1, 208, - 81, 247, 75, 251, 193, 1, 212, 252, 247, 75, 251, 193, 1, 235, 20, 247, - 75, 251, 193, 1, 203, 147, 247, 75, 251, 193, 1, 223, 11, 247, 75, 251, - 193, 1, 211, 104, 247, 75, 251, 193, 1, 197, 3, 247, 75, 251, 193, 1, - 233, 82, 247, 75, 251, 193, 1, 235, 33, 247, 75, 251, 193, 1, 243, 133, - 247, 75, 251, 193, 1, 210, 34, 247, 75, 251, 193, 1, 231, 67, 247, 75, - 251, 193, 1, 207, 130, 247, 75, 251, 193, 1, 203, 174, 247, 75, 251, 193, - 1, 195, 72, 247, 75, 251, 193, 1, 198, 118, 247, 75, 251, 193, 1, 203, - 18, 247, 75, 251, 193, 1, 223, 46, 247, 75, 251, 193, 1, 238, 141, 247, - 75, 251, 193, 1, 247, 67, 247, 75, 251, 193, 1, 192, 84, 247, 75, 251, - 193, 1, 209, 114, 247, 75, 251, 193, 1, 221, 117, 247, 75, 251, 193, 242, - 254, 77, 195, 29, 6, 1, 65, 195, 29, 6, 1, 249, 48, 195, 29, 6, 1, 249, - 17, 195, 29, 6, 1, 247, 42, 195, 29, 6, 1, 243, 127, 195, 29, 6, 1, 237, - 146, 195, 29, 6, 1, 237, 59, 195, 29, 6, 1, 234, 166, 195, 29, 6, 1, 71, - 195, 29, 6, 1, 233, 59, 195, 29, 6, 1, 231, 240, 195, 29, 6, 1, 140, 195, - 29, 6, 1, 229, 177, 195, 29, 6, 1, 68, 195, 29, 6, 1, 223, 196, 195, 29, - 6, 1, 223, 10, 195, 29, 6, 1, 155, 195, 29, 6, 1, 173, 195, 29, 6, 1, - 219, 73, 195, 29, 6, 1, 216, 232, 195, 29, 6, 1, 214, 121, 195, 29, 6, 1, - 213, 150, 195, 29, 6, 1, 74, 195, 29, 6, 1, 210, 63, 195, 29, 6, 1, 208, - 96, 195, 29, 6, 1, 207, 113, 195, 29, 6, 1, 205, 68, 195, 29, 6, 1, 203, - 113, 195, 29, 6, 1, 199, 145, 195, 29, 6, 1, 199, 33, 195, 29, 6, 1, 66, - 195, 29, 6, 1, 195, 153, 195, 29, 6, 1, 192, 214, 195, 29, 6, 1, 192, - 159, 195, 29, 6, 1, 191, 87, 195, 29, 2, 1, 65, 195, 29, 2, 1, 249, 48, - 195, 29, 2, 1, 249, 17, 195, 29, 2, 1, 247, 42, 195, 29, 2, 1, 243, 127, - 195, 29, 2, 1, 237, 146, 195, 29, 2, 1, 237, 59, 195, 29, 2, 1, 234, 166, - 195, 29, 2, 1, 71, 195, 29, 2, 1, 233, 59, 195, 29, 2, 1, 231, 240, 195, - 29, 2, 1, 140, 195, 29, 2, 1, 229, 177, 195, 29, 2, 1, 68, 195, 29, 2, 1, - 223, 196, 195, 29, 2, 1, 223, 10, 195, 29, 2, 1, 155, 195, 29, 2, 1, 173, - 195, 29, 2, 1, 219, 73, 195, 29, 2, 1, 216, 232, 195, 29, 2, 1, 214, 121, - 195, 29, 2, 1, 213, 150, 195, 29, 2, 1, 74, 195, 29, 2, 1, 210, 63, 195, - 29, 2, 1, 208, 96, 195, 29, 2, 1, 207, 113, 195, 29, 2, 1, 205, 68, 195, - 29, 2, 1, 203, 113, 195, 29, 2, 1, 199, 145, 195, 29, 2, 1, 199, 33, 195, - 29, 2, 1, 66, 195, 29, 2, 1, 195, 153, 195, 29, 2, 1, 192, 214, 195, 29, - 2, 1, 192, 159, 195, 29, 2, 1, 191, 87, 32, 42, 3, 252, 154, 32, 42, 3, - 252, 153, 32, 42, 3, 252, 152, 32, 42, 3, 252, 151, 32, 42, 3, 252, 150, - 32, 42, 3, 252, 149, 32, 42, 3, 252, 148, 32, 42, 3, 252, 147, 32, 42, 3, - 252, 146, 32, 42, 3, 252, 145, 32, 42, 3, 252, 144, 32, 42, 3, 252, 143, - 32, 42, 3, 252, 142, 32, 42, 3, 252, 141, 32, 42, 3, 252, 140, 32, 42, 3, - 252, 139, 32, 42, 3, 252, 138, 32, 42, 3, 252, 137, 32, 42, 3, 252, 136, - 32, 42, 3, 252, 135, 32, 42, 3, 252, 134, 32, 42, 3, 252, 133, 32, 42, 3, - 252, 132, 32, 42, 3, 252, 131, 32, 42, 3, 252, 130, 32, 42, 3, 252, 129, - 32, 42, 3, 252, 128, 32, 42, 3, 255, 164, 32, 42, 3, 252, 127, 32, 42, 3, - 252, 126, 32, 42, 3, 252, 125, 32, 42, 3, 252, 124, 32, 42, 3, 252, 123, - 32, 42, 3, 252, 122, 32, 42, 3, 252, 121, 32, 42, 3, 252, 120, 32, 42, 3, - 252, 119, 32, 42, 3, 252, 118, 32, 42, 3, 252, 117, 32, 42, 3, 252, 116, - 32, 42, 3, 252, 115, 32, 42, 3, 252, 114, 32, 42, 3, 252, 113, 32, 42, 3, - 252, 112, 32, 42, 3, 252, 111, 32, 42, 3, 252, 110, 32, 42, 3, 252, 109, - 32, 42, 3, 252, 108, 32, 42, 3, 252, 107, 32, 42, 3, 252, 106, 32, 42, 3, - 252, 105, 32, 42, 3, 252, 104, 32, 42, 3, 252, 103, 32, 42, 3, 252, 102, - 32, 42, 3, 252, 101, 32, 42, 3, 252, 100, 32, 42, 3, 252, 99, 32, 42, 3, - 252, 98, 32, 42, 3, 252, 97, 32, 42, 3, 252, 96, 32, 42, 3, 252, 95, 32, - 42, 3, 252, 94, 32, 42, 3, 252, 93, 32, 42, 3, 252, 92, 32, 42, 3, 252, - 91, 32, 42, 3, 252, 90, 32, 42, 3, 252, 89, 32, 42, 3, 252, 88, 32, 42, - 3, 252, 87, 32, 42, 3, 252, 86, 32, 42, 3, 252, 85, 32, 42, 3, 255, 77, - 32, 42, 3, 252, 84, 32, 42, 3, 252, 83, 32, 42, 3, 255, 42, 32, 42, 3, - 252, 82, 32, 42, 3, 252, 81, 32, 42, 3, 252, 80, 32, 42, 3, 252, 79, 32, - 42, 3, 255, 29, 32, 42, 3, 252, 78, 32, 42, 3, 252, 77, 32, 42, 3, 252, - 76, 32, 42, 3, 252, 75, 32, 42, 3, 252, 74, 32, 42, 3, 254, 101, 32, 42, - 3, 254, 100, 32, 42, 3, 254, 99, 32, 42, 3, 254, 98, 32, 42, 3, 254, 97, - 32, 42, 3, 254, 96, 32, 42, 3, 254, 95, 32, 42, 3, 254, 94, 32, 42, 3, - 254, 92, 32, 42, 3, 254, 91, 32, 42, 3, 254, 90, 32, 42, 3, 254, 89, 32, - 42, 3, 254, 88, 32, 42, 3, 254, 87, 32, 42, 3, 254, 85, 32, 42, 3, 254, - 84, 32, 42, 3, 254, 83, 32, 42, 3, 254, 82, 32, 42, 3, 254, 81, 32, 42, - 3, 254, 80, 32, 42, 3, 254, 79, 32, 42, 3, 254, 78, 32, 42, 3, 254, 77, - 32, 42, 3, 254, 76, 32, 42, 3, 254, 75, 32, 42, 3, 254, 74, 32, 42, 3, - 254, 73, 32, 42, 3, 254, 72, 32, 42, 3, 254, 71, 32, 42, 3, 254, 70, 32, - 42, 3, 254, 69, 32, 42, 3, 254, 68, 32, 42, 3, 254, 67, 32, 42, 3, 254, - 65, 32, 42, 3, 254, 64, 32, 42, 3, 254, 63, 32, 42, 3, 254, 59, 32, 42, - 3, 254, 58, 32, 42, 3, 254, 57, 32, 42, 3, 254, 56, 32, 42, 3, 254, 52, - 32, 42, 3, 254, 51, 32, 42, 3, 254, 50, 32, 42, 3, 254, 49, 32, 42, 3, - 254, 48, 32, 42, 3, 254, 47, 32, 42, 3, 254, 46, 32, 42, 3, 254, 45, 32, - 42, 3, 254, 44, 32, 42, 3, 254, 43, 32, 42, 3, 254, 42, 32, 42, 3, 254, - 41, 32, 42, 3, 254, 40, 32, 42, 3, 254, 39, 32, 42, 3, 254, 38, 32, 42, - 3, 254, 37, 32, 42, 3, 254, 36, 32, 42, 3, 254, 35, 32, 42, 3, 254, 34, - 32, 42, 3, 254, 33, 32, 42, 3, 254, 32, 32, 42, 3, 254, 31, 32, 42, 3, - 254, 30, 32, 42, 3, 254, 28, 32, 42, 3, 254, 27, 32, 42, 3, 254, 26, 32, - 42, 3, 254, 25, 32, 42, 3, 254, 24, 32, 42, 3, 254, 22, 32, 42, 3, 254, - 21, 32, 42, 3, 254, 20, 32, 42, 3, 254, 19, 32, 42, 3, 254, 17, 32, 42, - 3, 254, 16, 32, 42, 3, 254, 15, 32, 42, 3, 253, 237, 32, 42, 3, 253, 235, - 32, 42, 3, 253, 233, 32, 42, 3, 253, 231, 32, 42, 3, 253, 229, 32, 42, 3, - 253, 227, 32, 42, 3, 253, 225, 32, 42, 3, 253, 223, 32, 42, 3, 253, 221, - 32, 42, 3, 253, 219, 32, 42, 3, 253, 217, 32, 42, 3, 253, 214, 32, 42, 3, - 253, 212, 32, 42, 3, 253, 210, 32, 42, 3, 253, 208, 32, 42, 3, 253, 206, - 32, 42, 3, 253, 204, 32, 42, 3, 253, 202, 32, 42, 3, 253, 200, 32, 42, 3, - 253, 118, 32, 42, 3, 253, 117, 32, 42, 3, 253, 116, 32, 42, 3, 253, 115, - 32, 42, 3, 253, 114, 32, 42, 3, 253, 113, 32, 42, 3, 253, 111, 32, 42, 3, - 253, 110, 32, 42, 3, 253, 109, 32, 42, 3, 253, 108, 32, 42, 3, 253, 107, - 32, 42, 3, 253, 106, 32, 42, 3, 253, 104, 32, 42, 3, 253, 103, 32, 42, 3, - 253, 99, 32, 42, 3, 253, 98, 32, 42, 3, 253, 96, 32, 42, 3, 253, 95, 32, - 42, 3, 253, 94, 32, 42, 3, 253, 93, 32, 42, 3, 253, 92, 32, 42, 3, 253, - 91, 32, 42, 3, 253, 90, 32, 42, 3, 253, 89, 32, 42, 3, 253, 88, 32, 42, - 3, 253, 87, 32, 42, 3, 253, 86, 32, 42, 3, 253, 85, 32, 42, 3, 253, 84, - 32, 42, 3, 253, 83, 32, 42, 3, 253, 82, 32, 42, 3, 253, 81, 32, 42, 3, - 253, 80, 32, 42, 3, 253, 79, 32, 42, 3, 253, 78, 32, 42, 3, 253, 77, 32, - 42, 3, 253, 76, 32, 42, 3, 253, 75, 32, 42, 3, 253, 74, 32, 42, 3, 253, - 73, 32, 42, 3, 253, 72, 32, 42, 3, 253, 71, 32, 42, 3, 253, 70, 32, 42, - 3, 253, 69, 32, 42, 3, 253, 68, 32, 42, 3, 253, 67, 32, 42, 3, 253, 66, - 32, 42, 3, 253, 65, 32, 42, 3, 253, 64, 32, 42, 3, 253, 63, 32, 42, 3, - 253, 62, 32, 42, 3, 253, 61, 32, 42, 3, 253, 60, 32, 42, 3, 253, 59, 32, - 42, 3, 253, 58, 32, 42, 3, 253, 57, 32, 42, 3, 253, 56, 32, 42, 3, 253, - 55, 32, 42, 3, 253, 54, 32, 42, 3, 253, 53, 32, 42, 3, 253, 52, 32, 42, - 3, 253, 51, 32, 42, 3, 253, 50, 32, 42, 3, 253, 49, 32, 42, 3, 253, 48, - 32, 42, 3, 253, 47, 32, 42, 3, 253, 46, 32, 42, 3, 253, 45, 32, 42, 3, - 253, 44, 32, 42, 3, 253, 43, 32, 42, 3, 253, 42, 32, 42, 3, 253, 41, 32, - 42, 3, 253, 40, 32, 42, 3, 253, 39, 32, 42, 3, 253, 38, 32, 42, 3, 253, - 37, 32, 42, 3, 253, 36, 32, 42, 3, 253, 35, 32, 42, 3, 253, 34, 32, 42, - 3, 253, 33, 32, 42, 3, 253, 32, 32, 42, 3, 253, 31, 32, 42, 3, 253, 30, - 32, 42, 3, 253, 29, 32, 42, 3, 253, 28, 32, 42, 3, 253, 27, 32, 42, 3, - 253, 26, 32, 42, 3, 253, 25, 32, 42, 3, 253, 24, 32, 42, 3, 253, 23, 32, - 42, 3, 253, 22, 32, 42, 3, 253, 21, 32, 42, 3, 253, 20, 32, 42, 3, 253, - 19, 32, 42, 3, 253, 18, 32, 42, 3, 253, 17, 32, 42, 3, 253, 16, 32, 42, - 3, 253, 15, 32, 42, 3, 253, 14, 32, 42, 3, 253, 13, 32, 42, 3, 253, 12, - 32, 42, 3, 253, 11, 32, 42, 3, 253, 10, 32, 42, 3, 253, 9, 32, 42, 3, - 253, 8, 32, 42, 3, 253, 7, 32, 42, 3, 253, 6, 32, 42, 3, 253, 5, 32, 42, - 3, 253, 4, 32, 42, 3, 253, 3, 32, 42, 3, 253, 2, 32, 42, 3, 253, 1, 32, - 42, 3, 253, 0, 32, 42, 3, 252, 255, 32, 42, 3, 252, 254, 32, 42, 3, 252, - 253, 32, 42, 3, 252, 252, 32, 42, 3, 252, 251, 32, 42, 3, 252, 250, 32, - 42, 3, 252, 249, 32, 42, 3, 252, 248, 32, 42, 3, 252, 247, 32, 42, 3, - 252, 246, 32, 42, 3, 252, 245, 32, 42, 3, 252, 244, 32, 42, 3, 252, 243, - 32, 42, 3, 252, 242, 32, 42, 3, 252, 241, 32, 42, 3, 252, 240, 32, 42, 3, - 252, 239, 32, 42, 3, 252, 238, 32, 42, 3, 252, 237, 32, 42, 3, 252, 236, - 65, 32, 42, 3, 252, 235, 250, 120, 32, 42, 3, 252, 234, 238, 127, 32, 42, - 3, 252, 233, 71, 32, 42, 3, 252, 232, 233, 175, 32, 42, 3, 252, 231, 230, - 116, 32, 42, 3, 252, 230, 223, 35, 32, 42, 3, 252, 229, 222, 152, 32, 42, - 3, 252, 228, 172, 32, 42, 3, 252, 227, 220, 130, 32, 42, 3, 252, 226, - 220, 129, 32, 42, 3, 252, 225, 220, 128, 32, 42, 3, 252, 224, 220, 127, - 32, 42, 3, 252, 223, 193, 224, 32, 42, 3, 252, 222, 192, 235, 32, 42, 3, - 252, 221, 192, 159, 32, 42, 3, 252, 220, 211, 110, 32, 42, 3, 252, 219, - 252, 69, 32, 42, 3, 252, 218, 249, 54, 32, 42, 3, 252, 217, 237, 193, 32, - 42, 3, 252, 216, 233, 183, 32, 42, 3, 252, 215, 223, 10, 32, 42, 3, 252, - 214, 32, 42, 3, 252, 213, 32, 42, 3, 252, 212, 32, 42, 3, 252, 211, 32, - 42, 3, 252, 210, 32, 42, 3, 252, 209, 32, 42, 3, 252, 208, 32, 42, 3, - 252, 207, 52, 1, 2, 6, 252, 206, 52, 1, 200, 182, 197, 238, 242, 83, 52, - 1, 200, 182, 132, 197, 238, 242, 83, 52, 1, 2, 252, 25, 52, 1, 2, 6, 250, - 120, 52, 1, 2, 78, 4, 102, 52, 1, 2, 235, 37, 237, 2, 52, 1, 2, 235, 37, - 237, 3, 4, 207, 24, 102, 52, 1, 2, 235, 37, 237, 3, 4, 238, 175, 52, 1, - 2, 237, 70, 237, 2, 52, 1, 2, 238, 128, 4, 199, 215, 52, 1, 2, 238, 128, - 4, 102, 52, 1, 2, 238, 128, 4, 228, 251, 23, 199, 215, 52, 1, 2, 207, 18, - 71, 52, 1, 2, 242, 219, 207, 18, 211, 77, 71, 52, 1, 2, 233, 37, 237, 2, - 52, 1, 2, 207, 140, 228, 187, 52, 1, 2, 6, 232, 51, 52, 1, 2, 232, 52, 4, - 102, 52, 1, 2, 6, 232, 52, 4, 102, 52, 1, 2, 230, 117, 4, 106, 52, 1, 2, - 6, 230, 116, 52, 1, 2, 229, 197, 4, 102, 52, 1, 2, 236, 139, 223, 36, 4, - 201, 28, 23, 102, 52, 1, 2, 218, 227, 237, 2, 52, 1, 2, 218, 170, 237, 2, - 52, 1, 2, 220, 143, 4, 248, 231, 52, 1, 2, 6, 220, 143, 4, 248, 231, 52, - 1, 2, 220, 143, 4, 207, 24, 228, 251, 23, 248, 231, 52, 1, 2, 219, 162, - 52, 1, 2, 219, 163, 4, 207, 24, 102, 52, 1, 2, 153, 192, 159, 52, 1, 2, - 153, 192, 160, 4, 248, 231, 52, 1, 2, 187, 4, 106, 52, 1, 2, 6, 211, 151, - 52, 1, 2, 242, 219, 211, 110, 52, 1, 2, 208, 104, 52, 1, 2, 153, 207, - 222, 4, 179, 219, 212, 52, 1, 2, 153, 207, 222, 4, 179, 219, 213, 23, - 207, 24, 102, 52, 1, 2, 207, 222, 4, 199, 215, 52, 1, 2, 207, 222, 4, - 232, 233, 52, 1, 2, 6, 146, 52, 1, 2, 199, 152, 237, 3, 4, 238, 175, 52, - 1, 2, 197, 170, 237, 2, 52, 1, 2, 197, 170, 237, 3, 4, 207, 24, 102, 52, - 1, 2, 199, 79, 237, 2, 52, 1, 2, 200, 44, 4, 207, 24, 102, 52, 1, 2, 196, - 13, 4, 50, 102, 52, 1, 2, 6, 192, 159, 52, 1, 231, 11, 201, 64, 4, 106, - 52, 1, 207, 18, 231, 11, 201, 64, 4, 106, 52, 1, 248, 172, 242, 231, 52, - 1, 237, 98, 242, 231, 52, 1, 220, 3, 242, 231, 52, 1, 251, 150, 242, 231, - 52, 1, 207, 24, 242, 232, 4, 207, 24, 102, 52, 1, 2, 206, 9, 4, 238, 175, - 238, 135, 5, 65, 238, 135, 5, 71, 238, 135, 5, 68, 238, 135, 5, 74, 238, - 135, 5, 66, 238, 135, 5, 223, 32, 238, 135, 5, 222, 201, 238, 135, 5, - 155, 238, 135, 5, 222, 22, 238, 135, 5, 221, 166, 238, 135, 5, 221, 67, - 238, 135, 5, 220, 232, 238, 135, 5, 173, 238, 135, 5, 219, 238, 238, 135, - 5, 219, 146, 238, 135, 5, 219, 43, 238, 135, 5, 218, 225, 238, 135, 5, - 174, 238, 135, 5, 216, 232, 238, 135, 5, 216, 100, 238, 135, 5, 216, 12, - 238, 135, 5, 215, 155, 238, 135, 5, 180, 238, 135, 5, 214, 121, 238, 135, - 5, 213, 219, 238, 135, 5, 213, 43, 238, 135, 5, 212, 178, 238, 135, 5, - 168, 238, 135, 5, 210, 63, 238, 135, 5, 209, 185, 238, 135, 5, 209, 73, - 238, 135, 5, 208, 165, 238, 135, 5, 165, 238, 135, 5, 207, 113, 238, 135, - 5, 207, 1, 238, 135, 5, 206, 162, 238, 135, 5, 206, 68, 238, 135, 5, 188, - 238, 135, 5, 205, 68, 238, 135, 5, 202, 222, 238, 135, 5, 202, 46, 238, - 135, 5, 201, 4, 238, 135, 5, 190, 190, 238, 135, 5, 199, 145, 238, 135, - 5, 198, 193, 238, 135, 5, 159, 238, 135, 5, 197, 94, 238, 135, 5, 193, - 190, 238, 135, 5, 193, 125, 238, 135, 5, 193, 86, 238, 135, 5, 193, 48, - 238, 135, 5, 192, 220, 238, 135, 5, 192, 214, 238, 135, 5, 191, 123, 238, - 135, 5, 191, 7, 223, 164, 251, 18, 1, 251, 190, 223, 164, 251, 18, 1, - 248, 211, 223, 164, 251, 18, 1, 231, 38, 223, 164, 251, 18, 1, 237, 252, - 223, 164, 251, 18, 1, 229, 245, 223, 164, 251, 18, 1, 193, 133, 223, 164, - 251, 18, 1, 191, 91, 223, 164, 251, 18, 1, 229, 184, 223, 164, 251, 18, - 1, 199, 69, 223, 164, 251, 18, 1, 191, 249, 223, 164, 251, 18, 1, 222, - 75, 223, 164, 251, 18, 1, 220, 26, 223, 164, 251, 18, 1, 216, 193, 223, - 164, 251, 18, 1, 212, 130, 223, 164, 251, 18, 1, 205, 148, 223, 164, 251, - 18, 1, 250, 126, 223, 164, 251, 18, 1, 210, 63, 223, 164, 251, 18, 1, - 205, 189, 223, 164, 251, 18, 1, 208, 37, 223, 164, 251, 18, 1, 207, 38, - 223, 164, 251, 18, 1, 203, 69, 223, 164, 251, 18, 1, 199, 159, 223, 164, - 251, 18, 205, 54, 56, 223, 164, 251, 18, 31, 107, 223, 164, 251, 18, 31, - 109, 223, 164, 251, 18, 31, 138, 223, 164, 251, 18, 31, 199, 95, 223, - 164, 251, 18, 31, 197, 32, 223, 164, 251, 18, 31, 91, 228, 140, 223, 164, - 251, 18, 31, 91, 189, 223, 164, 251, 18, 31, 199, 96, 189, 210, 180, 1, - 251, 190, 210, 180, 1, 248, 211, 210, 180, 1, 231, 38, 210, 180, 1, 237, - 252, 210, 180, 1, 229, 245, 210, 180, 1, 193, 133, 210, 180, 1, 191, 91, - 210, 180, 1, 229, 184, 210, 180, 1, 199, 69, 210, 180, 1, 191, 249, 210, - 180, 1, 222, 75, 210, 180, 1, 220, 26, 210, 180, 1, 216, 193, 210, 180, - 1, 53, 212, 130, 210, 180, 1, 212, 130, 210, 180, 1, 205, 148, 210, 180, - 1, 250, 126, 210, 180, 1, 210, 63, 210, 180, 1, 205, 189, 210, 180, 1, - 208, 37, 210, 180, 1, 207, 38, 210, 180, 1, 203, 69, 210, 180, 1, 199, - 159, 210, 180, 219, 219, 232, 201, 210, 180, 206, 203, 232, 201, 210, - 180, 31, 107, 210, 180, 31, 109, 210, 180, 31, 138, 210, 180, 31, 134, - 210, 180, 31, 149, 210, 180, 31, 199, 95, 210, 180, 31, 197, 32, 214, - 246, 1, 53, 251, 190, 214, 246, 1, 251, 190, 214, 246, 1, 53, 248, 211, - 214, 246, 1, 248, 211, 214, 246, 1, 231, 38, 214, 246, 1, 237, 252, 214, - 246, 1, 53, 229, 245, 214, 246, 1, 229, 245, 214, 246, 1, 193, 133, 214, - 246, 1, 191, 91, 214, 246, 1, 229, 184, 214, 246, 1, 199, 69, 214, 246, - 1, 53, 191, 249, 214, 246, 1, 191, 249, 214, 246, 1, 53, 222, 75, 214, - 246, 1, 222, 75, 214, 246, 1, 53, 220, 26, 214, 246, 1, 220, 26, 214, - 246, 1, 53, 216, 193, 214, 246, 1, 216, 193, 214, 246, 1, 53, 212, 130, - 214, 246, 1, 212, 130, 214, 246, 1, 205, 148, 214, 246, 1, 250, 126, 214, - 246, 1, 210, 63, 214, 246, 1, 205, 189, 214, 246, 1, 208, 37, 214, 246, - 1, 207, 38, 214, 246, 1, 53, 203, 69, 214, 246, 1, 203, 69, 214, 246, 1, - 199, 159, 214, 246, 31, 107, 214, 246, 31, 109, 214, 246, 31, 138, 214, - 246, 31, 134, 214, 246, 238, 202, 31, 134, 214, 246, 31, 149, 214, 246, - 31, 199, 95, 214, 246, 31, 197, 32, 214, 246, 31, 91, 228, 140, 230, 4, - 1, 251, 190, 230, 4, 1, 248, 211, 230, 4, 1, 231, 38, 230, 4, 1, 237, - 251, 230, 4, 1, 229, 245, 230, 4, 1, 193, 133, 230, 4, 1, 191, 89, 230, - 4, 1, 229, 184, 230, 4, 1, 199, 69, 230, 4, 1, 191, 249, 230, 4, 1, 222, - 75, 230, 4, 1, 220, 26, 230, 4, 1, 216, 193, 230, 4, 1, 212, 130, 230, 4, - 1, 205, 148, 230, 4, 1, 250, 124, 230, 4, 1, 210, 63, 230, 4, 1, 205, - 189, 230, 4, 1, 208, 37, 230, 4, 1, 203, 69, 230, 4, 1, 199, 159, 230, 4, - 31, 107, 230, 4, 31, 149, 230, 4, 31, 199, 95, 230, 4, 31, 197, 32, 230, - 4, 31, 91, 228, 140, 209, 197, 1, 251, 187, 209, 197, 1, 248, 214, 209, - 197, 1, 231, 213, 209, 197, 1, 237, 108, 209, 197, 1, 229, 245, 209, 197, - 1, 193, 140, 209, 197, 1, 191, 115, 209, 197, 1, 229, 186, 209, 197, 1, - 199, 73, 209, 197, 1, 191, 250, 209, 197, 1, 222, 106, 209, 197, 1, 220, - 32, 209, 197, 1, 216, 193, 209, 197, 1, 212, 130, 209, 197, 1, 204, 19, - 209, 197, 1, 251, 230, 209, 197, 1, 210, 63, 209, 197, 1, 205, 191, 209, - 197, 1, 208, 42, 209, 197, 1, 206, 124, 209, 197, 1, 203, 69, 209, 197, - 1, 199, 166, 209, 197, 31, 107, 209, 197, 31, 199, 95, 209, 197, 31, 197, - 32, 209, 197, 31, 91, 228, 140, 209, 197, 31, 109, 209, 197, 31, 138, - 209, 197, 193, 23, 204, 10, 218, 180, 1, 65, 218, 180, 1, 250, 120, 218, - 180, 1, 232, 51, 218, 180, 1, 238, 127, 218, 180, 1, 71, 218, 180, 1, - 196, 12, 218, 180, 1, 68, 218, 180, 1, 192, 159, 218, 180, 1, 222, 152, - 218, 180, 1, 172, 218, 180, 1, 218, 168, 218, 180, 1, 215, 61, 218, 180, - 1, 74, 218, 180, 1, 146, 218, 180, 1, 201, 178, 218, 180, 1, 200, 43, - 218, 180, 1, 66, 218, 180, 1, 233, 175, 218, 180, 1, 208, 104, 218, 180, - 1, 206, 8, 218, 180, 1, 197, 135, 218, 180, 1, 251, 132, 218, 180, 1, - 234, 103, 218, 180, 1, 218, 183, 218, 180, 1, 213, 80, 218, 180, 1, 247, - 193, 218, 180, 197, 238, 77, 152, 229, 144, 1, 65, 152, 229, 144, 1, 71, - 152, 229, 144, 1, 68, 152, 229, 144, 1, 74, 152, 229, 144, 1, 170, 152, - 229, 144, 1, 193, 190, 152, 229, 144, 1, 249, 153, 152, 229, 144, 1, 249, - 152, 152, 229, 144, 1, 168, 152, 229, 144, 1, 174, 152, 229, 144, 1, 180, - 152, 229, 144, 1, 215, 5, 152, 229, 144, 1, 214, 121, 152, 229, 144, 1, - 214, 119, 152, 229, 144, 1, 165, 152, 229, 144, 1, 207, 184, 152, 229, - 144, 1, 173, 152, 229, 144, 1, 221, 215, 152, 229, 144, 1, 229, 177, 152, - 229, 144, 1, 188, 152, 229, 144, 1, 205, 205, 152, 229, 144, 1, 205, 68, - 152, 229, 144, 1, 155, 152, 229, 144, 1, 208, 96, 152, 229, 144, 1, 190, - 190, 152, 229, 144, 1, 199, 250, 152, 229, 144, 1, 199, 145, 152, 229, - 144, 1, 199, 143, 152, 229, 144, 1, 159, 152, 229, 144, 1, 238, 32, 152, - 229, 144, 16, 195, 63, 152, 229, 144, 16, 195, 62, 152, 238, 166, 1, 65, - 152, 238, 166, 1, 71, 152, 238, 166, 1, 68, 152, 238, 166, 1, 74, 152, - 238, 166, 1, 170, 152, 238, 166, 1, 193, 190, 152, 238, 166, 1, 249, 153, - 152, 238, 166, 1, 168, 152, 238, 166, 1, 174, 152, 238, 166, 1, 180, 152, - 238, 166, 1, 214, 121, 152, 238, 166, 1, 165, 152, 238, 166, 1, 173, 152, - 238, 166, 1, 221, 215, 152, 238, 166, 1, 229, 177, 152, 238, 166, 1, 188, - 152, 238, 166, 1, 251, 14, 188, 152, 238, 166, 1, 205, 68, 152, 238, 166, - 1, 155, 152, 238, 166, 1, 208, 96, 152, 238, 166, 1, 190, 190, 152, 238, - 166, 1, 199, 145, 152, 238, 166, 1, 159, 152, 238, 166, 1, 238, 32, 152, - 238, 166, 232, 118, 234, 128, 197, 39, 152, 238, 166, 232, 118, 91, 230, - 70, 152, 238, 166, 219, 28, 206, 168, 152, 238, 166, 219, 28, 223, 169, - 152, 238, 166, 31, 107, 152, 238, 166, 31, 109, 152, 238, 166, 31, 138, - 152, 238, 166, 31, 134, 152, 238, 166, 31, 149, 152, 238, 166, 31, 169, - 152, 238, 166, 31, 175, 152, 238, 166, 31, 171, 152, 238, 166, 31, 178, - 152, 238, 166, 31, 199, 95, 152, 238, 166, 31, 197, 32, 152, 238, 166, - 31, 198, 249, 152, 238, 166, 31, 232, 135, 152, 238, 166, 31, 233, 15, - 152, 238, 166, 31, 202, 120, 152, 238, 166, 31, 203, 241, 152, 238, 166, - 31, 91, 228, 140, 152, 238, 166, 31, 105, 228, 140, 152, 238, 166, 31, - 115, 228, 140, 152, 238, 166, 31, 232, 128, 228, 140, 152, 238, 166, 31, - 232, 226, 228, 140, 152, 238, 166, 31, 202, 136, 228, 140, 152, 238, 166, - 31, 203, 247, 228, 140, 152, 238, 166, 31, 234, 164, 228, 140, 152, 238, - 166, 31, 213, 175, 228, 140, 152, 238, 166, 31, 91, 189, 152, 238, 166, - 31, 105, 189, 152, 238, 166, 31, 115, 189, 152, 238, 166, 31, 232, 128, - 189, 152, 238, 166, 31, 232, 226, 189, 152, 238, 166, 31, 202, 136, 189, - 152, 238, 166, 31, 203, 247, 189, 152, 238, 166, 31, 234, 164, 189, 152, - 238, 166, 31, 213, 175, 189, 152, 238, 166, 31, 199, 96, 189, 152, 238, - 166, 31, 197, 33, 189, 152, 238, 166, 31, 198, 250, 189, 152, 238, 166, - 31, 232, 136, 189, 152, 238, 166, 31, 233, 16, 189, 152, 238, 166, 31, - 202, 121, 189, 152, 238, 166, 31, 203, 242, 189, 152, 238, 166, 31, 234, - 154, 189, 152, 238, 166, 31, 213, 170, 189, 152, 238, 166, 31, 91, 228, - 141, 189, 152, 238, 166, 31, 105, 228, 141, 189, 152, 238, 166, 31, 115, - 228, 141, 189, 152, 238, 166, 31, 232, 128, 228, 141, 189, 152, 238, 166, - 31, 232, 226, 228, 141, 189, 152, 238, 166, 31, 202, 136, 228, 141, 189, - 152, 238, 166, 31, 203, 247, 228, 141, 189, 152, 238, 166, 31, 234, 164, - 228, 141, 189, 152, 238, 166, 31, 213, 175, 228, 141, 189, 152, 238, 166, - 232, 118, 91, 197, 40, 152, 238, 166, 232, 118, 105, 197, 39, 152, 238, - 166, 232, 118, 115, 197, 39, 152, 238, 166, 232, 118, 232, 128, 197, 39, - 152, 238, 166, 232, 118, 232, 226, 197, 39, 152, 238, 166, 232, 118, 202, - 136, 197, 39, 152, 238, 166, 232, 118, 203, 247, 197, 39, 152, 238, 166, - 232, 118, 234, 164, 197, 39, 152, 238, 166, 232, 118, 213, 175, 197, 39, - 152, 238, 166, 232, 118, 199, 96, 197, 39, 221, 199, 1, 65, 221, 199, 18, - 3, 68, 221, 199, 18, 3, 66, 221, 199, 18, 3, 117, 146, 221, 199, 18, 3, - 71, 221, 199, 18, 3, 74, 221, 199, 18, 219, 198, 77, 221, 199, 3, 55, - 206, 189, 60, 221, 199, 3, 251, 71, 221, 199, 3, 195, 35, 221, 199, 1, - 155, 221, 199, 1, 221, 215, 221, 199, 1, 231, 240, 221, 199, 1, 231, 91, - 221, 199, 1, 247, 160, 221, 199, 1, 247, 1, 221, 199, 1, 223, 32, 221, - 199, 1, 212, 101, 221, 199, 1, 197, 132, 221, 199, 1, 197, 120, 221, 199, - 1, 237, 191, 221, 199, 1, 237, 175, 221, 199, 1, 213, 79, 221, 199, 1, - 190, 190, 221, 199, 1, 199, 49, 221, 199, 1, 238, 32, 221, 199, 1, 237, - 68, 221, 199, 1, 180, 221, 199, 1, 168, 221, 199, 1, 209, 228, 221, 199, - 1, 249, 153, 221, 199, 1, 248, 203, 221, 199, 1, 174, 221, 199, 1, 170, - 221, 199, 1, 165, 221, 199, 1, 173, 221, 199, 1, 195, 188, 221, 199, 1, - 203, 165, 221, 199, 1, 201, 175, 221, 199, 1, 188, 221, 199, 1, 191, 123, - 221, 199, 1, 140, 221, 199, 1, 221, 101, 221, 199, 1, 197, 100, 221, 199, - 1, 197, 101, 221, 199, 1, 195, 70, 221, 199, 3, 249, 88, 58, 221, 199, 3, - 247, 74, 221, 199, 3, 75, 60, 221, 199, 195, 40, 221, 199, 17, 107, 221, - 199, 17, 109, 221, 199, 17, 138, 221, 199, 17, 134, 221, 199, 31, 199, - 95, 221, 199, 31, 197, 32, 221, 199, 31, 91, 228, 140, 221, 199, 31, 91, - 189, 221, 199, 232, 118, 91, 230, 70, 221, 199, 208, 152, 236, 140, 221, - 199, 208, 152, 2, 243, 10, 221, 199, 208, 152, 243, 10, 221, 199, 208, - 152, 238, 228, 164, 221, 199, 208, 152, 217, 83, 221, 199, 208, 152, 218, - 246, 221, 199, 208, 152, 237, 238, 221, 199, 208, 152, 55, 237, 238, 221, - 199, 208, 152, 219, 106, 39, 202, 2, 251, 29, 1, 229, 245, 39, 202, 2, - 251, 29, 1, 220, 26, 39, 202, 2, 251, 29, 1, 229, 184, 39, 202, 2, 251, - 29, 1, 216, 193, 39, 202, 2, 251, 29, 1, 208, 37, 39, 202, 2, 251, 29, 1, - 193, 133, 39, 202, 2, 251, 29, 1, 203, 69, 39, 202, 2, 251, 29, 1, 207, - 38, 39, 202, 2, 251, 29, 1, 248, 211, 39, 202, 2, 251, 29, 1, 199, 159, - 39, 202, 2, 251, 29, 1, 205, 122, 39, 202, 2, 251, 29, 1, 222, 75, 39, - 202, 2, 251, 29, 1, 212, 130, 39, 202, 2, 251, 29, 1, 221, 194, 39, 202, - 2, 251, 29, 1, 205, 189, 39, 202, 2, 251, 29, 1, 205, 148, 39, 202, 2, - 251, 29, 1, 233, 59, 39, 202, 2, 251, 29, 1, 251, 192, 39, 202, 2, 251, - 29, 1, 250, 124, 39, 202, 2, 251, 29, 1, 237, 65, 39, 202, 2, 251, 29, 1, - 231, 38, 39, 202, 2, 251, 29, 1, 237, 252, 39, 202, 2, 251, 29, 1, 231, - 79, 39, 202, 2, 251, 29, 1, 199, 69, 39, 202, 2, 251, 29, 1, 191, 89, 39, - 202, 2, 251, 29, 1, 237, 62, 39, 202, 2, 251, 29, 1, 191, 249, 39, 202, - 2, 251, 29, 1, 199, 35, 39, 202, 2, 251, 29, 1, 199, 14, 39, 202, 2, 251, - 29, 31, 107, 39, 202, 2, 251, 29, 31, 233, 15, 39, 202, 2, 251, 29, 167, - 223, 144, 39, 186, 251, 29, 1, 229, 210, 39, 186, 251, 29, 1, 220, 35, - 39, 186, 251, 29, 1, 230, 81, 39, 186, 251, 29, 1, 216, 208, 39, 186, - 251, 29, 1, 208, 89, 39, 186, 251, 29, 1, 193, 133, 39, 186, 251, 29, 1, - 234, 20, 39, 186, 251, 29, 1, 207, 71, 39, 186, 251, 29, 1, 248, 245, 39, - 186, 251, 29, 1, 199, 114, 39, 186, 251, 29, 1, 234, 21, 39, 186, 251, - 29, 1, 222, 106, 39, 186, 251, 29, 1, 213, 24, 39, 186, 251, 29, 1, 221, - 210, 39, 186, 251, 29, 1, 205, 192, 39, 186, 251, 29, 1, 234, 19, 39, - 186, 251, 29, 1, 233, 46, 39, 186, 251, 29, 1, 251, 192, 39, 186, 251, - 29, 1, 251, 230, 39, 186, 251, 29, 1, 238, 26, 39, 186, 251, 29, 1, 231, - 156, 39, 186, 251, 29, 1, 238, 3, 39, 186, 251, 29, 1, 231, 86, 39, 186, - 251, 29, 1, 199, 219, 39, 186, 251, 29, 1, 191, 113, 39, 186, 251, 29, 1, - 199, 41, 39, 186, 251, 29, 1, 192, 75, 39, 186, 251, 29, 1, 199, 29, 39, - 186, 251, 29, 1, 191, 116, 39, 186, 251, 29, 31, 107, 39, 186, 251, 29, - 31, 199, 95, 39, 186, 251, 29, 31, 197, 32, 217, 81, 1, 251, 190, 217, - 81, 1, 248, 211, 217, 81, 1, 248, 194, 217, 81, 1, 231, 38, 217, 81, 1, - 231, 64, 217, 81, 1, 237, 252, 217, 81, 1, 229, 245, 217, 81, 1, 193, - 133, 217, 81, 3, 196, 158, 217, 81, 1, 191, 91, 217, 81, 1, 191, 64, 217, - 81, 1, 223, 12, 217, 81, 1, 222, 248, 217, 81, 1, 229, 184, 217, 81, 1, - 199, 69, 217, 81, 1, 191, 249, 217, 81, 1, 222, 75, 217, 81, 1, 192, 217, - 217, 81, 1, 221, 201, 217, 81, 1, 220, 26, 217, 81, 1, 237, 61, 217, 81, - 1, 199, 40, 217, 81, 1, 216, 193, 217, 81, 1, 212, 130, 217, 81, 1, 205, - 148, 217, 81, 1, 250, 126, 217, 81, 1, 252, 158, 217, 81, 1, 210, 63, - 217, 81, 1, 233, 59, 217, 81, 1, 205, 189, 217, 81, 1, 208, 37, 217, 81, - 1, 192, 193, 217, 81, 1, 208, 64, 217, 81, 1, 207, 38, 217, 81, 1, 203, - 69, 217, 81, 1, 201, 143, 217, 81, 1, 199, 159, 217, 81, 252, 68, 87, 58, - 217, 81, 252, 68, 87, 60, 217, 81, 31, 107, 217, 81, 31, 149, 217, 81, - 31, 199, 95, 217, 81, 31, 197, 32, 217, 81, 31, 91, 228, 140, 217, 81, - 208, 152, 201, 102, 217, 81, 208, 152, 232, 201, 217, 81, 208, 152, 55, - 75, 193, 53, 236, 140, 217, 81, 208, 152, 75, 193, 53, 236, 140, 217, 81, - 208, 152, 236, 140, 217, 81, 208, 152, 105, 236, 138, 217, 81, 208, 152, - 219, 113, 233, 3, 250, 142, 1, 65, 250, 142, 1, 252, 206, 250, 142, 1, - 251, 68, 250, 142, 1, 252, 164, 250, 142, 1, 251, 132, 250, 142, 1, 252, - 166, 250, 142, 1, 252, 25, 250, 142, 1, 252, 21, 250, 142, 1, 71, 250, - 142, 1, 234, 188, 250, 142, 1, 74, 250, 142, 1, 211, 87, 250, 142, 1, 68, - 250, 142, 1, 223, 199, 250, 142, 1, 66, 250, 142, 1, 196, 30, 250, 142, - 1, 222, 22, 250, 142, 1, 192, 214, 250, 142, 1, 192, 173, 250, 142, 1, - 192, 184, 250, 142, 1, 231, 165, 250, 142, 1, 231, 122, 250, 142, 1, 231, - 77, 250, 142, 1, 247, 42, 250, 142, 1, 223, 10, 250, 142, 1, 199, 145, - 250, 142, 1, 199, 33, 250, 142, 1, 237, 146, 250, 142, 1, 237, 59, 250, - 142, 1, 197, 127, 250, 142, 1, 210, 63, 250, 142, 1, 233, 59, 250, 142, - 1, 249, 17, 250, 142, 1, 248, 196, 250, 142, 1, 214, 55, 250, 142, 1, - 213, 226, 250, 142, 1, 213, 227, 250, 142, 1, 214, 121, 250, 142, 1, 212, - 90, 250, 142, 1, 213, 74, 250, 142, 1, 216, 232, 250, 142, 1, 229, 73, - 250, 142, 1, 191, 173, 250, 142, 1, 192, 80, 250, 142, 1, 195, 153, 250, - 142, 1, 207, 113, 250, 142, 1, 219, 238, 250, 142, 1, 205, 68, 250, 142, - 1, 191, 87, 250, 142, 1, 203, 113, 250, 142, 1, 191, 62, 250, 142, 1, - 202, 229, 250, 142, 1, 201, 144, 250, 142, 1, 229, 245, 250, 142, 252, - 68, 77, 198, 138, 105, 185, 139, 91, 75, 208, 151, 2, 105, 185, 139, 91, - 75, 208, 151, 220, 13, 105, 185, 139, 91, 75, 208, 151, 220, 13, 91, 75, - 139, 105, 185, 208, 151, 220, 13, 105, 206, 185, 139, 91, 206, 189, 208, - 151, 220, 13, 91, 206, 189, 139, 105, 206, 185, 208, 151, 223, 122, 210, - 106, 1, 251, 190, 223, 122, 210, 106, 1, 248, 211, 223, 122, 210, 106, 1, - 231, 38, 223, 122, 210, 106, 1, 237, 252, 223, 122, 210, 106, 1, 229, - 245, 223, 122, 210, 106, 1, 193, 133, 223, 122, 210, 106, 1, 191, 91, - 223, 122, 210, 106, 1, 229, 184, 223, 122, 210, 106, 1, 199, 69, 223, - 122, 210, 106, 1, 191, 249, 223, 122, 210, 106, 1, 222, 75, 223, 122, - 210, 106, 1, 220, 26, 223, 122, 210, 106, 1, 216, 193, 223, 122, 210, - 106, 1, 212, 130, 223, 122, 210, 106, 1, 205, 148, 223, 122, 210, 106, 1, - 250, 126, 223, 122, 210, 106, 1, 210, 63, 223, 122, 210, 106, 1, 205, - 189, 223, 122, 210, 106, 1, 208, 37, 223, 122, 210, 106, 1, 207, 38, 223, - 122, 210, 106, 1, 203, 69, 223, 122, 210, 106, 1, 199, 159, 223, 122, - 210, 106, 31, 107, 223, 122, 210, 106, 31, 109, 223, 122, 210, 106, 31, - 138, 223, 122, 210, 106, 31, 134, 223, 122, 210, 106, 31, 199, 95, 223, - 122, 210, 106, 31, 197, 32, 223, 122, 210, 106, 31, 91, 228, 140, 223, - 122, 210, 106, 31, 91, 189, 223, 122, 210, 199, 1, 251, 190, 223, 122, - 210, 199, 1, 248, 211, 223, 122, 210, 199, 1, 231, 38, 223, 122, 210, - 199, 1, 237, 252, 223, 122, 210, 199, 1, 229, 245, 223, 122, 210, 199, 1, - 193, 132, 223, 122, 210, 199, 1, 191, 91, 223, 122, 210, 199, 1, 229, - 184, 223, 122, 210, 199, 1, 199, 69, 223, 122, 210, 199, 1, 191, 249, - 223, 122, 210, 199, 1, 222, 75, 223, 122, 210, 199, 1, 220, 26, 223, 122, - 210, 199, 1, 216, 192, 223, 122, 210, 199, 1, 212, 130, 223, 122, 210, - 199, 1, 205, 148, 223, 122, 210, 199, 1, 210, 63, 223, 122, 210, 199, 1, - 205, 189, 223, 122, 210, 199, 1, 203, 69, 223, 122, 210, 199, 1, 199, - 159, 223, 122, 210, 199, 31, 107, 223, 122, 210, 199, 31, 109, 223, 122, - 210, 199, 31, 138, 223, 122, 210, 199, 31, 134, 223, 122, 210, 199, 31, - 199, 95, 223, 122, 210, 199, 31, 197, 32, 223, 122, 210, 199, 31, 91, - 228, 140, 223, 122, 210, 199, 31, 91, 189, 208, 177, 210, 199, 1, 251, - 190, 208, 177, 210, 199, 1, 248, 211, 208, 177, 210, 199, 1, 231, 38, - 208, 177, 210, 199, 1, 237, 252, 208, 177, 210, 199, 1, 229, 245, 208, - 177, 210, 199, 1, 193, 132, 208, 177, 210, 199, 1, 191, 91, 208, 177, - 210, 199, 1, 229, 184, 208, 177, 210, 199, 1, 191, 249, 208, 177, 210, - 199, 1, 222, 75, 208, 177, 210, 199, 1, 220, 26, 208, 177, 210, 199, 1, - 216, 192, 208, 177, 210, 199, 1, 212, 130, 208, 177, 210, 199, 1, 205, - 148, 208, 177, 210, 199, 1, 210, 63, 208, 177, 210, 199, 1, 205, 189, - 208, 177, 210, 199, 1, 203, 69, 208, 177, 210, 199, 1, 199, 159, 208, - 177, 210, 199, 205, 54, 77, 208, 177, 210, 199, 153, 205, 54, 77, 208, - 177, 210, 199, 232, 128, 185, 4, 238, 217, 208, 177, 210, 199, 232, 128, - 185, 4, 236, 140, 208, 177, 210, 199, 31, 107, 208, 177, 210, 199, 31, - 109, 208, 177, 210, 199, 31, 138, 208, 177, 210, 199, 31, 134, 208, 177, - 210, 199, 31, 199, 95, 208, 177, 210, 199, 31, 197, 32, 208, 177, 210, - 199, 31, 91, 228, 140, 39, 197, 61, 1, 211, 44, 65, 39, 197, 61, 1, 192, - 68, 65, 39, 197, 61, 1, 192, 68, 252, 25, 39, 197, 61, 1, 211, 44, 68, + 1, 170, 216, 207, 217, 20, 1, 221, 53, 216, 207, 217, 20, 1, 205, 153, + 216, 207, 217, 20, 1, 220, 98, 216, 207, 217, 20, 1, 216, 25, 216, 207, + 217, 20, 1, 168, 216, 207, 217, 20, 1, 181, 216, 207, 217, 20, 1, 243, + 89, 216, 207, 217, 20, 1, 198, 154, 216, 207, 217, 20, 1, 221, 178, 216, + 207, 217, 20, 1, 213, 241, 216, 207, 217, 20, 1, 198, 232, 216, 207, 217, + 20, 1, 193, 173, 216, 207, 217, 20, 1, 192, 106, 216, 207, 217, 20, 1, + 228, 149, 216, 207, 217, 20, 1, 196, 113, 216, 207, 217, 20, 1, 68, 216, + 207, 217, 20, 1, 209, 224, 216, 207, 217, 20, 1, 250, 177, 216, 207, 217, + 20, 1, 230, 253, 216, 207, 217, 20, 1, 222, 252, 216, 207, 217, 20, 1, + 207, 158, 216, 207, 217, 20, 1, 249, 155, 216, 207, 217, 20, 1, 222, 236, + 216, 207, 217, 20, 1, 237, 3, 216, 207, 217, 20, 1, 231, 62, 216, 207, + 217, 20, 1, 237, 48, 216, 207, 217, 20, 1, 248, 200, 216, 207, 217, 20, + 1, 221, 54, 219, 11, 216, 207, 217, 20, 1, 220, 99, 219, 11, 216, 207, + 217, 20, 1, 216, 26, 219, 11, 216, 207, 217, 20, 1, 210, 223, 219, 11, + 216, 207, 217, 20, 1, 215, 9, 219, 11, 216, 207, 217, 20, 1, 198, 155, + 219, 11, 216, 207, 217, 20, 1, 213, 242, 219, 11, 216, 207, 217, 20, 1, + 228, 76, 219, 11, 216, 207, 217, 20, 18, 3, 211, 104, 216, 207, 217, 20, + 18, 3, 223, 162, 216, 207, 217, 20, 18, 3, 251, 132, 216, 207, 217, 20, + 18, 3, 192, 69, 216, 207, 217, 20, 18, 3, 202, 7, 216, 207, 217, 20, 18, + 3, 196, 110, 216, 207, 217, 20, 18, 3, 243, 116, 216, 207, 217, 20, 18, + 3, 212, 129, 216, 207, 217, 20, 243, 117, 216, 207, 217, 20, 218, 211, + 223, 44, 216, 207, 217, 20, 251, 40, 223, 44, 216, 207, 217, 20, 17, 191, + 77, 216, 207, 217, 20, 17, 107, 216, 207, 217, 20, 17, 109, 216, 207, + 217, 20, 17, 138, 216, 207, 217, 20, 17, 134, 216, 207, 217, 20, 17, 150, + 216, 207, 217, 20, 17, 169, 216, 207, 217, 20, 17, 175, 216, 207, 217, + 20, 17, 171, 216, 207, 217, 20, 17, 178, 30, 222, 176, 212, 5, 30, 222, + 176, 212, 10, 30, 222, 176, 192, 5, 30, 222, 176, 192, 4, 30, 222, 176, + 192, 3, 30, 222, 176, 196, 218, 30, 222, 176, 196, 222, 30, 222, 176, + 191, 219, 30, 222, 176, 191, 215, 30, 222, 176, 233, 243, 30, 222, 176, + 233, 241, 30, 222, 176, 233, 242, 30, 222, 176, 233, 239, 30, 222, 176, + 228, 62, 30, 222, 176, 228, 61, 30, 222, 176, 228, 59, 30, 222, 176, 228, + 60, 30, 222, 176, 228, 65, 30, 222, 176, 228, 58, 30, 222, 176, 228, 57, + 30, 222, 176, 228, 67, 30, 222, 176, 251, 26, 30, 222, 176, 251, 25, 30, + 125, 213, 199, 30, 125, 213, 205, 30, 125, 201, 157, 30, 125, 201, 156, + 30, 125, 198, 163, 30, 125, 198, 161, 30, 125, 198, 160, 30, 125, 198, + 166, 30, 125, 198, 167, 30, 125, 198, 159, 30, 125, 206, 219, 30, 125, + 206, 234, 30, 125, 201, 163, 30, 125, 206, 231, 30, 125, 206, 221, 30, + 125, 206, 223, 30, 125, 206, 210, 30, 125, 206, 211, 30, 125, 222, 70, + 30, 125, 216, 74, 30, 125, 216, 68, 30, 125, 201, 167, 30, 125, 216, 71, + 30, 125, 216, 77, 30, 125, 209, 152, 30, 125, 209, 161, 30, 125, 209, + 165, 30, 125, 201, 165, 30, 125, 209, 155, 30, 125, 209, 169, 30, 125, + 209, 170, 30, 125, 202, 153, 30, 125, 202, 156, 30, 125, 201, 161, 30, + 125, 201, 159, 30, 125, 202, 151, 30, 125, 202, 159, 30, 125, 202, 160, + 30, 125, 202, 145, 30, 125, 202, 158, 30, 125, 210, 149, 30, 125, 210, + 150, 30, 125, 192, 53, 30, 125, 192, 56, 30, 125, 243, 24, 30, 125, 243, + 23, 30, 125, 201, 172, 30, 125, 209, 208, 30, 125, 209, 207, 12, 15, 225, + 192, 12, 15, 225, 191, 12, 15, 225, 190, 12, 15, 225, 189, 12, 15, 225, + 188, 12, 15, 225, 187, 12, 15, 225, 186, 12, 15, 225, 185, 12, 15, 225, + 184, 12, 15, 225, 183, 12, 15, 225, 182, 12, 15, 225, 181, 12, 15, 225, + 180, 12, 15, 225, 179, 12, 15, 225, 178, 12, 15, 225, 177, 12, 15, 225, + 176, 12, 15, 225, 175, 12, 15, 225, 174, 12, 15, 225, 173, 12, 15, 225, + 172, 12, 15, 225, 171, 12, 15, 225, 170, 12, 15, 225, 169, 12, 15, 225, + 168, 12, 15, 225, 167, 12, 15, 225, 166, 12, 15, 225, 165, 12, 15, 225, + 164, 12, 15, 225, 163, 12, 15, 225, 162, 12, 15, 225, 161, 12, 15, 225, + 160, 12, 15, 225, 159, 12, 15, 225, 158, 12, 15, 225, 157, 12, 15, 225, + 156, 12, 15, 225, 155, 12, 15, 225, 154, 12, 15, 225, 153, 12, 15, 225, + 152, 12, 15, 225, 151, 12, 15, 225, 150, 12, 15, 225, 149, 12, 15, 225, + 148, 12, 15, 225, 147, 12, 15, 225, 146, 12, 15, 225, 145, 12, 15, 225, + 144, 12, 15, 225, 143, 12, 15, 225, 142, 12, 15, 225, 141, 12, 15, 225, + 140, 12, 15, 225, 139, 12, 15, 225, 138, 12, 15, 225, 137, 12, 15, 225, + 136, 12, 15, 225, 135, 12, 15, 225, 134, 12, 15, 225, 133, 12, 15, 225, + 132, 12, 15, 225, 131, 12, 15, 225, 130, 12, 15, 225, 129, 12, 15, 225, + 128, 12, 15, 225, 127, 12, 15, 225, 126, 12, 15, 225, 125, 12, 15, 225, + 124, 12, 15, 225, 123, 12, 15, 225, 122, 12, 15, 225, 121, 12, 15, 225, + 120, 12, 15, 225, 119, 12, 15, 225, 118, 12, 15, 225, 117, 12, 15, 225, + 116, 12, 15, 225, 115, 12, 15, 225, 114, 12, 15, 225, 113, 12, 15, 225, + 112, 12, 15, 225, 111, 12, 15, 225, 110, 12, 15, 225, 109, 12, 15, 225, + 108, 12, 15, 225, 107, 12, 15, 225, 106, 12, 15, 225, 105, 12, 15, 225, + 104, 12, 15, 225, 103, 12, 15, 225, 102, 12, 15, 225, 101, 12, 15, 225, + 100, 12, 15, 225, 99, 12, 15, 225, 98, 12, 15, 225, 97, 12, 15, 225, 96, + 12, 15, 225, 95, 12, 15, 225, 94, 12, 15, 225, 93, 12, 15, 225, 92, 12, + 15, 225, 91, 12, 15, 225, 90, 12, 15, 225, 89, 12, 15, 225, 88, 12, 15, + 225, 87, 12, 15, 225, 86, 12, 15, 225, 85, 12, 15, 225, 84, 12, 15, 225, + 83, 12, 15, 225, 82, 12, 15, 225, 81, 12, 15, 225, 80, 12, 15, 225, 79, + 12, 15, 225, 78, 12, 15, 225, 77, 12, 15, 225, 76, 12, 15, 225, 75, 12, + 15, 225, 74, 12, 15, 225, 73, 12, 15, 225, 72, 12, 15, 225, 71, 12, 15, + 225, 70, 12, 15, 225, 69, 12, 15, 225, 68, 12, 15, 225, 67, 12, 15, 225, + 66, 12, 15, 225, 65, 12, 15, 225, 64, 12, 15, 225, 63, 12, 15, 225, 62, + 12, 15, 225, 61, 12, 15, 225, 60, 12, 15, 225, 59, 12, 15, 225, 58, 12, + 15, 225, 57, 12, 15, 225, 56, 12, 15, 225, 55, 12, 15, 225, 54, 12, 15, + 225, 53, 12, 15, 225, 52, 12, 15, 225, 51, 12, 15, 225, 50, 12, 15, 225, + 49, 12, 15, 225, 48, 12, 15, 225, 47, 12, 15, 225, 46, 12, 15, 225, 45, + 12, 15, 225, 44, 12, 15, 225, 43, 12, 15, 225, 42, 12, 15, 225, 41, 12, + 15, 225, 40, 12, 15, 225, 39, 12, 15, 225, 38, 12, 15, 225, 37, 12, 15, + 225, 36, 12, 15, 225, 35, 12, 15, 225, 34, 12, 15, 225, 33, 12, 15, 225, + 32, 12, 15, 225, 31, 12, 15, 225, 30, 12, 15, 225, 29, 12, 15, 225, 28, + 12, 15, 225, 27, 12, 15, 225, 26, 12, 15, 225, 25, 12, 15, 225, 24, 12, + 15, 225, 23, 12, 15, 225, 22, 12, 15, 225, 21, 12, 15, 225, 20, 12, 15, + 225, 19, 12, 15, 225, 18, 12, 15, 225, 17, 12, 15, 225, 16, 12, 15, 225, + 15, 12, 15, 225, 14, 12, 15, 225, 13, 12, 15, 225, 12, 12, 15, 225, 11, + 12, 15, 225, 10, 12, 15, 225, 9, 12, 15, 225, 8, 12, 15, 225, 7, 12, 15, + 225, 6, 12, 15, 225, 5, 12, 15, 225, 4, 12, 15, 225, 3, 12, 15, 225, 2, + 12, 15, 225, 1, 12, 15, 225, 0, 12, 15, 224, 255, 12, 15, 224, 254, 12, + 15, 224, 253, 12, 15, 224, 252, 12, 15, 224, 251, 12, 15, 224, 250, 12, + 15, 224, 249, 12, 15, 224, 248, 12, 15, 224, 247, 12, 15, 224, 246, 12, + 15, 224, 245, 12, 15, 224, 244, 12, 15, 224, 243, 12, 15, 224, 242, 12, + 15, 224, 241, 12, 15, 224, 240, 12, 15, 224, 239, 12, 15, 224, 238, 12, + 15, 224, 237, 12, 15, 224, 236, 12, 15, 224, 235, 12, 15, 224, 234, 12, + 15, 224, 233, 12, 15, 224, 232, 12, 15, 224, 231, 12, 15, 224, 230, 12, + 15, 224, 229, 12, 15, 224, 228, 12, 15, 224, 227, 12, 15, 224, 226, 12, + 15, 224, 225, 12, 15, 224, 224, 12, 15, 224, 223, 12, 15, 224, 222, 12, + 15, 224, 221, 12, 15, 224, 220, 12, 15, 224, 219, 12, 15, 224, 218, 12, + 15, 224, 217, 12, 15, 224, 216, 12, 15, 224, 215, 12, 15, 224, 214, 12, + 15, 224, 213, 12, 15, 224, 212, 12, 15, 224, 211, 12, 15, 224, 210, 12, + 15, 224, 209, 12, 15, 224, 208, 12, 15, 224, 207, 12, 15, 224, 206, 12, + 15, 224, 205, 12, 15, 224, 204, 12, 15, 224, 203, 12, 15, 224, 202, 12, + 15, 224, 201, 12, 15, 224, 200, 12, 15, 224, 199, 12, 15, 224, 198, 12, + 15, 224, 197, 12, 15, 224, 196, 12, 15, 224, 195, 12, 15, 224, 194, 12, + 15, 224, 193, 12, 15, 224, 192, 12, 15, 224, 191, 12, 15, 224, 190, 12, + 15, 224, 189, 12, 15, 224, 188, 12, 15, 224, 187, 12, 15, 224, 186, 12, + 15, 224, 185, 12, 15, 224, 184, 12, 15, 224, 183, 12, 15, 224, 182, 12, + 15, 224, 181, 12, 15, 224, 180, 12, 15, 224, 179, 12, 15, 224, 178, 12, + 15, 224, 177, 12, 15, 224, 176, 12, 15, 224, 175, 12, 15, 224, 174, 12, + 15, 224, 173, 12, 15, 224, 172, 12, 15, 224, 171, 12, 15, 224, 170, 12, + 15, 224, 169, 12, 15, 224, 168, 12, 15, 224, 167, 12, 15, 224, 166, 12, + 15, 224, 165, 12, 15, 224, 164, 12, 15, 224, 163, 12, 15, 224, 162, 12, + 15, 224, 161, 12, 15, 224, 160, 12, 15, 224, 159, 12, 15, 224, 158, 12, + 15, 224, 157, 12, 15, 224, 156, 12, 15, 224, 155, 12, 15, 224, 154, 12, + 15, 224, 153, 12, 15, 224, 152, 12, 15, 224, 151, 12, 15, 224, 150, 12, + 15, 224, 149, 12, 15, 224, 148, 12, 15, 224, 147, 12, 15, 224, 146, 12, + 15, 224, 145, 12, 15, 224, 144, 12, 15, 224, 143, 12, 15, 224, 142, 12, + 15, 224, 141, 12, 15, 224, 140, 12, 15, 224, 139, 12, 15, 224, 138, 12, + 15, 224, 137, 12, 15, 224, 136, 12, 15, 224, 135, 12, 15, 224, 134, 12, + 15, 224, 133, 12, 15, 224, 132, 12, 15, 224, 131, 12, 15, 224, 130, 12, + 15, 224, 129, 12, 15, 224, 128, 12, 15, 224, 127, 12, 15, 224, 126, 12, + 15, 224, 125, 12, 15, 224, 124, 12, 15, 224, 123, 12, 15, 224, 122, 12, + 15, 224, 121, 12, 15, 224, 120, 12, 15, 224, 119, 12, 15, 224, 118, 12, + 15, 224, 117, 12, 15, 224, 116, 12, 15, 224, 115, 12, 15, 224, 114, 12, + 15, 224, 113, 12, 15, 224, 112, 12, 15, 224, 111, 12, 15, 224, 110, 12, + 15, 224, 109, 12, 15, 224, 108, 12, 15, 224, 107, 12, 15, 224, 106, 12, + 15, 224, 105, 12, 15, 224, 104, 12, 15, 224, 103, 12, 15, 224, 102, 12, + 15, 224, 101, 12, 15, 224, 100, 12, 15, 224, 99, 12, 15, 224, 98, 12, 15, + 224, 97, 12, 15, 224, 96, 12, 15, 224, 95, 12, 15, 224, 94, 12, 15, 224, + 93, 12, 15, 224, 92, 12, 15, 224, 91, 12, 15, 224, 90, 12, 15, 224, 89, + 12, 15, 224, 88, 12, 15, 224, 87, 12, 15, 224, 86, 12, 15, 224, 85, 12, + 15, 224, 84, 12, 15, 224, 83, 12, 15, 224, 82, 12, 15, 224, 81, 12, 15, + 224, 80, 12, 15, 224, 79, 12, 15, 224, 78, 12, 15, 224, 77, 12, 15, 224, + 76, 12, 15, 224, 75, 12, 15, 224, 74, 12, 15, 224, 73, 12, 15, 224, 72, + 12, 15, 224, 71, 12, 15, 224, 70, 12, 15, 224, 69, 12, 15, 224, 68, 12, + 15, 224, 67, 12, 15, 224, 66, 12, 15, 224, 65, 12, 15, 224, 64, 12, 15, + 224, 63, 12, 15, 224, 62, 12, 15, 224, 61, 12, 15, 224, 60, 12, 15, 224, + 59, 12, 15, 224, 58, 12, 15, 224, 57, 12, 15, 224, 56, 12, 15, 224, 55, + 12, 15, 224, 54, 12, 15, 224, 53, 12, 15, 224, 52, 12, 15, 224, 51, 12, + 15, 224, 50, 12, 15, 224, 49, 12, 15, 224, 48, 12, 15, 224, 47, 12, 15, + 224, 46, 12, 15, 224, 45, 12, 15, 224, 44, 12, 15, 224, 43, 12, 15, 224, + 42, 12, 15, 224, 41, 12, 15, 224, 40, 12, 15, 224, 39, 12, 15, 224, 38, + 12, 15, 224, 37, 12, 15, 224, 36, 12, 15, 224, 35, 12, 15, 224, 34, 12, + 15, 224, 33, 12, 15, 224, 32, 12, 15, 224, 31, 12, 15, 224, 30, 12, 15, + 224, 29, 12, 15, 224, 28, 12, 15, 224, 27, 12, 15, 224, 26, 12, 15, 224, + 25, 12, 15, 224, 24, 12, 15, 224, 23, 12, 15, 224, 22, 12, 15, 224, 21, + 12, 15, 224, 20, 12, 15, 224, 19, 12, 15, 224, 18, 12, 15, 224, 17, 12, + 15, 224, 16, 12, 15, 224, 15, 12, 15, 224, 14, 12, 15, 224, 13, 12, 15, + 224, 12, 12, 15, 224, 11, 12, 15, 224, 10, 12, 15, 224, 9, 12, 15, 224, + 8, 12, 15, 224, 7, 12, 15, 224, 6, 12, 15, 224, 5, 12, 15, 224, 4, 12, + 15, 224, 3, 12, 15, 224, 2, 12, 15, 224, 1, 12, 15, 224, 0, 12, 15, 223, + 255, 12, 15, 223, 254, 12, 15, 223, 253, 12, 15, 223, 252, 12, 15, 223, + 251, 12, 15, 223, 250, 12, 15, 223, 249, 12, 15, 223, 248, 12, 15, 223, + 247, 12, 15, 223, 246, 12, 15, 223, 245, 12, 15, 223, 244, 12, 15, 223, + 243, 12, 15, 223, 242, 12, 15, 223, 241, 12, 15, 223, 240, 12, 15, 223, + 239, 12, 15, 223, 238, 12, 15, 223, 237, 12, 15, 223, 236, 12, 15, 223, + 235, 12, 15, 223, 234, 12, 15, 223, 233, 8, 2, 34, 233, 29, 8, 2, 34, + 233, 25, 8, 2, 34, 232, 222, 8, 2, 34, 233, 28, 8, 2, 34, 233, 27, 8, 2, + 34, 180, 206, 10, 200, 43, 8, 2, 34, 201, 119, 250, 251, 2, 34, 216, 189, + 212, 255, 250, 251, 2, 34, 216, 189, 234, 197, 250, 251, 2, 34, 216, 189, + 223, 133, 250, 251, 2, 34, 195, 75, 212, 255, 250, 251, 2, 34, 216, 189, + 192, 212, 136, 1, 191, 251, 4, 229, 121, 136, 209, 64, 222, 183, 195, + 166, 136, 34, 192, 31, 191, 251, 191, 251, 210, 90, 136, 1, 251, 154, + 250, 128, 136, 1, 193, 78, 251, 194, 136, 1, 193, 78, 237, 255, 136, 1, + 193, 78, 229, 247, 136, 1, 193, 78, 222, 108, 136, 1, 193, 78, 220, 29, + 136, 1, 193, 78, 53, 216, 195, 136, 1, 193, 78, 207, 39, 136, 1, 193, 78, + 199, 162, 136, 1, 251, 154, 108, 56, 136, 1, 203, 71, 4, 203, 71, 236, + 142, 136, 1, 203, 71, 4, 202, 176, 236, 142, 136, 1, 203, 71, 4, 238, 19, + 23, 203, 71, 236, 142, 136, 1, 203, 71, 4, 238, 19, 23, 202, 176, 236, + 142, 136, 1, 131, 4, 210, 90, 136, 1, 131, 4, 208, 86, 136, 1, 131, 4, + 217, 72, 136, 1, 248, 217, 4, 238, 18, 136, 1, 231, 41, 4, 238, 18, 136, + 1, 238, 0, 4, 238, 18, 136, 1, 229, 248, 4, 217, 72, 136, 1, 195, 159, 4, + 238, 18, 136, 1, 191, 92, 4, 238, 18, 136, 1, 199, 74, 4, 238, 18, 136, + 1, 191, 251, 4, 238, 18, 136, 1, 53, 222, 109, 4, 238, 18, 136, 1, 222, + 109, 4, 238, 18, 136, 1, 220, 30, 4, 238, 18, 136, 1, 216, 196, 4, 238, + 18, 136, 1, 212, 133, 4, 238, 18, 136, 1, 205, 150, 4, 238, 18, 136, 1, + 53, 210, 66, 4, 238, 18, 136, 1, 210, 66, 4, 238, 18, 136, 1, 197, 164, + 4, 238, 18, 136, 1, 208, 45, 4, 238, 18, 136, 1, 207, 40, 4, 238, 18, + 136, 1, 203, 71, 4, 238, 18, 136, 1, 199, 163, 4, 238, 18, 136, 1, 195, + 159, 4, 229, 9, 136, 1, 248, 217, 4, 207, 163, 136, 1, 222, 109, 4, 207, + 163, 136, 1, 210, 66, 4, 207, 163, 136, 34, 131, 220, 29, 9, 1, 131, 193, + 151, 76, 20, 9, 1, 131, 193, 151, 53, 20, 9, 1, 249, 2, 76, 20, 9, 1, + 249, 2, 53, 20, 9, 1, 249, 2, 89, 20, 9, 1, 249, 2, 216, 219, 20, 9, 1, + 210, 44, 76, 20, 9, 1, 210, 44, 53, 20, 9, 1, 210, 44, 89, 20, 9, 1, 210, + 44, 216, 219, 20, 9, 1, 248, 246, 76, 20, 9, 1, 248, 246, 53, 20, 9, 1, + 248, 246, 89, 20, 9, 1, 248, 246, 216, 219, 20, 9, 1, 197, 123, 76, 20, + 9, 1, 197, 123, 53, 20, 9, 1, 197, 123, 89, 20, 9, 1, 197, 123, 216, 219, + 20, 9, 1, 199, 113, 76, 20, 9, 1, 199, 113, 53, 20, 9, 1, 199, 113, 89, + 20, 9, 1, 199, 113, 216, 219, 20, 9, 1, 197, 125, 76, 20, 9, 1, 197, 125, + 53, 20, 9, 1, 197, 125, 89, 20, 9, 1, 197, 125, 216, 219, 20, 9, 1, 195, + 147, 76, 20, 9, 1, 195, 147, 53, 20, 9, 1, 195, 147, 89, 20, 9, 1, 195, + 147, 216, 219, 20, 9, 1, 210, 42, 76, 20, 9, 1, 210, 42, 53, 20, 9, 1, + 210, 42, 89, 20, 9, 1, 210, 42, 216, 219, 20, 9, 1, 235, 44, 76, 20, 9, + 1, 235, 44, 53, 20, 9, 1, 235, 44, 89, 20, 9, 1, 235, 44, 216, 219, 20, + 9, 1, 212, 90, 76, 20, 9, 1, 212, 90, 53, 20, 9, 1, 212, 90, 89, 20, 9, + 1, 212, 90, 216, 219, 20, 9, 1, 199, 150, 76, 20, 9, 1, 199, 150, 53, 20, + 9, 1, 199, 150, 89, 20, 9, 1, 199, 150, 216, 219, 20, 9, 1, 199, 148, 76, + 20, 9, 1, 199, 148, 53, 20, 9, 1, 199, 148, 89, 20, 9, 1, 199, 148, 216, + 219, 20, 9, 1, 237, 191, 76, 20, 9, 1, 237, 191, 53, 20, 9, 1, 238, 13, + 76, 20, 9, 1, 238, 13, 53, 20, 9, 1, 235, 81, 76, 20, 9, 1, 235, 81, 53, + 20, 9, 1, 237, 189, 76, 20, 9, 1, 237, 189, 53, 20, 9, 1, 223, 6, 76, 20, + 9, 1, 223, 6, 53, 20, 9, 1, 206, 103, 76, 20, 9, 1, 206, 103, 53, 20, 9, + 1, 222, 7, 76, 20, 9, 1, 222, 7, 53, 20, 9, 1, 222, 7, 89, 20, 9, 1, 222, + 7, 216, 219, 20, 9, 1, 231, 230, 76, 20, 9, 1, 231, 230, 53, 20, 9, 1, + 231, 230, 89, 20, 9, 1, 231, 230, 216, 219, 20, 9, 1, 230, 169, 76, 20, + 9, 1, 230, 169, 53, 20, 9, 1, 230, 169, 89, 20, 9, 1, 230, 169, 216, 219, + 20, 9, 1, 213, 250, 76, 20, 9, 1, 213, 250, 53, 20, 9, 1, 213, 250, 89, + 20, 9, 1, 213, 250, 216, 219, 20, 9, 1, 213, 27, 231, 60, 76, 20, 9, 1, + 213, 27, 231, 60, 53, 20, 9, 1, 206, 167, 76, 20, 9, 1, 206, 167, 53, 20, + 9, 1, 206, 167, 89, 20, 9, 1, 206, 167, 216, 219, 20, 9, 1, 229, 213, 4, + 99, 93, 76, 20, 9, 1, 229, 213, 4, 99, 93, 53, 20, 9, 1, 229, 213, 231, + 3, 76, 20, 9, 1, 229, 213, 231, 3, 53, 20, 9, 1, 229, 213, 231, 3, 89, + 20, 9, 1, 229, 213, 231, 3, 216, 219, 20, 9, 1, 229, 213, 236, 173, 76, + 20, 9, 1, 229, 213, 236, 173, 53, 20, 9, 1, 229, 213, 236, 173, 89, 20, + 9, 1, 229, 213, 236, 173, 216, 219, 20, 9, 1, 99, 249, 83, 76, 20, 9, 1, + 99, 249, 83, 53, 20, 9, 1, 99, 249, 83, 4, 230, 60, 93, 76, 20, 9, 1, 99, + 249, 83, 4, 230, 60, 93, 53, 20, 9, 16, 75, 58, 9, 16, 75, 60, 9, 16, + 105, 185, 58, 9, 16, 105, 185, 60, 9, 16, 115, 185, 58, 9, 16, 115, 185, + 60, 9, 16, 115, 185, 209, 60, 235, 121, 58, 9, 16, 115, 185, 209, 60, + 235, 121, 60, 9, 16, 232, 130, 185, 58, 9, 16, 232, 130, 185, 60, 9, 16, + 55, 81, 249, 90, 60, 9, 16, 105, 185, 195, 85, 58, 9, 16, 105, 185, 195, + 85, 60, 9, 16, 206, 189, 9, 16, 2, 199, 220, 58, 9, 16, 2, 199, 220, 60, + 9, 16, 193, 151, 58, 9, 1, 214, 73, 76, 20, 9, 1, 214, 73, 53, 20, 9, 1, + 214, 73, 89, 20, 9, 1, 214, 73, 216, 219, 20, 9, 1, 126, 76, 20, 9, 1, + 126, 53, 20, 9, 1, 211, 154, 76, 20, 9, 1, 211, 154, 53, 20, 9, 1, 191, + 226, 76, 20, 9, 1, 191, 226, 53, 20, 9, 1, 126, 4, 230, 60, 93, 76, 20, + 9, 1, 195, 154, 76, 20, 9, 1, 195, 154, 53, 20, 9, 1, 221, 134, 211, 154, + 76, 20, 9, 1, 221, 134, 211, 154, 53, 20, 9, 1, 221, 134, 191, 226, 76, + 20, 9, 1, 221, 134, 191, 226, 53, 20, 9, 1, 235, 17, 76, 20, 9, 1, 235, + 17, 53, 20, 9, 1, 235, 17, 89, 20, 9, 1, 235, 17, 216, 219, 20, 9, 1, + 196, 137, 222, 28, 221, 134, 131, 217, 102, 89, 20, 9, 1, 196, 137, 222, + 28, 221, 134, 131, 217, 102, 216, 219, 20, 9, 34, 99, 4, 230, 60, 93, 4, + 131, 76, 20, 9, 34, 99, 4, 230, 60, 93, 4, 131, 53, 20, 9, 34, 99, 4, + 230, 60, 93, 4, 252, 28, 76, 20, 9, 34, 99, 4, 230, 60, 93, 4, 252, 28, + 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, 193, 134, 76, 20, 9, 34, 99, 4, + 230, 60, 93, 4, 193, 134, 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, 126, 76, + 20, 9, 34, 99, 4, 230, 60, 93, 4, 126, 53, 20, 9, 34, 99, 4, 230, 60, 93, + 4, 211, 154, 76, 20, 9, 34, 99, 4, 230, 60, 93, 4, 211, 154, 53, 20, 9, + 34, 99, 4, 230, 60, 93, 4, 191, 226, 76, 20, 9, 34, 99, 4, 230, 60, 93, + 4, 191, 226, 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, 235, 17, 76, 20, 9, + 34, 99, 4, 230, 60, 93, 4, 235, 17, 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, + 235, 17, 89, 20, 9, 34, 196, 137, 221, 134, 99, 4, 230, 60, 93, 4, 131, + 217, 102, 76, 20, 9, 34, 196, 137, 221, 134, 99, 4, 230, 60, 93, 4, 131, + 217, 102, 53, 20, 9, 34, 196, 137, 221, 134, 99, 4, 230, 60, 93, 4, 131, + 217, 102, 89, 20, 9, 1, 233, 76, 99, 76, 20, 9, 1, 233, 76, 99, 53, 20, + 9, 1, 233, 76, 99, 89, 20, 9, 1, 233, 76, 99, 216, 219, 20, 9, 34, 99, 4, + 230, 60, 93, 4, 223, 9, 76, 20, 9, 34, 99, 4, 230, 60, 93, 4, 183, 76, + 20, 9, 34, 99, 4, 230, 60, 93, 4, 92, 76, 20, 9, 34, 99, 4, 230, 60, 93, + 4, 131, 217, 102, 76, 20, 9, 34, 99, 4, 230, 60, 93, 4, 99, 76, 20, 9, + 34, 248, 248, 4, 223, 9, 76, 20, 9, 34, 248, 248, 4, 183, 76, 20, 9, 34, + 248, 248, 4, 221, 213, 76, 20, 9, 34, 248, 248, 4, 92, 76, 20, 9, 34, + 248, 248, 4, 131, 217, 102, 76, 20, 9, 34, 248, 248, 4, 99, 76, 20, 9, + 34, 199, 115, 4, 223, 9, 76, 20, 9, 34, 199, 115, 4, 183, 76, 20, 9, 34, + 199, 115, 4, 221, 213, 76, 20, 9, 34, 199, 115, 4, 92, 76, 20, 9, 34, + 199, 115, 4, 131, 217, 102, 76, 20, 9, 34, 199, 115, 4, 99, 76, 20, 9, + 34, 199, 30, 4, 223, 9, 76, 20, 9, 34, 199, 30, 4, 92, 76, 20, 9, 34, + 199, 30, 4, 131, 217, 102, 76, 20, 9, 34, 199, 30, 4, 99, 76, 20, 9, 34, + 223, 9, 4, 183, 76, 20, 9, 34, 223, 9, 4, 92, 76, 20, 9, 34, 183, 4, 223, + 9, 76, 20, 9, 34, 183, 4, 92, 76, 20, 9, 34, 221, 213, 4, 223, 9, 76, 20, + 9, 34, 221, 213, 4, 183, 76, 20, 9, 34, 221, 213, 4, 92, 76, 20, 9, 34, + 205, 48, 4, 223, 9, 76, 20, 9, 34, 205, 48, 4, 183, 76, 20, 9, 34, 205, + 48, 4, 221, 213, 76, 20, 9, 34, 205, 48, 4, 92, 76, 20, 9, 34, 205, 194, + 4, 183, 76, 20, 9, 34, 205, 194, 4, 92, 76, 20, 9, 34, 238, 29, 4, 223, + 9, 76, 20, 9, 34, 238, 29, 4, 183, 76, 20, 9, 34, 238, 29, 4, 221, 213, + 76, 20, 9, 34, 238, 29, 4, 92, 76, 20, 9, 34, 199, 220, 4, 183, 76, 20, + 9, 34, 199, 220, 4, 92, 76, 20, 9, 34, 191, 117, 4, 92, 76, 20, 9, 34, + 251, 233, 4, 223, 9, 76, 20, 9, 34, 251, 233, 4, 92, 76, 20, 9, 34, 231, + 89, 4, 223, 9, 76, 20, 9, 34, 231, 89, 4, 92, 76, 20, 9, 34, 233, 49, 4, + 223, 9, 76, 20, 9, 34, 233, 49, 4, 183, 76, 20, 9, 34, 233, 49, 4, 221, + 213, 76, 20, 9, 34, 233, 49, 4, 92, 76, 20, 9, 34, 233, 49, 4, 131, 217, + 102, 76, 20, 9, 34, 233, 49, 4, 99, 76, 20, 9, 34, 208, 92, 4, 183, 76, + 20, 9, 34, 208, 92, 4, 92, 76, 20, 9, 34, 208, 92, 4, 131, 217, 102, 76, + 20, 9, 34, 208, 92, 4, 99, 76, 20, 9, 34, 222, 109, 4, 131, 76, 20, 9, + 34, 222, 109, 4, 223, 9, 76, 20, 9, 34, 222, 109, 4, 183, 76, 20, 9, 34, + 222, 109, 4, 221, 213, 76, 20, 9, 34, 222, 109, 4, 220, 38, 76, 20, 9, + 34, 222, 109, 4, 92, 76, 20, 9, 34, 222, 109, 4, 131, 217, 102, 76, 20, + 9, 34, 222, 109, 4, 99, 76, 20, 9, 34, 220, 38, 4, 223, 9, 76, 20, 9, 34, + 220, 38, 4, 183, 76, 20, 9, 34, 220, 38, 4, 221, 213, 76, 20, 9, 34, 220, + 38, 4, 92, 76, 20, 9, 34, 220, 38, 4, 131, 217, 102, 76, 20, 9, 34, 220, + 38, 4, 99, 76, 20, 9, 34, 92, 4, 223, 9, 76, 20, 9, 34, 92, 4, 183, 76, + 20, 9, 34, 92, 4, 221, 213, 76, 20, 9, 34, 92, 4, 92, 76, 20, 9, 34, 92, + 4, 131, 217, 102, 76, 20, 9, 34, 92, 4, 99, 76, 20, 9, 34, 213, 27, 4, + 223, 9, 76, 20, 9, 34, 213, 27, 4, 183, 76, 20, 9, 34, 213, 27, 4, 221, + 213, 76, 20, 9, 34, 213, 27, 4, 92, 76, 20, 9, 34, 213, 27, 4, 131, 217, + 102, 76, 20, 9, 34, 213, 27, 4, 99, 76, 20, 9, 34, 229, 213, 4, 223, 9, + 76, 20, 9, 34, 229, 213, 4, 92, 76, 20, 9, 34, 229, 213, 4, 131, 217, + 102, 76, 20, 9, 34, 229, 213, 4, 99, 76, 20, 9, 34, 99, 4, 223, 9, 76, + 20, 9, 34, 99, 4, 183, 76, 20, 9, 34, 99, 4, 221, 213, 76, 20, 9, 34, 99, + 4, 92, 76, 20, 9, 34, 99, 4, 131, 217, 102, 76, 20, 9, 34, 99, 4, 99, 76, + 20, 9, 34, 199, 42, 4, 200, 182, 131, 76, 20, 9, 34, 207, 73, 4, 200, + 182, 131, 76, 20, 9, 34, 131, 217, 102, 4, 200, 182, 131, 76, 20, 9, 34, + 203, 157, 4, 237, 246, 76, 20, 9, 34, 203, 157, 4, 222, 53, 76, 20, 9, + 34, 203, 157, 4, 233, 73, 76, 20, 9, 34, 203, 157, 4, 237, 248, 76, 20, + 9, 34, 203, 157, 4, 222, 55, 76, 20, 9, 34, 203, 157, 4, 200, 182, 131, + 76, 20, 9, 34, 99, 4, 230, 60, 93, 4, 207, 73, 53, 20, 9, 34, 99, 4, 230, + 60, 93, 4, 191, 114, 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, 92, 53, 20, 9, + 34, 99, 4, 230, 60, 93, 4, 213, 27, 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, + 131, 217, 102, 53, 20, 9, 34, 99, 4, 230, 60, 93, 4, 99, 53, 20, 9, 34, + 248, 248, 4, 207, 73, 53, 20, 9, 34, 248, 248, 4, 191, 114, 53, 20, 9, + 34, 248, 248, 4, 92, 53, 20, 9, 34, 248, 248, 4, 213, 27, 53, 20, 9, 34, + 248, 248, 4, 131, 217, 102, 53, 20, 9, 34, 248, 248, 4, 99, 53, 20, 9, + 34, 199, 115, 4, 207, 73, 53, 20, 9, 34, 199, 115, 4, 191, 114, 53, 20, + 9, 34, 199, 115, 4, 92, 53, 20, 9, 34, 199, 115, 4, 213, 27, 53, 20, 9, + 34, 199, 115, 4, 131, 217, 102, 53, 20, 9, 34, 199, 115, 4, 99, 53, 20, + 9, 34, 199, 30, 4, 207, 73, 53, 20, 9, 34, 199, 30, 4, 191, 114, 53, 20, + 9, 34, 199, 30, 4, 92, 53, 20, 9, 34, 199, 30, 4, 213, 27, 53, 20, 9, 34, + 199, 30, 4, 131, 217, 102, 53, 20, 9, 34, 199, 30, 4, 99, 53, 20, 9, 34, + 233, 49, 4, 131, 217, 102, 53, 20, 9, 34, 233, 49, 4, 99, 53, 20, 9, 34, + 208, 92, 4, 131, 217, 102, 53, 20, 9, 34, 208, 92, 4, 99, 53, 20, 9, 34, + 222, 109, 4, 131, 53, 20, 9, 34, 222, 109, 4, 220, 38, 53, 20, 9, 34, + 222, 109, 4, 92, 53, 20, 9, 34, 222, 109, 4, 131, 217, 102, 53, 20, 9, + 34, 222, 109, 4, 99, 53, 20, 9, 34, 220, 38, 4, 92, 53, 20, 9, 34, 220, + 38, 4, 131, 217, 102, 53, 20, 9, 34, 220, 38, 4, 99, 53, 20, 9, 34, 92, + 4, 131, 53, 20, 9, 34, 92, 4, 92, 53, 20, 9, 34, 213, 27, 4, 207, 73, 53, + 20, 9, 34, 213, 27, 4, 191, 114, 53, 20, 9, 34, 213, 27, 4, 92, 53, 20, + 9, 34, 213, 27, 4, 213, 27, 53, 20, 9, 34, 213, 27, 4, 131, 217, 102, 53, + 20, 9, 34, 213, 27, 4, 99, 53, 20, 9, 34, 131, 217, 102, 4, 200, 182, + 131, 53, 20, 9, 34, 99, 4, 207, 73, 53, 20, 9, 34, 99, 4, 191, 114, 53, + 20, 9, 34, 99, 4, 92, 53, 20, 9, 34, 99, 4, 213, 27, 53, 20, 9, 34, 99, + 4, 131, 217, 102, 53, 20, 9, 34, 99, 4, 99, 53, 20, 9, 34, 99, 4, 230, + 60, 93, 4, 223, 9, 89, 20, 9, 34, 99, 4, 230, 60, 93, 4, 183, 89, 20, 9, + 34, 99, 4, 230, 60, 93, 4, 221, 213, 89, 20, 9, 34, 99, 4, 230, 60, 93, + 4, 92, 89, 20, 9, 34, 99, 4, 230, 60, 93, 4, 229, 213, 89, 20, 9, 34, + 248, 248, 4, 223, 9, 89, 20, 9, 34, 248, 248, 4, 183, 89, 20, 9, 34, 248, + 248, 4, 221, 213, 89, 20, 9, 34, 248, 248, 4, 92, 89, 20, 9, 34, 248, + 248, 4, 229, 213, 89, 20, 9, 34, 199, 115, 4, 223, 9, 89, 20, 9, 34, 199, + 115, 4, 183, 89, 20, 9, 34, 199, 115, 4, 221, 213, 89, 20, 9, 34, 199, + 115, 4, 92, 89, 20, 9, 34, 199, 115, 4, 229, 213, 89, 20, 9, 34, 199, 30, + 4, 92, 89, 20, 9, 34, 223, 9, 4, 183, 89, 20, 9, 34, 223, 9, 4, 92, 89, + 20, 9, 34, 183, 4, 223, 9, 89, 20, 9, 34, 183, 4, 92, 89, 20, 9, 34, 221, + 213, 4, 223, 9, 89, 20, 9, 34, 221, 213, 4, 92, 89, 20, 9, 34, 205, 48, + 4, 223, 9, 89, 20, 9, 34, 205, 48, 4, 183, 89, 20, 9, 34, 205, 48, 4, + 221, 213, 89, 20, 9, 34, 205, 48, 4, 92, 89, 20, 9, 34, 205, 194, 4, 183, + 89, 20, 9, 34, 205, 194, 4, 221, 213, 89, 20, 9, 34, 205, 194, 4, 92, 89, + 20, 9, 34, 238, 29, 4, 223, 9, 89, 20, 9, 34, 238, 29, 4, 183, 89, 20, 9, + 34, 238, 29, 4, 221, 213, 89, 20, 9, 34, 238, 29, 4, 92, 89, 20, 9, 34, + 199, 220, 4, 183, 89, 20, 9, 34, 191, 117, 4, 92, 89, 20, 9, 34, 251, + 233, 4, 223, 9, 89, 20, 9, 34, 251, 233, 4, 92, 89, 20, 9, 34, 231, 89, + 4, 223, 9, 89, 20, 9, 34, 231, 89, 4, 92, 89, 20, 9, 34, 233, 49, 4, 223, + 9, 89, 20, 9, 34, 233, 49, 4, 183, 89, 20, 9, 34, 233, 49, 4, 221, 213, + 89, 20, 9, 34, 233, 49, 4, 92, 89, 20, 9, 34, 208, 92, 4, 183, 89, 20, 9, + 34, 208, 92, 4, 92, 89, 20, 9, 34, 222, 109, 4, 223, 9, 89, 20, 9, 34, + 222, 109, 4, 183, 89, 20, 9, 34, 222, 109, 4, 221, 213, 89, 20, 9, 34, + 222, 109, 4, 220, 38, 89, 20, 9, 34, 222, 109, 4, 92, 89, 20, 9, 34, 220, + 38, 4, 223, 9, 89, 20, 9, 34, 220, 38, 4, 183, 89, 20, 9, 34, 220, 38, 4, + 221, 213, 89, 20, 9, 34, 220, 38, 4, 92, 89, 20, 9, 34, 220, 38, 4, 229, + 213, 89, 20, 9, 34, 92, 4, 223, 9, 89, 20, 9, 34, 92, 4, 183, 89, 20, 9, + 34, 92, 4, 221, 213, 89, 20, 9, 34, 92, 4, 92, 89, 20, 9, 34, 213, 27, 4, + 223, 9, 89, 20, 9, 34, 213, 27, 4, 183, 89, 20, 9, 34, 213, 27, 4, 221, + 213, 89, 20, 9, 34, 213, 27, 4, 92, 89, 20, 9, 34, 213, 27, 4, 229, 213, + 89, 20, 9, 34, 229, 213, 4, 223, 9, 89, 20, 9, 34, 229, 213, 4, 92, 89, + 20, 9, 34, 229, 213, 4, 200, 182, 131, 89, 20, 9, 34, 99, 4, 223, 9, 89, + 20, 9, 34, 99, 4, 183, 89, 20, 9, 34, 99, 4, 221, 213, 89, 20, 9, 34, 99, + 4, 92, 89, 20, 9, 34, 99, 4, 229, 213, 89, 20, 9, 34, 99, 4, 230, 60, 93, + 4, 92, 216, 219, 20, 9, 34, 99, 4, 230, 60, 93, 4, 229, 213, 216, 219, + 20, 9, 34, 248, 248, 4, 92, 216, 219, 20, 9, 34, 248, 248, 4, 229, 213, + 216, 219, 20, 9, 34, 199, 115, 4, 92, 216, 219, 20, 9, 34, 199, 115, 4, + 229, 213, 216, 219, 20, 9, 34, 199, 30, 4, 92, 216, 219, 20, 9, 34, 199, + 30, 4, 229, 213, 216, 219, 20, 9, 34, 205, 48, 4, 92, 216, 219, 20, 9, + 34, 205, 48, 4, 229, 213, 216, 219, 20, 9, 34, 203, 111, 4, 92, 216, 219, + 20, 9, 34, 203, 111, 4, 229, 213, 216, 219, 20, 9, 34, 222, 109, 4, 220, + 38, 216, 219, 20, 9, 34, 222, 109, 4, 92, 216, 219, 20, 9, 34, 220, 38, + 4, 92, 216, 219, 20, 9, 34, 213, 27, 4, 92, 216, 219, 20, 9, 34, 213, 27, + 4, 229, 213, 216, 219, 20, 9, 34, 99, 4, 92, 216, 219, 20, 9, 34, 99, 4, + 229, 213, 216, 219, 20, 9, 34, 203, 157, 4, 233, 73, 216, 219, 20, 9, 34, + 203, 157, 4, 237, 248, 216, 219, 20, 9, 34, 203, 157, 4, 222, 55, 216, + 219, 20, 9, 34, 199, 220, 4, 131, 217, 102, 76, 20, 9, 34, 199, 220, 4, + 99, 76, 20, 9, 34, 251, 233, 4, 131, 217, 102, 76, 20, 9, 34, 251, 233, + 4, 99, 76, 20, 9, 34, 231, 89, 4, 131, 217, 102, 76, 20, 9, 34, 231, 89, + 4, 99, 76, 20, 9, 34, 205, 48, 4, 131, 217, 102, 76, 20, 9, 34, 205, 48, + 4, 99, 76, 20, 9, 34, 203, 111, 4, 131, 217, 102, 76, 20, 9, 34, 203, + 111, 4, 99, 76, 20, 9, 34, 183, 4, 131, 217, 102, 76, 20, 9, 34, 183, 4, + 99, 76, 20, 9, 34, 223, 9, 4, 131, 217, 102, 76, 20, 9, 34, 223, 9, 4, + 99, 76, 20, 9, 34, 221, 213, 4, 131, 217, 102, 76, 20, 9, 34, 221, 213, + 4, 99, 76, 20, 9, 34, 205, 194, 4, 131, 217, 102, 76, 20, 9, 34, 205, + 194, 4, 99, 76, 20, 9, 34, 238, 29, 4, 131, 217, 102, 76, 20, 9, 34, 238, + 29, 4, 99, 76, 20, 9, 34, 203, 111, 4, 223, 9, 76, 20, 9, 34, 203, 111, + 4, 183, 76, 20, 9, 34, 203, 111, 4, 221, 213, 76, 20, 9, 34, 203, 111, 4, + 92, 76, 20, 9, 34, 203, 111, 4, 207, 73, 76, 20, 9, 34, 205, 48, 4, 207, + 73, 76, 20, 9, 34, 205, 194, 4, 207, 73, 76, 20, 9, 34, 238, 29, 4, 207, + 73, 76, 20, 9, 34, 199, 220, 4, 131, 217, 102, 53, 20, 9, 34, 199, 220, + 4, 99, 53, 20, 9, 34, 251, 233, 4, 131, 217, 102, 53, 20, 9, 34, 251, + 233, 4, 99, 53, 20, 9, 34, 231, 89, 4, 131, 217, 102, 53, 20, 9, 34, 231, + 89, 4, 99, 53, 20, 9, 34, 205, 48, 4, 131, 217, 102, 53, 20, 9, 34, 205, + 48, 4, 99, 53, 20, 9, 34, 203, 111, 4, 131, 217, 102, 53, 20, 9, 34, 203, + 111, 4, 99, 53, 20, 9, 34, 183, 4, 131, 217, 102, 53, 20, 9, 34, 183, 4, + 99, 53, 20, 9, 34, 223, 9, 4, 131, 217, 102, 53, 20, 9, 34, 223, 9, 4, + 99, 53, 20, 9, 34, 221, 213, 4, 131, 217, 102, 53, 20, 9, 34, 221, 213, + 4, 99, 53, 20, 9, 34, 205, 194, 4, 131, 217, 102, 53, 20, 9, 34, 205, + 194, 4, 99, 53, 20, 9, 34, 238, 29, 4, 131, 217, 102, 53, 20, 9, 34, 238, + 29, 4, 99, 53, 20, 9, 34, 203, 111, 4, 223, 9, 53, 20, 9, 34, 203, 111, + 4, 183, 53, 20, 9, 34, 203, 111, 4, 221, 213, 53, 20, 9, 34, 203, 111, 4, + 92, 53, 20, 9, 34, 203, 111, 4, 207, 73, 53, 20, 9, 34, 205, 48, 4, 207, + 73, 53, 20, 9, 34, 205, 194, 4, 207, 73, 53, 20, 9, 34, 238, 29, 4, 207, + 73, 53, 20, 9, 34, 203, 111, 4, 223, 9, 89, 20, 9, 34, 203, 111, 4, 183, + 89, 20, 9, 34, 203, 111, 4, 221, 213, 89, 20, 9, 34, 203, 111, 4, 92, 89, + 20, 9, 34, 205, 48, 4, 229, 213, 89, 20, 9, 34, 203, 111, 4, 229, 213, + 89, 20, 9, 34, 199, 220, 4, 92, 89, 20, 9, 34, 205, 48, 4, 223, 9, 216, + 219, 20, 9, 34, 205, 48, 4, 183, 216, 219, 20, 9, 34, 205, 48, 4, 221, + 213, 216, 219, 20, 9, 34, 203, 111, 4, 223, 9, 216, 219, 20, 9, 34, 203, + 111, 4, 183, 216, 219, 20, 9, 34, 203, 111, 4, 221, 213, 216, 219, 20, 9, + 34, 199, 220, 4, 92, 216, 219, 20, 9, 34, 191, 117, 4, 92, 216, 219, 20, + 9, 34, 131, 4, 233, 71, 53, 20, 9, 34, 131, 4, 233, 71, 76, 20, 211, 42, + 45, 210, 115, 211, 42, 50, 210, 115, 9, 34, 207, 161, 251, 175, 9, 34, + 207, 169, 251, 174, 251, 109, 9, 34, 207, 169, 251, 174, 251, 108, 9, 34, + 207, 169, 251, 174, 251, 106, 9, 34, 207, 169, 251, 174, 251, 105, 9, 34, + 207, 169, 251, 174, 251, 104, 9, 34, 205, 163, 251, 199, 193, 184, 9, 34, + 251, 199, 250, 219, 9, 34, 251, 198, 250, 219, 9, 34, 251, 197, 250, 219, + 9, 34, 251, 199, 250, 218, 193, 154, 9, 34, 208, 19, 202, 141, 9, 34, + 205, 161, 251, 199, 193, 180, 193, 183, 9, 34, 251, 202, 250, 219, 9, 34, + 199, 235, 193, 182, 9, 34, 207, 160, 251, 175, 9, 34, 199, 115, 4, 223, + 9, 4, 92, 89, 20, 9, 34, 199, 115, 4, 183, 4, 223, 9, 53, 20, 9, 34, 199, + 115, 4, 183, 4, 223, 9, 89, 20, 9, 34, 199, 115, 4, 183, 4, 92, 89, 20, + 9, 34, 199, 115, 4, 221, 213, 4, 92, 89, 20, 9, 34, 199, 115, 4, 92, 4, + 223, 9, 89, 20, 9, 34, 199, 115, 4, 92, 4, 183, 89, 20, 9, 34, 199, 115, + 4, 92, 4, 221, 213, 89, 20, 9, 34, 223, 9, 4, 92, 4, 183, 53, 20, 9, 34, + 223, 9, 4, 92, 4, 183, 89, 20, 9, 34, 183, 4, 92, 4, 99, 53, 20, 9, 34, + 183, 4, 92, 4, 131, 217, 102, 53, 20, 9, 34, 205, 48, 4, 183, 4, 223, 9, + 89, 20, 9, 34, 205, 48, 4, 223, 9, 4, 183, 89, 20, 9, 34, 205, 48, 4, + 223, 9, 4, 131, 217, 102, 53, 20, 9, 34, 205, 48, 4, 92, 4, 183, 53, 20, + 9, 34, 205, 48, 4, 92, 4, 183, 89, 20, 9, 34, 205, 48, 4, 92, 4, 223, 9, + 89, 20, 9, 34, 205, 48, 4, 92, 4, 92, 53, 20, 9, 34, 205, 48, 4, 92, 4, + 92, 89, 20, 9, 34, 205, 194, 4, 183, 4, 183, 53, 20, 9, 34, 205, 194, 4, + 183, 4, 183, 89, 20, 9, 34, 205, 194, 4, 92, 4, 92, 53, 20, 9, 34, 203, + 111, 4, 183, 4, 92, 53, 20, 9, 34, 203, 111, 4, 183, 4, 92, 89, 20, 9, + 34, 203, 111, 4, 223, 9, 4, 99, 53, 20, 9, 34, 203, 111, 4, 92, 4, 221, + 213, 53, 20, 9, 34, 203, 111, 4, 92, 4, 221, 213, 89, 20, 9, 34, 203, + 111, 4, 92, 4, 92, 53, 20, 9, 34, 203, 111, 4, 92, 4, 92, 89, 20, 9, 34, + 238, 29, 4, 183, 4, 131, 217, 102, 53, 20, 9, 34, 238, 29, 4, 221, 213, + 4, 92, 53, 20, 9, 34, 238, 29, 4, 221, 213, 4, 92, 89, 20, 9, 34, 199, + 220, 4, 92, 4, 183, 53, 20, 9, 34, 199, 220, 4, 92, 4, 183, 89, 20, 9, + 34, 199, 220, 4, 92, 4, 92, 89, 20, 9, 34, 199, 220, 4, 92, 4, 99, 53, + 20, 9, 34, 251, 233, 4, 223, 9, 4, 92, 53, 20, 9, 34, 251, 233, 4, 92, 4, + 92, 53, 20, 9, 34, 251, 233, 4, 92, 4, 92, 89, 20, 9, 34, 251, 233, 4, + 92, 4, 131, 217, 102, 53, 20, 9, 34, 231, 89, 4, 92, 4, 92, 53, 20, 9, + 34, 231, 89, 4, 92, 4, 99, 53, 20, 9, 34, 231, 89, 4, 92, 4, 131, 217, + 102, 53, 20, 9, 34, 233, 49, 4, 221, 213, 4, 92, 53, 20, 9, 34, 233, 49, + 4, 221, 213, 4, 92, 89, 20, 9, 34, 208, 92, 4, 92, 4, 183, 53, 20, 9, 34, + 208, 92, 4, 92, 4, 92, 53, 20, 9, 34, 220, 38, 4, 183, 4, 92, 53, 20, 9, + 34, 220, 38, 4, 183, 4, 99, 53, 20, 9, 34, 220, 38, 4, 183, 4, 131, 217, + 102, 53, 20, 9, 34, 220, 38, 4, 223, 9, 4, 223, 9, 89, 20, 9, 34, 220, + 38, 4, 223, 9, 4, 223, 9, 53, 20, 9, 34, 220, 38, 4, 221, 213, 4, 92, 53, + 20, 9, 34, 220, 38, 4, 221, 213, 4, 92, 89, 20, 9, 34, 220, 38, 4, 92, 4, + 183, 53, 20, 9, 34, 220, 38, 4, 92, 4, 183, 89, 20, 9, 34, 92, 4, 183, 4, + 223, 9, 89, 20, 9, 34, 92, 4, 183, 4, 92, 89, 20, 9, 34, 92, 4, 183, 4, + 99, 53, 20, 9, 34, 92, 4, 223, 9, 4, 183, 89, 20, 9, 34, 92, 4, 223, 9, + 4, 92, 89, 20, 9, 34, 92, 4, 221, 213, 4, 223, 9, 89, 20, 9, 34, 92, 4, + 221, 213, 4, 92, 89, 20, 9, 34, 92, 4, 223, 9, 4, 221, 213, 89, 20, 9, + 34, 229, 213, 4, 92, 4, 223, 9, 89, 20, 9, 34, 229, 213, 4, 92, 4, 92, + 89, 20, 9, 34, 213, 27, 4, 183, 4, 92, 89, 20, 9, 34, 213, 27, 4, 183, 4, + 131, 217, 102, 53, 20, 9, 34, 213, 27, 4, 223, 9, 4, 92, 53, 20, 9, 34, + 213, 27, 4, 223, 9, 4, 92, 89, 20, 9, 34, 213, 27, 4, 223, 9, 4, 131, + 217, 102, 53, 20, 9, 34, 213, 27, 4, 92, 4, 99, 53, 20, 9, 34, 213, 27, + 4, 92, 4, 131, 217, 102, 53, 20, 9, 34, 99, 4, 92, 4, 92, 53, 20, 9, 34, + 99, 4, 92, 4, 92, 89, 20, 9, 34, 248, 248, 4, 221, 213, 4, 99, 53, 20, 9, + 34, 199, 115, 4, 223, 9, 4, 99, 53, 20, 9, 34, 199, 115, 4, 223, 9, 4, + 131, 217, 102, 53, 20, 9, 34, 199, 115, 4, 221, 213, 4, 99, 53, 20, 9, + 34, 199, 115, 4, 221, 213, 4, 131, 217, 102, 53, 20, 9, 34, 199, 115, 4, + 92, 4, 99, 53, 20, 9, 34, 199, 115, 4, 92, 4, 131, 217, 102, 53, 20, 9, + 34, 223, 9, 4, 92, 4, 99, 53, 20, 9, 34, 223, 9, 4, 183, 4, 131, 217, + 102, 53, 20, 9, 34, 223, 9, 4, 92, 4, 131, 217, 102, 53, 20, 9, 34, 205, + 48, 4, 221, 213, 4, 131, 217, 102, 53, 20, 9, 34, 205, 194, 4, 183, 4, + 99, 53, 20, 9, 34, 203, 111, 4, 183, 4, 99, 53, 20, 9, 34, 238, 29, 4, + 183, 4, 99, 53, 20, 9, 34, 220, 38, 4, 223, 9, 4, 99, 53, 20, 9, 34, 220, + 38, 4, 92, 4, 99, 53, 20, 9, 34, 99, 4, 183, 4, 99, 53, 20, 9, 34, 99, 4, + 223, 9, 4, 99, 53, 20, 9, 34, 99, 4, 92, 4, 99, 53, 20, 9, 34, 92, 4, 92, + 4, 99, 53, 20, 9, 34, 208, 92, 4, 92, 4, 99, 53, 20, 9, 34, 213, 27, 4, + 183, 4, 99, 53, 20, 9, 34, 208, 92, 4, 92, 4, 183, 89, 20, 9, 34, 220, + 38, 4, 183, 4, 92, 89, 20, 9, 34, 251, 233, 4, 92, 4, 99, 53, 20, 9, 34, + 222, 109, 4, 92, 4, 99, 53, 20, 9, 34, 213, 27, 4, 223, 9, 4, 183, 89, + 20, 9, 34, 92, 4, 221, 213, 4, 99, 53, 20, 9, 34, 220, 38, 4, 223, 9, 4, + 92, 89, 20, 9, 34, 222, 109, 4, 92, 4, 92, 53, 20, 9, 34, 220, 38, 4, + 223, 9, 4, 92, 53, 20, 9, 34, 213, 27, 4, 223, 9, 4, 183, 53, 20, 9, 34, + 223, 9, 4, 183, 4, 99, 53, 20, 9, 34, 183, 4, 223, 9, 4, 99, 53, 20, 9, + 34, 92, 4, 223, 9, 4, 99, 53, 20, 9, 34, 233, 49, 4, 92, 4, 99, 53, 20, + 9, 34, 248, 248, 4, 183, 4, 99, 53, 20, 9, 34, 222, 109, 4, 92, 4, 92, + 89, 20, 9, 34, 251, 233, 4, 223, 9, 4, 92, 89, 20, 9, 34, 205, 194, 4, + 92, 4, 92, 89, 20, 9, 34, 205, 48, 4, 221, 213, 4, 99, 53, 20, 9, 34, + 213, 27, 4, 223, 9, 4, 99, 53, 20, 9, 34, 205, 167, 251, 196, 9, 34, 205, + 164, 196, 40, 250, 222, 221, 35, 201, 65, 3, 76, 20, 9, 34, 208, 88, 196, + 40, 250, 222, 221, 35, 201, 65, 3, 76, 20, 9, 34, 251, 173, 76, 20, 9, + 34, 251, 215, 76, 20, 9, 34, 215, 237, 76, 20, 9, 34, 205, 165, 76, 20, + 9, 34, 207, 134, 76, 20, 9, 34, 251, 201, 76, 20, 9, 34, 193, 153, 76, + 20, 9, 34, 205, 164, 76, 20, 9, 34, 205, 162, 251, 201, 193, 152, 9, 34, + 223, 24, 206, 250, 56, 9, 34, 248, 153, 251, 33, 251, 34, 9, 34, 200, + 243, 193, 191, 199, 244, 9, 34, 250, 123, 193, 191, 223, 25, 67, 205, 34, + 67, 204, 179, 67, 204, 111, 67, 204, 100, 67, 204, 89, 67, 204, 78, 67, + 204, 67, 67, 204, 56, 67, 204, 45, 67, 205, 33, 67, 205, 22, 67, 205, 11, + 67, 205, 0, 67, 204, 245, 67, 204, 234, 67, 204, 223, 208, 223, 232, 148, + 40, 81, 242, 76, 208, 223, 232, 148, 40, 81, 148, 242, 76, 208, 223, 232, + 148, 40, 81, 148, 232, 82, 201, 64, 208, 223, 232, 148, 40, 81, 242, 85, + 208, 223, 232, 148, 40, 81, 204, 26, 208, 223, 232, 148, 40, 81, 233, + 218, 77, 208, 223, 232, 148, 40, 81, 208, 15, 77, 208, 223, 232, 148, 40, + 81, 45, 63, 219, 189, 248, 55, 208, 223, 232, 148, 40, 81, 50, 63, 219, + 189, 248, 51, 208, 223, 232, 148, 40, 81, 228, 243, 234, 122, 33, 34, 45, + 230, 72, 33, 34, 50, 230, 72, 33, 55, 198, 153, 45, 230, 72, 33, 55, 198, + 153, 50, 230, 72, 33, 217, 149, 45, 230, 72, 33, 217, 149, 50, 230, 72, + 33, 239, 46, 217, 148, 33, 34, 45, 132, 60, 33, 34, 50, 132, 60, 33, 198, + 153, 45, 132, 60, 33, 198, 153, 50, 132, 60, 33, 217, 149, 45, 132, 60, + 33, 217, 149, 50, 132, 60, 33, 239, 46, 217, 149, 60, 33, 38, 198, 123, + 45, 230, 72, 33, 38, 198, 123, 50, 230, 72, 208, 223, 232, 148, 40, 81, + 105, 75, 219, 238, 208, 223, 232, 148, 40, 81, 234, 117, 237, 217, 208, + 223, 232, 148, 40, 81, 234, 106, 237, 217, 208, 223, 232, 148, 40, 81, + 130, 219, 114, 208, 223, 232, 148, 40, 81, 193, 135, 130, 219, 114, 208, + 223, 232, 148, 40, 81, 45, 210, 115, 208, 223, 232, 148, 40, 81, 50, 210, + 115, 208, 223, 232, 148, 40, 81, 45, 238, 173, 248, 55, 208, 223, 232, + 148, 40, 81, 50, 238, 173, 248, 55, 208, 223, 232, 148, 40, 81, 45, 198, + 42, 203, 104, 248, 55, 208, 223, 232, 148, 40, 81, 50, 198, 42, 203, 104, + 248, 55, 208, 223, 232, 148, 40, 81, 45, 62, 219, 189, 248, 55, 208, 223, + 232, 148, 40, 81, 50, 62, 219, 189, 248, 55, 208, 223, 232, 148, 40, 81, + 45, 55, 251, 118, 248, 55, 208, 223, 232, 148, 40, 81, 50, 55, 251, 118, + 248, 55, 208, 223, 232, 148, 40, 81, 45, 251, 118, 248, 55, 208, 223, + 232, 148, 40, 81, 50, 251, 118, 248, 55, 208, 223, 232, 148, 40, 81, 45, + 239, 4, 248, 55, 208, 223, 232, 148, 40, 81, 50, 239, 4, 248, 55, 208, + 223, 232, 148, 40, 81, 45, 63, 239, 4, 248, 55, 208, 223, 232, 148, 40, + 81, 50, 63, 239, 4, 248, 55, 204, 1, 236, 142, 63, 204, 1, 236, 142, 208, + 223, 232, 148, 40, 81, 45, 51, 248, 55, 208, 223, 232, 148, 40, 81, 50, + 51, 248, 55, 237, 216, 211, 0, 247, 20, 211, 0, 193, 135, 211, 0, 55, + 193, 135, 211, 0, 237, 216, 130, 219, 114, 247, 20, 130, 219, 114, 193, + 135, 130, 219, 114, 2, 242, 76, 2, 148, 242, 76, 2, 232, 82, 201, 64, 2, + 204, 26, 2, 242, 85, 2, 208, 15, 77, 2, 233, 218, 77, 2, 234, 117, 237, + 217, 2, 45, 210, 115, 2, 50, 210, 115, 2, 45, 238, 173, 248, 55, 2, 50, + 238, 173, 248, 55, 2, 45, 198, 42, 203, 104, 248, 55, 2, 50, 198, 42, + 203, 104, 248, 55, 2, 31, 56, 2, 251, 139, 2, 250, 195, 2, 108, 56, 2, + 228, 89, 2, 219, 182, 56, 2, 230, 206, 56, 2, 234, 45, 56, 2, 207, 20, + 202, 24, 2, 236, 157, 56, 2, 210, 15, 56, 2, 242, 74, 250, 184, 9, 233, + 71, 76, 20, 9, 199, 169, 4, 233, 71, 58, 9, 237, 246, 76, 20, 9, 199, + 216, 232, 119, 9, 222, 53, 76, 20, 9, 233, 73, 76, 20, 9, 233, 73, 216, + 219, 20, 9, 237, 248, 76, 20, 9, 237, 248, 216, 219, 20, 9, 222, 55, 76, + 20, 9, 222, 55, 216, 219, 20, 9, 203, 157, 76, 20, 9, 203, 157, 216, 219, + 20, 9, 200, 207, 76, 20, 9, 200, 207, 216, 219, 20, 9, 1, 230, 60, 76, + 20, 9, 1, 131, 4, 217, 144, 93, 76, 20, 9, 1, 131, 4, 217, 144, 93, 53, + 20, 9, 1, 131, 4, 230, 60, 93, 76, 20, 9, 1, 131, 4, 230, 60, 93, 53, 20, + 9, 1, 193, 134, 4, 230, 60, 93, 76, 20, 9, 1, 193, 134, 4, 230, 60, 93, + 53, 20, 9, 1, 131, 4, 230, 60, 248, 235, 76, 20, 9, 1, 131, 4, 230, 60, + 248, 235, 53, 20, 9, 1, 99, 4, 230, 60, 93, 76, 20, 9, 1, 99, 4, 230, 60, + 93, 53, 20, 9, 1, 99, 4, 230, 60, 93, 89, 20, 9, 1, 99, 4, 230, 60, 93, + 216, 219, 20, 9, 1, 131, 76, 20, 9, 1, 131, 53, 20, 9, 1, 248, 248, 76, + 20, 9, 1, 248, 248, 53, 20, 9, 1, 248, 248, 89, 20, 9, 1, 248, 248, 216, + 219, 20, 9, 1, 199, 115, 217, 65, 76, 20, 9, 1, 199, 115, 217, 65, 53, + 20, 9, 1, 199, 115, 76, 20, 9, 1, 199, 115, 53, 20, 9, 1, 199, 115, 89, + 20, 9, 1, 199, 115, 216, 219, 20, 9, 1, 199, 30, 76, 20, 9, 1, 199, 30, + 53, 20, 9, 1, 199, 30, 89, 20, 9, 1, 199, 30, 216, 219, 20, 9, 1, 223, 9, + 76, 20, 9, 1, 223, 9, 53, 20, 9, 1, 223, 9, 89, 20, 9, 1, 223, 9, 216, + 219, 20, 9, 1, 183, 76, 20, 9, 1, 183, 53, 20, 9, 1, 183, 89, 20, 9, 1, + 183, 216, 219, 20, 9, 1, 221, 213, 76, 20, 9, 1, 221, 213, 53, 20, 9, 1, + 221, 213, 89, 20, 9, 1, 221, 213, 216, 219, 20, 9, 1, 238, 6, 76, 20, 9, + 1, 238, 6, 53, 20, 9, 1, 199, 42, 76, 20, 9, 1, 199, 42, 53, 20, 9, 1, + 207, 73, 76, 20, 9, 1, 207, 73, 53, 20, 9, 1, 191, 114, 76, 20, 9, 1, + 191, 114, 53, 20, 9, 1, 205, 48, 76, 20, 9, 1, 205, 48, 53, 20, 9, 1, + 205, 48, 89, 20, 9, 1, 205, 48, 216, 219, 20, 9, 1, 203, 111, 76, 20, 9, + 1, 203, 111, 53, 20, 9, 1, 203, 111, 89, 20, 9, 1, 203, 111, 216, 219, + 20, 9, 1, 205, 194, 76, 20, 9, 1, 205, 194, 53, 20, 9, 1, 205, 194, 89, + 20, 9, 1, 205, 194, 216, 219, 20, 9, 1, 238, 29, 76, 20, 9, 1, 238, 29, + 53, 20, 9, 1, 238, 29, 89, 20, 9, 1, 238, 29, 216, 219, 20, 9, 1, 199, + 220, 76, 20, 9, 1, 199, 220, 53, 20, 9, 1, 199, 220, 89, 20, 9, 1, 199, + 220, 216, 219, 20, 9, 1, 191, 117, 76, 20, 9, 1, 191, 117, 53, 20, 9, 1, + 191, 117, 89, 20, 9, 1, 191, 117, 216, 219, 20, 9, 1, 251, 233, 76, 20, + 9, 1, 251, 233, 53, 20, 9, 1, 251, 233, 89, 20, 9, 1, 251, 233, 216, 219, + 20, 9, 1, 231, 89, 76, 20, 9, 1, 231, 89, 53, 20, 9, 1, 231, 89, 89, 20, + 9, 1, 231, 89, 216, 219, 20, 9, 1, 233, 49, 76, 20, 9, 1, 233, 49, 53, + 20, 9, 1, 233, 49, 89, 20, 9, 1, 233, 49, 216, 219, 20, 9, 1, 208, 92, + 76, 20, 9, 1, 208, 92, 53, 20, 9, 1, 208, 92, 89, 20, 9, 1, 208, 92, 216, + 219, 20, 9, 1, 222, 109, 76, 20, 9, 1, 222, 109, 53, 20, 9, 1, 222, 109, + 89, 20, 9, 1, 222, 109, 216, 219, 20, 9, 1, 220, 38, 76, 20, 9, 1, 220, + 38, 53, 20, 9, 1, 220, 38, 89, 20, 9, 1, 220, 38, 216, 219, 20, 9, 1, 92, + 76, 20, 9, 1, 92, 53, 20, 9, 1, 92, 89, 20, 9, 1, 92, 216, 219, 20, 9, 1, + 213, 27, 76, 20, 9, 1, 213, 27, 53, 20, 9, 1, 213, 27, 89, 20, 9, 1, 213, + 27, 216, 219, 20, 9, 1, 229, 213, 76, 20, 9, 1, 229, 213, 53, 20, 9, 1, + 229, 213, 89, 20, 9, 1, 229, 213, 216, 219, 20, 9, 1, 193, 134, 76, 20, + 9, 1, 193, 134, 53, 20, 9, 1, 131, 217, 102, 76, 20, 9, 1, 131, 217, 102, + 53, 20, 9, 1, 99, 76, 20, 9, 1, 99, 53, 20, 9, 1, 99, 89, 20, 9, 1, 99, + 216, 219, 20, 9, 34, 220, 38, 4, 131, 4, 217, 144, 93, 76, 20, 9, 34, + 220, 38, 4, 131, 4, 217, 144, 93, 53, 20, 9, 34, 220, 38, 4, 131, 4, 230, + 60, 93, 76, 20, 9, 34, 220, 38, 4, 131, 4, 230, 60, 93, 53, 20, 9, 34, + 220, 38, 4, 131, 4, 230, 60, 248, 235, 76, 20, 9, 34, 220, 38, 4, 131, 4, + 230, 60, 248, 235, 53, 20, 9, 34, 220, 38, 4, 131, 76, 20, 9, 34, 220, + 38, 4, 131, 53, 20, 191, 78, 193, 75, 213, 39, 201, 248, 232, 80, 233, + 218, 77, 232, 80, 207, 254, 77, 232, 80, 31, 56, 232, 80, 236, 157, 56, + 232, 80, 210, 15, 56, 232, 80, 251, 139, 232, 80, 251, 51, 232, 80, 45, + 210, 115, 232, 80, 50, 210, 115, 232, 80, 250, 195, 232, 80, 108, 56, + 232, 80, 242, 76, 232, 80, 228, 89, 232, 80, 232, 82, 201, 64, 232, 80, + 202, 24, 232, 80, 17, 191, 77, 232, 80, 17, 107, 232, 80, 17, 109, 232, + 80, 17, 138, 232, 80, 17, 134, 232, 80, 17, 150, 232, 80, 17, 169, 232, + 80, 17, 175, 232, 80, 17, 171, 232, 80, 17, 178, 232, 80, 242, 85, 232, + 80, 204, 26, 232, 80, 219, 182, 56, 232, 80, 234, 45, 56, 232, 80, 230, + 206, 56, 232, 80, 208, 15, 77, 232, 80, 242, 74, 250, 184, 232, 80, 8, 6, + 1, 65, 232, 80, 8, 6, 1, 250, 122, 232, 80, 8, 6, 1, 247, 195, 232, 80, + 8, 6, 1, 238, 129, 232, 80, 8, 6, 1, 71, 232, 80, 8, 6, 1, 233, 177, 232, + 80, 8, 6, 1, 232, 53, 232, 80, 8, 6, 1, 230, 118, 232, 80, 8, 6, 1, 68, + 232, 80, 8, 6, 1, 223, 37, 232, 80, 8, 6, 1, 222, 154, 232, 80, 8, 6, 1, + 172, 232, 80, 8, 6, 1, 218, 170, 232, 80, 8, 6, 1, 215, 63, 232, 80, 8, + 6, 1, 74, 232, 80, 8, 6, 1, 210, 238, 232, 80, 8, 6, 1, 208, 106, 232, + 80, 8, 6, 1, 146, 232, 80, 8, 6, 1, 206, 9, 232, 80, 8, 6, 1, 200, 43, + 232, 80, 8, 6, 1, 66, 232, 80, 8, 6, 1, 196, 12, 232, 80, 8, 6, 1, 193, + 224, 232, 80, 8, 6, 1, 192, 235, 232, 80, 8, 6, 1, 192, 159, 232, 80, 8, + 6, 1, 191, 166, 232, 80, 45, 51, 248, 55, 232, 80, 207, 20, 202, 24, 232, + 80, 50, 51, 248, 55, 232, 80, 243, 4, 252, 62, 232, 80, 130, 219, 114, + 232, 80, 230, 213, 252, 62, 232, 80, 8, 2, 1, 65, 232, 80, 8, 2, 1, 250, + 122, 232, 80, 8, 2, 1, 247, 195, 232, 80, 8, 2, 1, 238, 129, 232, 80, 8, + 2, 1, 71, 232, 80, 8, 2, 1, 233, 177, 232, 80, 8, 2, 1, 232, 53, 232, 80, + 8, 2, 1, 230, 118, 232, 80, 8, 2, 1, 68, 232, 80, 8, 2, 1, 223, 37, 232, + 80, 8, 2, 1, 222, 154, 232, 80, 8, 2, 1, 172, 232, 80, 8, 2, 1, 218, 170, + 232, 80, 8, 2, 1, 215, 63, 232, 80, 8, 2, 1, 74, 232, 80, 8, 2, 1, 210, + 238, 232, 80, 8, 2, 1, 208, 106, 232, 80, 8, 2, 1, 146, 232, 80, 8, 2, 1, + 206, 9, 232, 80, 8, 2, 1, 200, 43, 232, 80, 8, 2, 1, 66, 232, 80, 8, 2, + 1, 196, 12, 232, 80, 8, 2, 1, 193, 224, 232, 80, 8, 2, 1, 192, 235, 232, + 80, 8, 2, 1, 192, 159, 232, 80, 8, 2, 1, 191, 166, 232, 80, 45, 238, 173, + 248, 55, 232, 80, 81, 219, 114, 232, 80, 50, 238, 173, 248, 55, 232, 80, + 198, 152, 232, 80, 45, 63, 210, 115, 232, 80, 50, 63, 210, 115, 151, 148, + 232, 82, 201, 64, 151, 45, 239, 4, 248, 55, 151, 50, 239, 4, 248, 55, + 151, 148, 242, 76, 151, 72, 82, 236, 142, 151, 72, 1, 193, 48, 151, 72, + 1, 2, 65, 151, 72, 1, 2, 68, 151, 72, 1, 2, 66, 151, 72, 1, 2, 71, 151, + 72, 1, 2, 74, 151, 72, 1, 2, 170, 151, 72, 1, 2, 191, 225, 151, 72, 1, 2, + 192, 12, 151, 72, 1, 2, 197, 94, 151, 222, 50, 208, 193, 202, 6, 77, 151, + 72, 1, 65, 151, 72, 1, 68, 151, 72, 1, 66, 151, 72, 1, 71, 151, 72, 1, + 74, 151, 72, 1, 155, 151, 72, 1, 221, 168, 151, 72, 1, 220, 234, 151, 72, + 1, 222, 24, 151, 72, 1, 221, 69, 151, 72, 1, 188, 151, 72, 1, 202, 223, + 151, 72, 1, 201, 5, 151, 72, 1, 205, 69, 151, 72, 1, 202, 47, 151, 72, 1, + 190, 190, 151, 72, 1, 198, 193, 151, 72, 1, 197, 94, 151, 72, 1, 199, + 145, 151, 72, 1, 159, 151, 72, 1, 181, 151, 72, 1, 213, 221, 151, 72, 1, + 212, 180, 151, 72, 1, 214, 123, 151, 72, 1, 213, 45, 151, 72, 1, 140, + 151, 72, 1, 229, 160, 151, 72, 1, 228, 161, 151, 72, 1, 229, 247, 151, + 72, 1, 229, 25, 151, 72, 1, 174, 151, 72, 1, 216, 102, 151, 72, 1, 215, + 157, 151, 72, 1, 216, 234, 151, 72, 1, 216, 14, 151, 72, 1, 170, 151, 72, + 1, 191, 225, 151, 72, 1, 192, 12, 151, 72, 1, 165, 151, 72, 1, 207, 2, + 151, 72, 1, 206, 69, 151, 72, 1, 207, 115, 151, 72, 1, 206, 163, 151, 72, + 1, 193, 190, 151, 72, 1, 215, 63, 151, 72, 195, 20, 202, 6, 77, 151, 72, + 204, 31, 202, 6, 77, 151, 30, 233, 5, 151, 30, 1, 221, 115, 151, 30, 1, + 201, 168, 151, 30, 1, 221, 108, 151, 30, 1, 213, 206, 151, 30, 1, 213, + 204, 151, 30, 1, 213, 203, 151, 30, 1, 198, 168, 151, 30, 1, 201, 157, + 151, 30, 1, 206, 240, 151, 30, 1, 206, 235, 151, 30, 1, 206, 232, 151, + 30, 1, 206, 225, 151, 30, 1, 206, 220, 151, 30, 1, 206, 215, 151, 30, 1, + 206, 226, 151, 30, 1, 206, 238, 151, 30, 1, 216, 79, 151, 30, 1, 209, + 171, 151, 30, 1, 201, 165, 151, 30, 1, 209, 160, 151, 30, 1, 202, 161, + 151, 30, 1, 201, 162, 151, 30, 1, 223, 224, 151, 30, 1, 243, 26, 151, 30, + 1, 201, 172, 151, 30, 1, 243, 93, 151, 30, 1, 221, 190, 151, 30, 1, 199, + 7, 151, 30, 1, 209, 211, 151, 30, 1, 229, 144, 151, 30, 1, 65, 151, 30, + 1, 252, 27, 151, 30, 1, 170, 151, 30, 1, 192, 129, 151, 30, 1, 234, 67, + 151, 30, 1, 71, 151, 30, 1, 192, 67, 151, 30, 1, 192, 80, 151, 30, 1, 74, + 151, 30, 1, 193, 190, 151, 30, 1, 193, 176, 151, 30, 1, 211, 153, 151, + 30, 1, 192, 12, 151, 30, 1, 66, 151, 30, 1, 193, 107, 151, 30, 1, 193, + 125, 151, 30, 1, 193, 86, 151, 30, 1, 191, 225, 151, 30, 1, 233, 244, + 151, 30, 1, 192, 33, 151, 30, 1, 68, 232, 80, 247, 26, 56, 232, 80, 209, + 10, 56, 232, 80, 213, 14, 56, 232, 80, 217, 148, 232, 80, 248, 24, 164, + 232, 80, 192, 71, 56, 232, 80, 193, 31, 56, 151, 232, 143, 156, 195, 135, + 151, 118, 57, 151, 196, 66, 57, 151, 96, 57, 151, 235, 121, 57, 151, 62, + 201, 191, 151, 63, 243, 12, 223, 108, 251, 98, 251, 129, 223, 108, 251, + 98, 204, 11, 223, 108, 251, 98, 199, 80, 211, 177, 207, 44, 246, 241, + 207, 44, 246, 241, 32, 78, 5, 250, 106, 65, 32, 78, 5, 250, 75, 71, 32, + 78, 5, 250, 84, 68, 32, 78, 5, 250, 52, 74, 32, 78, 5, 250, 102, 66, 32, + 78, 5, 250, 121, 238, 34, 32, 78, 5, 250, 68, 237, 148, 32, 78, 5, 250, + 108, 237, 46, 32, 78, 5, 250, 98, 236, 176, 32, 78, 5, 250, 62, 235, 91, + 32, 78, 5, 250, 56, 223, 34, 32, 78, 5, 250, 67, 223, 12, 32, 78, 5, 250, + 77, 222, 203, 32, 78, 5, 250, 48, 222, 184, 32, 78, 5, 250, 36, 155, 32, + 78, 5, 250, 69, 222, 24, 32, 78, 5, 250, 46, 221, 168, 32, 78, 5, 250, + 43, 221, 69, 32, 78, 5, 250, 32, 220, 234, 32, 78, 5, 250, 33, 174, 32, + 78, 5, 250, 99, 216, 234, 32, 78, 5, 250, 40, 216, 102, 32, 78, 5, 250, + 97, 216, 14, 32, 78, 5, 250, 89, 215, 157, 32, 78, 5, 250, 110, 181, 32, + 78, 5, 250, 88, 214, 123, 32, 78, 5, 250, 82, 213, 221, 32, 78, 5, 250, + 61, 213, 45, 32, 78, 5, 250, 58, 212, 180, 32, 78, 5, 250, 117, 168, 32, + 78, 5, 250, 41, 210, 65, 32, 78, 5, 250, 74, 209, 187, 32, 78, 5, 250, + 101, 209, 75, 32, 78, 5, 250, 63, 208, 167, 32, 78, 5, 250, 96, 208, 98, + 32, 78, 5, 250, 35, 208, 77, 32, 78, 5, 250, 91, 208, 59, 32, 78, 5, 250, + 80, 208, 47, 32, 78, 5, 250, 53, 165, 32, 78, 5, 250, 85, 207, 115, 32, + 78, 5, 250, 60, 207, 2, 32, 78, 5, 250, 119, 206, 163, 32, 78, 5, 250, + 86, 206, 69, 32, 78, 5, 250, 81, 188, 32, 78, 5, 250, 104, 205, 69, 32, + 78, 5, 250, 72, 202, 223, 32, 78, 5, 250, 100, 202, 47, 32, 78, 5, 250, + 55, 201, 5, 32, 78, 5, 250, 54, 190, 190, 32, 78, 5, 250, 115, 199, 145, + 32, 78, 5, 250, 76, 198, 193, 32, 78, 5, 250, 113, 159, 32, 78, 5, 250, + 44, 197, 94, 32, 78, 5, 250, 59, 193, 190, 32, 78, 5, 250, 38, 193, 125, + 32, 78, 5, 250, 73, 193, 86, 32, 78, 5, 250, 71, 193, 48, 32, 78, 5, 250, + 95, 191, 123, 32, 78, 5, 250, 39, 191, 87, 32, 78, 5, 250, 92, 191, 7, + 32, 78, 5, 250, 87, 254, 217, 32, 78, 5, 250, 70, 254, 105, 32, 78, 5, + 250, 29, 250, 165, 32, 78, 5, 250, 42, 235, 47, 32, 78, 5, 250, 25, 235, + 46, 32, 78, 5, 250, 65, 212, 112, 32, 78, 5, 250, 83, 208, 165, 32, 78, + 5, 250, 51, 208, 169, 32, 78, 5, 250, 37, 207, 182, 32, 78, 5, 250, 79, + 207, 181, 32, 78, 5, 250, 45, 206, 156, 32, 78, 5, 250, 47, 199, 246, 32, + 78, 5, 250, 27, 197, 41, 32, 78, 5, 250, 24, 109, 32, 78, 16, 250, 94, + 32, 78, 16, 250, 93, 32, 78, 16, 250, 90, 32, 78, 16, 250, 78, 32, 78, + 16, 250, 66, 32, 78, 16, 250, 64, 32, 78, 16, 250, 57, 32, 78, 16, 250, + 50, 32, 78, 16, 250, 49, 32, 78, 16, 250, 34, 32, 78, 16, 250, 31, 32, + 78, 16, 250, 30, 32, 78, 16, 250, 28, 32, 78, 16, 250, 26, 32, 78, 157, + 250, 23, 217, 92, 32, 78, 157, 250, 22, 193, 35, 32, 78, 157, 250, 21, + 237, 130, 32, 78, 157, 250, 20, 234, 42, 32, 78, 157, 250, 19, 217, 58, + 32, 78, 157, 250, 18, 201, 111, 32, 78, 157, 250, 17, 233, 225, 32, 78, + 157, 250, 16, 207, 144, 32, 78, 157, 250, 15, 203, 113, 32, 78, 157, 250, + 14, 229, 239, 32, 78, 157, 250, 13, 202, 0, 32, 78, 157, 250, 12, 248, + 111, 32, 78, 157, 250, 11, 238, 241, 32, 78, 157, 250, 10, 247, 252, 32, + 78, 157, 250, 9, 193, 95, 32, 78, 157, 250, 8, 249, 86, 32, 78, 157, 250, + 7, 211, 117, 32, 78, 157, 250, 6, 201, 224, 32, 78, 157, 250, 5, 238, + 138, 32, 78, 215, 223, 250, 4, 222, 76, 32, 78, 215, 223, 250, 3, 222, + 87, 32, 78, 157, 250, 2, 211, 133, 32, 78, 157, 250, 1, 193, 62, 32, 78, + 157, 250, 0, 32, 78, 215, 223, 249, 255, 251, 9, 32, 78, 215, 223, 249, + 254, 216, 180, 32, 78, 157, 249, 253, 248, 23, 32, 78, 157, 249, 252, + 230, 252, 32, 78, 157, 249, 251, 32, 78, 157, 249, 250, 193, 26, 32, 78, + 157, 249, 249, 32, 78, 157, 249, 248, 32, 78, 157, 249, 247, 228, 189, + 32, 78, 157, 249, 246, 32, 78, 157, 249, 245, 32, 78, 157, 249, 244, 32, + 78, 215, 223, 249, 242, 197, 56, 32, 78, 157, 249, 241, 32, 78, 157, 249, + 240, 32, 78, 157, 249, 239, 242, 215, 32, 78, 157, 249, 238, 32, 78, 157, + 249, 237, 32, 78, 157, 249, 236, 231, 198, 32, 78, 157, 249, 235, 250, + 250, 32, 78, 157, 249, 234, 32, 78, 157, 249, 233, 32, 78, 157, 249, 232, + 32, 78, 157, 249, 231, 32, 78, 157, 249, 230, 32, 78, 157, 249, 229, 32, + 78, 157, 249, 228, 32, 78, 157, 249, 227, 32, 78, 157, 249, 226, 32, 78, + 157, 249, 225, 215, 215, 32, 78, 157, 249, 224, 32, 78, 157, 249, 223, + 197, 254, 32, 78, 157, 249, 222, 32, 78, 157, 249, 221, 32, 78, 157, 249, + 220, 32, 78, 157, 249, 219, 32, 78, 157, 249, 218, 32, 78, 157, 249, 217, + 32, 78, 157, 249, 216, 32, 78, 157, 249, 215, 32, 78, 157, 249, 214, 32, + 78, 157, 249, 213, 32, 78, 157, 249, 212, 32, 78, 157, 249, 211, 229, + 202, 32, 78, 157, 249, 190, 232, 157, 32, 78, 157, 249, 187, 249, 61, 32, + 78, 157, 249, 182, 201, 233, 32, 78, 157, 249, 181, 57, 32, 78, 157, 249, + 180, 32, 78, 157, 249, 179, 200, 131, 32, 78, 157, 249, 178, 32, 78, 157, + 249, 177, 32, 78, 157, 249, 176, 193, 90, 243, 140, 32, 78, 157, 249, + 175, 243, 140, 32, 78, 157, 249, 174, 243, 141, 232, 115, 32, 78, 157, + 249, 173, 193, 93, 32, 78, 157, 249, 172, 32, 78, 157, 249, 171, 32, 78, + 215, 223, 249, 170, 236, 237, 32, 78, 157, 249, 169, 32, 78, 157, 249, + 168, 32, 78, 157, 249, 166, 32, 78, 157, 249, 165, 32, 78, 157, 249, 164, + 32, 78, 157, 249, 163, 237, 220, 32, 78, 157, 249, 162, 32, 78, 157, 249, + 161, 32, 78, 157, 249, 160, 32, 78, 157, 249, 159, 32, 78, 157, 249, 158, + 32, 78, 157, 195, 82, 249, 243, 32, 78, 157, 195, 82, 249, 210, 32, 78, + 157, 195, 82, 249, 209, 32, 78, 157, 195, 82, 249, 208, 32, 78, 157, 195, + 82, 249, 207, 32, 78, 157, 195, 82, 249, 206, 32, 78, 157, 195, 82, 249, + 205, 32, 78, 157, 195, 82, 249, 204, 32, 78, 157, 195, 82, 249, 203, 32, + 78, 157, 195, 82, 249, 202, 32, 78, 157, 195, 82, 249, 201, 32, 78, 157, + 195, 82, 249, 200, 32, 78, 157, 195, 82, 249, 199, 32, 78, 157, 195, 82, + 249, 198, 32, 78, 157, 195, 82, 249, 197, 32, 78, 157, 195, 82, 249, 196, + 32, 78, 157, 195, 82, 249, 195, 32, 78, 157, 195, 82, 249, 194, 32, 78, + 157, 195, 82, 249, 193, 32, 78, 157, 195, 82, 249, 192, 32, 78, 157, 195, + 82, 249, 191, 32, 78, 157, 195, 82, 249, 189, 32, 78, 157, 195, 82, 249, + 188, 32, 78, 157, 195, 82, 249, 186, 32, 78, 157, 195, 82, 249, 185, 32, + 78, 157, 195, 82, 249, 184, 32, 78, 157, 195, 82, 249, 183, 32, 78, 157, + 195, 82, 249, 167, 32, 78, 157, 195, 82, 249, 157, 252, 20, 193, 23, 204, + 12, 219, 114, 252, 20, 193, 23, 204, 12, 236, 142, 252, 20, 243, 128, 77, + 252, 20, 31, 107, 252, 20, 31, 109, 252, 20, 31, 138, 252, 20, 31, 134, + 252, 20, 31, 150, 252, 20, 31, 169, 252, 20, 31, 175, 252, 20, 31, 171, + 252, 20, 31, 178, 252, 20, 31, 199, 95, 252, 20, 31, 197, 32, 252, 20, + 31, 198, 249, 252, 20, 31, 232, 137, 252, 20, 31, 233, 17, 252, 20, 31, + 202, 121, 252, 20, 31, 203, 242, 252, 20, 31, 234, 155, 252, 20, 31, 213, + 171, 252, 20, 31, 91, 228, 142, 252, 20, 31, 105, 228, 142, 252, 20, 31, + 115, 228, 142, 252, 20, 31, 232, 130, 228, 142, 252, 20, 31, 232, 228, + 228, 142, 252, 20, 31, 202, 137, 228, 142, 252, 20, 31, 203, 248, 228, + 142, 252, 20, 31, 234, 166, 228, 142, 252, 20, 31, 213, 177, 228, 142, + 252, 20, 31, 91, 189, 252, 20, 31, 105, 189, 252, 20, 31, 115, 189, 252, + 20, 31, 232, 130, 189, 252, 20, 31, 232, 228, 189, 252, 20, 31, 202, 137, + 189, 252, 20, 31, 203, 248, 189, 252, 20, 31, 234, 166, 189, 252, 20, 31, + 213, 177, 189, 252, 20, 31, 199, 96, 189, 252, 20, 31, 197, 33, 189, 252, + 20, 31, 198, 250, 189, 252, 20, 31, 232, 138, 189, 252, 20, 31, 233, 18, + 189, 252, 20, 31, 202, 122, 189, 252, 20, 31, 203, 243, 189, 252, 20, 31, + 234, 156, 189, 252, 20, 31, 213, 172, 189, 252, 20, 193, 110, 249, 77, + 196, 90, 252, 20, 193, 110, 232, 240, 200, 224, 252, 20, 193, 110, 205, + 58, 200, 224, 252, 20, 193, 110, 199, 1, 200, 224, 252, 20, 193, 110, + 232, 123, 200, 224, 252, 20, 235, 94, 216, 230, 232, 240, 200, 224, 252, + 20, 219, 95, 216, 230, 232, 240, 200, 224, 252, 20, 216, 230, 205, 58, + 200, 224, 252, 20, 216, 230, 199, 1, 200, 224, 35, 252, 52, 250, 167, 91, + 208, 24, 35, 252, 52, 250, 167, 91, 230, 72, 35, 252, 52, 250, 167, 91, + 235, 117, 35, 252, 52, 250, 167, 150, 35, 252, 52, 250, 167, 233, 17, 35, + 252, 52, 250, 167, 232, 228, 228, 142, 35, 252, 52, 250, 167, 232, 228, + 189, 35, 252, 52, 250, 167, 233, 18, 189, 35, 252, 52, 250, 167, 232, + 228, 199, 203, 35, 252, 52, 250, 167, 199, 96, 199, 203, 35, 252, 52, + 250, 167, 233, 18, 199, 203, 35, 252, 52, 250, 167, 91, 228, 143, 199, + 203, 35, 252, 52, 250, 167, 232, 228, 228, 143, 199, 203, 35, 252, 52, + 250, 167, 91, 198, 230, 199, 203, 35, 252, 52, 250, 167, 232, 228, 198, + 230, 199, 203, 35, 252, 52, 250, 167, 232, 228, 201, 95, 35, 252, 52, + 250, 167, 199, 96, 201, 95, 35, 252, 52, 250, 167, 233, 18, 201, 95, 35, + 252, 52, 250, 167, 91, 228, 143, 201, 95, 35, 252, 52, 250, 167, 232, + 228, 228, 143, 201, 95, 35, 252, 52, 250, 167, 91, 198, 230, 201, 95, 35, + 252, 52, 250, 167, 199, 96, 198, 230, 201, 95, 35, 252, 52, 250, 167, + 233, 18, 198, 230, 201, 95, 35, 252, 52, 250, 167, 199, 96, 216, 17, 35, + 252, 52, 229, 196, 91, 209, 94, 35, 252, 52, 199, 17, 107, 35, 252, 52, + 229, 192, 107, 35, 252, 52, 234, 53, 109, 35, 252, 52, 199, 17, 109, 35, + 252, 52, 238, 134, 105, 235, 116, 35, 252, 52, 234, 53, 105, 235, 116, + 35, 252, 52, 197, 216, 150, 35, 252, 52, 197, 216, 199, 95, 35, 252, 52, + 197, 216, 199, 96, 251, 159, 20, 35, 252, 52, 229, 192, 199, 95, 35, 252, + 52, 216, 169, 199, 95, 35, 252, 52, 199, 17, 199, 95, 35, 252, 52, 199, + 17, 198, 249, 35, 252, 52, 197, 216, 233, 17, 35, 252, 52, 197, 216, 233, + 18, 251, 159, 20, 35, 252, 52, 229, 192, 233, 17, 35, 252, 52, 199, 17, + 233, 17, 35, 252, 52, 199, 17, 91, 228, 142, 35, 252, 52, 199, 17, 115, + 228, 142, 35, 252, 52, 234, 53, 232, 228, 228, 142, 35, 252, 52, 197, + 216, 232, 228, 228, 142, 35, 252, 52, 199, 17, 232, 228, 228, 142, 35, + 252, 52, 247, 84, 232, 228, 228, 142, 35, 252, 52, 214, 201, 232, 228, + 228, 142, 35, 252, 52, 199, 17, 91, 189, 35, 252, 52, 199, 17, 232, 228, + 189, 35, 252, 52, 237, 111, 232, 228, 216, 17, 35, 252, 52, 201, 48, 233, + 18, 216, 17, 35, 91, 132, 56, 35, 91, 132, 3, 251, 159, 20, 35, 105, 198, + 254, 56, 35, 115, 208, 23, 56, 35, 192, 78, 56, 35, 199, 204, 56, 35, + 235, 118, 56, 35, 211, 172, 56, 35, 105, 211, 171, 56, 35, 115, 211, 171, + 56, 35, 232, 130, 211, 171, 56, 35, 232, 228, 211, 171, 56, 35, 216, 163, + 56, 35, 220, 153, 249, 77, 56, 35, 219, 87, 56, 35, 211, 18, 56, 35, 192, + 211, 56, 35, 250, 228, 56, 35, 250, 245, 56, 35, 230, 222, 56, 35, 197, + 171, 249, 77, 56, 35, 191, 78, 56, 35, 91, 208, 25, 56, 35, 202, 163, 56, + 35, 223, 145, 56, 213, 34, 56, 206, 137, 203, 238, 56, 206, 137, 196, + 106, 56, 206, 137, 204, 18, 56, 206, 137, 203, 176, 56, 206, 137, 236, + 252, 203, 176, 56, 206, 137, 202, 187, 56, 206, 137, 237, 106, 56, 206, + 137, 208, 7, 56, 206, 137, 203, 255, 56, 206, 137, 235, 69, 56, 206, 137, + 250, 222, 56, 206, 137, 247, 19, 56, 250, 213, 113, 35, 16, 199, 167, + 207, 4, 209, 225, 236, 229, 3, 210, 53, 209, 225, 236, 229, 3, 209, 86, + 229, 237, 209, 225, 236, 229, 3, 199, 170, 229, 237, 209, 225, 236, 229, + 3, 247, 107, 209, 225, 236, 229, 3, 243, 88, 209, 225, 236, 229, 3, 193, + 35, 209, 225, 236, 229, 3, 229, 202, 209, 225, 236, 229, 3, 231, 190, + 209, 225, 236, 229, 3, 198, 184, 209, 225, 236, 229, 3, 57, 209, 225, + 236, 229, 3, 248, 71, 209, 225, 236, 229, 3, 203, 79, 209, 225, 236, 229, + 3, 242, 208, 209, 225, 236, 229, 3, 217, 91, 209, 225, 236, 229, 3, 217, + 28, 209, 225, 236, 229, 3, 205, 109, 209, 225, 236, 229, 3, 219, 143, + 209, 225, 236, 229, 3, 248, 94, 209, 225, 236, 229, 3, 247, 91, 209, 103, + 209, 225, 236, 229, 3, 236, 158, 209, 225, 236, 229, 3, 242, 82, 209, + 225, 236, 229, 3, 202, 84, 209, 225, 236, 229, 3, 242, 83, 209, 225, 236, + 229, 3, 249, 0, 209, 225, 236, 229, 3, 203, 66, 209, 225, 236, 229, 3, + 228, 189, 209, 225, 236, 229, 3, 229, 150, 209, 225, 236, 229, 3, 247, + 247, 219, 214, 209, 225, 236, 229, 3, 247, 80, 209, 225, 236, 229, 3, + 207, 144, 209, 225, 236, 229, 3, 234, 216, 209, 225, 236, 229, 3, 235, + 126, 209, 225, 236, 229, 3, 197, 72, 209, 225, 236, 229, 3, 249, 3, 209, + 225, 236, 229, 3, 209, 104, 197, 254, 209, 225, 236, 229, 3, 195, 47, + 209, 225, 236, 229, 3, 210, 134, 209, 225, 236, 229, 3, 206, 126, 209, + 225, 236, 229, 3, 219, 127, 209, 225, 236, 229, 3, 210, 250, 249, 148, + 209, 225, 236, 229, 3, 232, 184, 209, 225, 236, 229, 3, 230, 214, 209, + 225, 236, 229, 3, 201, 51, 209, 225, 236, 229, 3, 2, 250, 134, 209, 225, + 236, 229, 3, 193, 135, 249, 99, 209, 225, 236, 229, 3, 33, 211, 174, 106, + 218, 183, 1, 65, 218, 183, 1, 71, 218, 183, 1, 250, 122, 218, 183, 1, + 248, 206, 218, 183, 1, 232, 53, 218, 183, 1, 238, 129, 218, 183, 1, 68, + 218, 183, 1, 193, 224, 218, 183, 1, 191, 166, 218, 183, 1, 199, 51, 218, + 183, 1, 223, 37, 218, 183, 1, 222, 154, 218, 183, 1, 208, 106, 218, 183, + 1, 172, 218, 183, 1, 218, 170, 218, 183, 1, 215, 63, 218, 183, 1, 216, + 19, 218, 183, 1, 213, 82, 218, 183, 1, 66, 218, 183, 1, 210, 238, 218, + 183, 1, 221, 104, 218, 183, 1, 146, 218, 183, 1, 206, 9, 218, 183, 1, + 200, 43, 218, 183, 1, 197, 135, 218, 183, 1, 251, 134, 218, 183, 1, 234, + 105, 218, 183, 1, 230, 118, 218, 183, 1, 192, 235, 247, 97, 1, 65, 247, + 97, 1, 210, 224, 247, 97, 1, 238, 129, 247, 97, 1, 172, 247, 97, 1, 196, + 28, 247, 97, 1, 146, 247, 97, 1, 219, 244, 247, 97, 1, 254, 217, 247, 97, + 1, 208, 106, 247, 97, 1, 250, 122, 247, 97, 1, 218, 170, 247, 97, 1, 74, + 247, 97, 1, 238, 36, 247, 97, 1, 200, 43, 247, 97, 1, 203, 168, 247, 97, + 1, 203, 167, 247, 97, 1, 206, 9, 247, 97, 1, 247, 194, 247, 97, 1, 66, + 247, 97, 1, 213, 82, 247, 97, 1, 192, 235, 247, 97, 1, 215, 63, 247, 97, + 1, 197, 134, 247, 97, 1, 210, 238, 247, 97, 1, 201, 179, 247, 97, 1, 68, + 247, 97, 1, 71, 247, 97, 1, 196, 25, 247, 97, 1, 222, 154, 247, 97, 1, + 222, 145, 247, 97, 1, 214, 166, 247, 97, 1, 196, 30, 247, 97, 1, 232, 53, + 247, 97, 1, 231, 244, 247, 97, 1, 201, 119, 247, 97, 1, 201, 118, 247, + 97, 1, 214, 72, 247, 97, 1, 223, 201, 247, 97, 1, 247, 193, 247, 97, 1, + 197, 135, 247, 97, 1, 196, 27, 247, 97, 1, 206, 111, 247, 97, 1, 217, 18, + 247, 97, 1, 217, 17, 247, 97, 1, 217, 16, 247, 97, 1, 217, 15, 247, 97, + 1, 219, 243, 247, 97, 1, 234, 220, 247, 97, 1, 196, 26, 94, 234, 56, 198, + 229, 77, 94, 234, 56, 17, 107, 94, 234, 56, 17, 109, 94, 234, 56, 17, + 138, 94, 234, 56, 17, 134, 94, 234, 56, 17, 150, 94, 234, 56, 17, 169, + 94, 234, 56, 17, 175, 94, 234, 56, 17, 171, 94, 234, 56, 17, 178, 94, + 234, 56, 31, 199, 95, 94, 234, 56, 31, 197, 32, 94, 234, 56, 31, 198, + 249, 94, 234, 56, 31, 232, 137, 94, 234, 56, 31, 233, 17, 94, 234, 56, + 31, 202, 121, 94, 234, 56, 31, 203, 242, 94, 234, 56, 31, 234, 155, 94, + 234, 56, 31, 213, 171, 94, 234, 56, 31, 91, 228, 142, 94, 234, 56, 31, + 105, 228, 142, 94, 234, 56, 31, 115, 228, 142, 94, 234, 56, 31, 232, 130, + 228, 142, 94, 234, 56, 31, 232, 228, 228, 142, 94, 234, 56, 31, 202, 137, + 228, 142, 94, 234, 56, 31, 203, 248, 228, 142, 94, 234, 56, 31, 234, 166, + 228, 142, 94, 234, 56, 31, 213, 177, 228, 142, 39, 43, 1, 65, 39, 43, 1, + 249, 19, 39, 43, 1, 222, 24, 39, 43, 1, 237, 148, 39, 43, 1, 71, 39, 43, + 1, 195, 153, 39, 43, 1, 191, 87, 39, 43, 1, 229, 247, 39, 43, 1, 199, 33, + 39, 43, 1, 68, 39, 43, 1, 155, 39, 43, 1, 234, 142, 39, 43, 1, 234, 116, + 39, 43, 1, 234, 105, 39, 43, 1, 234, 14, 39, 43, 1, 74, 39, 43, 1, 210, + 65, 39, 43, 1, 203, 114, 39, 43, 1, 220, 234, 39, 43, 1, 234, 36, 39, 43, + 1, 234, 24, 39, 43, 1, 199, 145, 39, 43, 1, 66, 39, 43, 1, 234, 145, 39, + 43, 1, 209, 216, 39, 43, 1, 221, 199, 39, 43, 1, 234, 183, 39, 43, 1, + 234, 26, 39, 43, 1, 243, 129, 39, 43, 1, 223, 201, 39, 43, 1, 196, 30, + 39, 43, 1, 234, 7, 39, 43, 212, 136, 107, 39, 43, 212, 136, 150, 39, 43, + 212, 136, 199, 95, 39, 43, 212, 136, 233, 17, 39, 43, 1, 192, 80, 39, 43, + 1, 213, 18, 197, 161, 39, 43, 1, 202, 1, 197, 161, 230, 233, 1, 251, 241, + 230, 233, 1, 249, 119, 230, 233, 1, 231, 52, 230, 233, 1, 238, 15, 230, + 233, 1, 251, 236, 230, 233, 1, 208, 89, 230, 233, 1, 223, 50, 230, 233, + 1, 230, 85, 230, 233, 1, 198, 243, 230, 233, 1, 234, 153, 230, 233, 1, + 220, 191, 230, 233, 1, 220, 102, 230, 233, 1, 217, 82, 230, 233, 1, 214, + 203, 230, 233, 1, 223, 3, 230, 233, 1, 196, 48, 230, 233, 1, 210, 197, + 230, 233, 1, 213, 171, 230, 233, 1, 207, 157, 230, 233, 1, 205, 113, 230, + 233, 1, 199, 111, 230, 233, 1, 193, 59, 230, 233, 1, 233, 91, 230, 233, + 1, 223, 205, 230, 233, 1, 228, 125, 230, 233, 1, 211, 31, 230, 233, 1, + 213, 177, 228, 142, 39, 210, 4, 1, 251, 134, 39, 210, 4, 1, 247, 232, 39, + 210, 4, 1, 231, 226, 39, 210, 4, 1, 236, 162, 39, 210, 4, 1, 71, 39, 210, + 4, 1, 191, 53, 39, 210, 4, 1, 235, 29, 39, 210, 4, 1, 191, 95, 39, 210, + 4, 1, 235, 27, 39, 210, 4, 1, 68, 39, 210, 4, 1, 221, 52, 39, 210, 4, 1, + 219, 210, 39, 210, 4, 1, 216, 186, 39, 210, 4, 1, 214, 102, 39, 210, 4, + 1, 195, 7, 39, 210, 4, 1, 210, 50, 39, 210, 4, 1, 207, 71, 39, 210, 4, 1, + 202, 194, 39, 210, 4, 1, 199, 217, 39, 210, 4, 1, 66, 39, 210, 4, 1, 243, + 108, 39, 210, 4, 1, 203, 48, 39, 210, 4, 1, 203, 116, 39, 210, 4, 1, 191, + 227, 39, 210, 4, 1, 192, 58, 39, 210, 4, 1, 74, 39, 210, 4, 1, 211, 89, + 39, 210, 4, 1, 234, 183, 39, 210, 4, 1, 140, 39, 210, 4, 1, 197, 145, 39, + 210, 4, 1, 195, 140, 39, 210, 4, 1, 192, 62, 39, 210, 4, 1, 192, 60, 39, + 210, 4, 1, 192, 95, 39, 210, 4, 1, 223, 228, 39, 210, 4, 1, 191, 225, 39, + 210, 4, 1, 170, 39, 210, 4, 1, 228, 37, 33, 39, 210, 4, 1, 251, 134, 33, + 39, 210, 4, 1, 236, 162, 33, 39, 210, 4, 1, 191, 95, 33, 39, 210, 4, 1, + 214, 102, 33, 39, 210, 4, 1, 202, 194, 196, 142, 1, 251, 166, 196, 142, + 1, 248, 214, 196, 142, 1, 231, 214, 196, 142, 1, 221, 217, 196, 142, 1, + 237, 108, 196, 142, 1, 229, 25, 196, 142, 1, 193, 48, 196, 142, 1, 191, + 76, 196, 142, 1, 228, 181, 196, 142, 1, 199, 73, 196, 142, 1, 191, 250, + 196, 142, 1, 222, 108, 196, 142, 1, 203, 70, 196, 142, 1, 220, 33, 196, + 142, 1, 216, 195, 196, 142, 1, 237, 66, 196, 142, 1, 212, 132, 196, 142, + 1, 190, 251, 196, 142, 1, 205, 148, 196, 142, 1, 251, 232, 196, 142, 1, + 208, 167, 196, 142, 1, 205, 192, 196, 142, 1, 208, 40, 196, 142, 1, 207, + 135, 196, 142, 1, 199, 37, 196, 142, 1, 231, 88, 196, 142, 1, 159, 196, + 142, 1, 68, 196, 142, 1, 66, 196, 142, 1, 201, 130, 196, 142, 193, 23, + 236, 207, 39, 209, 254, 3, 65, 39, 209, 254, 3, 68, 39, 209, 254, 3, 66, + 39, 209, 254, 3, 155, 39, 209, 254, 3, 220, 234, 39, 209, 254, 3, 231, + 242, 39, 209, 254, 3, 230, 181, 39, 209, 254, 3, 192, 220, 39, 209, 254, + 3, 247, 162, 39, 209, 254, 3, 223, 34, 39, 209, 254, 3, 222, 246, 39, + 209, 254, 3, 190, 190, 39, 209, 254, 3, 197, 94, 39, 209, 254, 3, 238, + 34, 39, 209, 254, 3, 237, 46, 39, 209, 254, 3, 235, 91, 39, 209, 254, 3, + 199, 49, 39, 209, 254, 3, 168, 39, 209, 254, 3, 249, 155, 39, 209, 254, + 3, 233, 111, 39, 209, 254, 3, 181, 39, 209, 254, 3, 212, 180, 39, 209, + 254, 3, 174, 39, 209, 254, 3, 216, 102, 39, 209, 254, 3, 215, 157, 39, + 209, 254, 3, 170, 39, 209, 254, 3, 195, 188, 39, 209, 254, 3, 195, 69, + 39, 209, 254, 3, 165, 39, 209, 254, 3, 206, 69, 39, 209, 254, 3, 173, 39, + 209, 254, 3, 188, 39, 209, 254, 3, 191, 123, 39, 209, 254, 3, 203, 166, + 39, 209, 254, 3, 201, 176, 39, 209, 254, 3, 140, 39, 209, 254, 3, 250, + 159, 39, 209, 254, 3, 250, 158, 39, 209, 254, 3, 250, 157, 39, 209, 254, + 3, 192, 189, 39, 209, 254, 3, 238, 11, 39, 209, 254, 3, 238, 10, 39, 209, + 254, 3, 249, 130, 39, 209, 254, 3, 247, 214, 39, 209, 254, 193, 23, 236, + 207, 39, 209, 254, 31, 107, 39, 209, 254, 31, 109, 39, 209, 254, 31, 199, + 95, 39, 209, 254, 31, 197, 32, 39, 209, 254, 31, 228, 142, 237, 86, 6, 1, + 180, 68, 237, 86, 6, 1, 180, 71, 237, 86, 6, 1, 180, 65, 237, 86, 6, 1, + 180, 251, 247, 237, 86, 6, 1, 180, 74, 237, 86, 6, 1, 180, 211, 89, 237, + 86, 6, 1, 203, 41, 68, 237, 86, 6, 1, 203, 41, 71, 237, 86, 6, 1, 203, + 41, 65, 237, 86, 6, 1, 203, 41, 251, 247, 237, 86, 6, 1, 203, 41, 74, + 237, 86, 6, 1, 203, 41, 211, 89, 237, 86, 6, 1, 250, 133, 237, 86, 6, 1, + 210, 252, 237, 86, 6, 1, 193, 0, 237, 86, 6, 1, 192, 77, 237, 86, 6, 1, + 230, 118, 237, 86, 6, 1, 210, 51, 237, 86, 6, 1, 249, 3, 237, 86, 6, 1, + 199, 121, 237, 86, 6, 1, 237, 133, 237, 86, 6, 1, 243, 125, 237, 86, 6, + 1, 223, 10, 237, 86, 6, 1, 222, 31, 237, 86, 6, 1, 231, 188, 237, 86, 6, + 1, 234, 183, 237, 86, 6, 1, 195, 148, 237, 86, 6, 1, 233, 250, 237, 86, + 6, 1, 199, 31, 237, 86, 6, 1, 234, 24, 237, 86, 6, 1, 191, 84, 237, 86, + 6, 1, 234, 14, 237, 86, 6, 1, 191, 61, 237, 86, 6, 1, 234, 36, 237, 86, + 6, 1, 234, 142, 237, 86, 6, 1, 234, 116, 237, 86, 6, 1, 234, 105, 237, + 86, 6, 1, 234, 90, 237, 86, 6, 1, 211, 135, 237, 86, 6, 1, 233, 226, 237, + 86, 2, 1, 180, 68, 237, 86, 2, 1, 180, 71, 237, 86, 2, 1, 180, 65, 237, + 86, 2, 1, 180, 251, 247, 237, 86, 2, 1, 180, 74, 237, 86, 2, 1, 180, 211, + 89, 237, 86, 2, 1, 203, 41, 68, 237, 86, 2, 1, 203, 41, 71, 237, 86, 2, + 1, 203, 41, 65, 237, 86, 2, 1, 203, 41, 251, 247, 237, 86, 2, 1, 203, 41, + 74, 237, 86, 2, 1, 203, 41, 211, 89, 237, 86, 2, 1, 250, 133, 237, 86, 2, + 1, 210, 252, 237, 86, 2, 1, 193, 0, 237, 86, 2, 1, 192, 77, 237, 86, 2, + 1, 230, 118, 237, 86, 2, 1, 210, 51, 237, 86, 2, 1, 249, 3, 237, 86, 2, + 1, 199, 121, 237, 86, 2, 1, 237, 133, 237, 86, 2, 1, 243, 125, 237, 86, + 2, 1, 223, 10, 237, 86, 2, 1, 222, 31, 237, 86, 2, 1, 231, 188, 237, 86, + 2, 1, 234, 183, 237, 86, 2, 1, 195, 148, 237, 86, 2, 1, 233, 250, 237, + 86, 2, 1, 199, 31, 237, 86, 2, 1, 234, 24, 237, 86, 2, 1, 191, 84, 237, + 86, 2, 1, 234, 14, 237, 86, 2, 1, 191, 61, 237, 86, 2, 1, 234, 36, 237, + 86, 2, 1, 234, 142, 237, 86, 2, 1, 234, 116, 237, 86, 2, 1, 234, 105, + 237, 86, 2, 1, 234, 90, 237, 86, 2, 1, 211, 135, 237, 86, 2, 1, 233, 226, + 203, 121, 1, 210, 47, 203, 121, 1, 198, 40, 203, 121, 1, 221, 156, 203, + 121, 1, 233, 54, 203, 121, 1, 199, 6, 203, 121, 1, 202, 47, 203, 121, 1, + 200, 172, 203, 121, 1, 243, 42, 203, 121, 1, 192, 79, 203, 121, 1, 228, + 139, 203, 121, 1, 248, 189, 203, 121, 1, 237, 147, 203, 121, 1, 231, 228, + 203, 121, 1, 195, 2, 203, 121, 1, 199, 12, 203, 121, 1, 191, 4, 203, 121, + 1, 216, 229, 203, 121, 1, 222, 182, 203, 121, 1, 193, 39, 203, 121, 1, + 230, 95, 203, 121, 1, 219, 27, 203, 121, 1, 216, 47, 203, 121, 1, 223, + 208, 203, 121, 1, 234, 181, 203, 121, 1, 250, 211, 203, 121, 1, 252, 32, + 203, 121, 1, 211, 106, 203, 121, 1, 193, 26, 203, 121, 1, 211, 16, 203, + 121, 1, 251, 247, 203, 121, 1, 206, 154, 203, 121, 1, 212, 132, 203, 121, + 1, 234, 202, 203, 121, 1, 251, 252, 203, 121, 1, 228, 28, 203, 121, 1, + 196, 77, 203, 121, 1, 211, 182, 203, 121, 1, 211, 81, 203, 121, 1, 211, + 133, 203, 121, 1, 250, 139, 203, 121, 1, 251, 11, 203, 121, 1, 211, 58, + 203, 121, 1, 251, 227, 203, 121, 1, 234, 28, 203, 121, 1, 250, 242, 203, + 121, 1, 234, 213, 203, 121, 1, 228, 36, 203, 121, 1, 192, 41, 211, 35, 1, + 251, 194, 211, 35, 1, 249, 155, 211, 35, 1, 190, 190, 211, 35, 1, 223, + 34, 211, 35, 1, 192, 220, 211, 35, 1, 221, 217, 211, 35, 1, 237, 132, + 211, 35, 1, 165, 211, 35, 1, 188, 211, 35, 1, 203, 76, 211, 35, 1, 237, + 70, 211, 35, 1, 247, 69, 211, 35, 1, 231, 242, 211, 35, 1, 233, 111, 211, + 35, 1, 208, 96, 211, 35, 1, 222, 125, 211, 35, 1, 220, 123, 211, 35, 1, + 216, 61, 211, 35, 1, 212, 116, 211, 35, 1, 193, 133, 211, 35, 1, 140, + 211, 35, 1, 170, 211, 35, 1, 65, 211, 35, 1, 71, 211, 35, 1, 68, 211, 35, + 1, 74, 211, 35, 1, 66, 211, 35, 1, 252, 208, 211, 35, 1, 234, 190, 211, + 35, 1, 211, 89, 211, 35, 17, 191, 77, 211, 35, 17, 107, 211, 35, 17, 109, + 211, 35, 17, 138, 211, 35, 17, 134, 211, 35, 17, 150, 211, 35, 17, 169, + 211, 35, 17, 175, 211, 35, 17, 171, 211, 35, 17, 178, 211, 37, 6, 1, 65, + 211, 37, 6, 1, 251, 238, 211, 37, 6, 1, 251, 232, 211, 37, 6, 1, 251, + 247, 211, 37, 6, 1, 248, 58, 211, 37, 6, 1, 247, 3, 211, 37, 6, 1, 234, + 174, 211, 37, 6, 1, 71, 211, 37, 6, 1, 234, 154, 211, 37, 6, 1, 140, 211, + 37, 6, 1, 228, 95, 211, 37, 6, 1, 68, 211, 37, 6, 1, 155, 211, 37, 6, 1, + 234, 173, 211, 37, 6, 1, 220, 155, 211, 37, 6, 1, 173, 211, 37, 6, 1, + 174, 211, 37, 6, 1, 181, 211, 37, 6, 1, 74, 211, 37, 6, 1, 211, 132, 211, + 37, 6, 1, 168, 211, 37, 6, 1, 234, 172, 211, 37, 6, 1, 188, 211, 37, 6, + 1, 203, 166, 211, 37, 6, 1, 190, 190, 211, 37, 6, 1, 234, 171, 211, 37, + 6, 1, 197, 168, 211, 37, 6, 1, 234, 170, 211, 37, 6, 1, 197, 157, 211, + 37, 6, 1, 237, 70, 211, 37, 6, 1, 66, 211, 37, 6, 1, 193, 190, 211, 37, + 6, 1, 221, 217, 211, 37, 6, 1, 231, 93, 211, 37, 6, 1, 191, 123, 211, 37, + 6, 1, 191, 71, 211, 37, 2, 1, 65, 211, 37, 2, 1, 251, 238, 211, 37, 2, 1, + 251, 232, 211, 37, 2, 1, 251, 247, 211, 37, 2, 1, 248, 58, 211, 37, 2, 1, + 247, 3, 211, 37, 2, 1, 234, 174, 211, 37, 2, 1, 71, 211, 37, 2, 1, 234, + 154, 211, 37, 2, 1, 140, 211, 37, 2, 1, 228, 95, 211, 37, 2, 1, 68, 211, + 37, 2, 1, 155, 211, 37, 2, 1, 234, 173, 211, 37, 2, 1, 220, 155, 211, 37, + 2, 1, 173, 211, 37, 2, 1, 174, 211, 37, 2, 1, 181, 211, 37, 2, 1, 74, + 211, 37, 2, 1, 211, 132, 211, 37, 2, 1, 168, 211, 37, 2, 1, 234, 172, + 211, 37, 2, 1, 188, 211, 37, 2, 1, 203, 166, 211, 37, 2, 1, 190, 190, + 211, 37, 2, 1, 234, 171, 211, 37, 2, 1, 197, 168, 211, 37, 2, 1, 234, + 170, 211, 37, 2, 1, 197, 157, 211, 37, 2, 1, 237, 70, 211, 37, 2, 1, 66, + 211, 37, 2, 1, 193, 190, 211, 37, 2, 1, 221, 217, 211, 37, 2, 1, 231, 93, + 211, 37, 2, 1, 191, 123, 211, 37, 2, 1, 191, 71, 234, 138, 1, 65, 234, + 138, 1, 249, 19, 234, 138, 1, 247, 44, 234, 138, 1, 243, 129, 234, 138, + 1, 237, 148, 234, 138, 1, 214, 156, 234, 138, 1, 237, 61, 234, 138, 1, + 234, 168, 234, 138, 1, 71, 234, 138, 1, 233, 61, 234, 138, 1, 231, 167, + 234, 138, 1, 231, 22, 234, 138, 1, 229, 247, 234, 138, 1, 68, 234, 138, + 1, 223, 12, 234, 138, 1, 222, 24, 234, 138, 1, 219, 240, 234, 138, 1, + 219, 70, 234, 138, 1, 216, 234, 234, 138, 1, 214, 123, 234, 138, 1, 181, + 234, 138, 1, 213, 152, 234, 138, 1, 74, 234, 138, 1, 210, 65, 234, 138, + 1, 208, 77, 234, 138, 1, 207, 115, 234, 138, 1, 206, 105, 234, 138, 1, + 205, 69, 234, 138, 1, 203, 114, 234, 138, 1, 199, 145, 234, 138, 1, 199, + 33, 234, 138, 1, 66, 234, 138, 1, 195, 153, 234, 138, 1, 192, 214, 234, + 138, 1, 192, 159, 234, 138, 1, 191, 87, 234, 138, 1, 191, 62, 234, 138, + 1, 231, 79, 234, 138, 1, 231, 85, 234, 138, 1, 221, 199, 247, 77, 251, + 195, 1, 251, 161, 247, 77, 251, 195, 1, 248, 216, 247, 77, 251, 195, 1, + 231, 42, 247, 77, 251, 195, 1, 237, 213, 247, 77, 251, 195, 1, 234, 201, + 247, 77, 251, 195, 1, 191, 98, 247, 77, 251, 195, 1, 233, 186, 247, 77, + 251, 195, 1, 191, 56, 247, 77, 251, 195, 1, 199, 174, 247, 77, 251, 195, + 1, 247, 3, 247, 77, 251, 195, 1, 191, 236, 247, 77, 251, 195, 1, 191, 71, + 247, 77, 251, 195, 1, 223, 78, 247, 77, 251, 195, 1, 203, 166, 247, 77, + 251, 195, 1, 220, 26, 247, 77, 251, 195, 1, 223, 91, 247, 77, 251, 195, + 1, 192, 210, 247, 77, 251, 195, 1, 235, 45, 247, 77, 251, 195, 1, 247, + 104, 247, 77, 251, 195, 1, 222, 247, 247, 77, 251, 195, 1, 222, 67, 247, + 77, 251, 195, 1, 218, 179, 247, 77, 251, 195, 1, 229, 181, 247, 77, 251, + 195, 1, 208, 78, 247, 77, 251, 195, 1, 251, 69, 247, 77, 251, 195, 1, + 243, 59, 247, 77, 251, 195, 1, 243, 97, 247, 77, 251, 195, 1, 238, 142, + 247, 77, 251, 195, 1, 217, 70, 247, 77, 251, 195, 1, 208, 83, 247, 77, + 251, 195, 1, 212, 254, 247, 77, 251, 195, 1, 235, 22, 247, 77, 251, 195, + 1, 203, 148, 247, 77, 251, 195, 1, 223, 13, 247, 77, 251, 195, 1, 211, + 106, 247, 77, 251, 195, 1, 197, 3, 247, 77, 251, 195, 1, 233, 84, 247, + 77, 251, 195, 1, 235, 35, 247, 77, 251, 195, 1, 243, 135, 247, 77, 251, + 195, 1, 210, 36, 247, 77, 251, 195, 1, 231, 69, 247, 77, 251, 195, 1, + 207, 132, 247, 77, 251, 195, 1, 203, 175, 247, 77, 251, 195, 1, 195, 72, + 247, 77, 251, 195, 1, 198, 118, 247, 77, 251, 195, 1, 203, 19, 247, 77, + 251, 195, 1, 223, 48, 247, 77, 251, 195, 1, 238, 143, 247, 77, 251, 195, + 1, 247, 69, 247, 77, 251, 195, 1, 192, 84, 247, 77, 251, 195, 1, 209, + 116, 247, 77, 251, 195, 1, 221, 119, 247, 77, 251, 195, 243, 0, 77, 195, + 29, 6, 1, 65, 195, 29, 6, 1, 249, 50, 195, 29, 6, 1, 249, 19, 195, 29, 6, + 1, 247, 44, 195, 29, 6, 1, 243, 129, 195, 29, 6, 1, 237, 148, 195, 29, 6, + 1, 237, 61, 195, 29, 6, 1, 234, 168, 195, 29, 6, 1, 71, 195, 29, 6, 1, + 233, 61, 195, 29, 6, 1, 231, 242, 195, 29, 6, 1, 140, 195, 29, 6, 1, 229, + 179, 195, 29, 6, 1, 68, 195, 29, 6, 1, 223, 198, 195, 29, 6, 1, 223, 12, + 195, 29, 6, 1, 155, 195, 29, 6, 1, 173, 195, 29, 6, 1, 219, 75, 195, 29, + 6, 1, 216, 234, 195, 29, 6, 1, 214, 123, 195, 29, 6, 1, 213, 152, 195, + 29, 6, 1, 74, 195, 29, 6, 1, 210, 65, 195, 29, 6, 1, 208, 98, 195, 29, 6, + 1, 207, 115, 195, 29, 6, 1, 205, 69, 195, 29, 6, 1, 203, 114, 195, 29, 6, + 1, 199, 145, 195, 29, 6, 1, 199, 33, 195, 29, 6, 1, 66, 195, 29, 6, 1, + 195, 153, 195, 29, 6, 1, 192, 214, 195, 29, 6, 1, 192, 159, 195, 29, 6, + 1, 191, 87, 195, 29, 2, 1, 65, 195, 29, 2, 1, 249, 50, 195, 29, 2, 1, + 249, 19, 195, 29, 2, 1, 247, 44, 195, 29, 2, 1, 243, 129, 195, 29, 2, 1, + 237, 148, 195, 29, 2, 1, 237, 61, 195, 29, 2, 1, 234, 168, 195, 29, 2, 1, + 71, 195, 29, 2, 1, 233, 61, 195, 29, 2, 1, 231, 242, 195, 29, 2, 1, 140, + 195, 29, 2, 1, 229, 179, 195, 29, 2, 1, 68, 195, 29, 2, 1, 223, 198, 195, + 29, 2, 1, 223, 12, 195, 29, 2, 1, 155, 195, 29, 2, 1, 173, 195, 29, 2, 1, + 219, 75, 195, 29, 2, 1, 216, 234, 195, 29, 2, 1, 214, 123, 195, 29, 2, 1, + 213, 152, 195, 29, 2, 1, 74, 195, 29, 2, 1, 210, 65, 195, 29, 2, 1, 208, + 98, 195, 29, 2, 1, 207, 115, 195, 29, 2, 1, 205, 69, 195, 29, 2, 1, 203, + 114, 195, 29, 2, 1, 199, 145, 195, 29, 2, 1, 199, 33, 195, 29, 2, 1, 66, + 195, 29, 2, 1, 195, 153, 195, 29, 2, 1, 192, 214, 195, 29, 2, 1, 192, + 159, 195, 29, 2, 1, 191, 87, 32, 42, 3, 252, 156, 32, 42, 3, 252, 155, + 32, 42, 3, 252, 154, 32, 42, 3, 252, 153, 32, 42, 3, 252, 152, 32, 42, 3, + 252, 151, 32, 42, 3, 252, 150, 32, 42, 3, 252, 149, 32, 42, 3, 252, 148, + 32, 42, 3, 252, 147, 32, 42, 3, 252, 146, 32, 42, 3, 252, 145, 32, 42, 3, + 252, 144, 32, 42, 3, 252, 143, 32, 42, 3, 252, 142, 32, 42, 3, 252, 141, + 32, 42, 3, 252, 140, 32, 42, 3, 252, 139, 32, 42, 3, 252, 138, 32, 42, 3, + 252, 137, 32, 42, 3, 252, 136, 32, 42, 3, 252, 135, 32, 42, 3, 252, 134, + 32, 42, 3, 252, 133, 32, 42, 3, 252, 132, 32, 42, 3, 252, 131, 32, 42, 3, + 252, 130, 32, 42, 3, 255, 166, 32, 42, 3, 252, 129, 32, 42, 3, 252, 128, + 32, 42, 3, 252, 127, 32, 42, 3, 252, 126, 32, 42, 3, 252, 125, 32, 42, 3, + 252, 124, 32, 42, 3, 252, 123, 32, 42, 3, 252, 122, 32, 42, 3, 252, 121, + 32, 42, 3, 252, 120, 32, 42, 3, 252, 119, 32, 42, 3, 252, 118, 32, 42, 3, + 252, 117, 32, 42, 3, 252, 116, 32, 42, 3, 252, 115, 32, 42, 3, 252, 114, + 32, 42, 3, 252, 113, 32, 42, 3, 252, 112, 32, 42, 3, 252, 111, 32, 42, 3, + 252, 110, 32, 42, 3, 252, 109, 32, 42, 3, 252, 108, 32, 42, 3, 252, 107, + 32, 42, 3, 252, 106, 32, 42, 3, 252, 105, 32, 42, 3, 252, 104, 32, 42, 3, + 252, 103, 32, 42, 3, 252, 102, 32, 42, 3, 252, 101, 32, 42, 3, 252, 100, + 32, 42, 3, 252, 99, 32, 42, 3, 252, 98, 32, 42, 3, 252, 97, 32, 42, 3, + 252, 96, 32, 42, 3, 252, 95, 32, 42, 3, 252, 94, 32, 42, 3, 252, 93, 32, + 42, 3, 252, 92, 32, 42, 3, 252, 91, 32, 42, 3, 252, 90, 32, 42, 3, 252, + 89, 32, 42, 3, 252, 88, 32, 42, 3, 252, 87, 32, 42, 3, 255, 79, 32, 42, + 3, 252, 86, 32, 42, 3, 252, 85, 32, 42, 3, 255, 44, 32, 42, 3, 252, 84, + 32, 42, 3, 252, 83, 32, 42, 3, 252, 82, 32, 42, 3, 252, 81, 32, 42, 3, + 255, 31, 32, 42, 3, 252, 80, 32, 42, 3, 252, 79, 32, 42, 3, 252, 78, 32, + 42, 3, 252, 77, 32, 42, 3, 252, 76, 32, 42, 3, 254, 103, 32, 42, 3, 254, + 102, 32, 42, 3, 254, 101, 32, 42, 3, 254, 100, 32, 42, 3, 254, 99, 32, + 42, 3, 254, 98, 32, 42, 3, 254, 97, 32, 42, 3, 254, 96, 32, 42, 3, 254, + 94, 32, 42, 3, 254, 93, 32, 42, 3, 254, 92, 32, 42, 3, 254, 91, 32, 42, + 3, 254, 90, 32, 42, 3, 254, 89, 32, 42, 3, 254, 87, 32, 42, 3, 254, 86, + 32, 42, 3, 254, 85, 32, 42, 3, 254, 84, 32, 42, 3, 254, 83, 32, 42, 3, + 254, 82, 32, 42, 3, 254, 81, 32, 42, 3, 254, 80, 32, 42, 3, 254, 79, 32, + 42, 3, 254, 78, 32, 42, 3, 254, 77, 32, 42, 3, 254, 76, 32, 42, 3, 254, + 75, 32, 42, 3, 254, 74, 32, 42, 3, 254, 73, 32, 42, 3, 254, 72, 32, 42, + 3, 254, 71, 32, 42, 3, 254, 70, 32, 42, 3, 254, 69, 32, 42, 3, 254, 67, + 32, 42, 3, 254, 66, 32, 42, 3, 254, 65, 32, 42, 3, 254, 61, 32, 42, 3, + 254, 60, 32, 42, 3, 254, 59, 32, 42, 3, 254, 58, 32, 42, 3, 254, 54, 32, + 42, 3, 254, 53, 32, 42, 3, 254, 52, 32, 42, 3, 254, 51, 32, 42, 3, 254, + 50, 32, 42, 3, 254, 49, 32, 42, 3, 254, 48, 32, 42, 3, 254, 47, 32, 42, + 3, 254, 46, 32, 42, 3, 254, 45, 32, 42, 3, 254, 44, 32, 42, 3, 254, 43, + 32, 42, 3, 254, 42, 32, 42, 3, 254, 41, 32, 42, 3, 254, 40, 32, 42, 3, + 254, 39, 32, 42, 3, 254, 38, 32, 42, 3, 254, 37, 32, 42, 3, 254, 36, 32, + 42, 3, 254, 35, 32, 42, 3, 254, 34, 32, 42, 3, 254, 33, 32, 42, 3, 254, + 32, 32, 42, 3, 254, 30, 32, 42, 3, 254, 29, 32, 42, 3, 254, 28, 32, 42, + 3, 254, 27, 32, 42, 3, 254, 26, 32, 42, 3, 254, 24, 32, 42, 3, 254, 23, + 32, 42, 3, 254, 22, 32, 42, 3, 254, 21, 32, 42, 3, 254, 19, 32, 42, 3, + 254, 18, 32, 42, 3, 254, 17, 32, 42, 3, 253, 239, 32, 42, 3, 253, 237, + 32, 42, 3, 253, 235, 32, 42, 3, 253, 233, 32, 42, 3, 253, 231, 32, 42, 3, + 253, 229, 32, 42, 3, 253, 227, 32, 42, 3, 253, 225, 32, 42, 3, 253, 223, + 32, 42, 3, 253, 221, 32, 42, 3, 253, 219, 32, 42, 3, 253, 216, 32, 42, 3, + 253, 214, 32, 42, 3, 253, 212, 32, 42, 3, 253, 210, 32, 42, 3, 253, 208, + 32, 42, 3, 253, 206, 32, 42, 3, 253, 204, 32, 42, 3, 253, 202, 32, 42, 3, + 253, 120, 32, 42, 3, 253, 119, 32, 42, 3, 253, 118, 32, 42, 3, 253, 117, + 32, 42, 3, 253, 116, 32, 42, 3, 253, 115, 32, 42, 3, 253, 113, 32, 42, 3, + 253, 112, 32, 42, 3, 253, 111, 32, 42, 3, 253, 110, 32, 42, 3, 253, 109, + 32, 42, 3, 253, 108, 32, 42, 3, 253, 106, 32, 42, 3, 253, 105, 32, 42, 3, + 253, 101, 32, 42, 3, 253, 100, 32, 42, 3, 253, 98, 32, 42, 3, 253, 97, + 32, 42, 3, 253, 96, 32, 42, 3, 253, 95, 32, 42, 3, 253, 94, 32, 42, 3, + 253, 93, 32, 42, 3, 253, 92, 32, 42, 3, 253, 91, 32, 42, 3, 253, 90, 32, + 42, 3, 253, 89, 32, 42, 3, 253, 88, 32, 42, 3, 253, 87, 32, 42, 3, 253, + 86, 32, 42, 3, 253, 85, 32, 42, 3, 253, 84, 32, 42, 3, 253, 83, 32, 42, + 3, 253, 82, 32, 42, 3, 253, 81, 32, 42, 3, 253, 80, 32, 42, 3, 253, 79, + 32, 42, 3, 253, 78, 32, 42, 3, 253, 77, 32, 42, 3, 253, 76, 32, 42, 3, + 253, 75, 32, 42, 3, 253, 74, 32, 42, 3, 253, 73, 32, 42, 3, 253, 72, 32, + 42, 3, 253, 71, 32, 42, 3, 253, 70, 32, 42, 3, 253, 69, 32, 42, 3, 253, + 68, 32, 42, 3, 253, 67, 32, 42, 3, 253, 66, 32, 42, 3, 253, 65, 32, 42, + 3, 253, 64, 32, 42, 3, 253, 63, 32, 42, 3, 253, 62, 32, 42, 3, 253, 61, + 32, 42, 3, 253, 60, 32, 42, 3, 253, 59, 32, 42, 3, 253, 58, 32, 42, 3, + 253, 57, 32, 42, 3, 253, 56, 32, 42, 3, 253, 55, 32, 42, 3, 253, 54, 32, + 42, 3, 253, 53, 32, 42, 3, 253, 52, 32, 42, 3, 253, 51, 32, 42, 3, 253, + 50, 32, 42, 3, 253, 49, 32, 42, 3, 253, 48, 32, 42, 3, 253, 47, 32, 42, + 3, 253, 46, 32, 42, 3, 253, 45, 32, 42, 3, 253, 44, 32, 42, 3, 253, 43, + 32, 42, 3, 253, 42, 32, 42, 3, 253, 41, 32, 42, 3, 253, 40, 32, 42, 3, + 253, 39, 32, 42, 3, 253, 38, 32, 42, 3, 253, 37, 32, 42, 3, 253, 36, 32, + 42, 3, 253, 35, 32, 42, 3, 253, 34, 32, 42, 3, 253, 33, 32, 42, 3, 253, + 32, 32, 42, 3, 253, 31, 32, 42, 3, 253, 30, 32, 42, 3, 253, 29, 32, 42, + 3, 253, 28, 32, 42, 3, 253, 27, 32, 42, 3, 253, 26, 32, 42, 3, 253, 25, + 32, 42, 3, 253, 24, 32, 42, 3, 253, 23, 32, 42, 3, 253, 22, 32, 42, 3, + 253, 21, 32, 42, 3, 253, 20, 32, 42, 3, 253, 19, 32, 42, 3, 253, 18, 32, + 42, 3, 253, 17, 32, 42, 3, 253, 16, 32, 42, 3, 253, 15, 32, 42, 3, 253, + 14, 32, 42, 3, 253, 13, 32, 42, 3, 253, 12, 32, 42, 3, 253, 11, 32, 42, + 3, 253, 10, 32, 42, 3, 253, 9, 32, 42, 3, 253, 8, 32, 42, 3, 253, 7, 32, + 42, 3, 253, 6, 32, 42, 3, 253, 5, 32, 42, 3, 253, 4, 32, 42, 3, 253, 3, + 32, 42, 3, 253, 2, 32, 42, 3, 253, 1, 32, 42, 3, 253, 0, 32, 42, 3, 252, + 255, 32, 42, 3, 252, 254, 32, 42, 3, 252, 253, 32, 42, 3, 252, 252, 32, + 42, 3, 252, 251, 32, 42, 3, 252, 250, 32, 42, 3, 252, 249, 32, 42, 3, + 252, 248, 32, 42, 3, 252, 247, 32, 42, 3, 252, 246, 32, 42, 3, 252, 245, + 32, 42, 3, 252, 244, 32, 42, 3, 252, 243, 32, 42, 3, 252, 242, 32, 42, 3, + 252, 241, 32, 42, 3, 252, 240, 32, 42, 3, 252, 239, 32, 42, 3, 252, 238, + 65, 32, 42, 3, 252, 237, 250, 122, 32, 42, 3, 252, 236, 238, 129, 32, 42, + 3, 252, 235, 71, 32, 42, 3, 252, 234, 233, 177, 32, 42, 3, 252, 233, 230, + 118, 32, 42, 3, 252, 232, 223, 37, 32, 42, 3, 252, 231, 222, 154, 32, 42, + 3, 252, 230, 172, 32, 42, 3, 252, 229, 220, 132, 32, 42, 3, 252, 228, + 220, 131, 32, 42, 3, 252, 227, 220, 130, 32, 42, 3, 252, 226, 220, 129, + 32, 42, 3, 252, 225, 193, 224, 32, 42, 3, 252, 224, 192, 235, 32, 42, 3, + 252, 223, 192, 159, 32, 42, 3, 252, 222, 211, 112, 32, 42, 3, 252, 221, + 252, 71, 32, 42, 3, 252, 220, 249, 56, 32, 42, 3, 252, 219, 237, 195, 32, + 42, 3, 252, 218, 233, 185, 32, 42, 3, 252, 217, 223, 12, 32, 42, 3, 252, + 216, 32, 42, 3, 252, 215, 32, 42, 3, 252, 214, 32, 42, 3, 252, 213, 32, + 42, 3, 252, 212, 32, 42, 3, 252, 211, 32, 42, 3, 252, 210, 32, 42, 3, + 252, 209, 52, 1, 2, 6, 252, 208, 52, 1, 200, 182, 197, 238, 242, 85, 52, + 1, 200, 182, 132, 197, 238, 242, 85, 52, 1, 2, 252, 27, 52, 1, 2, 6, 250, + 122, 52, 1, 2, 78, 4, 102, 52, 1, 2, 235, 39, 237, 4, 52, 1, 2, 235, 39, + 237, 5, 4, 207, 25, 102, 52, 1, 2, 235, 39, 237, 5, 4, 238, 177, 52, 1, + 2, 237, 72, 237, 4, 52, 1, 2, 238, 130, 4, 199, 215, 52, 1, 2, 238, 130, + 4, 102, 52, 1, 2, 238, 130, 4, 228, 253, 23, 199, 215, 52, 1, 2, 207, 19, + 71, 52, 1, 2, 242, 221, 207, 19, 211, 79, 71, 52, 1, 2, 233, 39, 237, 4, + 52, 1, 2, 207, 142, 228, 189, 52, 1, 2, 6, 232, 53, 52, 1, 2, 232, 54, 4, + 102, 52, 1, 2, 6, 232, 54, 4, 102, 52, 1, 2, 230, 119, 4, 106, 52, 1, 2, + 6, 230, 118, 52, 1, 2, 229, 199, 4, 102, 52, 1, 2, 236, 141, 223, 38, 4, + 201, 29, 23, 102, 52, 1, 2, 218, 229, 237, 4, 52, 1, 2, 218, 172, 237, 4, + 52, 1, 2, 220, 145, 4, 248, 233, 52, 1, 2, 6, 220, 145, 4, 248, 233, 52, + 1, 2, 220, 145, 4, 207, 25, 228, 253, 23, 248, 233, 52, 1, 2, 219, 164, + 52, 1, 2, 219, 165, 4, 207, 25, 102, 52, 1, 2, 154, 192, 159, 52, 1, 2, + 154, 192, 160, 4, 248, 233, 52, 1, 2, 187, 4, 106, 52, 1, 2, 6, 211, 153, + 52, 1, 2, 242, 221, 211, 112, 52, 1, 2, 208, 106, 52, 1, 2, 154, 207, + 224, 4, 180, 219, 214, 52, 1, 2, 154, 207, 224, 4, 180, 219, 215, 23, + 207, 25, 102, 52, 1, 2, 207, 224, 4, 199, 215, 52, 1, 2, 207, 224, 4, + 232, 235, 52, 1, 2, 6, 146, 52, 1, 2, 199, 152, 237, 5, 4, 238, 177, 52, + 1, 2, 197, 170, 237, 4, 52, 1, 2, 197, 170, 237, 5, 4, 207, 25, 102, 52, + 1, 2, 199, 79, 237, 4, 52, 1, 2, 200, 44, 4, 207, 25, 102, 52, 1, 2, 196, + 13, 4, 50, 102, 52, 1, 2, 6, 192, 159, 52, 1, 231, 13, 201, 65, 4, 106, + 52, 1, 207, 19, 231, 13, 201, 65, 4, 106, 52, 1, 248, 174, 242, 233, 52, + 1, 237, 100, 242, 233, 52, 1, 220, 5, 242, 233, 52, 1, 251, 152, 242, + 233, 52, 1, 207, 25, 242, 234, 4, 207, 25, 102, 52, 1, 2, 206, 10, 4, + 238, 177, 238, 137, 5, 65, 238, 137, 5, 71, 238, 137, 5, 68, 238, 137, 5, + 74, 238, 137, 5, 66, 238, 137, 5, 223, 34, 238, 137, 5, 222, 203, 238, + 137, 5, 155, 238, 137, 5, 222, 24, 238, 137, 5, 221, 168, 238, 137, 5, + 221, 69, 238, 137, 5, 220, 234, 238, 137, 5, 173, 238, 137, 5, 219, 240, + 238, 137, 5, 219, 148, 238, 137, 5, 219, 45, 238, 137, 5, 218, 227, 238, + 137, 5, 174, 238, 137, 5, 216, 234, 238, 137, 5, 216, 102, 238, 137, 5, + 216, 14, 238, 137, 5, 215, 157, 238, 137, 5, 181, 238, 137, 5, 214, 123, + 238, 137, 5, 213, 221, 238, 137, 5, 213, 45, 238, 137, 5, 212, 180, 238, + 137, 5, 168, 238, 137, 5, 210, 65, 238, 137, 5, 209, 187, 238, 137, 5, + 209, 75, 238, 137, 5, 208, 167, 238, 137, 5, 165, 238, 137, 5, 207, 115, + 238, 137, 5, 207, 2, 238, 137, 5, 206, 163, 238, 137, 5, 206, 69, 238, + 137, 5, 188, 238, 137, 5, 205, 69, 238, 137, 5, 202, 223, 238, 137, 5, + 202, 47, 238, 137, 5, 201, 5, 238, 137, 5, 190, 190, 238, 137, 5, 199, + 145, 238, 137, 5, 198, 193, 238, 137, 5, 159, 238, 137, 5, 197, 94, 238, + 137, 5, 193, 190, 238, 137, 5, 193, 125, 238, 137, 5, 193, 86, 238, 137, + 5, 193, 48, 238, 137, 5, 192, 220, 238, 137, 5, 192, 214, 238, 137, 5, + 191, 123, 238, 137, 5, 191, 7, 223, 166, 251, 20, 1, 251, 192, 223, 166, + 251, 20, 1, 248, 213, 223, 166, 251, 20, 1, 231, 40, 223, 166, 251, 20, + 1, 237, 254, 223, 166, 251, 20, 1, 229, 247, 223, 166, 251, 20, 1, 193, + 133, 223, 166, 251, 20, 1, 191, 91, 223, 166, 251, 20, 1, 229, 186, 223, + 166, 251, 20, 1, 199, 69, 223, 166, 251, 20, 1, 191, 249, 223, 166, 251, + 20, 1, 222, 77, 223, 166, 251, 20, 1, 220, 28, 223, 166, 251, 20, 1, 216, + 195, 223, 166, 251, 20, 1, 212, 132, 223, 166, 251, 20, 1, 205, 149, 223, + 166, 251, 20, 1, 250, 128, 223, 166, 251, 20, 1, 210, 65, 223, 166, 251, + 20, 1, 205, 190, 223, 166, 251, 20, 1, 208, 39, 223, 166, 251, 20, 1, + 207, 39, 223, 166, 251, 20, 1, 203, 70, 223, 166, 251, 20, 1, 199, 159, + 223, 166, 251, 20, 205, 55, 56, 223, 166, 251, 20, 31, 107, 223, 166, + 251, 20, 31, 109, 223, 166, 251, 20, 31, 138, 223, 166, 251, 20, 31, 199, + 95, 223, 166, 251, 20, 31, 197, 32, 223, 166, 251, 20, 31, 91, 228, 142, + 223, 166, 251, 20, 31, 91, 189, 223, 166, 251, 20, 31, 199, 96, 189, 210, + 182, 1, 251, 192, 210, 182, 1, 248, 213, 210, 182, 1, 231, 40, 210, 182, + 1, 237, 254, 210, 182, 1, 229, 247, 210, 182, 1, 193, 133, 210, 182, 1, + 191, 91, 210, 182, 1, 229, 186, 210, 182, 1, 199, 69, 210, 182, 1, 191, + 249, 210, 182, 1, 222, 77, 210, 182, 1, 220, 28, 210, 182, 1, 216, 195, + 210, 182, 1, 53, 212, 132, 210, 182, 1, 212, 132, 210, 182, 1, 205, 149, + 210, 182, 1, 250, 128, 210, 182, 1, 210, 65, 210, 182, 1, 205, 190, 210, + 182, 1, 208, 39, 210, 182, 1, 207, 39, 210, 182, 1, 203, 70, 210, 182, 1, + 199, 159, 210, 182, 219, 221, 232, 203, 210, 182, 206, 204, 232, 203, + 210, 182, 31, 107, 210, 182, 31, 109, 210, 182, 31, 138, 210, 182, 31, + 134, 210, 182, 31, 150, 210, 182, 31, 199, 95, 210, 182, 31, 197, 32, + 214, 248, 1, 53, 251, 192, 214, 248, 1, 251, 192, 214, 248, 1, 53, 248, + 213, 214, 248, 1, 248, 213, 214, 248, 1, 231, 40, 214, 248, 1, 237, 254, + 214, 248, 1, 53, 229, 247, 214, 248, 1, 229, 247, 214, 248, 1, 193, 133, + 214, 248, 1, 191, 91, 214, 248, 1, 229, 186, 214, 248, 1, 199, 69, 214, + 248, 1, 53, 191, 249, 214, 248, 1, 191, 249, 214, 248, 1, 53, 222, 77, + 214, 248, 1, 222, 77, 214, 248, 1, 53, 220, 28, 214, 248, 1, 220, 28, + 214, 248, 1, 53, 216, 195, 214, 248, 1, 216, 195, 214, 248, 1, 53, 212, + 132, 214, 248, 1, 212, 132, 214, 248, 1, 205, 149, 214, 248, 1, 250, 128, + 214, 248, 1, 210, 65, 214, 248, 1, 205, 190, 214, 248, 1, 208, 39, 214, + 248, 1, 207, 39, 214, 248, 1, 53, 203, 70, 214, 248, 1, 203, 70, 214, + 248, 1, 199, 159, 214, 248, 31, 107, 214, 248, 31, 109, 214, 248, 31, + 138, 214, 248, 31, 134, 214, 248, 238, 204, 31, 134, 214, 248, 31, 150, + 214, 248, 31, 199, 95, 214, 248, 31, 197, 32, 214, 248, 31, 91, 228, 142, + 230, 6, 1, 251, 192, 230, 6, 1, 248, 213, 230, 6, 1, 231, 40, 230, 6, 1, + 237, 253, 230, 6, 1, 229, 247, 230, 6, 1, 193, 133, 230, 6, 1, 191, 89, + 230, 6, 1, 229, 186, 230, 6, 1, 199, 69, 230, 6, 1, 191, 249, 230, 6, 1, + 222, 77, 230, 6, 1, 220, 28, 230, 6, 1, 216, 195, 230, 6, 1, 212, 132, + 230, 6, 1, 205, 149, 230, 6, 1, 250, 126, 230, 6, 1, 210, 65, 230, 6, 1, + 205, 190, 230, 6, 1, 208, 39, 230, 6, 1, 203, 70, 230, 6, 1, 199, 159, + 230, 6, 31, 107, 230, 6, 31, 150, 230, 6, 31, 199, 95, 230, 6, 31, 197, + 32, 230, 6, 31, 91, 228, 142, 209, 199, 1, 251, 189, 209, 199, 1, 248, + 216, 209, 199, 1, 231, 215, 209, 199, 1, 237, 110, 209, 199, 1, 229, 247, + 209, 199, 1, 193, 140, 209, 199, 1, 191, 115, 209, 199, 1, 229, 188, 209, + 199, 1, 199, 73, 209, 199, 1, 191, 250, 209, 199, 1, 222, 108, 209, 199, + 1, 220, 34, 209, 199, 1, 216, 195, 209, 199, 1, 212, 132, 209, 199, 1, + 204, 20, 209, 199, 1, 251, 232, 209, 199, 1, 210, 65, 209, 199, 1, 205, + 192, 209, 199, 1, 208, 44, 209, 199, 1, 206, 125, 209, 199, 1, 203, 70, + 209, 199, 1, 199, 166, 209, 199, 31, 107, 209, 199, 31, 199, 95, 209, + 199, 31, 197, 32, 209, 199, 31, 91, 228, 142, 209, 199, 31, 109, 209, + 199, 31, 138, 209, 199, 193, 23, 204, 11, 218, 182, 1, 65, 218, 182, 1, + 250, 122, 218, 182, 1, 232, 53, 218, 182, 1, 238, 129, 218, 182, 1, 71, + 218, 182, 1, 196, 12, 218, 182, 1, 68, 218, 182, 1, 192, 159, 218, 182, + 1, 222, 154, 218, 182, 1, 172, 218, 182, 1, 218, 170, 218, 182, 1, 215, + 63, 218, 182, 1, 74, 218, 182, 1, 146, 218, 182, 1, 201, 179, 218, 182, + 1, 200, 43, 218, 182, 1, 66, 218, 182, 1, 233, 177, 218, 182, 1, 208, + 106, 218, 182, 1, 206, 9, 218, 182, 1, 197, 135, 218, 182, 1, 251, 134, + 218, 182, 1, 234, 105, 218, 182, 1, 218, 185, 218, 182, 1, 213, 82, 218, + 182, 1, 247, 195, 218, 182, 197, 238, 77, 153, 229, 146, 1, 65, 153, 229, + 146, 1, 71, 153, 229, 146, 1, 68, 153, 229, 146, 1, 74, 153, 229, 146, 1, + 170, 153, 229, 146, 1, 193, 190, 153, 229, 146, 1, 249, 155, 153, 229, + 146, 1, 249, 154, 153, 229, 146, 1, 168, 153, 229, 146, 1, 174, 153, 229, + 146, 1, 181, 153, 229, 146, 1, 215, 7, 153, 229, 146, 1, 214, 123, 153, + 229, 146, 1, 214, 121, 153, 229, 146, 1, 165, 153, 229, 146, 1, 207, 186, + 153, 229, 146, 1, 173, 153, 229, 146, 1, 221, 217, 153, 229, 146, 1, 229, + 179, 153, 229, 146, 1, 188, 153, 229, 146, 1, 205, 206, 153, 229, 146, 1, + 205, 69, 153, 229, 146, 1, 155, 153, 229, 146, 1, 208, 98, 153, 229, 146, + 1, 190, 190, 153, 229, 146, 1, 199, 250, 153, 229, 146, 1, 199, 145, 153, + 229, 146, 1, 199, 143, 153, 229, 146, 1, 159, 153, 229, 146, 1, 238, 34, + 153, 229, 146, 16, 195, 63, 153, 229, 146, 16, 195, 62, 153, 238, 168, 1, + 65, 153, 238, 168, 1, 71, 153, 238, 168, 1, 68, 153, 238, 168, 1, 74, + 153, 238, 168, 1, 170, 153, 238, 168, 1, 193, 190, 153, 238, 168, 1, 249, + 155, 153, 238, 168, 1, 168, 153, 238, 168, 1, 174, 153, 238, 168, 1, 181, + 153, 238, 168, 1, 214, 123, 153, 238, 168, 1, 165, 153, 238, 168, 1, 173, + 153, 238, 168, 1, 221, 217, 153, 238, 168, 1, 229, 179, 153, 238, 168, 1, + 188, 153, 238, 168, 1, 251, 16, 188, 153, 238, 168, 1, 205, 69, 153, 238, + 168, 1, 155, 153, 238, 168, 1, 208, 98, 153, 238, 168, 1, 190, 190, 153, + 238, 168, 1, 199, 145, 153, 238, 168, 1, 159, 153, 238, 168, 1, 238, 34, + 153, 238, 168, 232, 120, 234, 130, 197, 39, 153, 238, 168, 232, 120, 91, + 230, 72, 153, 238, 168, 219, 30, 206, 169, 153, 238, 168, 219, 30, 223, + 171, 153, 238, 168, 31, 107, 153, 238, 168, 31, 109, 153, 238, 168, 31, + 138, 153, 238, 168, 31, 134, 153, 238, 168, 31, 150, 153, 238, 168, 31, + 169, 153, 238, 168, 31, 175, 153, 238, 168, 31, 171, 153, 238, 168, 31, + 178, 153, 238, 168, 31, 199, 95, 153, 238, 168, 31, 197, 32, 153, 238, + 168, 31, 198, 249, 153, 238, 168, 31, 232, 137, 153, 238, 168, 31, 233, + 17, 153, 238, 168, 31, 202, 121, 153, 238, 168, 31, 203, 242, 153, 238, + 168, 31, 91, 228, 142, 153, 238, 168, 31, 105, 228, 142, 153, 238, 168, + 31, 115, 228, 142, 153, 238, 168, 31, 232, 130, 228, 142, 153, 238, 168, + 31, 232, 228, 228, 142, 153, 238, 168, 31, 202, 137, 228, 142, 153, 238, + 168, 31, 203, 248, 228, 142, 153, 238, 168, 31, 234, 166, 228, 142, 153, + 238, 168, 31, 213, 177, 228, 142, 153, 238, 168, 31, 91, 189, 153, 238, + 168, 31, 105, 189, 153, 238, 168, 31, 115, 189, 153, 238, 168, 31, 232, + 130, 189, 153, 238, 168, 31, 232, 228, 189, 153, 238, 168, 31, 202, 137, + 189, 153, 238, 168, 31, 203, 248, 189, 153, 238, 168, 31, 234, 166, 189, + 153, 238, 168, 31, 213, 177, 189, 153, 238, 168, 31, 199, 96, 189, 153, + 238, 168, 31, 197, 33, 189, 153, 238, 168, 31, 198, 250, 189, 153, 238, + 168, 31, 232, 138, 189, 153, 238, 168, 31, 233, 18, 189, 153, 238, 168, + 31, 202, 122, 189, 153, 238, 168, 31, 203, 243, 189, 153, 238, 168, 31, + 234, 156, 189, 153, 238, 168, 31, 213, 172, 189, 153, 238, 168, 31, 91, + 228, 143, 189, 153, 238, 168, 31, 105, 228, 143, 189, 153, 238, 168, 31, + 115, 228, 143, 189, 153, 238, 168, 31, 232, 130, 228, 143, 189, 153, 238, + 168, 31, 232, 228, 228, 143, 189, 153, 238, 168, 31, 202, 137, 228, 143, + 189, 153, 238, 168, 31, 203, 248, 228, 143, 189, 153, 238, 168, 31, 234, + 166, 228, 143, 189, 153, 238, 168, 31, 213, 177, 228, 143, 189, 153, 238, + 168, 232, 120, 91, 197, 40, 153, 238, 168, 232, 120, 105, 197, 39, 153, + 238, 168, 232, 120, 115, 197, 39, 153, 238, 168, 232, 120, 232, 130, 197, + 39, 153, 238, 168, 232, 120, 232, 228, 197, 39, 153, 238, 168, 232, 120, + 202, 137, 197, 39, 153, 238, 168, 232, 120, 203, 248, 197, 39, 153, 238, + 168, 232, 120, 234, 166, 197, 39, 153, 238, 168, 232, 120, 213, 177, 197, + 39, 153, 238, 168, 232, 120, 199, 96, 197, 39, 221, 201, 1, 65, 221, 201, + 18, 3, 68, 221, 201, 18, 3, 66, 221, 201, 18, 3, 117, 146, 221, 201, 18, + 3, 71, 221, 201, 18, 3, 74, 221, 201, 18, 219, 200, 77, 221, 201, 3, 55, + 206, 190, 60, 221, 201, 3, 251, 73, 221, 201, 3, 195, 35, 221, 201, 1, + 155, 221, 201, 1, 221, 217, 221, 201, 1, 231, 242, 221, 201, 1, 231, 93, + 221, 201, 1, 247, 162, 221, 201, 1, 247, 3, 221, 201, 1, 223, 34, 221, + 201, 1, 212, 103, 221, 201, 1, 197, 132, 221, 201, 1, 197, 120, 221, 201, + 1, 237, 193, 221, 201, 1, 237, 177, 221, 201, 1, 213, 81, 221, 201, 1, + 190, 190, 221, 201, 1, 199, 49, 221, 201, 1, 238, 34, 221, 201, 1, 237, + 70, 221, 201, 1, 181, 221, 201, 1, 168, 221, 201, 1, 209, 230, 221, 201, + 1, 249, 155, 221, 201, 1, 248, 205, 221, 201, 1, 174, 221, 201, 1, 170, + 221, 201, 1, 165, 221, 201, 1, 173, 221, 201, 1, 195, 188, 221, 201, 1, + 203, 166, 221, 201, 1, 201, 176, 221, 201, 1, 188, 221, 201, 1, 191, 123, + 221, 201, 1, 140, 221, 201, 1, 221, 103, 221, 201, 1, 197, 100, 221, 201, + 1, 197, 101, 221, 201, 1, 195, 70, 221, 201, 3, 249, 90, 58, 221, 201, 3, + 247, 76, 221, 201, 3, 75, 60, 221, 201, 195, 40, 221, 201, 17, 107, 221, + 201, 17, 109, 221, 201, 17, 138, 221, 201, 17, 134, 221, 201, 31, 199, + 95, 221, 201, 31, 197, 32, 221, 201, 31, 91, 228, 142, 221, 201, 31, 91, + 189, 221, 201, 232, 120, 91, 230, 72, 221, 201, 208, 154, 236, 142, 221, + 201, 208, 154, 2, 243, 12, 221, 201, 208, 154, 243, 12, 221, 201, 208, + 154, 238, 230, 164, 221, 201, 208, 154, 217, 85, 221, 201, 208, 154, 218, + 248, 221, 201, 208, 154, 237, 240, 221, 201, 208, 154, 55, 237, 240, 221, + 201, 208, 154, 219, 108, 39, 202, 3, 251, 31, 1, 229, 247, 39, 202, 3, + 251, 31, 1, 220, 28, 39, 202, 3, 251, 31, 1, 229, 186, 39, 202, 3, 251, + 31, 1, 216, 195, 39, 202, 3, 251, 31, 1, 208, 39, 39, 202, 3, 251, 31, 1, + 193, 133, 39, 202, 3, 251, 31, 1, 203, 70, 39, 202, 3, 251, 31, 1, 207, + 39, 39, 202, 3, 251, 31, 1, 248, 213, 39, 202, 3, 251, 31, 1, 199, 159, + 39, 202, 3, 251, 31, 1, 205, 123, 39, 202, 3, 251, 31, 1, 222, 77, 39, + 202, 3, 251, 31, 1, 212, 132, 39, 202, 3, 251, 31, 1, 221, 196, 39, 202, + 3, 251, 31, 1, 205, 190, 39, 202, 3, 251, 31, 1, 205, 149, 39, 202, 3, + 251, 31, 1, 233, 61, 39, 202, 3, 251, 31, 1, 251, 194, 39, 202, 3, 251, + 31, 1, 250, 126, 39, 202, 3, 251, 31, 1, 237, 67, 39, 202, 3, 251, 31, 1, + 231, 40, 39, 202, 3, 251, 31, 1, 237, 254, 39, 202, 3, 251, 31, 1, 231, + 81, 39, 202, 3, 251, 31, 1, 199, 69, 39, 202, 3, 251, 31, 1, 191, 89, 39, + 202, 3, 251, 31, 1, 237, 64, 39, 202, 3, 251, 31, 1, 191, 249, 39, 202, + 3, 251, 31, 1, 199, 35, 39, 202, 3, 251, 31, 1, 199, 14, 39, 202, 3, 251, + 31, 31, 107, 39, 202, 3, 251, 31, 31, 233, 17, 39, 202, 3, 251, 31, 167, + 223, 146, 39, 186, 251, 31, 1, 229, 212, 39, 186, 251, 31, 1, 220, 37, + 39, 186, 251, 31, 1, 230, 83, 39, 186, 251, 31, 1, 216, 210, 39, 186, + 251, 31, 1, 208, 91, 39, 186, 251, 31, 1, 193, 133, 39, 186, 251, 31, 1, + 234, 22, 39, 186, 251, 31, 1, 207, 72, 39, 186, 251, 31, 1, 248, 247, 39, + 186, 251, 31, 1, 199, 114, 39, 186, 251, 31, 1, 234, 23, 39, 186, 251, + 31, 1, 222, 108, 39, 186, 251, 31, 1, 213, 26, 39, 186, 251, 31, 1, 221, + 212, 39, 186, 251, 31, 1, 205, 193, 39, 186, 251, 31, 1, 234, 21, 39, + 186, 251, 31, 1, 233, 48, 39, 186, 251, 31, 1, 251, 194, 39, 186, 251, + 31, 1, 251, 232, 39, 186, 251, 31, 1, 238, 28, 39, 186, 251, 31, 1, 231, + 158, 39, 186, 251, 31, 1, 238, 5, 39, 186, 251, 31, 1, 231, 88, 39, 186, + 251, 31, 1, 199, 219, 39, 186, 251, 31, 1, 191, 113, 39, 186, 251, 31, 1, + 199, 41, 39, 186, 251, 31, 1, 192, 75, 39, 186, 251, 31, 1, 199, 29, 39, + 186, 251, 31, 1, 191, 116, 39, 186, 251, 31, 31, 107, 39, 186, 251, 31, + 31, 199, 95, 39, 186, 251, 31, 31, 197, 32, 217, 83, 1, 251, 192, 217, + 83, 1, 248, 213, 217, 83, 1, 248, 196, 217, 83, 1, 231, 40, 217, 83, 1, + 231, 66, 217, 83, 1, 237, 254, 217, 83, 1, 229, 247, 217, 83, 1, 193, + 133, 217, 83, 3, 196, 158, 217, 83, 1, 191, 91, 217, 83, 1, 191, 64, 217, + 83, 1, 223, 14, 217, 83, 1, 222, 250, 217, 83, 1, 229, 186, 217, 83, 1, + 199, 69, 217, 83, 1, 191, 249, 217, 83, 1, 222, 77, 217, 83, 1, 192, 217, + 217, 83, 1, 221, 203, 217, 83, 1, 220, 28, 217, 83, 1, 237, 63, 217, 83, + 1, 199, 40, 217, 83, 1, 216, 195, 217, 83, 1, 212, 132, 217, 83, 1, 205, + 149, 217, 83, 1, 250, 128, 217, 83, 1, 252, 160, 217, 83, 1, 210, 65, + 217, 83, 1, 233, 61, 217, 83, 1, 205, 190, 217, 83, 1, 208, 39, 217, 83, + 1, 192, 193, 217, 83, 1, 208, 66, 217, 83, 1, 207, 39, 217, 83, 1, 203, + 70, 217, 83, 1, 201, 144, 217, 83, 1, 199, 159, 217, 83, 252, 70, 87, 58, + 217, 83, 252, 70, 87, 60, 217, 83, 31, 107, 217, 83, 31, 150, 217, 83, + 31, 199, 95, 217, 83, 31, 197, 32, 217, 83, 31, 91, 228, 142, 217, 83, + 208, 154, 201, 103, 217, 83, 208, 154, 232, 203, 217, 83, 208, 154, 55, + 75, 193, 53, 236, 142, 217, 83, 208, 154, 75, 193, 53, 236, 142, 217, 83, + 208, 154, 236, 142, 217, 83, 208, 154, 105, 236, 140, 217, 83, 208, 154, + 219, 115, 233, 5, 250, 144, 1, 65, 250, 144, 1, 252, 208, 250, 144, 1, + 251, 70, 250, 144, 1, 252, 166, 250, 144, 1, 251, 134, 250, 144, 1, 252, + 168, 250, 144, 1, 252, 27, 250, 144, 1, 252, 23, 250, 144, 1, 71, 250, + 144, 1, 234, 190, 250, 144, 1, 74, 250, 144, 1, 211, 89, 250, 144, 1, 68, + 250, 144, 1, 223, 201, 250, 144, 1, 66, 250, 144, 1, 196, 30, 250, 144, + 1, 222, 24, 250, 144, 1, 192, 214, 250, 144, 1, 192, 173, 250, 144, 1, + 192, 184, 250, 144, 1, 231, 167, 250, 144, 1, 231, 124, 250, 144, 1, 231, + 79, 250, 144, 1, 247, 44, 250, 144, 1, 223, 12, 250, 144, 1, 199, 145, + 250, 144, 1, 199, 33, 250, 144, 1, 237, 148, 250, 144, 1, 237, 61, 250, + 144, 1, 197, 127, 250, 144, 1, 210, 65, 250, 144, 1, 233, 61, 250, 144, + 1, 249, 19, 250, 144, 1, 248, 198, 250, 144, 1, 214, 57, 250, 144, 1, + 213, 228, 250, 144, 1, 213, 229, 250, 144, 1, 214, 123, 250, 144, 1, 212, + 92, 250, 144, 1, 213, 76, 250, 144, 1, 216, 234, 250, 144, 1, 229, 75, + 250, 144, 1, 191, 173, 250, 144, 1, 192, 80, 250, 144, 1, 195, 153, 250, + 144, 1, 207, 115, 250, 144, 1, 219, 240, 250, 144, 1, 205, 69, 250, 144, + 1, 191, 87, 250, 144, 1, 203, 114, 250, 144, 1, 191, 62, 250, 144, 1, + 202, 230, 250, 144, 1, 201, 145, 250, 144, 1, 229, 247, 250, 144, 252, + 70, 77, 198, 138, 105, 185, 139, 91, 75, 208, 153, 2, 105, 185, 139, 91, + 75, 208, 153, 220, 15, 105, 185, 139, 91, 75, 208, 153, 220, 15, 91, 75, + 139, 105, 185, 208, 153, 220, 15, 105, 206, 186, 139, 91, 206, 190, 208, + 153, 220, 15, 91, 206, 190, 139, 105, 206, 186, 208, 153, 223, 124, 210, + 108, 1, 251, 192, 223, 124, 210, 108, 1, 248, 213, 223, 124, 210, 108, 1, + 231, 40, 223, 124, 210, 108, 1, 237, 254, 223, 124, 210, 108, 1, 229, + 247, 223, 124, 210, 108, 1, 193, 133, 223, 124, 210, 108, 1, 191, 91, + 223, 124, 210, 108, 1, 229, 186, 223, 124, 210, 108, 1, 199, 69, 223, + 124, 210, 108, 1, 191, 249, 223, 124, 210, 108, 1, 222, 77, 223, 124, + 210, 108, 1, 220, 28, 223, 124, 210, 108, 1, 216, 195, 223, 124, 210, + 108, 1, 212, 132, 223, 124, 210, 108, 1, 205, 149, 223, 124, 210, 108, 1, + 250, 128, 223, 124, 210, 108, 1, 210, 65, 223, 124, 210, 108, 1, 205, + 190, 223, 124, 210, 108, 1, 208, 39, 223, 124, 210, 108, 1, 207, 39, 223, + 124, 210, 108, 1, 203, 70, 223, 124, 210, 108, 1, 199, 159, 223, 124, + 210, 108, 31, 107, 223, 124, 210, 108, 31, 109, 223, 124, 210, 108, 31, + 138, 223, 124, 210, 108, 31, 134, 223, 124, 210, 108, 31, 199, 95, 223, + 124, 210, 108, 31, 197, 32, 223, 124, 210, 108, 31, 91, 228, 142, 223, + 124, 210, 108, 31, 91, 189, 223, 124, 210, 201, 1, 251, 192, 223, 124, + 210, 201, 1, 248, 213, 223, 124, 210, 201, 1, 231, 40, 223, 124, 210, + 201, 1, 237, 254, 223, 124, 210, 201, 1, 229, 247, 223, 124, 210, 201, 1, + 193, 132, 223, 124, 210, 201, 1, 191, 91, 223, 124, 210, 201, 1, 229, + 186, 223, 124, 210, 201, 1, 199, 69, 223, 124, 210, 201, 1, 191, 249, + 223, 124, 210, 201, 1, 222, 77, 223, 124, 210, 201, 1, 220, 28, 223, 124, + 210, 201, 1, 216, 194, 223, 124, 210, 201, 1, 212, 132, 223, 124, 210, + 201, 1, 205, 149, 223, 124, 210, 201, 1, 210, 65, 223, 124, 210, 201, 1, + 205, 190, 223, 124, 210, 201, 1, 203, 70, 223, 124, 210, 201, 1, 199, + 159, 223, 124, 210, 201, 31, 107, 223, 124, 210, 201, 31, 109, 223, 124, + 210, 201, 31, 138, 223, 124, 210, 201, 31, 134, 223, 124, 210, 201, 31, + 199, 95, 223, 124, 210, 201, 31, 197, 32, 223, 124, 210, 201, 31, 91, + 228, 142, 223, 124, 210, 201, 31, 91, 189, 208, 179, 210, 201, 1, 251, + 192, 208, 179, 210, 201, 1, 248, 213, 208, 179, 210, 201, 1, 231, 40, + 208, 179, 210, 201, 1, 237, 254, 208, 179, 210, 201, 1, 229, 247, 208, + 179, 210, 201, 1, 193, 132, 208, 179, 210, 201, 1, 191, 91, 208, 179, + 210, 201, 1, 229, 186, 208, 179, 210, 201, 1, 191, 249, 208, 179, 210, + 201, 1, 222, 77, 208, 179, 210, 201, 1, 220, 28, 208, 179, 210, 201, 1, + 216, 194, 208, 179, 210, 201, 1, 212, 132, 208, 179, 210, 201, 1, 205, + 149, 208, 179, 210, 201, 1, 210, 65, 208, 179, 210, 201, 1, 205, 190, + 208, 179, 210, 201, 1, 203, 70, 208, 179, 210, 201, 1, 199, 159, 208, + 179, 210, 201, 205, 55, 77, 208, 179, 210, 201, 154, 205, 55, 77, 208, + 179, 210, 201, 232, 130, 185, 4, 238, 219, 208, 179, 210, 201, 232, 130, + 185, 4, 236, 142, 208, 179, 210, 201, 31, 107, 208, 179, 210, 201, 31, + 109, 208, 179, 210, 201, 31, 138, 208, 179, 210, 201, 31, 134, 208, 179, + 210, 201, 31, 199, 95, 208, 179, 210, 201, 31, 197, 32, 208, 179, 210, + 201, 31, 91, 228, 142, 39, 197, 61, 1, 211, 46, 65, 39, 197, 61, 1, 192, + 68, 65, 39, 197, 61, 1, 192, 68, 252, 27, 39, 197, 61, 1, 211, 46, 68, 39, 197, 61, 1, 192, 68, 68, 39, 197, 61, 1, 192, 68, 71, 39, 197, 61, 1, - 211, 44, 74, 39, 197, 61, 1, 211, 44, 211, 151, 39, 197, 61, 1, 192, 68, - 211, 151, 39, 197, 61, 1, 211, 44, 252, 155, 39, 197, 61, 1, 192, 68, - 252, 155, 39, 197, 61, 1, 211, 44, 252, 24, 39, 197, 61, 1, 192, 68, 252, - 24, 39, 197, 61, 1, 211, 44, 251, 253, 39, 197, 61, 1, 192, 68, 251, 253, - 39, 197, 61, 1, 211, 44, 252, 19, 39, 197, 61, 1, 192, 68, 252, 19, 39, - 197, 61, 1, 211, 44, 252, 42, 39, 197, 61, 1, 192, 68, 252, 42, 39, 197, - 61, 1, 211, 44, 252, 23, 39, 197, 61, 1, 211, 44, 233, 182, 39, 197, 61, - 1, 192, 68, 233, 182, 39, 197, 61, 1, 211, 44, 250, 131, 39, 197, 61, 1, - 192, 68, 250, 131, 39, 197, 61, 1, 211, 44, 252, 6, 39, 197, 61, 1, 192, - 68, 252, 6, 39, 197, 61, 1, 211, 44, 252, 17, 39, 197, 61, 1, 192, 68, - 252, 17, 39, 197, 61, 1, 211, 44, 211, 149, 39, 197, 61, 1, 192, 68, 211, - 149, 39, 197, 61, 1, 211, 44, 251, 207, 39, 197, 61, 1, 192, 68, 251, - 207, 39, 197, 61, 1, 211, 44, 252, 16, 39, 197, 61, 1, 211, 44, 234, 118, - 39, 197, 61, 1, 211, 44, 234, 114, 39, 197, 61, 1, 211, 44, 251, 132, 39, - 197, 61, 1, 211, 44, 252, 14, 39, 197, 61, 1, 192, 68, 252, 14, 39, 197, - 61, 1, 211, 44, 234, 80, 39, 197, 61, 1, 192, 68, 234, 80, 39, 197, 61, - 1, 211, 44, 234, 100, 39, 197, 61, 1, 192, 68, 234, 100, 39, 197, 61, 1, - 211, 44, 234, 66, 39, 197, 61, 1, 192, 68, 234, 66, 39, 197, 61, 1, 192, - 68, 251, 122, 39, 197, 61, 1, 211, 44, 234, 88, 39, 197, 61, 1, 192, 68, - 252, 13, 39, 197, 61, 1, 211, 44, 234, 56, 39, 197, 61, 1, 211, 44, 211, - 78, 39, 197, 61, 1, 211, 44, 228, 28, 39, 197, 61, 1, 211, 44, 234, 197, - 39, 197, 61, 1, 192, 68, 234, 197, 39, 197, 61, 1, 211, 44, 251, 37, 39, - 197, 61, 1, 192, 68, 251, 37, 39, 197, 61, 1, 211, 44, 223, 79, 39, 197, - 61, 1, 192, 68, 223, 79, 39, 197, 61, 1, 211, 44, 211, 58, 39, 197, 61, - 1, 192, 68, 211, 58, 39, 197, 61, 1, 211, 44, 251, 33, 39, 197, 61, 1, - 192, 68, 251, 33, 39, 197, 61, 1, 211, 44, 252, 12, 39, 197, 61, 1, 211, - 44, 250, 219, 39, 197, 61, 1, 211, 44, 252, 10, 39, 197, 61, 1, 211, 44, - 250, 209, 39, 197, 61, 1, 192, 68, 250, 209, 39, 197, 61, 1, 211, 44, - 234, 12, 39, 197, 61, 1, 192, 68, 234, 12, 39, 197, 61, 1, 211, 44, 250, - 182, 39, 197, 61, 1, 192, 68, 250, 182, 39, 197, 61, 1, 211, 44, 252, 7, - 39, 197, 61, 1, 192, 68, 252, 7, 39, 197, 61, 1, 211, 44, 211, 30, 39, - 197, 61, 1, 211, 44, 249, 71, 39, 177, 6, 1, 65, 39, 177, 6, 1, 252, 206, - 39, 177, 6, 1, 234, 199, 39, 177, 6, 1, 251, 144, 39, 177, 6, 1, 234, - 197, 39, 177, 6, 1, 234, 100, 39, 177, 6, 1, 234, 193, 39, 177, 6, 1, - 234, 192, 39, 177, 6, 1, 251, 125, 39, 177, 6, 1, 71, 39, 177, 6, 1, 242, - 220, 71, 39, 177, 6, 1, 234, 188, 39, 177, 6, 1, 234, 181, 39, 177, 6, 1, - 234, 180, 39, 177, 6, 1, 234, 176, 39, 177, 6, 1, 234, 173, 39, 177, 6, - 1, 68, 39, 177, 6, 1, 223, 199, 39, 177, 6, 1, 234, 150, 39, 177, 6, 1, - 234, 147, 39, 177, 6, 1, 251, 216, 39, 177, 6, 1, 196, 86, 39, 177, 6, 1, - 234, 140, 39, 177, 6, 1, 234, 117, 39, 177, 6, 1, 234, 114, 39, 177, 6, - 1, 234, 103, 39, 177, 6, 1, 234, 66, 39, 177, 6, 1, 74, 39, 177, 6, 1, - 211, 87, 39, 177, 6, 1, 213, 182, 211, 151, 39, 177, 6, 1, 206, 58, 211, - 151, 39, 177, 6, 1, 211, 150, 39, 177, 6, 1, 234, 56, 39, 177, 6, 1, 234, - 108, 39, 177, 6, 1, 234, 34, 39, 177, 6, 1, 203, 40, 234, 34, 39, 177, 6, - 1, 234, 22, 39, 177, 6, 1, 234, 1, 39, 177, 6, 1, 233, 255, 39, 177, 6, - 1, 234, 80, 39, 177, 6, 1, 233, 243, 39, 177, 6, 1, 234, 195, 39, 177, 6, - 1, 66, 39, 177, 6, 1, 196, 30, 39, 177, 6, 1, 213, 182, 196, 152, 39, - 177, 6, 1, 206, 58, 196, 152, 39, 177, 6, 1, 233, 230, 39, 177, 6, 1, - 233, 182, 39, 177, 6, 1, 233, 177, 39, 177, 6, 1, 234, 79, 56, 39, 177, - 6, 1, 196, 45, 39, 177, 2, 1, 65, 39, 177, 2, 1, 252, 206, 39, 177, 2, 1, - 234, 199, 39, 177, 2, 1, 251, 144, 39, 177, 2, 1, 234, 197, 39, 177, 2, - 1, 234, 100, 39, 177, 2, 1, 234, 193, 39, 177, 2, 1, 234, 192, 39, 177, - 2, 1, 251, 125, 39, 177, 2, 1, 71, 39, 177, 2, 1, 242, 220, 71, 39, 177, - 2, 1, 234, 188, 39, 177, 2, 1, 234, 181, 39, 177, 2, 1, 234, 180, 39, - 177, 2, 1, 234, 176, 39, 177, 2, 1, 234, 173, 39, 177, 2, 1, 68, 39, 177, - 2, 1, 223, 199, 39, 177, 2, 1, 234, 150, 39, 177, 2, 1, 234, 147, 39, - 177, 2, 1, 251, 216, 39, 177, 2, 1, 196, 86, 39, 177, 2, 1, 234, 140, 39, - 177, 2, 1, 234, 117, 39, 177, 2, 1, 234, 114, 39, 177, 2, 1, 234, 103, - 39, 177, 2, 1, 234, 66, 39, 177, 2, 1, 74, 39, 177, 2, 1, 211, 87, 39, - 177, 2, 1, 213, 182, 211, 151, 39, 177, 2, 1, 206, 58, 211, 151, 39, 177, - 2, 1, 211, 150, 39, 177, 2, 1, 234, 56, 39, 177, 2, 1, 234, 108, 39, 177, - 2, 1, 234, 34, 39, 177, 2, 1, 203, 40, 234, 34, 39, 177, 2, 1, 234, 22, - 39, 177, 2, 1, 234, 1, 39, 177, 2, 1, 233, 255, 39, 177, 2, 1, 234, 80, - 39, 177, 2, 1, 233, 243, 39, 177, 2, 1, 234, 195, 39, 177, 2, 1, 66, 39, - 177, 2, 1, 196, 30, 39, 177, 2, 1, 213, 182, 196, 152, 39, 177, 2, 1, - 206, 58, 196, 152, 39, 177, 2, 1, 233, 230, 39, 177, 2, 1, 233, 182, 39, - 177, 2, 1, 233, 177, 39, 177, 2, 1, 234, 79, 56, 39, 177, 2, 1, 196, 45, - 39, 177, 31, 107, 39, 177, 31, 149, 39, 177, 31, 199, 95, 39, 177, 31, - 233, 15, 39, 177, 31, 91, 228, 140, 39, 177, 31, 91, 189, 230, 24, 206, - 142, 1, 65, 230, 24, 206, 142, 1, 249, 153, 230, 24, 206, 142, 1, 168, - 230, 24, 206, 142, 1, 190, 190, 230, 24, 206, 142, 1, 197, 132, 230, 24, - 206, 142, 1, 223, 32, 230, 24, 206, 142, 1, 247, 160, 230, 24, 206, 142, - 1, 140, 230, 24, 206, 142, 1, 221, 215, 230, 24, 206, 142, 1, 233, 109, - 230, 24, 206, 142, 1, 238, 32, 230, 24, 206, 142, 1, 237, 191, 230, 24, - 206, 142, 1, 165, 230, 24, 206, 142, 1, 206, 109, 230, 24, 206, 142, 1, - 191, 123, 230, 24, 206, 142, 1, 188, 230, 24, 206, 142, 1, 203, 165, 230, - 24, 206, 142, 1, 155, 230, 24, 206, 142, 1, 231, 240, 230, 24, 206, 142, - 1, 173, 230, 24, 206, 142, 1, 174, 230, 24, 206, 142, 1, 180, 230, 24, - 206, 142, 1, 193, 190, 230, 24, 206, 142, 1, 221, 137, 193, 190, 230, 24, - 206, 142, 1, 170, 230, 24, 206, 142, 1, 221, 137, 170, 230, 24, 206, 142, - 1, 214, 68, 230, 24, 206, 142, 1, 212, 101, 230, 24, 206, 142, 1, 195, - 188, 230, 24, 206, 142, 18, 65, 230, 24, 206, 142, 18, 68, 230, 24, 206, - 142, 18, 66, 230, 24, 206, 142, 18, 71, 230, 24, 206, 142, 18, 74, 230, - 24, 206, 142, 87, 205, 173, 230, 24, 206, 142, 87, 215, 7, 221, 178, 230, - 24, 206, 142, 3, 230, 18, 230, 24, 206, 142, 3, 199, 218, 230, 24, 206, - 142, 3, 199, 192, 230, 24, 206, 142, 3, 199, 172, 230, 24, 206, 142, 17, - 191, 77, 230, 24, 206, 142, 17, 107, 230, 24, 206, 142, 17, 109, 230, 24, - 206, 142, 17, 138, 230, 24, 206, 142, 17, 134, 230, 24, 206, 142, 17, - 149, 230, 24, 206, 142, 17, 169, 230, 24, 206, 142, 17, 175, 230, 24, - 206, 142, 17, 171, 230, 24, 206, 142, 17, 178, 206, 46, 17, 107, 206, 46, - 17, 109, 206, 46, 17, 138, 206, 46, 17, 134, 206, 46, 17, 149, 206, 46, - 17, 169, 206, 46, 17, 175, 206, 46, 17, 171, 206, 46, 17, 178, 206, 46, - 31, 199, 95, 206, 46, 31, 197, 32, 206, 46, 31, 198, 249, 206, 46, 31, - 232, 135, 206, 46, 31, 233, 15, 206, 46, 31, 202, 120, 206, 46, 31, 203, - 241, 206, 46, 31, 234, 153, 206, 46, 31, 213, 169, 206, 46, 31, 91, 228, - 140, 206, 46, 31, 105, 228, 140, 206, 46, 31, 115, 228, 140, 206, 46, 31, - 232, 128, 228, 140, 206, 46, 31, 232, 226, 228, 140, 206, 46, 31, 202, - 136, 228, 140, 206, 46, 31, 203, 247, 228, 140, 206, 46, 31, 234, 164, - 228, 140, 206, 46, 31, 213, 175, 228, 140, 206, 46, 232, 118, 91, 230, - 70, 206, 46, 232, 118, 91, 208, 22, 206, 46, 232, 118, 91, 199, 0, 206, - 46, 232, 118, 105, 198, 253, 192, 39, 1, 234, 124, 192, 39, 1, 249, 17, - 192, 39, 1, 210, 63, 192, 39, 1, 209, 214, 192, 39, 1, 199, 33, 192, 39, - 1, 205, 68, 192, 39, 1, 243, 16, 192, 39, 1, 243, 83, 192, 39, 1, 243, - 97, 192, 39, 1, 229, 177, 192, 39, 1, 192, 220, 192, 39, 1, 238, 3, 192, - 39, 1, 191, 108, 192, 39, 1, 165, 192, 39, 1, 207, 6, 192, 39, 1, 191, - 123, 192, 39, 1, 223, 32, 192, 39, 1, 202, 174, 192, 39, 1, 203, 69, 192, - 39, 1, 205, 192, 192, 39, 1, 238, 26, 192, 39, 1, 190, 190, 192, 39, 1, - 191, 87, 192, 39, 1, 233, 184, 192, 39, 1, 192, 208, 192, 39, 1, 233, - 109, 192, 39, 1, 195, 188, 192, 39, 1, 195, 189, 251, 157, 20, 192, 39, - 1, 208, 89, 192, 39, 1, 222, 106, 192, 39, 1, 221, 212, 192, 39, 1, 231, - 227, 192, 39, 1, 220, 35, 192, 39, 1, 216, 46, 192, 39, 1, 212, 130, 192, - 39, 1, 196, 120, 192, 39, 1, 193, 133, 192, 39, 1, 210, 250, 192, 39, 1, - 233, 224, 192, 39, 1, 229, 252, 192, 39, 1, 191, 240, 192, 39, 1, 233, - 255, 192, 39, 33, 230, 58, 77, 192, 39, 33, 217, 142, 77, 192, 39, 228, - 86, 77, 192, 39, 1, 220, 36, 4, 75, 58, 192, 39, 1, 191, 241, 4, 243, 2, - 58, 9, 2, 130, 193, 23, 205, 171, 9, 2, 130, 193, 23, 208, 79, 9, 2, 130, - 193, 23, 217, 141, 39, 202, 28, 1, 251, 190, 39, 202, 28, 1, 53, 251, - 190, 39, 202, 28, 1, 248, 211, 39, 202, 28, 1, 53, 248, 211, 39, 202, 28, - 1, 231, 38, 39, 202, 28, 1, 229, 245, 39, 202, 28, 1, 53, 229, 245, 39, - 202, 28, 1, 193, 133, 39, 202, 28, 1, 191, 91, 39, 202, 28, 1, 229, 184, - 39, 202, 28, 1, 191, 249, 39, 202, 28, 1, 222, 75, 39, 202, 28, 1, 220, - 26, 39, 202, 28, 1, 216, 193, 39, 202, 28, 1, 212, 130, 39, 202, 28, 1, - 53, 212, 130, 39, 202, 28, 1, 53, 212, 131, 4, 81, 199, 215, 39, 202, 28, - 1, 205, 148, 39, 202, 28, 1, 250, 126, 39, 202, 28, 1, 251, 157, 250, - 126, 39, 202, 28, 1, 210, 63, 39, 202, 28, 1, 205, 189, 39, 202, 28, 1, - 53, 205, 189, 39, 202, 28, 1, 53, 205, 190, 4, 81, 199, 215, 39, 202, 28, - 1, 207, 36, 39, 202, 28, 1, 203, 69, 39, 202, 28, 1, 199, 159, 39, 202, - 28, 1, 53, 199, 159, 39, 202, 28, 1, 53, 199, 160, 4, 81, 199, 215, 39, - 202, 28, 31, 107, 39, 202, 28, 31, 109, 39, 202, 28, 31, 138, 39, 202, - 28, 31, 134, 39, 202, 28, 31, 149, 39, 202, 28, 31, 199, 95, 39, 202, 28, - 31, 197, 32, 39, 202, 28, 31, 198, 249, 39, 202, 28, 31, 91, 228, 140, - 39, 202, 28, 232, 118, 91, 230, 70, 39, 202, 28, 34, 250, 125, 202, 28, - 1, 251, 190, 202, 28, 1, 248, 211, 202, 28, 1, 231, 38, 202, 28, 1, 229, - 245, 202, 28, 1, 193, 133, 202, 28, 1, 191, 91, 202, 28, 1, 229, 184, - 202, 28, 1, 191, 249, 202, 28, 1, 222, 75, 202, 28, 1, 220, 26, 202, 28, - 1, 216, 193, 202, 28, 1, 212, 130, 202, 28, 1, 205, 148, 202, 28, 1, 250, - 126, 202, 28, 1, 210, 63, 202, 28, 1, 205, 189, 202, 28, 1, 207, 37, 202, - 28, 1, 203, 69, 202, 28, 1, 199, 159, 202, 28, 1, 233, 30, 202, 28, 1, - 219, 182, 202, 28, 223, 149, 203, 69, 202, 28, 33, 75, 60, 202, 28, 33, - 105, 185, 60, 202, 28, 33, 75, 58, 202, 28, 33, 105, 185, 58, 202, 28, - 33, 238, 165, 58, 202, 28, 33, 238, 165, 60, 202, 28, 33, 228, 251, 58, - 202, 28, 33, 228, 251, 60, 202, 28, 33, 179, 228, 251, 60, 202, 28, 33, - 207, 39, 60, 202, 28, 33, 201, 28, 60, 202, 28, 31, 107, 202, 28, 31, - 199, 95, 202, 28, 31, 197, 32, 202, 28, 31, 91, 228, 140, 202, 28, 208, - 152, 105, 81, 249, 76, 202, 28, 208, 152, 105, 81, 249, 77, 4, 236, 138, - 202, 28, 208, 152, 243, 11, 4, 236, 140, 202, 28, 208, 152, 105, 243, 8, - 4, 236, 138, 202, 28, 208, 152, 132, 243, 11, 4, 236, 140, 39, 196, 19, - 1, 251, 190, 39, 196, 19, 1, 248, 211, 39, 196, 19, 1, 231, 37, 39, 196, - 19, 1, 193, 133, 39, 196, 19, 1, 191, 91, 39, 196, 19, 1, 53, 229, 184, - 39, 196, 19, 1, 191, 249, 39, 196, 19, 1, 222, 75, 39, 196, 19, 1, 220, - 26, 39, 196, 19, 1, 216, 193, 39, 196, 19, 1, 212, 130, 39, 196, 19, 1, - 205, 148, 39, 196, 19, 1, 210, 63, 39, 196, 19, 1, 205, 189, 39, 196, 19, - 1, 207, 38, 39, 196, 19, 1, 203, 69, 39, 196, 19, 1, 199, 159, 39, 196, - 19, 1, 219, 182, 39, 196, 19, 33, 75, 58, 39, 196, 19, 33, 75, 60, 39, + 211, 46, 74, 39, 197, 61, 1, 211, 46, 211, 153, 39, 197, 61, 1, 192, 68, + 211, 153, 39, 197, 61, 1, 211, 46, 252, 157, 39, 197, 61, 1, 192, 68, + 252, 157, 39, 197, 61, 1, 211, 46, 252, 26, 39, 197, 61, 1, 192, 68, 252, + 26, 39, 197, 61, 1, 211, 46, 251, 255, 39, 197, 61, 1, 192, 68, 251, 255, + 39, 197, 61, 1, 211, 46, 252, 21, 39, 197, 61, 1, 192, 68, 252, 21, 39, + 197, 61, 1, 211, 46, 252, 44, 39, 197, 61, 1, 192, 68, 252, 44, 39, 197, + 61, 1, 211, 46, 252, 25, 39, 197, 61, 1, 211, 46, 233, 184, 39, 197, 61, + 1, 192, 68, 233, 184, 39, 197, 61, 1, 211, 46, 250, 133, 39, 197, 61, 1, + 192, 68, 250, 133, 39, 197, 61, 1, 211, 46, 252, 8, 39, 197, 61, 1, 192, + 68, 252, 8, 39, 197, 61, 1, 211, 46, 252, 19, 39, 197, 61, 1, 192, 68, + 252, 19, 39, 197, 61, 1, 211, 46, 211, 151, 39, 197, 61, 1, 192, 68, 211, + 151, 39, 197, 61, 1, 211, 46, 251, 209, 39, 197, 61, 1, 192, 68, 251, + 209, 39, 197, 61, 1, 211, 46, 252, 18, 39, 197, 61, 1, 211, 46, 234, 120, + 39, 197, 61, 1, 211, 46, 234, 116, 39, 197, 61, 1, 211, 46, 251, 134, 39, + 197, 61, 1, 211, 46, 252, 16, 39, 197, 61, 1, 192, 68, 252, 16, 39, 197, + 61, 1, 211, 46, 234, 82, 39, 197, 61, 1, 192, 68, 234, 82, 39, 197, 61, + 1, 211, 46, 234, 102, 39, 197, 61, 1, 192, 68, 234, 102, 39, 197, 61, 1, + 211, 46, 234, 68, 39, 197, 61, 1, 192, 68, 234, 68, 39, 197, 61, 1, 192, + 68, 251, 124, 39, 197, 61, 1, 211, 46, 234, 90, 39, 197, 61, 1, 192, 68, + 252, 15, 39, 197, 61, 1, 211, 46, 234, 58, 39, 197, 61, 1, 211, 46, 211, + 80, 39, 197, 61, 1, 211, 46, 228, 30, 39, 197, 61, 1, 211, 46, 234, 199, + 39, 197, 61, 1, 192, 68, 234, 199, 39, 197, 61, 1, 211, 46, 251, 39, 39, + 197, 61, 1, 192, 68, 251, 39, 39, 197, 61, 1, 211, 46, 223, 81, 39, 197, + 61, 1, 192, 68, 223, 81, 39, 197, 61, 1, 211, 46, 211, 60, 39, 197, 61, + 1, 192, 68, 211, 60, 39, 197, 61, 1, 211, 46, 251, 35, 39, 197, 61, 1, + 192, 68, 251, 35, 39, 197, 61, 1, 211, 46, 252, 14, 39, 197, 61, 1, 211, + 46, 250, 221, 39, 197, 61, 1, 211, 46, 252, 12, 39, 197, 61, 1, 211, 46, + 250, 211, 39, 197, 61, 1, 192, 68, 250, 211, 39, 197, 61, 1, 211, 46, + 234, 14, 39, 197, 61, 1, 192, 68, 234, 14, 39, 197, 61, 1, 211, 46, 250, + 184, 39, 197, 61, 1, 192, 68, 250, 184, 39, 197, 61, 1, 211, 46, 252, 9, + 39, 197, 61, 1, 192, 68, 252, 9, 39, 197, 61, 1, 211, 46, 211, 32, 39, + 197, 61, 1, 211, 46, 249, 73, 39, 177, 6, 1, 65, 39, 177, 6, 1, 252, 208, + 39, 177, 6, 1, 234, 201, 39, 177, 6, 1, 251, 146, 39, 177, 6, 1, 234, + 199, 39, 177, 6, 1, 234, 102, 39, 177, 6, 1, 234, 195, 39, 177, 6, 1, + 234, 194, 39, 177, 6, 1, 251, 127, 39, 177, 6, 1, 71, 39, 177, 6, 1, 242, + 222, 71, 39, 177, 6, 1, 234, 190, 39, 177, 6, 1, 234, 183, 39, 177, 6, 1, + 234, 182, 39, 177, 6, 1, 234, 178, 39, 177, 6, 1, 234, 175, 39, 177, 6, + 1, 68, 39, 177, 6, 1, 223, 201, 39, 177, 6, 1, 234, 152, 39, 177, 6, 1, + 234, 149, 39, 177, 6, 1, 251, 218, 39, 177, 6, 1, 196, 86, 39, 177, 6, 1, + 234, 142, 39, 177, 6, 1, 234, 119, 39, 177, 6, 1, 234, 116, 39, 177, 6, + 1, 234, 105, 39, 177, 6, 1, 234, 68, 39, 177, 6, 1, 74, 39, 177, 6, 1, + 211, 89, 39, 177, 6, 1, 213, 184, 211, 153, 39, 177, 6, 1, 206, 59, 211, + 153, 39, 177, 6, 1, 211, 152, 39, 177, 6, 1, 234, 58, 39, 177, 6, 1, 234, + 110, 39, 177, 6, 1, 234, 36, 39, 177, 6, 1, 203, 41, 234, 36, 39, 177, 6, + 1, 234, 24, 39, 177, 6, 1, 234, 3, 39, 177, 6, 1, 234, 1, 39, 177, 6, 1, + 234, 82, 39, 177, 6, 1, 233, 245, 39, 177, 6, 1, 234, 197, 39, 177, 6, 1, + 66, 39, 177, 6, 1, 196, 30, 39, 177, 6, 1, 213, 184, 196, 152, 39, 177, + 6, 1, 206, 59, 196, 152, 39, 177, 6, 1, 233, 232, 39, 177, 6, 1, 233, + 184, 39, 177, 6, 1, 233, 179, 39, 177, 6, 1, 234, 81, 56, 39, 177, 6, 1, + 196, 45, 39, 177, 2, 1, 65, 39, 177, 2, 1, 252, 208, 39, 177, 2, 1, 234, + 201, 39, 177, 2, 1, 251, 146, 39, 177, 2, 1, 234, 199, 39, 177, 2, 1, + 234, 102, 39, 177, 2, 1, 234, 195, 39, 177, 2, 1, 234, 194, 39, 177, 2, + 1, 251, 127, 39, 177, 2, 1, 71, 39, 177, 2, 1, 242, 222, 71, 39, 177, 2, + 1, 234, 190, 39, 177, 2, 1, 234, 183, 39, 177, 2, 1, 234, 182, 39, 177, + 2, 1, 234, 178, 39, 177, 2, 1, 234, 175, 39, 177, 2, 1, 68, 39, 177, 2, + 1, 223, 201, 39, 177, 2, 1, 234, 152, 39, 177, 2, 1, 234, 149, 39, 177, + 2, 1, 251, 218, 39, 177, 2, 1, 196, 86, 39, 177, 2, 1, 234, 142, 39, 177, + 2, 1, 234, 119, 39, 177, 2, 1, 234, 116, 39, 177, 2, 1, 234, 105, 39, + 177, 2, 1, 234, 68, 39, 177, 2, 1, 74, 39, 177, 2, 1, 211, 89, 39, 177, + 2, 1, 213, 184, 211, 153, 39, 177, 2, 1, 206, 59, 211, 153, 39, 177, 2, + 1, 211, 152, 39, 177, 2, 1, 234, 58, 39, 177, 2, 1, 234, 110, 39, 177, 2, + 1, 234, 36, 39, 177, 2, 1, 203, 41, 234, 36, 39, 177, 2, 1, 234, 24, 39, + 177, 2, 1, 234, 3, 39, 177, 2, 1, 234, 1, 39, 177, 2, 1, 234, 82, 39, + 177, 2, 1, 233, 245, 39, 177, 2, 1, 234, 197, 39, 177, 2, 1, 66, 39, 177, + 2, 1, 196, 30, 39, 177, 2, 1, 213, 184, 196, 152, 39, 177, 2, 1, 206, 59, + 196, 152, 39, 177, 2, 1, 233, 232, 39, 177, 2, 1, 233, 184, 39, 177, 2, + 1, 233, 179, 39, 177, 2, 1, 234, 81, 56, 39, 177, 2, 1, 196, 45, 39, 177, + 31, 107, 39, 177, 31, 150, 39, 177, 31, 199, 95, 39, 177, 31, 233, 17, + 39, 177, 31, 91, 228, 142, 39, 177, 31, 91, 189, 230, 26, 206, 143, 1, + 65, 230, 26, 206, 143, 1, 249, 155, 230, 26, 206, 143, 1, 168, 230, 26, + 206, 143, 1, 190, 190, 230, 26, 206, 143, 1, 197, 132, 230, 26, 206, 143, + 1, 223, 34, 230, 26, 206, 143, 1, 247, 162, 230, 26, 206, 143, 1, 140, + 230, 26, 206, 143, 1, 221, 217, 230, 26, 206, 143, 1, 233, 111, 230, 26, + 206, 143, 1, 238, 34, 230, 26, 206, 143, 1, 237, 193, 230, 26, 206, 143, + 1, 165, 230, 26, 206, 143, 1, 206, 110, 230, 26, 206, 143, 1, 191, 123, + 230, 26, 206, 143, 1, 188, 230, 26, 206, 143, 1, 203, 166, 230, 26, 206, + 143, 1, 155, 230, 26, 206, 143, 1, 231, 242, 230, 26, 206, 143, 1, 173, + 230, 26, 206, 143, 1, 174, 230, 26, 206, 143, 1, 181, 230, 26, 206, 143, + 1, 193, 190, 230, 26, 206, 143, 1, 221, 139, 193, 190, 230, 26, 206, 143, + 1, 170, 230, 26, 206, 143, 1, 221, 139, 170, 230, 26, 206, 143, 1, 214, + 70, 230, 26, 206, 143, 1, 212, 103, 230, 26, 206, 143, 1, 195, 188, 230, + 26, 206, 143, 18, 65, 230, 26, 206, 143, 18, 68, 230, 26, 206, 143, 18, + 66, 230, 26, 206, 143, 18, 71, 230, 26, 206, 143, 18, 74, 230, 26, 206, + 143, 87, 205, 174, 230, 26, 206, 143, 87, 215, 9, 221, 180, 230, 26, 206, + 143, 3, 230, 20, 230, 26, 206, 143, 3, 199, 218, 230, 26, 206, 143, 3, + 199, 192, 230, 26, 206, 143, 3, 199, 172, 230, 26, 206, 143, 17, 191, 77, + 230, 26, 206, 143, 17, 107, 230, 26, 206, 143, 17, 109, 230, 26, 206, + 143, 17, 138, 230, 26, 206, 143, 17, 134, 230, 26, 206, 143, 17, 150, + 230, 26, 206, 143, 17, 169, 230, 26, 206, 143, 17, 175, 230, 26, 206, + 143, 17, 171, 230, 26, 206, 143, 17, 178, 206, 47, 17, 107, 206, 47, 17, + 109, 206, 47, 17, 138, 206, 47, 17, 134, 206, 47, 17, 150, 206, 47, 17, + 169, 206, 47, 17, 175, 206, 47, 17, 171, 206, 47, 17, 178, 206, 47, 31, + 199, 95, 206, 47, 31, 197, 32, 206, 47, 31, 198, 249, 206, 47, 31, 232, + 137, 206, 47, 31, 233, 17, 206, 47, 31, 202, 121, 206, 47, 31, 203, 242, + 206, 47, 31, 234, 155, 206, 47, 31, 213, 171, 206, 47, 31, 91, 228, 142, + 206, 47, 31, 105, 228, 142, 206, 47, 31, 115, 228, 142, 206, 47, 31, 232, + 130, 228, 142, 206, 47, 31, 232, 228, 228, 142, 206, 47, 31, 202, 137, + 228, 142, 206, 47, 31, 203, 248, 228, 142, 206, 47, 31, 234, 166, 228, + 142, 206, 47, 31, 213, 177, 228, 142, 206, 47, 232, 120, 91, 230, 72, + 206, 47, 232, 120, 91, 208, 24, 206, 47, 232, 120, 91, 199, 0, 206, 47, + 232, 120, 105, 198, 253, 192, 39, 1, 234, 126, 192, 39, 1, 249, 19, 192, + 39, 1, 210, 65, 192, 39, 1, 209, 216, 192, 39, 1, 199, 33, 192, 39, 1, + 205, 69, 192, 39, 1, 243, 18, 192, 39, 1, 243, 85, 192, 39, 1, 243, 99, + 192, 39, 1, 229, 179, 192, 39, 1, 192, 220, 192, 39, 1, 238, 5, 192, 39, + 1, 191, 108, 192, 39, 1, 165, 192, 39, 1, 207, 7, 192, 39, 1, 191, 123, + 192, 39, 1, 223, 34, 192, 39, 1, 202, 175, 192, 39, 1, 203, 70, 192, 39, + 1, 205, 193, 192, 39, 1, 238, 28, 192, 39, 1, 190, 190, 192, 39, 1, 191, + 87, 192, 39, 1, 233, 186, 192, 39, 1, 192, 208, 192, 39, 1, 233, 111, + 192, 39, 1, 195, 188, 192, 39, 1, 195, 189, 251, 159, 20, 192, 39, 1, + 208, 91, 192, 39, 1, 222, 108, 192, 39, 1, 221, 214, 192, 39, 1, 231, + 229, 192, 39, 1, 220, 37, 192, 39, 1, 216, 48, 192, 39, 1, 212, 132, 192, + 39, 1, 196, 120, 192, 39, 1, 193, 133, 192, 39, 1, 210, 252, 192, 39, 1, + 233, 226, 192, 39, 1, 229, 254, 192, 39, 1, 191, 240, 192, 39, 1, 234, 1, + 192, 39, 33, 230, 60, 77, 192, 39, 33, 217, 144, 77, 192, 39, 228, 88, + 77, 192, 39, 1, 220, 38, 4, 75, 58, 192, 39, 1, 191, 241, 4, 243, 4, 58, + 9, 2, 130, 193, 23, 205, 172, 9, 2, 130, 193, 23, 208, 81, 9, 2, 130, + 193, 23, 217, 143, 39, 202, 29, 1, 251, 192, 39, 202, 29, 1, 53, 251, + 192, 39, 202, 29, 1, 248, 213, 39, 202, 29, 1, 53, 248, 213, 39, 202, 29, + 1, 231, 40, 39, 202, 29, 1, 229, 247, 39, 202, 29, 1, 53, 229, 247, 39, + 202, 29, 1, 193, 133, 39, 202, 29, 1, 191, 91, 39, 202, 29, 1, 229, 186, + 39, 202, 29, 1, 191, 249, 39, 202, 29, 1, 222, 77, 39, 202, 29, 1, 220, + 28, 39, 202, 29, 1, 216, 195, 39, 202, 29, 1, 212, 132, 39, 202, 29, 1, + 53, 212, 132, 39, 202, 29, 1, 53, 212, 133, 4, 81, 199, 215, 39, 202, 29, + 1, 205, 149, 39, 202, 29, 1, 250, 128, 39, 202, 29, 1, 251, 159, 250, + 128, 39, 202, 29, 1, 210, 65, 39, 202, 29, 1, 205, 190, 39, 202, 29, 1, + 53, 205, 190, 39, 202, 29, 1, 53, 205, 191, 4, 81, 199, 215, 39, 202, 29, + 1, 207, 37, 39, 202, 29, 1, 203, 70, 39, 202, 29, 1, 199, 159, 39, 202, + 29, 1, 53, 199, 159, 39, 202, 29, 1, 53, 199, 160, 4, 81, 199, 215, 39, + 202, 29, 31, 107, 39, 202, 29, 31, 109, 39, 202, 29, 31, 138, 39, 202, + 29, 31, 134, 39, 202, 29, 31, 150, 39, 202, 29, 31, 199, 95, 39, 202, 29, + 31, 197, 32, 39, 202, 29, 31, 198, 249, 39, 202, 29, 31, 91, 228, 142, + 39, 202, 29, 232, 120, 91, 230, 72, 39, 202, 29, 34, 250, 127, 202, 29, + 1, 251, 192, 202, 29, 1, 248, 213, 202, 29, 1, 231, 40, 202, 29, 1, 229, + 247, 202, 29, 1, 193, 133, 202, 29, 1, 191, 91, 202, 29, 1, 229, 186, + 202, 29, 1, 191, 249, 202, 29, 1, 222, 77, 202, 29, 1, 220, 28, 202, 29, + 1, 216, 195, 202, 29, 1, 212, 132, 202, 29, 1, 205, 149, 202, 29, 1, 250, + 128, 202, 29, 1, 210, 65, 202, 29, 1, 205, 190, 202, 29, 1, 207, 38, 202, + 29, 1, 203, 70, 202, 29, 1, 199, 159, 202, 29, 1, 233, 32, 202, 29, 1, + 219, 184, 202, 29, 223, 151, 203, 70, 202, 29, 33, 75, 60, 202, 29, 33, + 105, 185, 60, 202, 29, 33, 75, 58, 202, 29, 33, 105, 185, 58, 202, 29, + 33, 238, 167, 58, 202, 29, 33, 238, 167, 60, 202, 29, 33, 228, 253, 58, + 202, 29, 33, 228, 253, 60, 202, 29, 33, 180, 228, 253, 60, 202, 29, 33, + 207, 40, 60, 202, 29, 33, 201, 29, 60, 202, 29, 31, 107, 202, 29, 31, + 199, 95, 202, 29, 31, 197, 32, 202, 29, 31, 91, 228, 142, 202, 29, 208, + 154, 105, 81, 249, 78, 202, 29, 208, 154, 105, 81, 249, 79, 4, 236, 140, + 202, 29, 208, 154, 243, 13, 4, 236, 142, 202, 29, 208, 154, 105, 243, 10, + 4, 236, 140, 202, 29, 208, 154, 132, 243, 13, 4, 236, 142, 39, 196, 19, + 1, 251, 192, 39, 196, 19, 1, 248, 213, 39, 196, 19, 1, 231, 39, 39, 196, + 19, 1, 193, 133, 39, 196, 19, 1, 191, 91, 39, 196, 19, 1, 53, 229, 186, + 39, 196, 19, 1, 191, 249, 39, 196, 19, 1, 222, 77, 39, 196, 19, 1, 220, + 28, 39, 196, 19, 1, 216, 195, 39, 196, 19, 1, 212, 132, 39, 196, 19, 1, + 205, 149, 39, 196, 19, 1, 210, 65, 39, 196, 19, 1, 205, 190, 39, 196, 19, + 1, 207, 39, 39, 196, 19, 1, 203, 70, 39, 196, 19, 1, 199, 159, 39, 196, + 19, 1, 219, 184, 39, 196, 19, 33, 75, 58, 39, 196, 19, 33, 75, 60, 39, 196, 19, 33, 105, 185, 58, 39, 196, 19, 33, 105, 185, 60, 39, 196, 19, - 208, 152, 164, 39, 196, 19, 208, 152, 105, 249, 76, 39, 196, 19, 208, - 152, 105, 236, 138, 39, 196, 19, 208, 152, 232, 128, 236, 138, 243, 61, - 1, 251, 190, 243, 61, 1, 2, 251, 190, 243, 61, 1, 248, 211, 243, 61, 1, - 231, 38, 243, 61, 1, 237, 252, 243, 61, 1, 229, 245, 243, 61, 1, 193, - 133, 243, 61, 1, 238, 174, 193, 133, 243, 61, 1, 191, 91, 243, 61, 1, - 229, 184, 243, 61, 1, 191, 249, 243, 61, 1, 222, 75, 243, 61, 1, 220, 26, - 243, 61, 1, 216, 193, 243, 61, 1, 212, 130, 243, 61, 1, 205, 148, 243, - 61, 1, 250, 126, 243, 61, 1, 210, 63, 243, 61, 1, 207, 38, 243, 61, 1, - 203, 69, 243, 61, 1, 199, 159, 243, 61, 31, 107, 243, 61, 31, 109, 243, - 61, 31, 138, 243, 61, 31, 134, 243, 61, 31, 199, 95, 243, 61, 31, 197, - 32, 243, 61, 31, 91, 228, 140, 234, 116, 1, 251, 190, 234, 116, 1, 248, - 211, 234, 116, 1, 231, 38, 234, 116, 1, 237, 252, 234, 116, 1, 229, 245, - 234, 116, 1, 193, 133, 234, 116, 1, 191, 91, 234, 116, 1, 229, 184, 234, - 116, 1, 199, 69, 234, 116, 1, 191, 249, 234, 116, 1, 222, 75, 234, 116, - 1, 220, 26, 234, 116, 1, 216, 193, 234, 116, 1, 212, 130, 234, 116, 1, - 205, 148, 234, 116, 1, 250, 126, 234, 116, 1, 210, 63, 234, 116, 1, 205, - 189, 234, 116, 1, 208, 37, 234, 116, 1, 207, 38, 234, 116, 1, 203, 69, - 234, 116, 1, 199, 159, 234, 116, 34, 191, 90, 162, 3, 247, 119, 162, 3, - 251, 71, 162, 3, 195, 35, 162, 3, 222, 237, 162, 3, 196, 75, 162, 1, 65, - 162, 1, 252, 206, 162, 1, 68, 162, 1, 223, 199, 162, 1, 66, 162, 1, 196, - 30, 162, 1, 117, 146, 162, 1, 117, 206, 110, 162, 1, 117, 172, 162, 1, - 117, 219, 74, 162, 1, 71, 162, 1, 251, 236, 162, 1, 74, 162, 1, 250, 163, - 162, 1, 155, 162, 1, 221, 215, 162, 1, 231, 240, 162, 1, 231, 91, 162, 1, - 214, 68, 162, 1, 247, 160, 162, 1, 247, 1, 162, 1, 223, 32, 162, 1, 222, - 252, 162, 1, 212, 101, 162, 1, 197, 132, 162, 1, 197, 120, 162, 1, 237, - 191, 162, 1, 237, 175, 162, 1, 213, 79, 162, 1, 190, 190, 162, 1, 199, - 49, 162, 1, 238, 32, 162, 1, 237, 68, 162, 1, 180, 162, 1, 168, 162, 1, - 209, 228, 162, 1, 249, 153, 162, 1, 248, 203, 162, 1, 174, 162, 1, 170, - 162, 1, 165, 162, 1, 173, 162, 1, 195, 188, 162, 1, 203, 165, 162, 1, - 201, 175, 162, 1, 188, 162, 1, 140, 162, 1, 219, 73, 162, 1, 39, 44, 219, - 62, 162, 1, 39, 44, 206, 109, 162, 1, 39, 44, 213, 61, 162, 18, 3, 252, - 206, 162, 18, 3, 248, 197, 252, 206, 162, 18, 3, 68, 162, 18, 3, 223, - 199, 162, 18, 3, 66, 162, 18, 3, 196, 30, 162, 18, 3, 117, 146, 162, 18, - 3, 117, 206, 110, 162, 18, 3, 117, 172, 162, 18, 3, 117, 219, 74, 162, - 18, 3, 71, 162, 18, 3, 251, 236, 162, 18, 3, 74, 162, 18, 3, 250, 163, - 162, 195, 40, 162, 237, 238, 162, 55, 237, 238, 162, 208, 152, 236, 140, - 162, 208, 152, 55, 236, 140, 162, 208, 152, 219, 112, 162, 208, 152, 238, - 228, 164, 162, 208, 152, 218, 246, 162, 31, 107, 162, 31, 109, 162, 31, - 138, 162, 31, 134, 162, 31, 149, 162, 31, 169, 162, 31, 175, 162, 31, + 208, 154, 164, 39, 196, 19, 208, 154, 105, 249, 78, 39, 196, 19, 208, + 154, 105, 236, 140, 39, 196, 19, 208, 154, 232, 130, 236, 140, 243, 63, + 1, 251, 192, 243, 63, 1, 2, 251, 192, 243, 63, 1, 248, 213, 243, 63, 1, + 231, 40, 243, 63, 1, 237, 254, 243, 63, 1, 229, 247, 243, 63, 1, 193, + 133, 243, 63, 1, 238, 176, 193, 133, 243, 63, 1, 191, 91, 243, 63, 1, + 229, 186, 243, 63, 1, 191, 249, 243, 63, 1, 222, 77, 243, 63, 1, 220, 28, + 243, 63, 1, 216, 195, 243, 63, 1, 212, 132, 243, 63, 1, 205, 149, 243, + 63, 1, 250, 128, 243, 63, 1, 210, 65, 243, 63, 1, 207, 39, 243, 63, 1, + 203, 70, 243, 63, 1, 199, 159, 243, 63, 31, 107, 243, 63, 31, 109, 243, + 63, 31, 138, 243, 63, 31, 134, 243, 63, 31, 199, 95, 243, 63, 31, 197, + 32, 243, 63, 31, 91, 228, 142, 234, 118, 1, 251, 192, 234, 118, 1, 248, + 213, 234, 118, 1, 231, 40, 234, 118, 1, 237, 254, 234, 118, 1, 229, 247, + 234, 118, 1, 193, 133, 234, 118, 1, 191, 91, 234, 118, 1, 229, 186, 234, + 118, 1, 199, 69, 234, 118, 1, 191, 249, 234, 118, 1, 222, 77, 234, 118, + 1, 220, 28, 234, 118, 1, 216, 195, 234, 118, 1, 212, 132, 234, 118, 1, + 205, 149, 234, 118, 1, 250, 128, 234, 118, 1, 210, 65, 234, 118, 1, 205, + 190, 234, 118, 1, 208, 39, 234, 118, 1, 207, 39, 234, 118, 1, 203, 70, + 234, 118, 1, 199, 159, 234, 118, 34, 191, 90, 162, 3, 247, 121, 162, 3, + 251, 73, 162, 3, 195, 35, 162, 3, 222, 239, 162, 3, 196, 75, 162, 1, 65, + 162, 1, 252, 208, 162, 1, 68, 162, 1, 223, 201, 162, 1, 66, 162, 1, 196, + 30, 162, 1, 117, 146, 162, 1, 117, 206, 111, 162, 1, 117, 172, 162, 1, + 117, 219, 76, 162, 1, 71, 162, 1, 251, 238, 162, 1, 74, 162, 1, 250, 165, + 162, 1, 155, 162, 1, 221, 217, 162, 1, 231, 242, 162, 1, 231, 93, 162, 1, + 214, 70, 162, 1, 247, 162, 162, 1, 247, 3, 162, 1, 223, 34, 162, 1, 222, + 254, 162, 1, 212, 103, 162, 1, 197, 132, 162, 1, 197, 120, 162, 1, 237, + 193, 162, 1, 237, 177, 162, 1, 213, 81, 162, 1, 190, 190, 162, 1, 199, + 49, 162, 1, 238, 34, 162, 1, 237, 70, 162, 1, 181, 162, 1, 168, 162, 1, + 209, 230, 162, 1, 249, 155, 162, 1, 248, 205, 162, 1, 174, 162, 1, 170, + 162, 1, 165, 162, 1, 173, 162, 1, 195, 188, 162, 1, 203, 166, 162, 1, + 201, 176, 162, 1, 188, 162, 1, 140, 162, 1, 219, 75, 162, 1, 39, 44, 219, + 64, 162, 1, 39, 44, 206, 110, 162, 1, 39, 44, 213, 63, 162, 18, 3, 252, + 208, 162, 18, 3, 248, 199, 252, 208, 162, 18, 3, 68, 162, 18, 3, 223, + 201, 162, 18, 3, 66, 162, 18, 3, 196, 30, 162, 18, 3, 117, 146, 162, 18, + 3, 117, 206, 111, 162, 18, 3, 117, 172, 162, 18, 3, 117, 219, 76, 162, + 18, 3, 71, 162, 18, 3, 251, 238, 162, 18, 3, 74, 162, 18, 3, 250, 165, + 162, 195, 40, 162, 237, 240, 162, 55, 237, 240, 162, 208, 154, 236, 142, + 162, 208, 154, 55, 236, 142, 162, 208, 154, 219, 114, 162, 208, 154, 238, + 230, 164, 162, 208, 154, 218, 248, 162, 31, 107, 162, 31, 109, 162, 31, + 138, 162, 31, 134, 162, 31, 150, 162, 31, 169, 162, 31, 175, 162, 31, 171, 162, 31, 178, 162, 31, 199, 95, 162, 31, 197, 32, 162, 31, 198, 249, - 162, 31, 232, 135, 162, 31, 233, 15, 162, 31, 202, 120, 162, 31, 203, - 241, 162, 31, 234, 153, 162, 31, 213, 169, 162, 31, 91, 228, 140, 162, + 162, 31, 232, 137, 162, 31, 233, 17, 162, 31, 202, 121, 162, 31, 203, + 242, 162, 31, 234, 155, 162, 31, 213, 171, 162, 31, 91, 228, 142, 162, 31, 91, 189, 162, 17, 191, 77, 162, 17, 107, 162, 17, 109, 162, 17, 138, - 162, 17, 134, 162, 17, 149, 162, 17, 169, 162, 17, 175, 162, 17, 171, - 162, 17, 178, 162, 3, 39, 44, 195, 40, 162, 1, 39, 44, 203, 40, 71, 162, - 1, 39, 44, 203, 40, 74, 162, 18, 3, 39, 44, 203, 40, 71, 162, 18, 3, 39, - 44, 203, 40, 74, 162, 1, 39, 44, 219, 73, 162, 31, 222, 196, 222, 99, 3, - 247, 119, 222, 99, 3, 251, 71, 222, 99, 3, 195, 35, 222, 99, 1, 65, 222, - 99, 1, 252, 206, 222, 99, 1, 68, 222, 99, 1, 223, 199, 222, 99, 1, 66, - 222, 99, 1, 196, 30, 222, 99, 1, 71, 222, 99, 1, 251, 236, 222, 99, 1, - 74, 222, 99, 1, 250, 163, 222, 99, 1, 155, 222, 99, 1, 221, 215, 222, 99, - 1, 231, 240, 222, 99, 1, 231, 91, 222, 99, 1, 214, 68, 222, 99, 1, 247, - 160, 222, 99, 1, 247, 1, 222, 99, 1, 223, 32, 222, 99, 1, 222, 252, 222, - 99, 1, 212, 101, 222, 99, 1, 197, 132, 222, 99, 1, 197, 120, 222, 99, 1, - 237, 191, 222, 99, 1, 237, 180, 222, 99, 1, 237, 175, 222, 99, 1, 207, 6, - 222, 99, 1, 213, 79, 222, 99, 1, 190, 190, 222, 99, 1, 199, 49, 222, 99, - 1, 238, 32, 222, 99, 1, 237, 68, 222, 99, 1, 180, 222, 99, 1, 168, 222, - 99, 1, 209, 228, 222, 99, 1, 249, 153, 222, 99, 1, 248, 203, 222, 99, 1, - 174, 222, 99, 1, 170, 222, 99, 1, 165, 222, 99, 1, 173, 222, 99, 1, 195, - 188, 222, 99, 1, 203, 165, 222, 99, 1, 201, 175, 222, 99, 1, 188, 222, - 99, 1, 140, 222, 99, 18, 3, 252, 206, 222, 99, 18, 3, 68, 222, 99, 18, 3, - 223, 199, 222, 99, 18, 3, 66, 222, 99, 18, 3, 196, 30, 222, 99, 18, 3, - 71, 222, 99, 18, 3, 251, 236, 222, 99, 18, 3, 74, 222, 99, 18, 3, 250, - 163, 222, 99, 3, 195, 40, 222, 99, 3, 212, 141, 222, 99, 252, 68, 56, - 222, 99, 234, 69, 56, 222, 99, 31, 56, 222, 99, 205, 54, 77, 222, 99, 55, - 205, 54, 77, 222, 99, 237, 238, 222, 99, 55, 237, 238, 222, 99, 18, 3, - 117, 146, 222, 99, 31, 3, 58, 202, 12, 202, 20, 1, 205, 182, 202, 12, - 202, 20, 1, 199, 219, 202, 12, 202, 20, 1, 249, 123, 202, 12, 202, 20, 1, - 247, 149, 202, 12, 202, 20, 1, 238, 12, 202, 12, 202, 20, 1, 231, 225, - 202, 12, 202, 20, 1, 217, 120, 202, 12, 202, 20, 1, 214, 65, 202, 12, - 202, 20, 1, 220, 99, 202, 12, 202, 20, 1, 214, 237, 202, 12, 202, 20, 1, - 195, 184, 202, 12, 202, 20, 1, 210, 200, 202, 12, 202, 20, 1, 192, 121, - 202, 12, 202, 20, 1, 207, 160, 202, 12, 202, 20, 1, 230, 81, 202, 12, - 202, 20, 1, 222, 104, 202, 12, 202, 20, 1, 223, 26, 202, 12, 202, 20, 1, - 212, 98, 202, 12, 202, 20, 1, 251, 245, 202, 12, 202, 20, 1, 234, 186, - 202, 12, 202, 20, 1, 223, 200, 202, 12, 202, 20, 1, 196, 141, 202, 12, - 202, 20, 1, 211, 136, 202, 12, 202, 20, 1, 234, 173, 202, 12, 202, 20, 1, - 217, 136, 202, 12, 202, 20, 17, 191, 77, 202, 12, 202, 20, 17, 107, 202, - 12, 202, 20, 17, 109, 202, 12, 202, 20, 17, 138, 202, 12, 202, 20, 17, - 134, 202, 12, 202, 20, 17, 149, 202, 12, 202, 20, 17, 169, 202, 12, 202, - 20, 17, 175, 202, 12, 202, 20, 17, 171, 202, 12, 202, 20, 17, 178, 246, - 251, 3, 247, 119, 246, 251, 3, 251, 71, 246, 251, 3, 195, 35, 246, 251, - 1, 252, 206, 246, 251, 1, 68, 246, 251, 1, 66, 246, 251, 1, 71, 246, 251, - 1, 222, 127, 246, 251, 1, 221, 214, 246, 251, 1, 231, 237, 246, 251, 1, - 231, 90, 246, 251, 1, 214, 67, 246, 251, 1, 247, 159, 246, 251, 1, 247, - 0, 246, 251, 1, 223, 31, 246, 251, 1, 222, 251, 246, 251, 1, 212, 100, - 246, 251, 1, 197, 131, 246, 251, 1, 197, 119, 246, 251, 1, 237, 190, 246, - 251, 1, 237, 174, 246, 251, 1, 213, 78, 246, 251, 1, 199, 245, 246, 251, - 1, 199, 48, 246, 251, 1, 238, 31, 246, 251, 1, 237, 67, 246, 251, 1, 214, - 250, 246, 251, 1, 210, 220, 246, 251, 1, 209, 227, 246, 251, 1, 249, 151, - 246, 251, 1, 248, 202, 246, 251, 1, 217, 151, 246, 251, 1, 191, 174, 246, - 251, 1, 192, 140, 246, 251, 1, 207, 178, 246, 251, 1, 220, 125, 246, 251, - 1, 193, 181, 246, 251, 1, 205, 197, 246, 251, 1, 230, 91, 246, 251, 18, - 3, 65, 246, 251, 18, 3, 68, 246, 251, 18, 3, 223, 199, 246, 251, 18, 3, - 66, 246, 251, 18, 3, 196, 30, 246, 251, 18, 3, 71, 246, 251, 18, 3, 251, - 236, 246, 251, 18, 3, 74, 246, 251, 18, 3, 250, 163, 246, 251, 18, 3, - 211, 133, 246, 251, 187, 77, 246, 251, 250, 164, 77, 246, 251, 195, 40, - 246, 251, 217, 149, 246, 251, 17, 191, 77, 246, 251, 17, 107, 246, 251, - 17, 109, 246, 251, 17, 138, 246, 251, 17, 134, 246, 251, 17, 149, 246, - 251, 17, 169, 246, 251, 17, 175, 246, 251, 17, 171, 246, 251, 17, 178, - 246, 251, 205, 54, 77, 246, 251, 237, 238, 246, 251, 55, 237, 238, 246, - 251, 208, 13, 77, 246, 251, 1, 219, 158, 246, 251, 18, 3, 252, 206, 246, - 251, 18, 3, 234, 166, 246, 251, 1, 195, 187, 217, 118, 1, 65, 217, 118, - 1, 68, 217, 118, 1, 66, 217, 118, 1, 71, 217, 118, 1, 74, 217, 118, 1, - 155, 217, 118, 1, 221, 215, 217, 118, 1, 231, 240, 217, 118, 1, 231, 91, - 217, 118, 1, 247, 160, 217, 118, 1, 247, 1, 217, 118, 1, 223, 32, 217, - 118, 1, 222, 252, 217, 118, 1, 212, 101, 217, 118, 1, 197, 132, 217, 118, - 1, 197, 120, 217, 118, 1, 237, 191, 217, 118, 1, 237, 175, 217, 118, 1, - 213, 79, 217, 118, 1, 190, 190, 217, 118, 1, 199, 49, 217, 118, 1, 238, - 32, 217, 118, 1, 237, 68, 217, 118, 1, 180, 217, 118, 1, 168, 217, 118, - 1, 209, 228, 217, 118, 1, 249, 153, 217, 118, 1, 248, 203, 217, 118, 1, - 174, 217, 118, 1, 165, 217, 118, 1, 173, 217, 118, 1, 195, 188, 217, 118, - 1, 188, 217, 118, 1, 140, 217, 118, 1, 206, 109, 217, 118, 3, 212, 141, - 217, 118, 252, 68, 56, 217, 118, 205, 54, 77, 217, 118, 34, 203, 15, 203, - 129, 3, 247, 119, 203, 129, 3, 251, 71, 203, 129, 3, 195, 35, 203, 129, - 1, 65, 203, 129, 1, 252, 206, 203, 129, 1, 68, 203, 129, 1, 223, 199, - 203, 129, 1, 66, 203, 129, 1, 196, 30, 203, 129, 1, 117, 146, 203, 129, - 1, 117, 206, 110, 203, 129, 1, 117, 172, 203, 129, 1, 117, 219, 74, 203, - 129, 1, 71, 203, 129, 1, 251, 236, 203, 129, 1, 74, 203, 129, 1, 250, - 163, 203, 129, 1, 155, 203, 129, 1, 221, 215, 203, 129, 1, 231, 240, 203, - 129, 1, 231, 91, 203, 129, 1, 214, 68, 203, 129, 1, 247, 160, 203, 129, - 1, 247, 1, 203, 129, 1, 223, 32, 203, 129, 1, 222, 252, 203, 129, 1, 212, - 101, 203, 129, 1, 197, 132, 203, 129, 1, 197, 120, 203, 129, 1, 237, 191, - 203, 129, 1, 237, 175, 203, 129, 1, 213, 79, 203, 129, 1, 190, 190, 203, - 129, 1, 199, 49, 203, 129, 1, 238, 32, 203, 129, 1, 237, 68, 203, 129, 1, - 180, 203, 129, 1, 168, 203, 129, 1, 209, 228, 203, 129, 1, 249, 153, 203, - 129, 1, 248, 203, 203, 129, 1, 174, 203, 129, 1, 170, 203, 129, 1, 165, - 203, 129, 1, 173, 203, 129, 1, 219, 73, 203, 129, 1, 195, 188, 203, 129, - 1, 203, 165, 203, 129, 1, 201, 175, 203, 129, 1, 188, 203, 129, 1, 140, - 203, 129, 18, 3, 252, 206, 203, 129, 18, 3, 68, 203, 129, 18, 3, 223, - 199, 203, 129, 18, 3, 66, 203, 129, 18, 3, 196, 30, 203, 129, 18, 3, 117, - 146, 203, 129, 18, 3, 117, 206, 110, 203, 129, 18, 3, 117, 172, 203, 129, - 18, 3, 117, 219, 74, 203, 129, 18, 3, 71, 203, 129, 18, 3, 251, 236, 203, - 129, 18, 3, 74, 203, 129, 18, 3, 250, 163, 203, 129, 3, 195, 40, 203, - 129, 3, 250, 145, 203, 129, 3, 222, 237, 203, 129, 3, 196, 75, 203, 129, - 211, 113, 203, 129, 237, 238, 203, 129, 55, 237, 238, 203, 129, 252, 68, - 56, 203, 129, 204, 10, 203, 129, 205, 138, 77, 203, 129, 3, 212, 141, - 203, 129, 18, 52, 77, 203, 129, 233, 201, 203, 40, 18, 77, 203, 129, 200, - 162, 77, 203, 129, 18, 3, 208, 207, 71, 203, 129, 3, 223, 93, 247, 119, - 203, 129, 17, 191, 77, 203, 129, 17, 107, 203, 129, 17, 109, 203, 129, - 17, 138, 203, 129, 17, 134, 203, 129, 17, 149, 203, 129, 17, 169, 203, - 129, 17, 175, 203, 129, 17, 171, 203, 129, 17, 178, 203, 129, 234, 146, - 203, 129, 3, 202, 210, 203, 129, 229, 227, 203, 129, 239, 29, 56, 203, - 129, 205, 54, 217, 55, 203, 129, 205, 54, 217, 54, 166, 251, 14, 17, 107, - 166, 251, 14, 17, 109, 166, 251, 14, 17, 138, 166, 251, 14, 17, 134, 166, - 251, 14, 17, 149, 166, 251, 14, 17, 169, 166, 251, 14, 17, 175, 166, 251, - 14, 17, 171, 166, 251, 14, 17, 178, 166, 251, 14, 31, 199, 95, 166, 251, - 14, 31, 197, 32, 166, 251, 14, 31, 198, 249, 166, 251, 14, 31, 232, 135, - 166, 251, 14, 31, 233, 15, 166, 251, 14, 31, 202, 120, 166, 251, 14, 31, - 203, 241, 166, 251, 14, 31, 234, 153, 166, 251, 14, 31, 213, 169, 166, - 251, 14, 31, 91, 228, 140, 166, 251, 14, 31, 91, 189, 221, 182, 1, 65, - 221, 182, 1, 252, 206, 221, 182, 1, 68, 221, 182, 1, 66, 221, 182, 1, 71, - 221, 182, 1, 251, 236, 221, 182, 1, 74, 221, 182, 1, 250, 163, 221, 182, - 1, 155, 221, 182, 1, 221, 215, 221, 182, 1, 231, 240, 221, 182, 1, 231, - 127, 221, 182, 1, 231, 91, 221, 182, 1, 214, 68, 221, 182, 1, 247, 160, - 221, 182, 1, 247, 1, 221, 182, 1, 223, 32, 221, 182, 1, 222, 230, 221, - 182, 1, 212, 101, 221, 182, 1, 197, 132, 221, 182, 1, 197, 120, 221, 182, - 1, 237, 191, 221, 182, 1, 237, 175, 221, 182, 1, 213, 79, 221, 182, 1, - 190, 190, 221, 182, 1, 199, 49, 221, 182, 1, 238, 32, 221, 182, 1, 237, - 181, 221, 182, 1, 237, 68, 221, 182, 1, 180, 221, 182, 1, 168, 221, 182, - 1, 209, 228, 221, 182, 1, 249, 153, 221, 182, 1, 249, 53, 221, 182, 1, - 248, 203, 221, 182, 1, 174, 221, 182, 1, 170, 221, 182, 1, 165, 221, 182, - 1, 173, 221, 182, 1, 195, 188, 221, 182, 1, 188, 221, 182, 1, 140, 221, - 182, 1, 219, 73, 221, 182, 18, 3, 252, 206, 221, 182, 18, 3, 68, 221, - 182, 18, 3, 223, 199, 221, 182, 18, 3, 66, 221, 182, 18, 3, 71, 221, 182, - 18, 3, 251, 236, 221, 182, 18, 3, 74, 221, 182, 18, 3, 250, 163, 221, - 182, 3, 251, 71, 221, 182, 3, 195, 40, 221, 182, 3, 212, 141, 221, 182, - 3, 203, 155, 221, 182, 237, 238, 221, 182, 55, 237, 238, 221, 182, 193, - 23, 204, 10, 221, 182, 205, 54, 77, 221, 182, 55, 205, 54, 77, 221, 182, - 252, 68, 56, 221, 182, 3, 200, 206, 221, 182, 1, 208, 96, 221, 182, 1, - 203, 40, 68, 221, 182, 18, 3, 117, 146, 215, 133, 1, 65, 215, 133, 1, 68, - 215, 133, 1, 66, 215, 133, 1, 71, 215, 133, 1, 155, 215, 133, 1, 221, - 215, 215, 133, 1, 231, 240, 215, 133, 1, 231, 91, 215, 133, 1, 247, 160, - 215, 133, 1, 247, 1, 215, 133, 1, 223, 32, 215, 133, 1, 222, 230, 215, - 133, 1, 212, 101, 215, 133, 1, 197, 132, 215, 133, 1, 197, 120, 215, 133, - 1, 237, 191, 215, 133, 1, 237, 181, 215, 133, 1, 237, 175, 215, 133, 1, - 213, 79, 215, 133, 1, 190, 190, 215, 133, 1, 199, 49, 215, 133, 1, 238, - 32, 215, 133, 1, 237, 68, 215, 133, 1, 180, 215, 133, 1, 168, 215, 133, - 1, 209, 228, 215, 133, 1, 249, 153, 215, 133, 1, 248, 203, 215, 133, 1, - 174, 215, 133, 1, 170, 215, 133, 1, 165, 215, 133, 1, 173, 215, 133, 1, - 195, 188, 215, 133, 1, 188, 215, 133, 1, 140, 215, 133, 1, 206, 109, 215, - 133, 1, 207, 6, 215, 133, 205, 54, 77, 221, 172, 1, 65, 221, 172, 1, 252, - 206, 221, 172, 1, 68, 221, 172, 1, 223, 199, 221, 172, 1, 66, 221, 172, - 1, 196, 30, 221, 172, 1, 71, 221, 172, 1, 251, 236, 221, 172, 1, 74, 221, - 172, 1, 250, 163, 221, 172, 1, 155, 221, 172, 1, 221, 215, 221, 172, 1, - 231, 240, 221, 172, 1, 231, 127, 221, 172, 1, 231, 91, 221, 172, 1, 214, - 68, 221, 172, 1, 247, 160, 221, 172, 1, 247, 1, 221, 172, 1, 223, 32, - 221, 172, 1, 222, 230, 221, 172, 1, 222, 252, 221, 172, 1, 212, 101, 221, - 172, 1, 197, 132, 221, 172, 1, 197, 120, 221, 172, 1, 237, 191, 221, 172, - 1, 237, 181, 221, 172, 1, 206, 109, 221, 172, 1, 237, 175, 221, 172, 1, - 213, 79, 221, 172, 1, 190, 190, 221, 172, 1, 199, 49, 221, 172, 1, 238, - 32, 221, 172, 1, 237, 68, 221, 172, 1, 180, 221, 172, 1, 168, 221, 172, - 1, 209, 228, 221, 172, 1, 249, 153, 221, 172, 1, 249, 53, 221, 172, 1, - 248, 203, 221, 172, 1, 174, 221, 172, 1, 170, 221, 172, 1, 165, 221, 172, - 1, 173, 221, 172, 1, 195, 188, 221, 172, 1, 203, 165, 221, 172, 1, 188, - 221, 172, 1, 140, 221, 172, 3, 251, 71, 221, 172, 18, 3, 252, 206, 221, - 172, 18, 3, 68, 221, 172, 18, 3, 223, 199, 221, 172, 18, 3, 66, 221, 172, - 18, 3, 196, 30, 221, 172, 18, 3, 71, 221, 172, 18, 3, 251, 236, 221, 172, - 18, 3, 74, 221, 172, 18, 3, 250, 163, 221, 172, 3, 212, 141, 221, 172, 3, - 195, 40, 221, 172, 17, 191, 77, 221, 172, 17, 107, 221, 172, 17, 109, - 221, 172, 17, 138, 221, 172, 17, 134, 221, 172, 17, 149, 221, 172, 17, - 169, 221, 172, 17, 175, 221, 172, 17, 171, 221, 172, 17, 178, 230, 219, - 3, 33, 251, 72, 58, 230, 219, 3, 247, 119, 230, 219, 3, 251, 71, 230, - 219, 3, 195, 35, 230, 219, 1, 65, 230, 219, 1, 252, 206, 230, 219, 1, 68, - 230, 219, 1, 223, 199, 230, 219, 1, 66, 230, 219, 1, 196, 30, 230, 219, - 1, 117, 146, 230, 219, 1, 117, 172, 230, 219, 1, 234, 188, 230, 219, 1, - 251, 236, 230, 219, 1, 211, 87, 230, 219, 1, 250, 163, 230, 219, 1, 155, - 230, 219, 1, 221, 215, 230, 219, 1, 231, 240, 230, 219, 1, 231, 91, 230, - 219, 1, 214, 68, 230, 219, 1, 247, 160, 230, 219, 1, 247, 1, 230, 219, 1, - 223, 32, 230, 219, 1, 222, 252, 230, 219, 1, 212, 101, 230, 219, 1, 197, - 132, 230, 219, 1, 197, 120, 230, 219, 1, 237, 191, 230, 219, 1, 237, 175, - 230, 219, 1, 213, 79, 230, 219, 1, 190, 190, 230, 219, 1, 199, 49, 230, - 219, 1, 238, 32, 230, 219, 1, 237, 68, 230, 219, 1, 180, 230, 219, 1, - 168, 230, 219, 1, 209, 228, 230, 219, 1, 249, 153, 230, 219, 1, 248, 203, - 230, 219, 1, 174, 230, 219, 1, 170, 230, 219, 1, 165, 230, 219, 1, 173, - 230, 219, 1, 219, 73, 230, 219, 1, 195, 188, 230, 219, 1, 203, 165, 230, - 219, 1, 201, 175, 230, 219, 1, 188, 230, 219, 1, 140, 33, 248, 165, 60, - 230, 219, 3, 212, 141, 230, 219, 3, 250, 145, 230, 219, 18, 3, 252, 206, - 230, 219, 18, 3, 68, 230, 219, 18, 3, 223, 199, 230, 219, 18, 3, 66, 230, - 219, 18, 3, 196, 30, 230, 219, 18, 3, 117, 146, 230, 219, 18, 3, 117, - 206, 110, 230, 219, 18, 3, 234, 188, 230, 219, 18, 3, 251, 236, 230, 219, - 18, 3, 211, 87, 230, 219, 18, 3, 250, 163, 230, 219, 3, 195, 40, 230, - 219, 211, 113, 230, 219, 250, 164, 219, 198, 77, 230, 219, 3, 209, 79, - 230, 219, 1, 195, 150, 251, 71, 230, 219, 1, 195, 150, 55, 251, 71, 230, - 219, 1, 117, 206, 110, 230, 219, 1, 117, 219, 74, 230, 219, 18, 3, 117, - 172, 230, 219, 18, 3, 117, 219, 74, 33, 230, 219, 17, 191, 77, 33, 230, - 219, 17, 107, 33, 230, 219, 17, 109, 33, 230, 219, 17, 138, 33, 230, 219, - 17, 134, 33, 230, 219, 17, 149, 33, 230, 219, 17, 169, 33, 230, 219, 1, - 65, 33, 230, 219, 1, 155, 33, 230, 219, 1, 180, 33, 230, 219, 1, 195, 69, - 33, 230, 219, 1, 168, 214, 78, 1, 65, 214, 78, 1, 252, 206, 214, 78, 1, - 68, 214, 78, 1, 223, 199, 214, 78, 1, 66, 214, 78, 1, 196, 30, 214, 78, - 1, 117, 146, 214, 78, 1, 117, 206, 110, 214, 78, 1, 117, 172, 214, 78, 1, - 117, 219, 74, 214, 78, 1, 71, 214, 78, 1, 251, 236, 214, 78, 1, 74, 214, - 78, 1, 250, 163, 214, 78, 1, 155, 214, 78, 1, 221, 215, 214, 78, 1, 231, - 240, 214, 78, 1, 231, 91, 214, 78, 1, 214, 68, 214, 78, 1, 214, 17, 214, - 78, 1, 247, 160, 214, 78, 1, 247, 1, 214, 78, 1, 223, 32, 214, 78, 1, - 222, 252, 214, 78, 1, 212, 101, 214, 78, 1, 212, 83, 214, 78, 1, 197, - 132, 214, 78, 1, 197, 120, 214, 78, 1, 237, 191, 214, 78, 1, 237, 175, - 214, 78, 1, 213, 79, 214, 78, 1, 190, 190, 214, 78, 1, 199, 49, 214, 78, - 1, 238, 32, 214, 78, 1, 237, 68, 214, 78, 1, 180, 214, 78, 1, 213, 224, - 214, 78, 1, 168, 214, 78, 1, 209, 228, 214, 78, 1, 249, 153, 214, 78, 1, - 248, 203, 214, 78, 1, 174, 214, 78, 1, 216, 103, 214, 78, 1, 170, 214, - 78, 1, 165, 214, 78, 1, 207, 6, 214, 78, 1, 173, 214, 78, 1, 219, 159, - 214, 78, 1, 193, 190, 214, 78, 1, 203, 165, 214, 78, 1, 201, 175, 214, - 78, 1, 188, 214, 78, 1, 140, 214, 78, 18, 3, 252, 206, 214, 78, 18, 3, - 68, 214, 78, 18, 3, 223, 199, 214, 78, 18, 3, 66, 214, 78, 18, 3, 196, - 30, 214, 78, 18, 3, 117, 146, 214, 78, 18, 3, 117, 206, 110, 214, 78, 18, - 3, 117, 172, 214, 78, 18, 3, 117, 219, 74, 214, 78, 18, 3, 71, 214, 78, - 18, 3, 251, 236, 214, 78, 18, 3, 74, 214, 78, 18, 3, 250, 163, 214, 78, - 3, 195, 40, 214, 78, 3, 247, 119, 214, 78, 3, 251, 71, 214, 78, 3, 195, - 35, 214, 78, 3, 212, 141, 214, 78, 3, 250, 145, 214, 78, 3, 53, 251, 71, - 214, 78, 211, 113, 214, 78, 202, 209, 214, 78, 237, 238, 214, 78, 55, - 237, 238, 214, 78, 242, 74, 214, 78, 231, 204, 233, 3, 214, 78, 252, 68, - 56, 214, 78, 17, 191, 77, 214, 78, 17, 107, 214, 78, 17, 109, 214, 78, - 17, 138, 214, 78, 17, 134, 214, 78, 17, 149, 214, 78, 17, 169, 214, 78, - 17, 175, 214, 78, 17, 171, 214, 78, 17, 178, 214, 78, 55, 242, 74, 214, - 78, 209, 107, 77, 214, 78, 223, 119, 56, 214, 78, 205, 138, 77, 214, 78, - 1, 195, 150, 251, 71, 214, 78, 3, 222, 237, 214, 78, 3, 196, 75, 198, - 129, 251, 100, 198, 129, 1, 65, 198, 129, 1, 252, 206, 198, 129, 1, 68, - 198, 129, 1, 223, 199, 198, 129, 1, 66, 198, 129, 1, 196, 30, 198, 129, - 1, 117, 146, 198, 129, 1, 117, 206, 110, 198, 129, 1, 117, 172, 198, 129, - 1, 117, 219, 74, 198, 129, 1, 71, 198, 129, 1, 251, 236, 198, 129, 1, 74, - 198, 129, 1, 250, 163, 198, 129, 1, 155, 198, 129, 1, 221, 215, 198, 129, - 1, 231, 240, 198, 129, 1, 231, 91, 198, 129, 1, 214, 68, 198, 129, 1, - 247, 160, 198, 129, 1, 247, 1, 198, 129, 1, 223, 32, 198, 129, 1, 222, - 252, 198, 129, 1, 212, 101, 198, 129, 1, 197, 132, 198, 129, 1, 197, 120, - 198, 129, 1, 237, 191, 198, 129, 1, 237, 175, 198, 129, 1, 213, 79, 198, - 129, 1, 190, 190, 198, 129, 1, 199, 49, 198, 129, 1, 238, 32, 198, 129, - 1, 237, 68, 198, 129, 1, 180, 198, 129, 1, 168, 198, 129, 1, 209, 228, - 198, 129, 1, 249, 153, 198, 129, 1, 248, 203, 198, 129, 1, 174, 198, 129, + 162, 17, 134, 162, 17, 150, 162, 17, 169, 162, 17, 175, 162, 17, 171, + 162, 17, 178, 162, 3, 39, 44, 195, 40, 162, 1, 39, 44, 203, 41, 71, 162, + 1, 39, 44, 203, 41, 74, 162, 18, 3, 39, 44, 203, 41, 71, 162, 18, 3, 39, + 44, 203, 41, 74, 162, 1, 39, 44, 219, 75, 162, 31, 222, 198, 222, 101, 3, + 247, 121, 222, 101, 3, 251, 73, 222, 101, 3, 195, 35, 222, 101, 1, 65, + 222, 101, 1, 252, 208, 222, 101, 1, 68, 222, 101, 1, 223, 201, 222, 101, + 1, 66, 222, 101, 1, 196, 30, 222, 101, 1, 71, 222, 101, 1, 251, 238, 222, + 101, 1, 74, 222, 101, 1, 250, 165, 222, 101, 1, 155, 222, 101, 1, 221, + 217, 222, 101, 1, 231, 242, 222, 101, 1, 231, 93, 222, 101, 1, 214, 70, + 222, 101, 1, 247, 162, 222, 101, 1, 247, 3, 222, 101, 1, 223, 34, 222, + 101, 1, 222, 254, 222, 101, 1, 212, 103, 222, 101, 1, 197, 132, 222, 101, + 1, 197, 120, 222, 101, 1, 237, 193, 222, 101, 1, 237, 182, 222, 101, 1, + 237, 177, 222, 101, 1, 207, 7, 222, 101, 1, 213, 81, 222, 101, 1, 190, + 190, 222, 101, 1, 199, 49, 222, 101, 1, 238, 34, 222, 101, 1, 237, 70, + 222, 101, 1, 181, 222, 101, 1, 168, 222, 101, 1, 209, 230, 222, 101, 1, + 249, 155, 222, 101, 1, 248, 205, 222, 101, 1, 174, 222, 101, 1, 170, 222, + 101, 1, 165, 222, 101, 1, 173, 222, 101, 1, 195, 188, 222, 101, 1, 203, + 166, 222, 101, 1, 201, 176, 222, 101, 1, 188, 222, 101, 1, 140, 222, 101, + 18, 3, 252, 208, 222, 101, 18, 3, 68, 222, 101, 18, 3, 223, 201, 222, + 101, 18, 3, 66, 222, 101, 18, 3, 196, 30, 222, 101, 18, 3, 71, 222, 101, + 18, 3, 251, 238, 222, 101, 18, 3, 74, 222, 101, 18, 3, 250, 165, 222, + 101, 3, 195, 40, 222, 101, 3, 212, 143, 222, 101, 252, 70, 56, 222, 101, + 234, 71, 56, 222, 101, 31, 56, 222, 101, 205, 55, 77, 222, 101, 55, 205, + 55, 77, 222, 101, 237, 240, 222, 101, 55, 237, 240, 222, 101, 18, 3, 117, + 146, 222, 101, 31, 3, 58, 202, 13, 202, 21, 1, 205, 183, 202, 13, 202, + 21, 1, 199, 219, 202, 13, 202, 21, 1, 249, 125, 202, 13, 202, 21, 1, 247, + 151, 202, 13, 202, 21, 1, 238, 14, 202, 13, 202, 21, 1, 231, 227, 202, + 13, 202, 21, 1, 217, 122, 202, 13, 202, 21, 1, 214, 67, 202, 13, 202, 21, + 1, 220, 101, 202, 13, 202, 21, 1, 214, 239, 202, 13, 202, 21, 1, 195, + 184, 202, 13, 202, 21, 1, 210, 202, 202, 13, 202, 21, 1, 192, 121, 202, + 13, 202, 21, 1, 207, 162, 202, 13, 202, 21, 1, 230, 83, 202, 13, 202, 21, + 1, 222, 106, 202, 13, 202, 21, 1, 223, 28, 202, 13, 202, 21, 1, 212, 100, + 202, 13, 202, 21, 1, 251, 247, 202, 13, 202, 21, 1, 234, 188, 202, 13, + 202, 21, 1, 223, 202, 202, 13, 202, 21, 1, 196, 141, 202, 13, 202, 21, 1, + 211, 138, 202, 13, 202, 21, 1, 234, 175, 202, 13, 202, 21, 1, 217, 138, + 202, 13, 202, 21, 17, 191, 77, 202, 13, 202, 21, 17, 107, 202, 13, 202, + 21, 17, 109, 202, 13, 202, 21, 17, 138, 202, 13, 202, 21, 17, 134, 202, + 13, 202, 21, 17, 150, 202, 13, 202, 21, 17, 169, 202, 13, 202, 21, 17, + 175, 202, 13, 202, 21, 17, 171, 202, 13, 202, 21, 17, 178, 246, 253, 3, + 247, 121, 246, 253, 3, 251, 73, 246, 253, 3, 195, 35, 246, 253, 1, 252, + 208, 246, 253, 1, 68, 246, 253, 1, 66, 246, 253, 1, 71, 246, 253, 1, 222, + 129, 246, 253, 1, 221, 216, 246, 253, 1, 231, 239, 246, 253, 1, 231, 92, + 246, 253, 1, 214, 69, 246, 253, 1, 247, 161, 246, 253, 1, 247, 2, 246, + 253, 1, 223, 33, 246, 253, 1, 222, 253, 246, 253, 1, 212, 102, 246, 253, + 1, 197, 131, 246, 253, 1, 197, 119, 246, 253, 1, 237, 192, 246, 253, 1, + 237, 176, 246, 253, 1, 213, 80, 246, 253, 1, 199, 245, 246, 253, 1, 199, + 48, 246, 253, 1, 238, 33, 246, 253, 1, 237, 69, 246, 253, 1, 214, 252, + 246, 253, 1, 210, 222, 246, 253, 1, 209, 229, 246, 253, 1, 249, 153, 246, + 253, 1, 248, 204, 246, 253, 1, 217, 153, 246, 253, 1, 191, 174, 246, 253, + 1, 192, 140, 246, 253, 1, 207, 180, 246, 253, 1, 220, 127, 246, 253, 1, + 193, 181, 246, 253, 1, 205, 198, 246, 253, 1, 230, 93, 246, 253, 18, 3, + 65, 246, 253, 18, 3, 68, 246, 253, 18, 3, 223, 201, 246, 253, 18, 3, 66, + 246, 253, 18, 3, 196, 30, 246, 253, 18, 3, 71, 246, 253, 18, 3, 251, 238, + 246, 253, 18, 3, 74, 246, 253, 18, 3, 250, 165, 246, 253, 18, 3, 211, + 135, 246, 253, 187, 77, 246, 253, 250, 166, 77, 246, 253, 195, 40, 246, + 253, 217, 151, 246, 253, 17, 191, 77, 246, 253, 17, 107, 246, 253, 17, + 109, 246, 253, 17, 138, 246, 253, 17, 134, 246, 253, 17, 150, 246, 253, + 17, 169, 246, 253, 17, 175, 246, 253, 17, 171, 246, 253, 17, 178, 246, + 253, 205, 55, 77, 246, 253, 237, 240, 246, 253, 55, 237, 240, 246, 253, + 208, 15, 77, 246, 253, 1, 219, 160, 246, 253, 18, 3, 252, 208, 246, 253, + 18, 3, 234, 168, 246, 253, 1, 195, 187, 217, 120, 1, 65, 217, 120, 1, 68, + 217, 120, 1, 66, 217, 120, 1, 71, 217, 120, 1, 74, 217, 120, 1, 155, 217, + 120, 1, 221, 217, 217, 120, 1, 231, 242, 217, 120, 1, 231, 93, 217, 120, + 1, 247, 162, 217, 120, 1, 247, 3, 217, 120, 1, 223, 34, 217, 120, 1, 222, + 254, 217, 120, 1, 212, 103, 217, 120, 1, 197, 132, 217, 120, 1, 197, 120, + 217, 120, 1, 237, 193, 217, 120, 1, 237, 177, 217, 120, 1, 213, 81, 217, + 120, 1, 190, 190, 217, 120, 1, 199, 49, 217, 120, 1, 238, 34, 217, 120, + 1, 237, 70, 217, 120, 1, 181, 217, 120, 1, 168, 217, 120, 1, 209, 230, + 217, 120, 1, 249, 155, 217, 120, 1, 248, 205, 217, 120, 1, 174, 217, 120, + 1, 165, 217, 120, 1, 173, 217, 120, 1, 195, 188, 217, 120, 1, 188, 217, + 120, 1, 140, 217, 120, 1, 206, 110, 217, 120, 3, 212, 143, 217, 120, 252, + 70, 56, 217, 120, 205, 55, 77, 217, 120, 34, 203, 16, 203, 130, 3, 247, + 121, 203, 130, 3, 251, 73, 203, 130, 3, 195, 35, 203, 130, 1, 65, 203, + 130, 1, 252, 208, 203, 130, 1, 68, 203, 130, 1, 223, 201, 203, 130, 1, + 66, 203, 130, 1, 196, 30, 203, 130, 1, 117, 146, 203, 130, 1, 117, 206, + 111, 203, 130, 1, 117, 172, 203, 130, 1, 117, 219, 76, 203, 130, 1, 71, + 203, 130, 1, 251, 238, 203, 130, 1, 74, 203, 130, 1, 250, 165, 203, 130, + 1, 155, 203, 130, 1, 221, 217, 203, 130, 1, 231, 242, 203, 130, 1, 231, + 93, 203, 130, 1, 214, 70, 203, 130, 1, 247, 162, 203, 130, 1, 247, 3, + 203, 130, 1, 223, 34, 203, 130, 1, 222, 254, 203, 130, 1, 212, 103, 203, + 130, 1, 197, 132, 203, 130, 1, 197, 120, 203, 130, 1, 237, 193, 203, 130, + 1, 237, 177, 203, 130, 1, 213, 81, 203, 130, 1, 190, 190, 203, 130, 1, + 199, 49, 203, 130, 1, 238, 34, 203, 130, 1, 237, 70, 203, 130, 1, 181, + 203, 130, 1, 168, 203, 130, 1, 209, 230, 203, 130, 1, 249, 155, 203, 130, + 1, 248, 205, 203, 130, 1, 174, 203, 130, 1, 170, 203, 130, 1, 165, 203, + 130, 1, 173, 203, 130, 1, 219, 75, 203, 130, 1, 195, 188, 203, 130, 1, + 203, 166, 203, 130, 1, 201, 176, 203, 130, 1, 188, 203, 130, 1, 140, 203, + 130, 18, 3, 252, 208, 203, 130, 18, 3, 68, 203, 130, 18, 3, 223, 201, + 203, 130, 18, 3, 66, 203, 130, 18, 3, 196, 30, 203, 130, 18, 3, 117, 146, + 203, 130, 18, 3, 117, 206, 111, 203, 130, 18, 3, 117, 172, 203, 130, 18, + 3, 117, 219, 76, 203, 130, 18, 3, 71, 203, 130, 18, 3, 251, 238, 203, + 130, 18, 3, 74, 203, 130, 18, 3, 250, 165, 203, 130, 3, 195, 40, 203, + 130, 3, 250, 147, 203, 130, 3, 222, 239, 203, 130, 3, 196, 75, 203, 130, + 211, 115, 203, 130, 237, 240, 203, 130, 55, 237, 240, 203, 130, 252, 70, + 56, 203, 130, 204, 11, 203, 130, 205, 139, 77, 203, 130, 3, 212, 143, + 203, 130, 18, 52, 77, 203, 130, 233, 203, 203, 41, 18, 77, 203, 130, 200, + 162, 77, 203, 130, 18, 3, 208, 209, 71, 203, 130, 3, 223, 95, 247, 121, + 203, 130, 17, 191, 77, 203, 130, 17, 107, 203, 130, 17, 109, 203, 130, + 17, 138, 203, 130, 17, 134, 203, 130, 17, 150, 203, 130, 17, 169, 203, + 130, 17, 175, 203, 130, 17, 171, 203, 130, 17, 178, 203, 130, 234, 148, + 203, 130, 3, 202, 211, 203, 130, 229, 229, 203, 130, 239, 31, 56, 203, + 130, 205, 55, 217, 57, 203, 130, 205, 55, 217, 56, 166, 251, 16, 17, 107, + 166, 251, 16, 17, 109, 166, 251, 16, 17, 138, 166, 251, 16, 17, 134, 166, + 251, 16, 17, 150, 166, 251, 16, 17, 169, 166, 251, 16, 17, 175, 166, 251, + 16, 17, 171, 166, 251, 16, 17, 178, 166, 251, 16, 31, 199, 95, 166, 251, + 16, 31, 197, 32, 166, 251, 16, 31, 198, 249, 166, 251, 16, 31, 232, 137, + 166, 251, 16, 31, 233, 17, 166, 251, 16, 31, 202, 121, 166, 251, 16, 31, + 203, 242, 166, 251, 16, 31, 234, 155, 166, 251, 16, 31, 213, 171, 166, + 251, 16, 31, 91, 228, 142, 166, 251, 16, 31, 91, 189, 221, 184, 1, 65, + 221, 184, 1, 252, 208, 221, 184, 1, 68, 221, 184, 1, 66, 221, 184, 1, 71, + 221, 184, 1, 251, 238, 221, 184, 1, 74, 221, 184, 1, 250, 165, 221, 184, + 1, 155, 221, 184, 1, 221, 217, 221, 184, 1, 231, 242, 221, 184, 1, 231, + 129, 221, 184, 1, 231, 93, 221, 184, 1, 214, 70, 221, 184, 1, 247, 162, + 221, 184, 1, 247, 3, 221, 184, 1, 223, 34, 221, 184, 1, 222, 232, 221, + 184, 1, 212, 103, 221, 184, 1, 197, 132, 221, 184, 1, 197, 120, 221, 184, + 1, 237, 193, 221, 184, 1, 237, 177, 221, 184, 1, 213, 81, 221, 184, 1, + 190, 190, 221, 184, 1, 199, 49, 221, 184, 1, 238, 34, 221, 184, 1, 237, + 183, 221, 184, 1, 237, 70, 221, 184, 1, 181, 221, 184, 1, 168, 221, 184, + 1, 209, 230, 221, 184, 1, 249, 155, 221, 184, 1, 249, 55, 221, 184, 1, + 248, 205, 221, 184, 1, 174, 221, 184, 1, 170, 221, 184, 1, 165, 221, 184, + 1, 173, 221, 184, 1, 195, 188, 221, 184, 1, 188, 221, 184, 1, 140, 221, + 184, 1, 219, 75, 221, 184, 18, 3, 252, 208, 221, 184, 18, 3, 68, 221, + 184, 18, 3, 223, 201, 221, 184, 18, 3, 66, 221, 184, 18, 3, 71, 221, 184, + 18, 3, 251, 238, 221, 184, 18, 3, 74, 221, 184, 18, 3, 250, 165, 221, + 184, 3, 251, 73, 221, 184, 3, 195, 40, 221, 184, 3, 212, 143, 221, 184, + 3, 203, 156, 221, 184, 237, 240, 221, 184, 55, 237, 240, 221, 184, 193, + 23, 204, 11, 221, 184, 205, 55, 77, 221, 184, 55, 205, 55, 77, 221, 184, + 252, 70, 56, 221, 184, 3, 200, 206, 221, 184, 1, 208, 98, 221, 184, 1, + 203, 41, 68, 221, 184, 18, 3, 117, 146, 215, 135, 1, 65, 215, 135, 1, 68, + 215, 135, 1, 66, 215, 135, 1, 71, 215, 135, 1, 155, 215, 135, 1, 221, + 217, 215, 135, 1, 231, 242, 215, 135, 1, 231, 93, 215, 135, 1, 247, 162, + 215, 135, 1, 247, 3, 215, 135, 1, 223, 34, 215, 135, 1, 222, 232, 215, + 135, 1, 212, 103, 215, 135, 1, 197, 132, 215, 135, 1, 197, 120, 215, 135, + 1, 237, 193, 215, 135, 1, 237, 183, 215, 135, 1, 237, 177, 215, 135, 1, + 213, 81, 215, 135, 1, 190, 190, 215, 135, 1, 199, 49, 215, 135, 1, 238, + 34, 215, 135, 1, 237, 70, 215, 135, 1, 181, 215, 135, 1, 168, 215, 135, + 1, 209, 230, 215, 135, 1, 249, 155, 215, 135, 1, 248, 205, 215, 135, 1, + 174, 215, 135, 1, 170, 215, 135, 1, 165, 215, 135, 1, 173, 215, 135, 1, + 195, 188, 215, 135, 1, 188, 215, 135, 1, 140, 215, 135, 1, 206, 110, 215, + 135, 1, 207, 7, 215, 135, 205, 55, 77, 221, 174, 1, 65, 221, 174, 1, 252, + 208, 221, 174, 1, 68, 221, 174, 1, 223, 201, 221, 174, 1, 66, 221, 174, + 1, 196, 30, 221, 174, 1, 71, 221, 174, 1, 251, 238, 221, 174, 1, 74, 221, + 174, 1, 250, 165, 221, 174, 1, 155, 221, 174, 1, 221, 217, 221, 174, 1, + 231, 242, 221, 174, 1, 231, 129, 221, 174, 1, 231, 93, 221, 174, 1, 214, + 70, 221, 174, 1, 247, 162, 221, 174, 1, 247, 3, 221, 174, 1, 223, 34, + 221, 174, 1, 222, 232, 221, 174, 1, 222, 254, 221, 174, 1, 212, 103, 221, + 174, 1, 197, 132, 221, 174, 1, 197, 120, 221, 174, 1, 237, 193, 221, 174, + 1, 237, 183, 221, 174, 1, 206, 110, 221, 174, 1, 237, 177, 221, 174, 1, + 213, 81, 221, 174, 1, 190, 190, 221, 174, 1, 199, 49, 221, 174, 1, 238, + 34, 221, 174, 1, 237, 70, 221, 174, 1, 181, 221, 174, 1, 168, 221, 174, + 1, 209, 230, 221, 174, 1, 249, 155, 221, 174, 1, 249, 55, 221, 174, 1, + 248, 205, 221, 174, 1, 174, 221, 174, 1, 170, 221, 174, 1, 165, 221, 174, + 1, 173, 221, 174, 1, 195, 188, 221, 174, 1, 203, 166, 221, 174, 1, 188, + 221, 174, 1, 140, 221, 174, 3, 251, 73, 221, 174, 18, 3, 252, 208, 221, + 174, 18, 3, 68, 221, 174, 18, 3, 223, 201, 221, 174, 18, 3, 66, 221, 174, + 18, 3, 196, 30, 221, 174, 18, 3, 71, 221, 174, 18, 3, 251, 238, 221, 174, + 18, 3, 74, 221, 174, 18, 3, 250, 165, 221, 174, 3, 212, 143, 221, 174, 3, + 195, 40, 221, 174, 17, 191, 77, 221, 174, 17, 107, 221, 174, 17, 109, + 221, 174, 17, 138, 221, 174, 17, 134, 221, 174, 17, 150, 221, 174, 17, + 169, 221, 174, 17, 175, 221, 174, 17, 171, 221, 174, 17, 178, 230, 221, + 3, 33, 251, 74, 58, 230, 221, 3, 247, 121, 230, 221, 3, 251, 73, 230, + 221, 3, 195, 35, 230, 221, 1, 65, 230, 221, 1, 252, 208, 230, 221, 1, 68, + 230, 221, 1, 223, 201, 230, 221, 1, 66, 230, 221, 1, 196, 30, 230, 221, + 1, 117, 146, 230, 221, 1, 117, 172, 230, 221, 1, 234, 190, 230, 221, 1, + 251, 238, 230, 221, 1, 211, 89, 230, 221, 1, 250, 165, 230, 221, 1, 155, + 230, 221, 1, 221, 217, 230, 221, 1, 231, 242, 230, 221, 1, 231, 93, 230, + 221, 1, 214, 70, 230, 221, 1, 247, 162, 230, 221, 1, 247, 3, 230, 221, 1, + 223, 34, 230, 221, 1, 222, 254, 230, 221, 1, 212, 103, 230, 221, 1, 197, + 132, 230, 221, 1, 197, 120, 230, 221, 1, 237, 193, 230, 221, 1, 237, 177, + 230, 221, 1, 213, 81, 230, 221, 1, 190, 190, 230, 221, 1, 199, 49, 230, + 221, 1, 238, 34, 230, 221, 1, 237, 70, 230, 221, 1, 181, 230, 221, 1, + 168, 230, 221, 1, 209, 230, 230, 221, 1, 249, 155, 230, 221, 1, 248, 205, + 230, 221, 1, 174, 230, 221, 1, 170, 230, 221, 1, 165, 230, 221, 1, 173, + 230, 221, 1, 219, 75, 230, 221, 1, 195, 188, 230, 221, 1, 203, 166, 230, + 221, 1, 201, 176, 230, 221, 1, 188, 230, 221, 1, 140, 33, 248, 167, 60, + 230, 221, 3, 212, 143, 230, 221, 3, 250, 147, 230, 221, 18, 3, 252, 208, + 230, 221, 18, 3, 68, 230, 221, 18, 3, 223, 201, 230, 221, 18, 3, 66, 230, + 221, 18, 3, 196, 30, 230, 221, 18, 3, 117, 146, 230, 221, 18, 3, 117, + 206, 111, 230, 221, 18, 3, 234, 190, 230, 221, 18, 3, 251, 238, 230, 221, + 18, 3, 211, 89, 230, 221, 18, 3, 250, 165, 230, 221, 3, 195, 40, 230, + 221, 211, 115, 230, 221, 250, 166, 219, 200, 77, 230, 221, 3, 209, 81, + 230, 221, 1, 195, 150, 251, 73, 230, 221, 1, 195, 150, 55, 251, 73, 230, + 221, 1, 117, 206, 111, 230, 221, 1, 117, 219, 76, 230, 221, 18, 3, 117, + 172, 230, 221, 18, 3, 117, 219, 76, 33, 230, 221, 17, 191, 77, 33, 230, + 221, 17, 107, 33, 230, 221, 17, 109, 33, 230, 221, 17, 138, 33, 230, 221, + 17, 134, 33, 230, 221, 17, 150, 33, 230, 221, 17, 169, 33, 230, 221, 1, + 65, 33, 230, 221, 1, 155, 33, 230, 221, 1, 181, 33, 230, 221, 1, 195, 69, + 33, 230, 221, 1, 168, 214, 80, 1, 65, 214, 80, 1, 252, 208, 214, 80, 1, + 68, 214, 80, 1, 223, 201, 214, 80, 1, 66, 214, 80, 1, 196, 30, 214, 80, + 1, 117, 146, 214, 80, 1, 117, 206, 111, 214, 80, 1, 117, 172, 214, 80, 1, + 117, 219, 76, 214, 80, 1, 71, 214, 80, 1, 251, 238, 214, 80, 1, 74, 214, + 80, 1, 250, 165, 214, 80, 1, 155, 214, 80, 1, 221, 217, 214, 80, 1, 231, + 242, 214, 80, 1, 231, 93, 214, 80, 1, 214, 70, 214, 80, 1, 214, 19, 214, + 80, 1, 247, 162, 214, 80, 1, 247, 3, 214, 80, 1, 223, 34, 214, 80, 1, + 222, 254, 214, 80, 1, 212, 103, 214, 80, 1, 212, 85, 214, 80, 1, 197, + 132, 214, 80, 1, 197, 120, 214, 80, 1, 237, 193, 214, 80, 1, 237, 177, + 214, 80, 1, 213, 81, 214, 80, 1, 190, 190, 214, 80, 1, 199, 49, 214, 80, + 1, 238, 34, 214, 80, 1, 237, 70, 214, 80, 1, 181, 214, 80, 1, 213, 226, + 214, 80, 1, 168, 214, 80, 1, 209, 230, 214, 80, 1, 249, 155, 214, 80, 1, + 248, 205, 214, 80, 1, 174, 214, 80, 1, 216, 105, 214, 80, 1, 170, 214, + 80, 1, 165, 214, 80, 1, 207, 7, 214, 80, 1, 173, 214, 80, 1, 219, 161, + 214, 80, 1, 193, 190, 214, 80, 1, 203, 166, 214, 80, 1, 201, 176, 214, + 80, 1, 188, 214, 80, 1, 140, 214, 80, 18, 3, 252, 208, 214, 80, 18, 3, + 68, 214, 80, 18, 3, 223, 201, 214, 80, 18, 3, 66, 214, 80, 18, 3, 196, + 30, 214, 80, 18, 3, 117, 146, 214, 80, 18, 3, 117, 206, 111, 214, 80, 18, + 3, 117, 172, 214, 80, 18, 3, 117, 219, 76, 214, 80, 18, 3, 71, 214, 80, + 18, 3, 251, 238, 214, 80, 18, 3, 74, 214, 80, 18, 3, 250, 165, 214, 80, + 3, 195, 40, 214, 80, 3, 247, 121, 214, 80, 3, 251, 73, 214, 80, 3, 195, + 35, 214, 80, 3, 212, 143, 214, 80, 3, 250, 147, 214, 80, 3, 53, 251, 73, + 214, 80, 211, 115, 214, 80, 202, 210, 214, 80, 237, 240, 214, 80, 55, + 237, 240, 214, 80, 242, 76, 214, 80, 231, 206, 233, 5, 214, 80, 252, 70, + 56, 214, 80, 17, 191, 77, 214, 80, 17, 107, 214, 80, 17, 109, 214, 80, + 17, 138, 214, 80, 17, 134, 214, 80, 17, 150, 214, 80, 17, 169, 214, 80, + 17, 175, 214, 80, 17, 171, 214, 80, 17, 178, 214, 80, 55, 242, 76, 214, + 80, 209, 109, 77, 214, 80, 223, 121, 56, 214, 80, 205, 139, 77, 214, 80, + 1, 195, 150, 251, 73, 214, 80, 3, 222, 239, 214, 80, 3, 196, 75, 198, + 129, 251, 102, 198, 129, 1, 65, 198, 129, 1, 252, 208, 198, 129, 1, 68, + 198, 129, 1, 223, 201, 198, 129, 1, 66, 198, 129, 1, 196, 30, 198, 129, + 1, 117, 146, 198, 129, 1, 117, 206, 111, 198, 129, 1, 117, 172, 198, 129, + 1, 117, 219, 76, 198, 129, 1, 71, 198, 129, 1, 251, 238, 198, 129, 1, 74, + 198, 129, 1, 250, 165, 198, 129, 1, 155, 198, 129, 1, 221, 217, 198, 129, + 1, 231, 242, 198, 129, 1, 231, 93, 198, 129, 1, 214, 70, 198, 129, 1, + 247, 162, 198, 129, 1, 247, 3, 198, 129, 1, 223, 34, 198, 129, 1, 222, + 254, 198, 129, 1, 212, 103, 198, 129, 1, 197, 132, 198, 129, 1, 197, 120, + 198, 129, 1, 237, 193, 198, 129, 1, 237, 177, 198, 129, 1, 213, 81, 198, + 129, 1, 190, 190, 198, 129, 1, 199, 49, 198, 129, 1, 238, 34, 198, 129, + 1, 237, 70, 198, 129, 1, 181, 198, 129, 1, 168, 198, 129, 1, 209, 230, + 198, 129, 1, 249, 155, 198, 129, 1, 248, 205, 198, 129, 1, 174, 198, 129, 1, 170, 198, 129, 1, 165, 198, 129, 1, 173, 198, 129, 1, 195, 188, 198, - 129, 1, 203, 165, 198, 129, 1, 201, 175, 198, 129, 1, 188, 198, 129, 1, - 140, 198, 129, 18, 3, 252, 206, 198, 129, 18, 3, 68, 198, 129, 18, 3, - 223, 199, 198, 129, 18, 3, 66, 198, 129, 18, 3, 196, 30, 198, 129, 18, 3, - 117, 146, 198, 129, 18, 3, 117, 206, 110, 198, 129, 18, 3, 117, 172, 198, - 129, 18, 3, 117, 219, 74, 198, 129, 18, 3, 71, 198, 129, 18, 3, 203, 40, - 71, 198, 129, 18, 3, 251, 236, 198, 129, 18, 3, 74, 198, 129, 18, 3, 203, - 40, 74, 198, 129, 18, 3, 250, 163, 198, 129, 3, 247, 119, 198, 129, 3, - 251, 71, 198, 129, 3, 195, 35, 198, 129, 3, 195, 40, 198, 129, 3, 212, - 141, 198, 129, 3, 250, 145, 198, 129, 230, 137, 198, 129, 252, 68, 56, - 198, 129, 211, 113, 198, 129, 17, 191, 77, 198, 129, 17, 107, 198, 129, - 17, 109, 198, 129, 17, 138, 198, 129, 17, 134, 198, 129, 17, 149, 198, + 129, 1, 203, 166, 198, 129, 1, 201, 176, 198, 129, 1, 188, 198, 129, 1, + 140, 198, 129, 18, 3, 252, 208, 198, 129, 18, 3, 68, 198, 129, 18, 3, + 223, 201, 198, 129, 18, 3, 66, 198, 129, 18, 3, 196, 30, 198, 129, 18, 3, + 117, 146, 198, 129, 18, 3, 117, 206, 111, 198, 129, 18, 3, 117, 172, 198, + 129, 18, 3, 117, 219, 76, 198, 129, 18, 3, 71, 198, 129, 18, 3, 203, 41, + 71, 198, 129, 18, 3, 251, 238, 198, 129, 18, 3, 74, 198, 129, 18, 3, 203, + 41, 74, 198, 129, 18, 3, 250, 165, 198, 129, 3, 247, 121, 198, 129, 3, + 251, 73, 198, 129, 3, 195, 35, 198, 129, 3, 195, 40, 198, 129, 3, 212, + 143, 198, 129, 3, 250, 147, 198, 129, 230, 139, 198, 129, 252, 70, 56, + 198, 129, 211, 115, 198, 129, 17, 191, 77, 198, 129, 17, 107, 198, 129, + 17, 109, 198, 129, 17, 138, 198, 129, 17, 134, 198, 129, 17, 150, 198, 129, 17, 169, 198, 129, 17, 175, 198, 129, 17, 171, 198, 129, 17, 178, - 202, 211, 1, 65, 202, 211, 1, 252, 206, 202, 211, 1, 68, 202, 211, 1, - 223, 199, 202, 211, 1, 66, 202, 211, 1, 196, 30, 202, 211, 1, 117, 146, - 202, 211, 1, 117, 206, 110, 202, 211, 1, 117, 172, 202, 211, 1, 117, 219, - 74, 202, 211, 1, 71, 202, 211, 1, 251, 236, 202, 211, 1, 74, 202, 211, 1, - 250, 163, 202, 211, 1, 155, 202, 211, 1, 221, 215, 202, 211, 1, 231, 240, - 202, 211, 1, 231, 91, 202, 211, 1, 214, 68, 202, 211, 1, 247, 160, 202, - 211, 1, 247, 1, 202, 211, 1, 223, 32, 202, 211, 1, 222, 252, 202, 211, 1, - 212, 101, 202, 211, 1, 197, 132, 202, 211, 1, 197, 120, 202, 211, 1, 237, - 191, 202, 211, 1, 237, 175, 202, 211, 1, 213, 79, 202, 211, 1, 190, 190, - 202, 211, 1, 199, 49, 202, 211, 1, 238, 32, 202, 211, 1, 237, 68, 202, - 211, 1, 180, 202, 211, 1, 168, 202, 211, 1, 209, 228, 202, 211, 1, 249, - 153, 202, 211, 1, 248, 203, 202, 211, 1, 174, 202, 211, 1, 170, 202, 211, - 1, 165, 202, 211, 1, 173, 202, 211, 1, 195, 188, 202, 211, 1, 203, 165, - 202, 211, 1, 201, 175, 202, 211, 1, 188, 202, 211, 1, 140, 202, 211, 18, - 3, 252, 206, 202, 211, 18, 3, 68, 202, 211, 18, 3, 223, 199, 202, 211, - 18, 3, 66, 202, 211, 18, 3, 196, 30, 202, 211, 18, 3, 117, 146, 202, 211, - 18, 3, 117, 206, 110, 202, 211, 18, 3, 71, 202, 211, 18, 3, 251, 236, - 202, 211, 18, 3, 74, 202, 211, 18, 3, 250, 163, 202, 211, 3, 247, 119, - 202, 211, 3, 251, 71, 202, 211, 3, 195, 35, 202, 211, 3, 195, 40, 202, - 211, 3, 212, 141, 202, 211, 3, 202, 210, 202, 211, 237, 238, 202, 211, - 55, 237, 238, 202, 211, 204, 11, 236, 140, 202, 211, 204, 11, 164, 202, - 211, 207, 46, 217, 55, 202, 211, 207, 46, 217, 54, 202, 211, 207, 46, - 217, 53, 202, 211, 234, 95, 79, 199, 54, 77, 202, 211, 205, 54, 87, 4, - 197, 236, 23, 196, 221, 211, 41, 202, 211, 205, 54, 87, 4, 197, 236, 23, - 235, 138, 238, 226, 202, 211, 205, 54, 87, 4, 207, 120, 23, 235, 138, - 238, 226, 202, 211, 205, 54, 87, 4, 207, 120, 23, 235, 138, 55, 238, 226, - 202, 211, 205, 54, 87, 4, 207, 120, 23, 235, 138, 197, 225, 238, 226, - 202, 211, 205, 54, 87, 55, 206, 188, 202, 211, 205, 54, 87, 55, 206, 189, - 4, 207, 119, 202, 211, 205, 54, 87, 4, 55, 238, 226, 202, 211, 205, 54, - 87, 4, 197, 225, 238, 226, 202, 211, 205, 54, 87, 4, 208, 26, 238, 226, - 202, 211, 205, 54, 87, 4, 204, 8, 238, 226, 202, 211, 205, 54, 87, 4, - 243, 8, 23, 207, 119, 202, 211, 205, 54, 87, 4, 243, 8, 23, 105, 234, 97, - 202, 211, 205, 54, 87, 4, 243, 8, 23, 232, 128, 234, 97, 202, 211, 1, - 198, 226, 251, 157, 68, 202, 211, 1, 197, 15, 251, 157, 68, 202, 211, 1, - 197, 15, 251, 157, 223, 199, 202, 211, 1, 251, 157, 66, 202, 211, 18, 3, - 251, 157, 66, 202, 211, 18, 3, 251, 157, 196, 30, 215, 253, 1, 65, 215, - 253, 1, 252, 206, 215, 253, 1, 68, 215, 253, 1, 223, 199, 215, 253, 1, - 66, 215, 253, 1, 196, 30, 215, 253, 1, 117, 146, 215, 253, 1, 117, 206, - 110, 215, 253, 1, 117, 172, 215, 253, 1, 117, 219, 74, 215, 253, 1, 71, - 215, 253, 1, 251, 236, 215, 253, 1, 74, 215, 253, 1, 250, 163, 215, 253, - 1, 155, 215, 253, 1, 221, 215, 215, 253, 1, 231, 240, 215, 253, 1, 231, - 91, 215, 253, 1, 214, 68, 215, 253, 1, 247, 160, 215, 253, 1, 247, 1, - 215, 253, 1, 223, 32, 215, 253, 1, 222, 252, 215, 253, 1, 212, 101, 215, - 253, 1, 197, 132, 215, 253, 1, 197, 120, 215, 253, 1, 237, 191, 215, 253, - 1, 237, 175, 215, 253, 1, 213, 79, 215, 253, 1, 190, 190, 215, 253, 1, - 199, 49, 215, 253, 1, 238, 32, 215, 253, 1, 237, 68, 215, 253, 1, 180, - 215, 253, 1, 168, 215, 253, 1, 209, 228, 215, 253, 1, 249, 153, 215, 253, - 1, 248, 203, 215, 253, 1, 174, 215, 253, 1, 170, 215, 253, 1, 165, 215, - 253, 1, 173, 215, 253, 1, 195, 188, 215, 253, 1, 203, 165, 215, 253, 1, - 201, 175, 215, 253, 1, 188, 215, 253, 1, 140, 215, 253, 1, 219, 73, 215, - 253, 18, 3, 252, 206, 215, 253, 18, 3, 68, 215, 253, 18, 3, 223, 199, - 215, 253, 18, 3, 66, 215, 253, 18, 3, 196, 30, 215, 253, 18, 3, 117, 146, - 215, 253, 18, 3, 117, 206, 110, 215, 253, 18, 3, 117, 172, 215, 253, 18, - 3, 117, 219, 74, 215, 253, 18, 3, 71, 215, 253, 18, 3, 251, 236, 215, - 253, 18, 3, 74, 215, 253, 18, 3, 250, 163, 215, 253, 3, 251, 71, 215, - 253, 3, 195, 35, 215, 253, 3, 195, 40, 215, 253, 3, 251, 11, 215, 253, - 237, 238, 215, 253, 55, 237, 238, 215, 253, 252, 68, 56, 215, 253, 3, - 228, 127, 215, 253, 17, 191, 77, 215, 253, 17, 107, 215, 253, 17, 109, - 215, 253, 17, 138, 215, 253, 17, 134, 215, 253, 17, 149, 215, 253, 17, - 169, 215, 253, 17, 175, 215, 253, 17, 171, 215, 253, 17, 178, 104, 248, - 159, 4, 211, 42, 104, 206, 122, 248, 158, 104, 55, 248, 159, 4, 211, 42, - 104, 197, 225, 248, 159, 4, 211, 42, 104, 248, 159, 4, 55, 211, 42, 104, - 206, 122, 248, 159, 4, 211, 42, 104, 206, 122, 248, 159, 4, 55, 211, 42, - 104, 223, 93, 248, 158, 104, 223, 93, 248, 159, 4, 55, 211, 42, 104, 200, - 134, 248, 158, 104, 200, 134, 248, 159, 4, 211, 42, 104, 200, 134, 248, - 159, 4, 55, 211, 42, 104, 153, 200, 134, 248, 159, 4, 55, 211, 42, 199, - 205, 1, 65, 199, 205, 1, 252, 206, 199, 205, 1, 68, 199, 205, 1, 223, - 199, 199, 205, 1, 66, 199, 205, 1, 196, 30, 199, 205, 1, 71, 199, 205, 1, - 251, 236, 199, 205, 1, 74, 199, 205, 1, 250, 163, 199, 205, 1, 155, 199, - 205, 1, 221, 215, 199, 205, 1, 231, 240, 199, 205, 1, 231, 91, 199, 205, - 1, 214, 68, 199, 205, 1, 247, 160, 199, 205, 1, 247, 1, 199, 205, 1, 223, - 32, 199, 205, 1, 222, 252, 199, 205, 1, 212, 101, 199, 205, 1, 197, 132, - 199, 205, 1, 197, 120, 199, 205, 1, 237, 191, 199, 205, 1, 237, 175, 199, - 205, 1, 213, 79, 199, 205, 1, 190, 190, 199, 205, 1, 199, 49, 199, 205, - 1, 238, 32, 199, 205, 1, 237, 68, 199, 205, 1, 180, 199, 205, 1, 168, - 199, 205, 1, 209, 228, 199, 205, 1, 249, 153, 199, 205, 1, 248, 203, 199, + 202, 212, 1, 65, 202, 212, 1, 252, 208, 202, 212, 1, 68, 202, 212, 1, + 223, 201, 202, 212, 1, 66, 202, 212, 1, 196, 30, 202, 212, 1, 117, 146, + 202, 212, 1, 117, 206, 111, 202, 212, 1, 117, 172, 202, 212, 1, 117, 219, + 76, 202, 212, 1, 71, 202, 212, 1, 251, 238, 202, 212, 1, 74, 202, 212, 1, + 250, 165, 202, 212, 1, 155, 202, 212, 1, 221, 217, 202, 212, 1, 231, 242, + 202, 212, 1, 231, 93, 202, 212, 1, 214, 70, 202, 212, 1, 247, 162, 202, + 212, 1, 247, 3, 202, 212, 1, 223, 34, 202, 212, 1, 222, 254, 202, 212, 1, + 212, 103, 202, 212, 1, 197, 132, 202, 212, 1, 197, 120, 202, 212, 1, 237, + 193, 202, 212, 1, 237, 177, 202, 212, 1, 213, 81, 202, 212, 1, 190, 190, + 202, 212, 1, 199, 49, 202, 212, 1, 238, 34, 202, 212, 1, 237, 70, 202, + 212, 1, 181, 202, 212, 1, 168, 202, 212, 1, 209, 230, 202, 212, 1, 249, + 155, 202, 212, 1, 248, 205, 202, 212, 1, 174, 202, 212, 1, 170, 202, 212, + 1, 165, 202, 212, 1, 173, 202, 212, 1, 195, 188, 202, 212, 1, 203, 166, + 202, 212, 1, 201, 176, 202, 212, 1, 188, 202, 212, 1, 140, 202, 212, 18, + 3, 252, 208, 202, 212, 18, 3, 68, 202, 212, 18, 3, 223, 201, 202, 212, + 18, 3, 66, 202, 212, 18, 3, 196, 30, 202, 212, 18, 3, 117, 146, 202, 212, + 18, 3, 117, 206, 111, 202, 212, 18, 3, 71, 202, 212, 18, 3, 251, 238, + 202, 212, 18, 3, 74, 202, 212, 18, 3, 250, 165, 202, 212, 3, 247, 121, + 202, 212, 3, 251, 73, 202, 212, 3, 195, 35, 202, 212, 3, 195, 40, 202, + 212, 3, 212, 143, 202, 212, 3, 202, 211, 202, 212, 237, 240, 202, 212, + 55, 237, 240, 202, 212, 204, 12, 236, 142, 202, 212, 204, 12, 164, 202, + 212, 207, 47, 217, 57, 202, 212, 207, 47, 217, 56, 202, 212, 207, 47, + 217, 55, 202, 212, 234, 97, 79, 199, 54, 77, 202, 212, 205, 55, 87, 4, + 197, 236, 23, 196, 221, 211, 43, 202, 212, 205, 55, 87, 4, 197, 236, 23, + 235, 140, 238, 228, 202, 212, 205, 55, 87, 4, 207, 122, 23, 235, 140, + 238, 228, 202, 212, 205, 55, 87, 4, 207, 122, 23, 235, 140, 55, 238, 228, + 202, 212, 205, 55, 87, 4, 207, 122, 23, 235, 140, 197, 225, 238, 228, + 202, 212, 205, 55, 87, 55, 206, 189, 202, 212, 205, 55, 87, 55, 206, 190, + 4, 207, 121, 202, 212, 205, 55, 87, 4, 55, 238, 228, 202, 212, 205, 55, + 87, 4, 197, 225, 238, 228, 202, 212, 205, 55, 87, 4, 208, 28, 238, 228, + 202, 212, 205, 55, 87, 4, 204, 9, 238, 228, 202, 212, 205, 55, 87, 4, + 243, 10, 23, 207, 121, 202, 212, 205, 55, 87, 4, 243, 10, 23, 105, 234, + 99, 202, 212, 205, 55, 87, 4, 243, 10, 23, 232, 130, 234, 99, 202, 212, + 1, 198, 226, 251, 159, 68, 202, 212, 1, 197, 15, 251, 159, 68, 202, 212, + 1, 197, 15, 251, 159, 223, 201, 202, 212, 1, 251, 159, 66, 202, 212, 18, + 3, 251, 159, 66, 202, 212, 18, 3, 251, 159, 196, 30, 215, 255, 1, 65, + 215, 255, 1, 252, 208, 215, 255, 1, 68, 215, 255, 1, 223, 201, 215, 255, + 1, 66, 215, 255, 1, 196, 30, 215, 255, 1, 117, 146, 215, 255, 1, 117, + 206, 111, 215, 255, 1, 117, 172, 215, 255, 1, 117, 219, 76, 215, 255, 1, + 71, 215, 255, 1, 251, 238, 215, 255, 1, 74, 215, 255, 1, 250, 165, 215, + 255, 1, 155, 215, 255, 1, 221, 217, 215, 255, 1, 231, 242, 215, 255, 1, + 231, 93, 215, 255, 1, 214, 70, 215, 255, 1, 247, 162, 215, 255, 1, 247, + 3, 215, 255, 1, 223, 34, 215, 255, 1, 222, 254, 215, 255, 1, 212, 103, + 215, 255, 1, 197, 132, 215, 255, 1, 197, 120, 215, 255, 1, 237, 193, 215, + 255, 1, 237, 177, 215, 255, 1, 213, 81, 215, 255, 1, 190, 190, 215, 255, + 1, 199, 49, 215, 255, 1, 238, 34, 215, 255, 1, 237, 70, 215, 255, 1, 181, + 215, 255, 1, 168, 215, 255, 1, 209, 230, 215, 255, 1, 249, 155, 215, 255, + 1, 248, 205, 215, 255, 1, 174, 215, 255, 1, 170, 215, 255, 1, 165, 215, + 255, 1, 173, 215, 255, 1, 195, 188, 215, 255, 1, 203, 166, 215, 255, 1, + 201, 176, 215, 255, 1, 188, 215, 255, 1, 140, 215, 255, 1, 219, 75, 215, + 255, 18, 3, 252, 208, 215, 255, 18, 3, 68, 215, 255, 18, 3, 223, 201, + 215, 255, 18, 3, 66, 215, 255, 18, 3, 196, 30, 215, 255, 18, 3, 117, 146, + 215, 255, 18, 3, 117, 206, 111, 215, 255, 18, 3, 117, 172, 215, 255, 18, + 3, 117, 219, 76, 215, 255, 18, 3, 71, 215, 255, 18, 3, 251, 238, 215, + 255, 18, 3, 74, 215, 255, 18, 3, 250, 165, 215, 255, 3, 251, 73, 215, + 255, 3, 195, 35, 215, 255, 3, 195, 40, 215, 255, 3, 251, 13, 215, 255, + 237, 240, 215, 255, 55, 237, 240, 215, 255, 252, 70, 56, 215, 255, 3, + 228, 129, 215, 255, 17, 191, 77, 215, 255, 17, 107, 215, 255, 17, 109, + 215, 255, 17, 138, 215, 255, 17, 134, 215, 255, 17, 150, 215, 255, 17, + 169, 215, 255, 17, 175, 215, 255, 17, 171, 215, 255, 17, 178, 104, 248, + 161, 4, 211, 44, 104, 206, 123, 248, 160, 104, 55, 248, 161, 4, 211, 44, + 104, 197, 225, 248, 161, 4, 211, 44, 104, 248, 161, 4, 55, 211, 44, 104, + 206, 123, 248, 161, 4, 211, 44, 104, 206, 123, 248, 161, 4, 55, 211, 44, + 104, 223, 95, 248, 160, 104, 223, 95, 248, 161, 4, 55, 211, 44, 104, 200, + 134, 248, 160, 104, 200, 134, 248, 161, 4, 211, 44, 104, 200, 134, 248, + 161, 4, 55, 211, 44, 104, 154, 200, 134, 248, 161, 4, 55, 211, 44, 199, + 205, 1, 65, 199, 205, 1, 252, 208, 199, 205, 1, 68, 199, 205, 1, 223, + 201, 199, 205, 1, 66, 199, 205, 1, 196, 30, 199, 205, 1, 71, 199, 205, 1, + 251, 238, 199, 205, 1, 74, 199, 205, 1, 250, 165, 199, 205, 1, 155, 199, + 205, 1, 221, 217, 199, 205, 1, 231, 242, 199, 205, 1, 231, 93, 199, 205, + 1, 214, 70, 199, 205, 1, 247, 162, 199, 205, 1, 247, 3, 199, 205, 1, 223, + 34, 199, 205, 1, 222, 254, 199, 205, 1, 212, 103, 199, 205, 1, 197, 132, + 199, 205, 1, 197, 120, 199, 205, 1, 237, 193, 199, 205, 1, 237, 177, 199, + 205, 1, 213, 81, 199, 205, 1, 190, 190, 199, 205, 1, 199, 49, 199, 205, + 1, 238, 34, 199, 205, 1, 237, 70, 199, 205, 1, 181, 199, 205, 1, 168, + 199, 205, 1, 209, 230, 199, 205, 1, 249, 155, 199, 205, 1, 248, 205, 199, 205, 1, 174, 199, 205, 1, 170, 199, 205, 1, 165, 199, 205, 1, 173, 199, - 205, 1, 195, 188, 199, 205, 1, 203, 165, 199, 205, 1, 188, 199, 205, 1, - 140, 199, 205, 1, 206, 109, 199, 205, 3, 251, 71, 199, 205, 3, 195, 35, - 199, 205, 18, 3, 252, 206, 199, 205, 18, 3, 68, 199, 205, 18, 3, 223, - 199, 199, 205, 18, 3, 66, 199, 205, 18, 3, 196, 30, 199, 205, 18, 3, 71, - 199, 205, 18, 3, 251, 236, 199, 205, 18, 3, 74, 199, 205, 18, 3, 250, - 163, 199, 205, 3, 195, 40, 199, 205, 3, 212, 141, 199, 205, 1, 251, 14, - 221, 215, 199, 205, 252, 68, 56, 199, 205, 17, 191, 77, 199, 205, 17, + 205, 1, 195, 188, 199, 205, 1, 203, 166, 199, 205, 1, 188, 199, 205, 1, + 140, 199, 205, 1, 206, 110, 199, 205, 3, 251, 73, 199, 205, 3, 195, 35, + 199, 205, 18, 3, 252, 208, 199, 205, 18, 3, 68, 199, 205, 18, 3, 223, + 201, 199, 205, 18, 3, 66, 199, 205, 18, 3, 196, 30, 199, 205, 18, 3, 71, + 199, 205, 18, 3, 251, 238, 199, 205, 18, 3, 74, 199, 205, 18, 3, 250, + 165, 199, 205, 3, 195, 40, 199, 205, 3, 212, 143, 199, 205, 1, 251, 16, + 221, 217, 199, 205, 252, 70, 56, 199, 205, 17, 191, 77, 199, 205, 17, 107, 199, 205, 17, 109, 199, 205, 17, 138, 199, 205, 17, 134, 199, 205, - 17, 149, 199, 205, 17, 169, 199, 205, 17, 175, 199, 205, 17, 171, 199, - 205, 17, 178, 251, 240, 1, 155, 251, 240, 1, 221, 215, 251, 240, 1, 214, - 68, 251, 240, 1, 180, 251, 240, 1, 190, 190, 251, 240, 1, 251, 157, 190, - 190, 251, 240, 1, 168, 251, 240, 1, 209, 228, 251, 240, 1, 249, 153, 251, - 240, 1, 174, 251, 240, 1, 223, 32, 251, 240, 1, 247, 1, 251, 240, 1, 199, - 49, 251, 240, 1, 165, 251, 240, 1, 173, 251, 240, 1, 188, 251, 240, 1, - 212, 101, 251, 240, 1, 140, 251, 240, 1, 65, 251, 240, 1, 238, 32, 251, - 240, 1, 237, 68, 251, 240, 1, 231, 240, 251, 240, 1, 251, 157, 231, 240, - 251, 240, 1, 231, 91, 251, 240, 1, 248, 203, 251, 240, 1, 222, 252, 251, - 240, 1, 251, 157, 249, 153, 251, 240, 120, 3, 216, 217, 173, 251, 240, - 120, 3, 216, 217, 165, 251, 240, 120, 3, 216, 217, 219, 133, 165, 251, - 240, 18, 3, 65, 251, 240, 18, 3, 252, 206, 251, 240, 18, 3, 68, 251, 240, - 18, 3, 223, 199, 251, 240, 18, 3, 66, 251, 240, 18, 3, 196, 30, 251, 240, - 18, 3, 71, 251, 240, 18, 3, 250, 140, 251, 240, 18, 3, 74, 251, 240, 18, - 3, 251, 236, 251, 240, 18, 3, 251, 149, 251, 240, 3, 221, 143, 251, 240, - 17, 191, 77, 251, 240, 17, 107, 251, 240, 17, 109, 251, 240, 17, 138, - 251, 240, 17, 134, 251, 240, 17, 149, 251, 240, 17, 169, 251, 240, 17, - 175, 251, 240, 17, 171, 251, 240, 17, 178, 251, 240, 31, 199, 95, 251, - 240, 31, 197, 32, 251, 240, 3, 2, 205, 53, 251, 240, 3, 205, 53, 251, - 240, 3, 206, 53, 251, 240, 16, 195, 69, 251, 240, 1, 247, 160, 251, 240, - 1, 197, 132, 251, 240, 1, 197, 120, 251, 240, 1, 237, 191, 251, 240, 1, - 237, 175, 251, 240, 1, 213, 79, 251, 240, 1, 219, 73, 236, 161, 1, 65, - 236, 161, 1, 252, 206, 236, 161, 1, 68, 236, 161, 1, 223, 199, 236, 161, - 1, 66, 236, 161, 1, 196, 30, 236, 161, 1, 71, 236, 161, 1, 251, 236, 236, - 161, 1, 74, 236, 161, 1, 250, 163, 236, 161, 1, 155, 236, 161, 1, 221, - 215, 236, 161, 1, 231, 240, 236, 161, 1, 231, 91, 236, 161, 1, 214, 68, - 236, 161, 1, 247, 160, 236, 161, 1, 247, 1, 236, 161, 1, 223, 32, 236, - 161, 1, 222, 252, 236, 161, 1, 212, 101, 236, 161, 1, 197, 132, 236, 161, - 1, 197, 120, 236, 161, 1, 237, 191, 236, 161, 1, 237, 175, 236, 161, 1, - 213, 79, 236, 161, 1, 190, 190, 236, 161, 1, 199, 49, 236, 161, 1, 238, - 32, 236, 161, 1, 237, 68, 236, 161, 1, 180, 236, 161, 1, 168, 236, 161, - 1, 209, 228, 236, 161, 1, 249, 153, 236, 161, 1, 248, 203, 236, 161, 1, - 174, 236, 161, 1, 170, 236, 161, 1, 165, 236, 161, 1, 173, 236, 161, 1, - 195, 188, 236, 161, 1, 203, 165, 236, 161, 1, 201, 175, 236, 161, 1, 188, - 236, 161, 1, 140, 236, 161, 1, 206, 109, 236, 161, 18, 3, 252, 206, 236, - 161, 18, 3, 68, 236, 161, 18, 3, 223, 199, 236, 161, 18, 3, 66, 236, 161, - 18, 3, 196, 30, 236, 161, 18, 3, 117, 146, 236, 161, 18, 3, 117, 206, - 110, 236, 161, 18, 3, 71, 236, 161, 18, 3, 251, 236, 236, 161, 18, 3, 74, - 236, 161, 18, 3, 250, 163, 236, 161, 3, 251, 71, 236, 161, 3, 195, 35, - 236, 161, 3, 195, 40, 236, 161, 3, 212, 141, 236, 161, 252, 68, 56, 193, - 156, 242, 253, 6, 1, 214, 67, 193, 156, 242, 253, 6, 1, 65, 193, 156, - 242, 253, 6, 1, 193, 86, 193, 156, 242, 253, 6, 1, 191, 225, 193, 156, - 242, 253, 6, 1, 170, 193, 156, 242, 253, 6, 1, 192, 12, 193, 156, 242, - 253, 6, 1, 223, 199, 193, 156, 242, 253, 6, 1, 196, 30, 193, 156, 242, - 253, 6, 1, 71, 193, 156, 242, 253, 6, 1, 74, 193, 156, 242, 253, 6, 1, - 251, 122, 193, 156, 242, 253, 6, 1, 231, 240, 193, 156, 242, 253, 6, 1, - 221, 67, 193, 156, 242, 253, 6, 1, 234, 66, 193, 156, 242, 253, 6, 1, - 191, 204, 193, 156, 242, 253, 6, 1, 196, 160, 193, 156, 242, 253, 6, 1, - 234, 85, 193, 156, 242, 253, 6, 1, 211, 154, 193, 156, 242, 253, 6, 1, - 197, 127, 193, 156, 242, 253, 6, 1, 212, 127, 193, 156, 242, 253, 6, 1, - 238, 32, 193, 156, 242, 253, 6, 1, 250, 182, 193, 156, 242, 253, 6, 1, - 251, 149, 193, 156, 242, 253, 6, 1, 248, 10, 193, 156, 242, 253, 6, 1, - 208, 165, 193, 156, 242, 253, 6, 1, 229, 115, 193, 156, 242, 253, 6, 1, - 229, 3, 193, 156, 242, 253, 6, 1, 228, 185, 193, 156, 242, 253, 6, 1, - 230, 19, 193, 156, 242, 253, 6, 1, 201, 126, 193, 156, 242, 253, 6, 1, - 202, 193, 193, 156, 242, 253, 6, 1, 195, 25, 193, 156, 242, 253, 2, 1, - 214, 67, 193, 156, 242, 253, 2, 1, 65, 193, 156, 242, 253, 2, 1, 193, 86, - 193, 156, 242, 253, 2, 1, 191, 225, 193, 156, 242, 253, 2, 1, 170, 193, - 156, 242, 253, 2, 1, 192, 12, 193, 156, 242, 253, 2, 1, 223, 199, 193, - 156, 242, 253, 2, 1, 196, 30, 193, 156, 242, 253, 2, 1, 71, 193, 156, - 242, 253, 2, 1, 74, 193, 156, 242, 253, 2, 1, 251, 122, 193, 156, 242, - 253, 2, 1, 231, 240, 193, 156, 242, 253, 2, 1, 221, 67, 193, 156, 242, - 253, 2, 1, 234, 66, 193, 156, 242, 253, 2, 1, 191, 204, 193, 156, 242, - 253, 2, 1, 196, 160, 193, 156, 242, 253, 2, 1, 234, 85, 193, 156, 242, - 253, 2, 1, 211, 154, 193, 156, 242, 253, 2, 1, 197, 127, 193, 156, 242, - 253, 2, 1, 212, 127, 193, 156, 242, 253, 2, 1, 238, 32, 193, 156, 242, - 253, 2, 1, 250, 182, 193, 156, 242, 253, 2, 1, 251, 149, 193, 156, 242, - 253, 2, 1, 248, 10, 193, 156, 242, 253, 2, 1, 208, 165, 193, 156, 242, - 253, 2, 1, 229, 115, 193, 156, 242, 253, 2, 1, 229, 3, 193, 156, 242, - 253, 2, 1, 228, 185, 193, 156, 242, 253, 2, 1, 230, 19, 193, 156, 242, - 253, 2, 1, 201, 126, 193, 156, 242, 253, 2, 1, 202, 193, 193, 156, 242, - 253, 2, 1, 195, 25, 193, 156, 242, 253, 17, 191, 77, 193, 156, 242, 253, - 17, 107, 193, 156, 242, 253, 17, 109, 193, 156, 242, 253, 17, 138, 193, - 156, 242, 253, 17, 134, 193, 156, 242, 253, 17, 149, 193, 156, 242, 253, - 17, 169, 193, 156, 242, 253, 17, 175, 193, 156, 242, 253, 17, 171, 193, - 156, 242, 253, 17, 178, 193, 156, 242, 253, 31, 199, 95, 193, 156, 242, - 253, 31, 197, 32, 193, 156, 242, 253, 31, 198, 249, 193, 156, 242, 253, - 31, 232, 135, 193, 156, 242, 253, 31, 233, 15, 193, 156, 242, 253, 31, - 202, 120, 193, 156, 242, 253, 31, 203, 241, 193, 156, 242, 253, 31, 234, - 153, 193, 156, 242, 253, 31, 213, 169, 193, 156, 242, 253, 211, 113, 236, - 209, 251, 209, 1, 65, 236, 209, 251, 209, 1, 252, 206, 236, 209, 251, - 209, 1, 68, 236, 209, 251, 209, 1, 223, 199, 236, 209, 251, 209, 1, 66, - 236, 209, 251, 209, 1, 196, 30, 236, 209, 251, 209, 1, 71, 236, 209, 251, - 209, 1, 74, 236, 209, 251, 209, 1, 155, 236, 209, 251, 209, 1, 221, 215, - 236, 209, 251, 209, 1, 231, 240, 236, 209, 251, 209, 1, 231, 91, 236, - 209, 251, 209, 1, 214, 68, 236, 209, 251, 209, 1, 247, 160, 236, 209, - 251, 209, 1, 247, 1, 236, 209, 251, 209, 1, 223, 32, 236, 209, 251, 209, - 1, 212, 101, 236, 209, 251, 209, 1, 197, 132, 236, 209, 251, 209, 1, 237, - 191, 236, 209, 251, 209, 1, 237, 175, 236, 209, 251, 209, 1, 213, 79, - 236, 209, 251, 209, 1, 190, 190, 236, 209, 251, 209, 1, 199, 49, 236, - 209, 251, 209, 1, 238, 32, 236, 209, 251, 209, 1, 237, 68, 236, 209, 251, - 209, 1, 180, 236, 209, 251, 209, 1, 168, 236, 209, 251, 209, 1, 209, 228, - 236, 209, 251, 209, 1, 249, 153, 236, 209, 251, 209, 1, 248, 203, 236, - 209, 251, 209, 1, 174, 236, 209, 251, 209, 1, 170, 236, 209, 251, 209, 1, - 191, 175, 236, 209, 251, 209, 1, 165, 236, 209, 251, 209, 1, 173, 236, - 209, 251, 209, 1, 195, 188, 236, 209, 251, 209, 1, 203, 165, 236, 209, - 251, 209, 1, 201, 175, 236, 209, 251, 209, 1, 188, 236, 209, 251, 209, 1, - 140, 236, 209, 251, 209, 1, 219, 73, 236, 209, 251, 209, 1, 191, 123, - 236, 209, 251, 209, 18, 3, 252, 206, 236, 209, 251, 209, 18, 3, 68, 236, - 209, 251, 209, 18, 3, 223, 199, 236, 209, 251, 209, 18, 3, 66, 236, 209, - 251, 209, 18, 3, 196, 30, 236, 209, 251, 209, 18, 3, 71, 236, 209, 251, - 209, 18, 3, 251, 236, 236, 209, 251, 209, 18, 3, 74, 236, 209, 251, 209, - 3, 251, 71, 236, 209, 251, 209, 3, 247, 119, 236, 209, 251, 209, 3, 230, - 72, 236, 209, 251, 209, 195, 40, 236, 209, 251, 209, 208, 227, 214, 214, - 56, 236, 209, 251, 209, 216, 217, 170, 236, 209, 251, 209, 89, 165, 236, - 209, 251, 209, 216, 217, 165, 236, 209, 251, 209, 3, 212, 141, 236, 209, - 251, 209, 55, 237, 238, 236, 209, 251, 209, 231, 204, 233, 3, 236, 209, - 251, 209, 234, 95, 79, 199, 54, 77, 236, 209, 251, 209, 17, 191, 77, 236, - 209, 251, 209, 17, 107, 236, 209, 251, 209, 17, 109, 236, 209, 251, 209, - 17, 138, 236, 209, 251, 209, 17, 134, 236, 209, 251, 209, 17, 149, 236, - 209, 251, 209, 17, 169, 236, 209, 251, 209, 17, 175, 236, 209, 251, 209, - 17, 171, 236, 209, 251, 209, 17, 178, 214, 223, 1, 65, 214, 223, 1, 252, - 206, 214, 223, 1, 68, 214, 223, 1, 223, 199, 214, 223, 1, 66, 214, 223, - 1, 196, 30, 214, 223, 1, 117, 146, 214, 223, 1, 117, 206, 110, 214, 223, - 1, 71, 214, 223, 1, 251, 236, 214, 223, 1, 74, 214, 223, 1, 250, 163, - 214, 223, 1, 155, 214, 223, 1, 221, 215, 214, 223, 1, 231, 240, 214, 223, - 1, 231, 91, 214, 223, 1, 214, 68, 214, 223, 1, 247, 160, 214, 223, 1, - 247, 1, 214, 223, 1, 223, 32, 214, 223, 1, 222, 252, 214, 223, 1, 212, - 101, 214, 223, 1, 197, 132, 214, 223, 1, 197, 120, 214, 223, 1, 237, 191, - 214, 223, 1, 237, 175, 214, 223, 1, 213, 79, 214, 223, 1, 190, 190, 214, - 223, 1, 199, 49, 214, 223, 1, 238, 32, 214, 223, 1, 237, 68, 214, 223, 1, - 180, 214, 223, 1, 168, 214, 223, 1, 209, 228, 214, 223, 1, 249, 153, 214, - 223, 1, 248, 203, 214, 223, 1, 174, 214, 223, 1, 170, 214, 223, 1, 165, - 214, 223, 1, 173, 214, 223, 1, 195, 188, 214, 223, 1, 203, 165, 214, 223, - 1, 201, 175, 214, 223, 1, 188, 214, 223, 1, 140, 214, 223, 1, 219, 73, - 214, 223, 1, 206, 109, 214, 223, 18, 3, 252, 206, 214, 223, 18, 3, 68, - 214, 223, 18, 3, 223, 199, 214, 223, 18, 3, 66, 214, 223, 18, 3, 196, 30, - 214, 223, 18, 3, 117, 146, 214, 223, 18, 3, 117, 206, 110, 214, 223, 18, - 3, 71, 214, 223, 18, 3, 251, 236, 214, 223, 18, 3, 74, 214, 223, 18, 3, - 250, 163, 214, 223, 3, 251, 71, 214, 223, 3, 195, 35, 214, 223, 3, 195, - 40, 214, 223, 3, 250, 145, 214, 223, 3, 202, 210, 214, 223, 229, 227, - 214, 223, 18, 3, 208, 207, 71, 191, 106, 51, 1, 65, 191, 106, 51, 18, 3, + 17, 150, 199, 205, 17, 169, 199, 205, 17, 175, 199, 205, 17, 171, 199, + 205, 17, 178, 251, 242, 1, 155, 251, 242, 1, 221, 217, 251, 242, 1, 214, + 70, 251, 242, 1, 181, 251, 242, 1, 190, 190, 251, 242, 1, 251, 159, 190, + 190, 251, 242, 1, 168, 251, 242, 1, 209, 230, 251, 242, 1, 249, 155, 251, + 242, 1, 174, 251, 242, 1, 223, 34, 251, 242, 1, 247, 3, 251, 242, 1, 199, + 49, 251, 242, 1, 165, 251, 242, 1, 173, 251, 242, 1, 188, 251, 242, 1, + 212, 103, 251, 242, 1, 140, 251, 242, 1, 65, 251, 242, 1, 238, 34, 251, + 242, 1, 237, 70, 251, 242, 1, 231, 242, 251, 242, 1, 251, 159, 231, 242, + 251, 242, 1, 231, 93, 251, 242, 1, 248, 205, 251, 242, 1, 222, 254, 251, + 242, 1, 251, 159, 249, 155, 251, 242, 120, 3, 216, 219, 173, 251, 242, + 120, 3, 216, 219, 165, 251, 242, 120, 3, 216, 219, 219, 135, 165, 251, + 242, 18, 3, 65, 251, 242, 18, 3, 252, 208, 251, 242, 18, 3, 68, 251, 242, + 18, 3, 223, 201, 251, 242, 18, 3, 66, 251, 242, 18, 3, 196, 30, 251, 242, + 18, 3, 71, 251, 242, 18, 3, 250, 142, 251, 242, 18, 3, 74, 251, 242, 18, + 3, 251, 238, 251, 242, 18, 3, 251, 151, 251, 242, 3, 221, 145, 251, 242, + 17, 191, 77, 251, 242, 17, 107, 251, 242, 17, 109, 251, 242, 17, 138, + 251, 242, 17, 134, 251, 242, 17, 150, 251, 242, 17, 169, 251, 242, 17, + 175, 251, 242, 17, 171, 251, 242, 17, 178, 251, 242, 31, 199, 95, 251, + 242, 31, 197, 32, 251, 242, 3, 2, 205, 54, 251, 242, 3, 205, 54, 251, + 242, 3, 206, 54, 251, 242, 16, 195, 69, 251, 242, 1, 247, 162, 251, 242, + 1, 197, 132, 251, 242, 1, 197, 120, 251, 242, 1, 237, 193, 251, 242, 1, + 237, 177, 251, 242, 1, 213, 81, 251, 242, 1, 219, 75, 236, 163, 1, 65, + 236, 163, 1, 252, 208, 236, 163, 1, 68, 236, 163, 1, 223, 201, 236, 163, + 1, 66, 236, 163, 1, 196, 30, 236, 163, 1, 71, 236, 163, 1, 251, 238, 236, + 163, 1, 74, 236, 163, 1, 250, 165, 236, 163, 1, 155, 236, 163, 1, 221, + 217, 236, 163, 1, 231, 242, 236, 163, 1, 231, 93, 236, 163, 1, 214, 70, + 236, 163, 1, 247, 162, 236, 163, 1, 247, 3, 236, 163, 1, 223, 34, 236, + 163, 1, 222, 254, 236, 163, 1, 212, 103, 236, 163, 1, 197, 132, 236, 163, + 1, 197, 120, 236, 163, 1, 237, 193, 236, 163, 1, 237, 177, 236, 163, 1, + 213, 81, 236, 163, 1, 190, 190, 236, 163, 1, 199, 49, 236, 163, 1, 238, + 34, 236, 163, 1, 237, 70, 236, 163, 1, 181, 236, 163, 1, 168, 236, 163, + 1, 209, 230, 236, 163, 1, 249, 155, 236, 163, 1, 248, 205, 236, 163, 1, + 174, 236, 163, 1, 170, 236, 163, 1, 165, 236, 163, 1, 173, 236, 163, 1, + 195, 188, 236, 163, 1, 203, 166, 236, 163, 1, 201, 176, 236, 163, 1, 188, + 236, 163, 1, 140, 236, 163, 1, 206, 110, 236, 163, 18, 3, 252, 208, 236, + 163, 18, 3, 68, 236, 163, 18, 3, 223, 201, 236, 163, 18, 3, 66, 236, 163, + 18, 3, 196, 30, 236, 163, 18, 3, 117, 146, 236, 163, 18, 3, 117, 206, + 111, 236, 163, 18, 3, 71, 236, 163, 18, 3, 251, 238, 236, 163, 18, 3, 74, + 236, 163, 18, 3, 250, 165, 236, 163, 3, 251, 73, 236, 163, 3, 195, 35, + 236, 163, 3, 195, 40, 236, 163, 3, 212, 143, 236, 163, 252, 70, 56, 193, + 156, 242, 255, 6, 1, 214, 69, 193, 156, 242, 255, 6, 1, 65, 193, 156, + 242, 255, 6, 1, 193, 86, 193, 156, 242, 255, 6, 1, 191, 225, 193, 156, + 242, 255, 6, 1, 170, 193, 156, 242, 255, 6, 1, 192, 12, 193, 156, 242, + 255, 6, 1, 223, 201, 193, 156, 242, 255, 6, 1, 196, 30, 193, 156, 242, + 255, 6, 1, 71, 193, 156, 242, 255, 6, 1, 74, 193, 156, 242, 255, 6, 1, + 251, 124, 193, 156, 242, 255, 6, 1, 231, 242, 193, 156, 242, 255, 6, 1, + 221, 69, 193, 156, 242, 255, 6, 1, 234, 68, 193, 156, 242, 255, 6, 1, + 191, 204, 193, 156, 242, 255, 6, 1, 196, 160, 193, 156, 242, 255, 6, 1, + 234, 87, 193, 156, 242, 255, 6, 1, 211, 156, 193, 156, 242, 255, 6, 1, + 197, 127, 193, 156, 242, 255, 6, 1, 212, 129, 193, 156, 242, 255, 6, 1, + 238, 34, 193, 156, 242, 255, 6, 1, 250, 184, 193, 156, 242, 255, 6, 1, + 251, 151, 193, 156, 242, 255, 6, 1, 248, 12, 193, 156, 242, 255, 6, 1, + 208, 167, 193, 156, 242, 255, 6, 1, 229, 117, 193, 156, 242, 255, 6, 1, + 229, 5, 193, 156, 242, 255, 6, 1, 228, 187, 193, 156, 242, 255, 6, 1, + 230, 21, 193, 156, 242, 255, 6, 1, 201, 127, 193, 156, 242, 255, 6, 1, + 202, 194, 193, 156, 242, 255, 6, 1, 195, 25, 193, 156, 242, 255, 2, 1, + 214, 69, 193, 156, 242, 255, 2, 1, 65, 193, 156, 242, 255, 2, 1, 193, 86, + 193, 156, 242, 255, 2, 1, 191, 225, 193, 156, 242, 255, 2, 1, 170, 193, + 156, 242, 255, 2, 1, 192, 12, 193, 156, 242, 255, 2, 1, 223, 201, 193, + 156, 242, 255, 2, 1, 196, 30, 193, 156, 242, 255, 2, 1, 71, 193, 156, + 242, 255, 2, 1, 74, 193, 156, 242, 255, 2, 1, 251, 124, 193, 156, 242, + 255, 2, 1, 231, 242, 193, 156, 242, 255, 2, 1, 221, 69, 193, 156, 242, + 255, 2, 1, 234, 68, 193, 156, 242, 255, 2, 1, 191, 204, 193, 156, 242, + 255, 2, 1, 196, 160, 193, 156, 242, 255, 2, 1, 234, 87, 193, 156, 242, + 255, 2, 1, 211, 156, 193, 156, 242, 255, 2, 1, 197, 127, 193, 156, 242, + 255, 2, 1, 212, 129, 193, 156, 242, 255, 2, 1, 238, 34, 193, 156, 242, + 255, 2, 1, 250, 184, 193, 156, 242, 255, 2, 1, 251, 151, 193, 156, 242, + 255, 2, 1, 248, 12, 193, 156, 242, 255, 2, 1, 208, 167, 193, 156, 242, + 255, 2, 1, 229, 117, 193, 156, 242, 255, 2, 1, 229, 5, 193, 156, 242, + 255, 2, 1, 228, 187, 193, 156, 242, 255, 2, 1, 230, 21, 193, 156, 242, + 255, 2, 1, 201, 127, 193, 156, 242, 255, 2, 1, 202, 194, 193, 156, 242, + 255, 2, 1, 195, 25, 193, 156, 242, 255, 17, 191, 77, 193, 156, 242, 255, + 17, 107, 193, 156, 242, 255, 17, 109, 193, 156, 242, 255, 17, 138, 193, + 156, 242, 255, 17, 134, 193, 156, 242, 255, 17, 150, 193, 156, 242, 255, + 17, 169, 193, 156, 242, 255, 17, 175, 193, 156, 242, 255, 17, 171, 193, + 156, 242, 255, 17, 178, 193, 156, 242, 255, 31, 199, 95, 193, 156, 242, + 255, 31, 197, 32, 193, 156, 242, 255, 31, 198, 249, 193, 156, 242, 255, + 31, 232, 137, 193, 156, 242, 255, 31, 233, 17, 193, 156, 242, 255, 31, + 202, 121, 193, 156, 242, 255, 31, 203, 242, 193, 156, 242, 255, 31, 234, + 155, 193, 156, 242, 255, 31, 213, 171, 193, 156, 242, 255, 211, 115, 236, + 211, 251, 211, 1, 65, 236, 211, 251, 211, 1, 252, 208, 236, 211, 251, + 211, 1, 68, 236, 211, 251, 211, 1, 223, 201, 236, 211, 251, 211, 1, 66, + 236, 211, 251, 211, 1, 196, 30, 236, 211, 251, 211, 1, 71, 236, 211, 251, + 211, 1, 74, 236, 211, 251, 211, 1, 155, 236, 211, 251, 211, 1, 221, 217, + 236, 211, 251, 211, 1, 231, 242, 236, 211, 251, 211, 1, 231, 93, 236, + 211, 251, 211, 1, 214, 70, 236, 211, 251, 211, 1, 247, 162, 236, 211, + 251, 211, 1, 247, 3, 236, 211, 251, 211, 1, 223, 34, 236, 211, 251, 211, + 1, 212, 103, 236, 211, 251, 211, 1, 197, 132, 236, 211, 251, 211, 1, 237, + 193, 236, 211, 251, 211, 1, 237, 177, 236, 211, 251, 211, 1, 213, 81, + 236, 211, 251, 211, 1, 190, 190, 236, 211, 251, 211, 1, 199, 49, 236, + 211, 251, 211, 1, 238, 34, 236, 211, 251, 211, 1, 237, 70, 236, 211, 251, + 211, 1, 181, 236, 211, 251, 211, 1, 168, 236, 211, 251, 211, 1, 209, 230, + 236, 211, 251, 211, 1, 249, 155, 236, 211, 251, 211, 1, 248, 205, 236, + 211, 251, 211, 1, 174, 236, 211, 251, 211, 1, 170, 236, 211, 251, 211, 1, + 191, 175, 236, 211, 251, 211, 1, 165, 236, 211, 251, 211, 1, 173, 236, + 211, 251, 211, 1, 195, 188, 236, 211, 251, 211, 1, 203, 166, 236, 211, + 251, 211, 1, 201, 176, 236, 211, 251, 211, 1, 188, 236, 211, 251, 211, 1, + 140, 236, 211, 251, 211, 1, 219, 75, 236, 211, 251, 211, 1, 191, 123, + 236, 211, 251, 211, 18, 3, 252, 208, 236, 211, 251, 211, 18, 3, 68, 236, + 211, 251, 211, 18, 3, 223, 201, 236, 211, 251, 211, 18, 3, 66, 236, 211, + 251, 211, 18, 3, 196, 30, 236, 211, 251, 211, 18, 3, 71, 236, 211, 251, + 211, 18, 3, 251, 238, 236, 211, 251, 211, 18, 3, 74, 236, 211, 251, 211, + 3, 251, 73, 236, 211, 251, 211, 3, 247, 121, 236, 211, 251, 211, 3, 230, + 74, 236, 211, 251, 211, 195, 40, 236, 211, 251, 211, 208, 229, 214, 216, + 56, 236, 211, 251, 211, 216, 219, 170, 236, 211, 251, 211, 89, 165, 236, + 211, 251, 211, 216, 219, 165, 236, 211, 251, 211, 3, 212, 143, 236, 211, + 251, 211, 55, 237, 240, 236, 211, 251, 211, 231, 206, 233, 5, 236, 211, + 251, 211, 234, 97, 79, 199, 54, 77, 236, 211, 251, 211, 17, 191, 77, 236, + 211, 251, 211, 17, 107, 236, 211, 251, 211, 17, 109, 236, 211, 251, 211, + 17, 138, 236, 211, 251, 211, 17, 134, 236, 211, 251, 211, 17, 150, 236, + 211, 251, 211, 17, 169, 236, 211, 251, 211, 17, 175, 236, 211, 251, 211, + 17, 171, 236, 211, 251, 211, 17, 178, 214, 225, 1, 65, 214, 225, 1, 252, + 208, 214, 225, 1, 68, 214, 225, 1, 223, 201, 214, 225, 1, 66, 214, 225, + 1, 196, 30, 214, 225, 1, 117, 146, 214, 225, 1, 117, 206, 111, 214, 225, + 1, 71, 214, 225, 1, 251, 238, 214, 225, 1, 74, 214, 225, 1, 250, 165, + 214, 225, 1, 155, 214, 225, 1, 221, 217, 214, 225, 1, 231, 242, 214, 225, + 1, 231, 93, 214, 225, 1, 214, 70, 214, 225, 1, 247, 162, 214, 225, 1, + 247, 3, 214, 225, 1, 223, 34, 214, 225, 1, 222, 254, 214, 225, 1, 212, + 103, 214, 225, 1, 197, 132, 214, 225, 1, 197, 120, 214, 225, 1, 237, 193, + 214, 225, 1, 237, 177, 214, 225, 1, 213, 81, 214, 225, 1, 190, 190, 214, + 225, 1, 199, 49, 214, 225, 1, 238, 34, 214, 225, 1, 237, 70, 214, 225, 1, + 181, 214, 225, 1, 168, 214, 225, 1, 209, 230, 214, 225, 1, 249, 155, 214, + 225, 1, 248, 205, 214, 225, 1, 174, 214, 225, 1, 170, 214, 225, 1, 165, + 214, 225, 1, 173, 214, 225, 1, 195, 188, 214, 225, 1, 203, 166, 214, 225, + 1, 201, 176, 214, 225, 1, 188, 214, 225, 1, 140, 214, 225, 1, 219, 75, + 214, 225, 1, 206, 110, 214, 225, 18, 3, 252, 208, 214, 225, 18, 3, 68, + 214, 225, 18, 3, 223, 201, 214, 225, 18, 3, 66, 214, 225, 18, 3, 196, 30, + 214, 225, 18, 3, 117, 146, 214, 225, 18, 3, 117, 206, 111, 214, 225, 18, + 3, 71, 214, 225, 18, 3, 251, 238, 214, 225, 18, 3, 74, 214, 225, 18, 3, + 250, 165, 214, 225, 3, 251, 73, 214, 225, 3, 195, 35, 214, 225, 3, 195, + 40, 214, 225, 3, 250, 147, 214, 225, 3, 202, 211, 214, 225, 229, 229, + 214, 225, 18, 3, 208, 209, 71, 191, 106, 51, 1, 65, 191, 106, 51, 18, 3, 68, 191, 106, 51, 18, 3, 196, 152, 191, 106, 51, 18, 3, 66, 191, 106, 51, - 18, 3, 71, 191, 106, 51, 18, 3, 211, 151, 191, 106, 51, 18, 3, 74, 191, - 106, 51, 18, 3, 251, 236, 191, 106, 51, 18, 3, 250, 163, 191, 106, 51, - 18, 3, 207, 18, 68, 191, 106, 51, 18, 219, 198, 77, 191, 106, 51, 1, 155, - 191, 106, 51, 1, 221, 215, 191, 106, 51, 1, 231, 240, 191, 106, 51, 1, - 231, 91, 191, 106, 51, 1, 214, 68, 191, 106, 51, 1, 247, 160, 191, 106, - 51, 1, 247, 1, 191, 106, 51, 1, 223, 32, 191, 106, 51, 1, 212, 101, 191, + 18, 3, 71, 191, 106, 51, 18, 3, 211, 153, 191, 106, 51, 18, 3, 74, 191, + 106, 51, 18, 3, 251, 238, 191, 106, 51, 18, 3, 250, 165, 191, 106, 51, + 18, 3, 207, 19, 68, 191, 106, 51, 18, 219, 200, 77, 191, 106, 51, 1, 155, + 191, 106, 51, 1, 221, 217, 191, 106, 51, 1, 231, 242, 191, 106, 51, 1, + 231, 93, 191, 106, 51, 1, 214, 70, 191, 106, 51, 1, 247, 162, 191, 106, + 51, 1, 247, 3, 191, 106, 51, 1, 223, 34, 191, 106, 51, 1, 212, 103, 191, 106, 51, 1, 197, 132, 191, 106, 51, 1, 197, 120, 191, 106, 51, 1, 237, - 191, 191, 106, 51, 1, 237, 175, 191, 106, 51, 1, 213, 79, 191, 106, 51, - 1, 190, 190, 191, 106, 51, 1, 199, 49, 191, 106, 51, 1, 238, 32, 191, - 106, 51, 1, 237, 68, 191, 106, 51, 1, 180, 191, 106, 51, 1, 168, 191, - 106, 51, 1, 209, 228, 191, 106, 51, 1, 249, 153, 191, 106, 51, 1, 248, - 203, 191, 106, 51, 1, 174, 191, 106, 51, 1, 197, 168, 191, 106, 51, 1, - 197, 157, 191, 106, 51, 1, 235, 35, 191, 106, 51, 1, 235, 29, 191, 106, - 51, 1, 191, 71, 191, 106, 51, 1, 191, 123, 191, 106, 51, 1, 255, 214, + 193, 191, 106, 51, 1, 237, 177, 191, 106, 51, 1, 213, 81, 191, 106, 51, + 1, 190, 190, 191, 106, 51, 1, 199, 49, 191, 106, 51, 1, 238, 34, 191, + 106, 51, 1, 237, 70, 191, 106, 51, 1, 181, 191, 106, 51, 1, 168, 191, + 106, 51, 1, 209, 230, 191, 106, 51, 1, 249, 155, 191, 106, 51, 1, 248, + 205, 191, 106, 51, 1, 174, 191, 106, 51, 1, 197, 168, 191, 106, 51, 1, + 197, 157, 191, 106, 51, 1, 235, 37, 191, 106, 51, 1, 235, 31, 191, 106, + 51, 1, 191, 71, 191, 106, 51, 1, 191, 123, 191, 106, 51, 1, 255, 216, 191, 106, 51, 1, 170, 191, 106, 51, 1, 165, 191, 106, 51, 1, 173, 191, - 106, 51, 1, 195, 188, 191, 106, 51, 1, 203, 165, 191, 106, 51, 1, 201, - 175, 191, 106, 51, 1, 188, 191, 106, 51, 1, 140, 191, 106, 51, 1, 220, - 246, 191, 106, 51, 53, 120, 77, 191, 106, 51, 3, 195, 40, 191, 106, 51, - 3, 247, 119, 191, 106, 51, 3, 247, 120, 4, 211, 42, 191, 106, 51, 3, 247, - 122, 4, 211, 42, 191, 106, 51, 3, 251, 71, 191, 106, 51, 3, 195, 35, 191, - 106, 51, 242, 201, 1, 165, 191, 106, 51, 242, 202, 1, 170, 191, 106, 51, - 242, 202, 1, 165, 191, 106, 51, 242, 202, 1, 173, 191, 106, 51, 242, 202, - 1, 195, 188, 191, 106, 51, 89, 229, 236, 77, 191, 106, 51, 242, 215, 229, - 236, 77, 191, 106, 51, 87, 197, 152, 191, 106, 51, 87, 203, 157, 191, - 106, 51, 87, 55, 203, 157, 191, 106, 51, 87, 179, 197, 152, 191, 106, 51, - 89, 235, 130, 229, 236, 77, 191, 106, 51, 242, 215, 235, 130, 229, 236, - 77, 191, 106, 51, 200, 238, 201, 251, 1, 65, 201, 251, 18, 3, 68, 201, - 251, 18, 3, 196, 152, 201, 251, 18, 3, 66, 201, 251, 18, 3, 71, 201, 251, - 18, 3, 74, 201, 251, 18, 3, 211, 151, 201, 251, 18, 3, 251, 236, 201, - 251, 18, 3, 250, 163, 201, 251, 18, 3, 117, 146, 201, 251, 18, 3, 117, - 172, 201, 251, 18, 219, 198, 77, 201, 251, 1, 155, 201, 251, 1, 221, 215, - 201, 251, 1, 231, 240, 201, 251, 1, 231, 91, 201, 251, 1, 214, 68, 201, - 251, 1, 247, 160, 201, 251, 1, 247, 1, 201, 251, 1, 223, 32, 201, 251, 1, - 222, 252, 201, 251, 1, 212, 101, 201, 251, 1, 197, 132, 201, 251, 1, 197, - 120, 201, 251, 1, 237, 191, 201, 251, 1, 237, 175, 201, 251, 1, 213, 79, - 201, 251, 1, 190, 190, 201, 251, 1, 199, 49, 201, 251, 1, 238, 32, 201, - 251, 1, 237, 68, 201, 251, 1, 180, 201, 251, 1, 168, 201, 251, 1, 209, - 228, 201, 251, 1, 249, 153, 201, 251, 1, 248, 203, 201, 251, 1, 174, 201, - 251, 1, 197, 168, 201, 251, 1, 197, 157, 201, 251, 1, 235, 35, 201, 251, - 1, 191, 71, 201, 251, 1, 191, 123, 201, 251, 1, 255, 214, 201, 251, 1, - 170, 201, 251, 1, 165, 201, 251, 1, 173, 201, 251, 1, 195, 188, 201, 251, - 1, 203, 165, 201, 251, 1, 201, 175, 201, 251, 1, 188, 201, 251, 1, 140, - 201, 251, 1, 220, 246, 201, 251, 3, 222, 237, 201, 251, 3, 196, 75, 201, - 251, 242, 201, 1, 165, 201, 251, 242, 201, 1, 173, 201, 251, 242, 201, 1, - 203, 165, 201, 251, 242, 201, 1, 188, 201, 251, 53, 120, 3, 232, 51, 201, - 251, 53, 120, 3, 222, 152, 201, 251, 53, 120, 3, 214, 70, 201, 251, 53, - 120, 3, 238, 127, 201, 251, 53, 120, 3, 215, 61, 201, 251, 53, 120, 3, - 250, 120, 201, 251, 53, 120, 3, 218, 168, 201, 251, 53, 120, 3, 146, 201, - 251, 53, 120, 3, 172, 201, 251, 53, 120, 3, 203, 167, 201, 251, 53, 120, - 3, 206, 8, 201, 251, 53, 120, 3, 255, 214, 201, 251, 3, 251, 71, 201, - 251, 3, 195, 35, 201, 251, 231, 153, 77, 201, 251, 200, 238, 201, 251, - 87, 197, 152, 201, 251, 87, 203, 157, 201, 251, 87, 55, 203, 157, 201, - 251, 87, 209, 79, 201, 251, 229, 236, 87, 4, 215, 206, 23, 200, 199, 23, - 197, 225, 232, 210, 201, 251, 229, 236, 87, 4, 215, 206, 23, 200, 199, - 23, 232, 210, 201, 251, 229, 236, 87, 4, 215, 206, 23, 200, 198, 201, - 251, 199, 81, 217, 55, 201, 251, 199, 81, 217, 54, 21, 22, 214, 207, 229, - 158, 21, 22, 214, 207, 229, 130, 21, 22, 214, 207, 229, 23, 21, 22, 214, - 207, 228, 252, 21, 22, 214, 207, 140, 21, 22, 214, 207, 230, 91, 21, 22, - 214, 207, 203, 15, 21, 22, 214, 207, 203, 14, 21, 22, 214, 207, 203, 11, - 21, 22, 214, 207, 203, 10, 21, 22, 214, 207, 203, 17, 21, 22, 214, 207, - 203, 16, 21, 22, 201, 237, 21, 22, 201, 224, 21, 22, 201, 207, 21, 22, - 201, 249, 210, 81, 243, 15, 230, 3, 1, 168, 210, 81, 243, 15, 230, 3, 1, - 155, 210, 81, 243, 15, 230, 3, 1, 173, 210, 81, 243, 15, 230, 3, 1, 174, - 210, 81, 243, 15, 230, 3, 1, 238, 32, 210, 81, 243, 15, 230, 3, 1, 191, - 123, 210, 81, 243, 15, 230, 3, 1, 195, 188, 210, 81, 243, 15, 230, 3, 1, - 214, 68, 210, 81, 243, 15, 230, 3, 1, 140, 210, 81, 243, 15, 230, 3, 1, - 231, 240, 210, 81, 243, 15, 230, 3, 1, 221, 215, 210, 81, 243, 15, 230, - 3, 1, 188, 210, 81, 243, 15, 230, 3, 1, 249, 153, 210, 81, 243, 15, 230, - 3, 1, 247, 160, 210, 81, 243, 15, 230, 3, 1, 190, 190, 210, 81, 243, 15, - 230, 3, 1, 199, 49, 210, 81, 243, 15, 230, 3, 1, 180, 210, 81, 243, 15, - 230, 3, 1, 209, 228, 210, 81, 243, 15, 230, 3, 1, 165, 210, 81, 243, 15, - 230, 3, 1, 233, 109, 210, 81, 243, 15, 230, 3, 1, 247, 1, 210, 81, 243, - 15, 230, 3, 1, 65, 210, 81, 243, 15, 230, 3, 1, 71, 210, 81, 243, 15, - 230, 3, 1, 68, 210, 81, 243, 15, 230, 3, 1, 74, 210, 81, 243, 15, 230, 3, - 1, 66, 210, 81, 243, 15, 230, 3, 1, 196, 168, 210, 81, 243, 15, 230, 3, - 1, 228, 35, 210, 81, 243, 15, 230, 3, 1, 53, 210, 236, 210, 81, 243, 15, - 230, 3, 1, 53, 222, 152, 210, 81, 243, 15, 230, 3, 1, 53, 200, 43, 210, - 81, 243, 15, 230, 3, 1, 53, 218, 168, 210, 81, 243, 15, 230, 3, 1, 53, - 215, 61, 210, 81, 243, 15, 230, 3, 1, 53, 172, 210, 81, 243, 15, 230, 3, - 1, 53, 193, 224, 210, 81, 243, 15, 230, 3, 1, 53, 214, 70, 210, 81, 243, - 15, 230, 3, 1, 53, 192, 159, 210, 81, 243, 15, 230, 3, 206, 180, 163, - 219, 19, 210, 81, 243, 15, 230, 3, 206, 180, 198, 79, 210, 81, 243, 15, - 230, 3, 205, 138, 231, 11, 201, 63, 210, 81, 243, 15, 230, 3, 206, 180, - 163, 179, 232, 255, 210, 81, 243, 15, 230, 3, 206, 180, 163, 232, 255, - 210, 81, 243, 15, 230, 3, 205, 138, 231, 11, 201, 64, 232, 255, 210, 81, - 243, 15, 230, 3, 205, 138, 163, 219, 19, 210, 81, 243, 15, 230, 3, 205, - 138, 198, 79, 210, 81, 243, 15, 230, 3, 205, 138, 163, 179, 232, 255, - 210, 81, 243, 15, 230, 3, 205, 138, 163, 232, 255, 210, 81, 243, 15, 230, - 3, 216, 85, 198, 79, 210, 81, 243, 15, 230, 3, 231, 11, 201, 64, 195, - 167, 210, 81, 243, 15, 230, 3, 216, 85, 163, 179, 232, 255, 210, 81, 243, - 15, 230, 3, 216, 85, 163, 232, 255, 210, 81, 243, 15, 230, 3, 218, 239, - 163, 219, 19, 210, 81, 243, 15, 230, 3, 218, 239, 198, 79, 210, 81, 243, - 15, 230, 3, 231, 11, 201, 63, 210, 81, 243, 15, 230, 3, 218, 239, 163, - 179, 232, 255, 210, 81, 243, 15, 230, 3, 218, 239, 163, 232, 255, 210, - 81, 243, 15, 230, 3, 231, 11, 201, 64, 232, 255, 100, 229, 236, 77, 100, - 229, 236, 87, 4, 229, 227, 100, 3, 248, 199, 100, 3, 248, 200, 4, 102, - 100, 3, 233, 205, 248, 199, 100, 3, 233, 205, 248, 200, 4, 102, 100, 3, - 193, 102, 232, 225, 248, 199, 100, 3, 193, 102, 213, 174, 248, 199, 100, - 3, 207, 18, 213, 174, 248, 199, 100, 3, 216, 43, 248, 201, 1, 65, 248, - 201, 1, 252, 206, 248, 201, 1, 68, 248, 201, 1, 223, 199, 248, 201, 1, - 66, 248, 201, 1, 196, 30, 248, 201, 1, 117, 146, 248, 201, 1, 117, 206, - 110, 248, 201, 1, 117, 172, 248, 201, 1, 71, 248, 201, 1, 251, 236, 248, - 201, 1, 74, 248, 201, 1, 250, 163, 248, 201, 1, 155, 248, 201, 1, 221, - 215, 248, 201, 1, 231, 240, 248, 201, 1, 231, 91, 248, 201, 1, 214, 68, - 248, 201, 1, 247, 160, 248, 201, 1, 247, 1, 248, 201, 1, 223, 32, 248, - 201, 1, 222, 252, 248, 201, 1, 212, 101, 248, 201, 1, 197, 132, 248, 201, - 1, 197, 120, 248, 201, 1, 237, 191, 248, 201, 1, 237, 175, 248, 201, 1, - 213, 79, 248, 201, 1, 190, 190, 248, 201, 1, 199, 49, 248, 201, 1, 238, - 32, 248, 201, 1, 237, 68, 248, 201, 1, 180, 248, 201, 1, 168, 248, 201, - 1, 209, 228, 248, 201, 1, 249, 153, 248, 201, 1, 248, 203, 248, 201, 1, - 174, 248, 201, 1, 170, 248, 201, 1, 165, 248, 201, 1, 173, 248, 201, 1, - 195, 188, 248, 201, 1, 203, 165, 248, 201, 1, 201, 175, 248, 201, 1, 188, - 248, 201, 1, 140, 248, 201, 18, 3, 252, 206, 248, 201, 18, 3, 68, 248, - 201, 18, 3, 223, 199, 248, 201, 18, 3, 66, 248, 201, 18, 3, 196, 30, 248, - 201, 18, 3, 117, 146, 248, 201, 18, 3, 117, 206, 110, 248, 201, 18, 3, - 117, 172, 248, 201, 18, 3, 71, 248, 201, 18, 3, 251, 236, 248, 201, 18, - 3, 74, 248, 201, 18, 3, 250, 163, 248, 201, 3, 247, 119, 248, 201, 3, - 251, 71, 248, 201, 3, 195, 35, 248, 201, 3, 195, 40, 248, 201, 3, 250, - 145, 248, 201, 237, 238, 248, 201, 55, 237, 238, 248, 201, 193, 23, 204, - 10, 248, 201, 231, 204, 233, 2, 248, 201, 231, 204, 233, 1, 248, 201, 17, - 191, 77, 248, 201, 17, 107, 248, 201, 17, 109, 248, 201, 17, 138, 248, - 201, 17, 134, 248, 201, 17, 149, 248, 201, 17, 169, 248, 201, 17, 175, - 248, 201, 17, 171, 248, 201, 17, 178, 248, 201, 31, 107, 248, 201, 31, - 109, 248, 201, 31, 138, 248, 201, 31, 134, 248, 201, 31, 149, 248, 201, - 31, 169, 248, 201, 31, 175, 248, 201, 31, 171, 248, 201, 31, 178, 248, - 201, 31, 199, 95, 248, 201, 31, 197, 32, 248, 201, 31, 198, 249, 248, - 201, 31, 232, 135, 248, 201, 31, 233, 15, 248, 201, 31, 202, 120, 248, - 201, 31, 203, 241, 248, 201, 31, 234, 153, 248, 201, 31, 213, 169, 248, - 201, 228, 139, 196, 91, 77, 217, 57, 229, 236, 77, 217, 57, 87, 203, 157, - 217, 57, 1, 155, 217, 57, 1, 221, 215, 217, 57, 1, 231, 240, 217, 57, 1, - 214, 68, 217, 57, 1, 247, 160, 217, 57, 1, 247, 1, 217, 57, 1, 223, 32, - 217, 57, 1, 212, 101, 217, 57, 1, 190, 190, 217, 57, 1, 199, 49, 217, 57, - 1, 238, 32, 217, 57, 1, 180, 217, 57, 1, 168, 217, 57, 1, 209, 228, 217, - 57, 1, 249, 153, 217, 57, 1, 174, 217, 57, 1, 197, 168, 217, 57, 1, 197, - 157, 217, 57, 1, 235, 35, 217, 57, 1, 193, 190, 217, 57, 1, 191, 71, 217, - 57, 1, 191, 123, 217, 57, 1, 255, 214, 217, 57, 1, 170, 217, 57, 1, 165, - 217, 57, 1, 173, 217, 57, 1, 203, 165, 217, 57, 1, 188, 217, 57, 1, 140, - 217, 57, 1, 65, 217, 57, 200, 239, 1, 155, 217, 57, 200, 239, 1, 221, - 215, 217, 57, 200, 239, 1, 231, 240, 217, 57, 200, 239, 1, 214, 68, 217, - 57, 200, 239, 1, 247, 160, 217, 57, 200, 239, 1, 247, 1, 217, 57, 200, - 239, 1, 223, 32, 217, 57, 200, 239, 1, 212, 101, 217, 57, 200, 239, 1, - 190, 190, 217, 57, 200, 239, 1, 199, 49, 217, 57, 200, 239, 1, 238, 32, - 217, 57, 200, 239, 1, 180, 217, 57, 200, 239, 1, 168, 217, 57, 200, 239, - 1, 209, 228, 217, 57, 200, 239, 1, 249, 153, 217, 57, 200, 239, 1, 174, - 217, 57, 200, 239, 1, 197, 168, 217, 57, 200, 239, 1, 197, 157, 217, 57, - 200, 239, 1, 235, 35, 217, 57, 200, 239, 1, 193, 190, 217, 57, 200, 239, - 1, 191, 71, 217, 57, 200, 239, 1, 191, 123, 217, 57, 200, 239, 1, 170, - 217, 57, 200, 239, 1, 165, 217, 57, 200, 239, 1, 173, 217, 57, 200, 239, - 1, 203, 165, 217, 57, 200, 239, 1, 188, 217, 57, 200, 239, 1, 140, 217, - 57, 200, 239, 1, 65, 217, 57, 18, 3, 252, 206, 217, 57, 18, 3, 68, 217, - 57, 18, 3, 66, 217, 57, 18, 3, 71, 217, 57, 18, 3, 74, 217, 57, 3, 251, - 71, 217, 57, 3, 247, 119, 217, 41, 129, 1, 65, 217, 41, 129, 1, 252, 206, - 217, 41, 129, 1, 68, 217, 41, 129, 1, 223, 199, 217, 41, 129, 1, 66, 217, - 41, 129, 1, 196, 30, 217, 41, 129, 1, 71, 217, 41, 129, 1, 251, 236, 217, - 41, 129, 1, 74, 217, 41, 129, 1, 250, 163, 217, 41, 129, 1, 155, 217, 41, - 129, 1, 221, 215, 217, 41, 129, 1, 231, 240, 217, 41, 129, 1, 231, 91, - 217, 41, 129, 1, 214, 68, 217, 41, 129, 1, 247, 160, 217, 41, 129, 1, - 247, 1, 217, 41, 129, 1, 223, 32, 217, 41, 129, 1, 222, 252, 217, 41, - 129, 1, 212, 101, 217, 41, 129, 1, 197, 132, 217, 41, 129, 1, 197, 120, - 217, 41, 129, 1, 237, 191, 217, 41, 129, 1, 237, 175, 217, 41, 129, 1, - 213, 79, 217, 41, 129, 1, 190, 190, 217, 41, 129, 1, 199, 49, 217, 41, - 129, 1, 238, 32, 217, 41, 129, 1, 237, 68, 217, 41, 129, 1, 180, 217, 41, - 129, 1, 168, 217, 41, 129, 1, 209, 228, 217, 41, 129, 1, 249, 153, 217, - 41, 129, 1, 248, 203, 217, 41, 129, 1, 174, 217, 41, 129, 1, 170, 217, - 41, 129, 1, 165, 217, 41, 129, 1, 173, 217, 41, 129, 1, 195, 188, 217, - 41, 129, 1, 203, 165, 217, 41, 129, 1, 201, 175, 217, 41, 129, 1, 188, - 217, 41, 129, 1, 140, 217, 41, 129, 1, 219, 73, 217, 41, 129, 1, 220, - 246, 217, 41, 129, 1, 222, 202, 217, 41, 129, 1, 198, 26, 217, 41, 129, - 18, 3, 252, 206, 217, 41, 129, 18, 3, 68, 217, 41, 129, 18, 3, 223, 199, - 217, 41, 129, 18, 3, 66, 217, 41, 129, 18, 3, 196, 30, 217, 41, 129, 18, - 3, 117, 146, 217, 41, 129, 18, 3, 71, 217, 41, 129, 18, 3, 251, 236, 217, - 41, 129, 18, 3, 74, 217, 41, 129, 18, 3, 250, 163, 217, 41, 129, 3, 251, - 71, 217, 41, 129, 3, 195, 35, 217, 41, 129, 3, 212, 141, 217, 41, 129, 3, - 247, 121, 217, 41, 129, 3, 230, 72, 217, 41, 129, 195, 40, 217, 41, 129, - 207, 44, 217, 41, 129, 207, 181, 217, 41, 129, 17, 191, 77, 217, 41, 129, - 17, 107, 217, 41, 129, 17, 109, 217, 41, 129, 17, 138, 217, 41, 129, 17, - 134, 217, 41, 129, 17, 149, 217, 41, 129, 17, 169, 217, 41, 129, 17, 175, - 217, 41, 129, 17, 171, 217, 41, 129, 17, 178, 230, 157, 129, 1, 65, 230, - 157, 129, 1, 252, 206, 230, 157, 129, 1, 68, 230, 157, 129, 1, 223, 199, - 230, 157, 129, 1, 66, 230, 157, 129, 1, 196, 30, 230, 157, 129, 1, 234, - 188, 230, 157, 129, 1, 251, 236, 230, 157, 129, 1, 211, 87, 230, 157, - 129, 1, 250, 163, 230, 157, 129, 1, 170, 230, 157, 129, 1, 195, 188, 230, - 157, 129, 1, 249, 153, 230, 157, 129, 1, 248, 203, 230, 157, 129, 1, 174, - 230, 157, 129, 1, 155, 230, 157, 129, 1, 221, 215, 230, 157, 129, 1, 190, - 190, 230, 157, 129, 1, 199, 49, 230, 157, 129, 1, 173, 230, 157, 129, 1, - 231, 240, 230, 157, 129, 1, 231, 91, 230, 157, 129, 1, 238, 32, 230, 157, - 129, 1, 237, 68, 230, 157, 129, 1, 180, 230, 157, 129, 1, 247, 160, 230, - 157, 129, 1, 247, 1, 230, 157, 129, 1, 197, 132, 230, 157, 129, 1, 197, - 120, 230, 157, 129, 1, 219, 73, 230, 157, 129, 1, 223, 32, 230, 157, 129, - 1, 222, 252, 230, 157, 129, 1, 237, 191, 230, 157, 129, 1, 237, 175, 230, - 157, 129, 1, 214, 68, 230, 157, 129, 1, 168, 230, 157, 129, 1, 209, 228, - 230, 157, 129, 1, 140, 230, 157, 129, 1, 165, 230, 157, 129, 1, 188, 230, - 157, 129, 18, 3, 252, 206, 230, 157, 129, 18, 3, 68, 230, 157, 129, 18, - 3, 223, 199, 230, 157, 129, 18, 3, 66, 230, 157, 129, 18, 3, 196, 30, - 230, 157, 129, 18, 3, 234, 188, 230, 157, 129, 18, 3, 251, 236, 230, 157, - 129, 18, 3, 211, 87, 230, 157, 129, 18, 3, 250, 163, 230, 157, 129, 3, - 251, 71, 230, 157, 129, 3, 195, 35, 230, 157, 129, 195, 40, 230, 157, - 129, 211, 113, 230, 157, 129, 17, 191, 77, 230, 157, 129, 17, 107, 230, - 157, 129, 17, 109, 230, 157, 129, 17, 138, 230, 157, 129, 17, 134, 230, - 157, 129, 17, 149, 230, 157, 129, 17, 169, 230, 157, 129, 17, 175, 230, - 157, 129, 17, 171, 230, 157, 129, 17, 178, 217, 102, 1, 155, 217, 102, 1, - 231, 240, 217, 102, 1, 214, 68, 217, 102, 1, 168, 217, 102, 1, 249, 153, - 217, 102, 1, 174, 217, 102, 1, 190, 190, 217, 102, 1, 238, 32, 217, 102, - 1, 180, 217, 102, 1, 247, 160, 217, 102, 1, 223, 32, 217, 102, 1, 212, - 101, 217, 102, 1, 170, 217, 102, 1, 165, 217, 102, 1, 173, 217, 102, 1, - 195, 188, 217, 102, 1, 188, 217, 102, 1, 65, 217, 102, 251, 118, 217, - 102, 18, 3, 68, 217, 102, 18, 3, 66, 217, 102, 18, 3, 71, 217, 102, 18, - 3, 74, 217, 102, 210, 94, 217, 102, 234, 95, 79, 205, 53, 222, 33, 3, - 247, 119, 222, 33, 3, 251, 71, 222, 33, 3, 207, 44, 222, 33, 3, 195, 35, - 222, 33, 1, 65, 222, 33, 1, 252, 206, 222, 33, 1, 68, 222, 33, 1, 223, - 199, 222, 33, 1, 66, 222, 33, 1, 196, 30, 222, 33, 1, 117, 146, 222, 33, - 1, 117, 206, 110, 222, 33, 1, 117, 172, 222, 33, 1, 117, 219, 74, 222, - 33, 1, 71, 222, 33, 1, 251, 236, 222, 33, 1, 74, 222, 33, 1, 155, 222, - 33, 1, 221, 215, 222, 33, 1, 231, 240, 222, 33, 1, 231, 91, 222, 33, 1, - 214, 68, 222, 33, 1, 247, 160, 222, 33, 1, 247, 1, 222, 33, 1, 223, 32, - 222, 33, 1, 222, 252, 222, 33, 1, 212, 101, 222, 33, 1, 197, 132, 222, - 33, 1, 197, 120, 222, 33, 1, 237, 191, 222, 33, 1, 237, 175, 222, 33, 1, - 213, 79, 222, 33, 1, 190, 190, 222, 33, 1, 199, 49, 222, 33, 1, 238, 32, - 222, 33, 1, 237, 68, 222, 33, 1, 180, 222, 33, 1, 168, 222, 33, 1, 209, - 228, 222, 33, 1, 249, 153, 222, 33, 1, 248, 203, 222, 33, 1, 174, 222, - 33, 1, 170, 222, 33, 1, 165, 222, 33, 1, 173, 222, 33, 1, 193, 190, 222, - 33, 1, 203, 165, 222, 33, 1, 201, 175, 222, 33, 1, 188, 222, 33, 1, 140, - 222, 33, 1, 222, 202, 222, 33, 18, 3, 252, 206, 222, 33, 18, 3, 251, 157, - 252, 206, 222, 33, 18, 3, 68, 222, 33, 18, 3, 223, 199, 222, 33, 18, 3, - 66, 222, 33, 18, 3, 196, 30, 222, 33, 18, 3, 117, 146, 222, 33, 18, 3, - 71, 222, 33, 18, 3, 251, 236, 222, 33, 18, 3, 233, 242, 222, 33, 3, 221, - 143, 222, 33, 239, 45, 222, 33, 237, 238, 222, 33, 55, 237, 238, 222, 33, - 208, 152, 205, 54, 217, 51, 222, 33, 208, 152, 251, 157, 205, 54, 217, - 51, 222, 33, 208, 152, 232, 186, 222, 33, 208, 152, 201, 248, 233, 3, - 222, 33, 208, 152, 236, 140, 222, 33, 208, 152, 55, 236, 140, 222, 33, - 208, 152, 197, 225, 236, 140, 222, 33, 208, 152, 243, 10, 222, 33, 208, - 152, 233, 4, 243, 10, 222, 33, 208, 152, 201, 217, 222, 33, 208, 152, - 242, 215, 201, 217, 222, 33, 17, 191, 77, 222, 33, 17, 107, 222, 33, 17, - 109, 222, 33, 17, 138, 222, 33, 17, 134, 222, 33, 17, 149, 222, 33, 17, - 169, 222, 33, 17, 175, 222, 33, 17, 171, 222, 33, 17, 178, 219, 88, 1, - 192, 35, 44, 232, 118, 91, 198, 222, 44, 232, 118, 91, 211, 100, 44, 232, - 118, 91, 234, 156, 44, 232, 118, 91, 202, 118, 44, 232, 118, 91, 232, - 139, 44, 232, 118, 91, 198, 245, 44, 232, 118, 115, 234, 155, 44, 232, - 118, 115, 202, 117, 44, 232, 118, 91, 197, 35, 44, 232, 118, 91, 202, - 127, 44, 232, 118, 91, 202, 126, 44, 232, 118, 91, 199, 86, 44, 232, 118, - 91, 234, 159, 44, 232, 118, 115, 197, 34, 44, 232, 118, 115, 202, 125, - 44, 232, 118, 91, 233, 18, 44, 232, 118, 91, 208, 22, 44, 232, 118, 91, - 230, 69, 44, 232, 118, 91, 230, 68, 44, 232, 118, 115, 208, 20, 44, 232, - 118, 235, 121, 233, 93, 221, 144, 44, 3, 214, 104, 44, 3, 247, 6, 44, 3, - 252, 157, 44, 3, 196, 15, 44, 3, 215, 90, 44, 3, 220, 194, 44, 3, 210, - 85, 44, 3, 215, 135, 44, 3, 222, 124, 44, 3, 210, 164, 44, 3, 209, 39, - 44, 3, 195, 173, 44, 3, 210, 215, 44, 3, 220, 183, 44, 3, 195, 143, 44, - 193, 101, 238, 187, 56, 44, 235, 92, 238, 187, 56, 44, 220, 23, 56, 44, - 205, 159, 210, 167, 56, 44, 198, 21, 238, 230, 56, 44, 198, 21, 31, 56, - 44, 238, 169, 56, 44, 23, 211, 155, 56, 44, 201, 227, 56, 44, 198, 39, - 56, 44, 223, 163, 209, 22, 56, 44, 201, 96, 232, 98, 56, 44, 3, 215, 94, - 44, 3, 195, 181, 44, 208, 152, 234, 95, 79, 199, 53, 10, 3, 65, 10, 3, - 42, 25, 65, 10, 3, 42, 25, 249, 135, 10, 3, 42, 25, 231, 209, 199, 84, - 10, 3, 42, 25, 140, 10, 3, 42, 25, 223, 201, 10, 3, 42, 25, 220, 103, - 230, 155, 10, 3, 42, 25, 215, 101, 10, 3, 42, 25, 205, 185, 10, 3, 254, - 215, 10, 3, 252, 155, 10, 3, 252, 156, 25, 250, 207, 10, 3, 252, 156, 25, - 235, 74, 230, 155, 10, 3, 252, 156, 25, 231, 222, 10, 3, 252, 156, 25, - 231, 209, 199, 84, 10, 3, 252, 156, 25, 140, 10, 3, 252, 156, 25, 223, - 202, 230, 155, 10, 3, 252, 156, 25, 223, 172, 10, 3, 252, 156, 25, 220, - 104, 10, 3, 252, 156, 25, 203, 97, 10, 3, 252, 156, 25, 126, 108, 126, - 108, 66, 10, 3, 252, 156, 230, 155, 10, 3, 252, 72, 10, 3, 252, 73, 25, - 249, 114, 10, 3, 252, 73, 25, 231, 209, 199, 84, 10, 3, 252, 73, 25, 216, - 233, 108, 234, 103, 10, 3, 252, 73, 25, 203, 163, 10, 3, 252, 73, 25, - 199, 209, 10, 3, 252, 42, 10, 3, 251, 216, 10, 3, 251, 217, 25, 234, 28, - 10, 3, 251, 217, 25, 203, 59, 108, 231, 23, 10, 3, 251, 207, 10, 3, 251, - 208, 25, 251, 207, 10, 3, 251, 208, 25, 236, 253, 10, 3, 251, 208, 25, - 231, 23, 10, 3, 251, 208, 25, 140, 10, 3, 251, 208, 25, 222, 111, 10, 3, - 251, 208, 25, 221, 166, 10, 3, 251, 208, 25, 203, 113, 10, 3, 251, 208, - 25, 196, 38, 10, 3, 251, 203, 10, 3, 251, 190, 10, 3, 251, 145, 10, 3, - 251, 146, 25, 203, 113, 10, 3, 251, 132, 10, 3, 251, 133, 139, 251, 132, - 10, 3, 251, 133, 115, 198, 144, 10, 3, 251, 133, 108, 214, 241, 211, 63, - 251, 133, 108, 214, 240, 10, 3, 251, 133, 108, 214, 241, 201, 189, 10, 3, - 251, 91, 10, 3, 251, 60, 10, 3, 251, 26, 10, 3, 251, 27, 25, 220, 197, - 10, 3, 250, 254, 10, 3, 250, 215, 10, 3, 250, 209, 10, 3, 250, 210, 191, - 26, 199, 84, 10, 3, 250, 210, 222, 116, 199, 84, 10, 3, 250, 210, 139, - 250, 210, 197, 83, 139, 197, 83, 197, 83, 139, 197, 83, 210, 137, 10, 3, - 250, 210, 139, 250, 210, 139, 250, 209, 10, 3, 250, 210, 139, 250, 210, - 139, 250, 210, 238, 210, 250, 210, 139, 250, 210, 139, 250, 209, 10, 3, - 250, 207, 10, 3, 250, 203, 10, 3, 249, 153, 10, 3, 249, 135, 10, 3, 249, - 129, 10, 3, 249, 121, 10, 3, 249, 115, 10, 3, 249, 116, 139, 249, 115, - 10, 3, 249, 114, 10, 3, 164, 10, 3, 249, 87, 10, 3, 248, 188, 10, 3, 248, - 189, 25, 65, 10, 3, 248, 189, 25, 231, 200, 10, 3, 248, 189, 25, 223, - 202, 230, 155, 10, 3, 248, 10, 10, 3, 248, 11, 139, 248, 11, 252, 155, - 10, 3, 248, 11, 139, 248, 11, 196, 113, 10, 3, 248, 11, 238, 210, 248, - 10, 10, 3, 247, 242, 10, 3, 247, 243, 139, 247, 242, 10, 3, 247, 230, 10, - 3, 247, 229, 10, 3, 238, 32, 10, 3, 238, 22, 10, 3, 238, 23, 221, 125, - 25, 42, 108, 217, 39, 10, 3, 238, 23, 221, 125, 25, 251, 145, 10, 3, 238, - 23, 221, 125, 25, 249, 114, 10, 3, 238, 23, 221, 125, 25, 248, 188, 10, - 3, 238, 23, 221, 125, 25, 231, 240, 10, 3, 238, 23, 221, 125, 25, 231, - 241, 108, 217, 39, 10, 3, 238, 23, 221, 125, 25, 231, 53, 10, 3, 238, 23, - 221, 125, 25, 231, 32, 10, 3, 238, 23, 221, 125, 25, 230, 168, 10, 3, - 238, 23, 221, 125, 25, 140, 10, 3, 238, 23, 221, 125, 25, 223, 77, 10, 3, - 238, 23, 221, 125, 25, 223, 78, 108, 218, 225, 10, 3, 238, 23, 221, 125, - 25, 222, 96, 10, 3, 238, 23, 221, 125, 25, 173, 10, 3, 238, 23, 221, 125, - 25, 218, 225, 10, 3, 238, 23, 221, 125, 25, 218, 226, 108, 217, 38, 10, - 3, 238, 23, 221, 125, 25, 218, 208, 10, 3, 238, 23, 221, 125, 25, 214, - 121, 10, 3, 238, 23, 221, 125, 25, 210, 138, 108, 210, 137, 10, 3, 238, - 23, 221, 125, 25, 202, 222, 10, 3, 238, 23, 221, 125, 25, 199, 209, 10, - 3, 238, 23, 221, 125, 25, 196, 170, 108, 231, 32, 10, 3, 238, 23, 221, - 125, 25, 196, 38, 10, 3, 237, 250, 10, 3, 237, 225, 10, 3, 237, 224, 10, - 3, 237, 223, 10, 3, 237, 44, 10, 3, 237, 26, 10, 3, 236, 255, 10, 3, 237, - 0, 25, 203, 113, 10, 3, 236, 253, 10, 3, 236, 243, 10, 3, 236, 244, 222, - 55, 126, 230, 156, 236, 222, 10, 3, 236, 222, 10, 3, 235, 89, 10, 3, 235, - 90, 139, 235, 89, 10, 3, 235, 90, 230, 155, 10, 3, 235, 90, 203, 94, 10, - 3, 235, 87, 10, 3, 235, 88, 25, 234, 9, 10, 3, 235, 86, 10, 3, 235, 82, - 10, 3, 235, 81, 10, 3, 235, 80, 10, 3, 235, 75, 10, 3, 235, 73, 10, 3, - 235, 74, 230, 155, 10, 3, 235, 74, 230, 156, 230, 155, 10, 3, 235, 72, - 10, 3, 235, 65, 10, 3, 71, 10, 3, 235, 15, 25, 210, 137, 10, 3, 235, 15, - 139, 235, 15, 212, 131, 139, 212, 130, 10, 3, 234, 218, 10, 3, 234, 219, - 25, 42, 108, 230, 105, 108, 238, 32, 10, 3, 234, 219, 25, 231, 200, 10, - 3, 234, 219, 25, 216, 100, 10, 3, 234, 219, 25, 205, 169, 10, 3, 234, - 219, 25, 203, 113, 10, 3, 234, 219, 25, 66, 10, 3, 234, 190, 10, 3, 234, - 177, 10, 3, 234, 140, 10, 3, 234, 103, 10, 3, 234, 104, 25, 231, 208, 10, - 3, 234, 104, 25, 231, 209, 199, 84, 10, 3, 234, 104, 25, 216, 232, 10, 3, - 234, 104, 238, 210, 234, 103, 10, 3, 234, 104, 211, 63, 234, 103, 10, 3, - 234, 104, 201, 189, 10, 3, 234, 31, 10, 3, 234, 28, 10, 3, 234, 9, 10, 3, - 233, 180, 10, 3, 233, 181, 25, 65, 10, 3, 233, 181, 25, 42, 108, 220, 37, - 10, 3, 233, 181, 25, 42, 108, 220, 38, 25, 220, 37, 10, 3, 233, 181, 25, - 251, 132, 10, 3, 233, 181, 25, 249, 135, 10, 3, 233, 181, 25, 235, 74, - 230, 155, 10, 3, 233, 181, 25, 235, 74, 230, 156, 230, 155, 10, 3, 233, - 181, 25, 140, 10, 3, 233, 181, 25, 230, 105, 230, 155, 10, 3, 233, 181, - 25, 223, 202, 230, 155, 10, 3, 233, 181, 25, 222, 54, 10, 3, 233, 181, - 25, 222, 55, 201, 189, 10, 3, 233, 181, 25, 220, 223, 10, 3, 233, 181, - 25, 173, 10, 3, 233, 181, 25, 220, 38, 25, 220, 37, 10, 3, 233, 181, 25, - 219, 146, 10, 3, 233, 181, 25, 218, 225, 10, 3, 233, 181, 25, 196, 169, - 10, 3, 233, 181, 25, 196, 158, 10, 3, 231, 240, 10, 3, 231, 241, 230, - 155, 10, 3, 231, 238, 10, 3, 231, 239, 25, 42, 108, 238, 33, 108, 140, - 10, 3, 231, 239, 25, 42, 108, 140, 10, 3, 231, 239, 25, 42, 108, 223, - 201, 10, 3, 231, 239, 25, 252, 73, 199, 85, 108, 199, 236, 10, 3, 231, - 239, 25, 251, 132, 10, 3, 231, 239, 25, 250, 209, 10, 3, 231, 239, 25, - 250, 208, 108, 231, 222, 10, 3, 231, 239, 25, 249, 135, 10, 3, 231, 239, - 25, 249, 88, 108, 165, 10, 3, 231, 239, 25, 247, 230, 10, 3, 231, 239, - 25, 247, 231, 108, 165, 10, 3, 231, 239, 25, 238, 32, 10, 3, 231, 239, - 25, 237, 44, 10, 3, 231, 239, 25, 237, 0, 25, 203, 113, 10, 3, 231, 239, - 25, 235, 87, 10, 3, 231, 239, 25, 234, 140, 10, 3, 231, 239, 25, 234, - 141, 108, 173, 10, 3, 231, 239, 25, 234, 103, 10, 3, 231, 239, 25, 234, - 104, 25, 231, 209, 199, 84, 10, 3, 231, 239, 25, 231, 209, 199, 84, 10, - 3, 231, 239, 25, 231, 200, 10, 3, 231, 239, 25, 231, 53, 10, 3, 231, 239, - 25, 231, 51, 10, 3, 231, 239, 25, 231, 52, 108, 65, 10, 3, 231, 239, 25, - 231, 33, 108, 201, 4, 10, 3, 231, 239, 25, 230, 105, 108, 218, 226, 108, - 234, 9, 10, 3, 231, 239, 25, 230, 73, 10, 3, 231, 239, 25, 230, 74, 108, - 173, 10, 3, 231, 239, 25, 229, 159, 108, 219, 146, 10, 3, 231, 239, 25, - 228, 151, 10, 3, 231, 239, 25, 223, 202, 230, 155, 10, 3, 231, 239, 25, - 223, 63, 108, 228, 160, 108, 250, 209, 10, 3, 231, 239, 25, 222, 96, 10, - 3, 231, 239, 25, 222, 54, 10, 3, 231, 239, 25, 221, 152, 10, 3, 231, 239, - 25, 221, 153, 108, 220, 37, 10, 3, 231, 239, 25, 220, 224, 108, 251, 132, - 10, 3, 231, 239, 25, 173, 10, 3, 231, 239, 25, 216, 233, 108, 234, 103, - 10, 3, 231, 239, 25, 216, 100, 10, 3, 231, 239, 25, 212, 130, 10, 3, 231, - 239, 25, 212, 131, 139, 212, 130, 10, 3, 231, 239, 25, 168, 10, 3, 231, - 239, 25, 205, 169, 10, 3, 231, 239, 25, 205, 127, 10, 3, 231, 239, 25, - 203, 113, 10, 3, 231, 239, 25, 203, 114, 108, 197, 64, 10, 3, 231, 239, - 25, 203, 79, 10, 3, 231, 239, 25, 200, 204, 10, 3, 231, 239, 25, 199, - 209, 10, 3, 231, 239, 25, 66, 10, 3, 231, 239, 25, 196, 158, 10, 3, 231, - 239, 25, 196, 159, 108, 235, 89, 10, 3, 231, 239, 139, 231, 238, 10, 3, - 231, 233, 10, 3, 231, 234, 238, 210, 231, 233, 10, 3, 231, 231, 10, 3, - 231, 232, 139, 231, 232, 231, 201, 139, 231, 200, 10, 3, 231, 222, 10, 3, - 231, 223, 231, 232, 139, 231, 232, 231, 201, 139, 231, 200, 10, 3, 231, - 221, 10, 3, 231, 219, 10, 3, 231, 210, 10, 3, 231, 208, 10, 3, 231, 209, - 199, 84, 10, 3, 231, 209, 139, 231, 208, 10, 3, 231, 209, 238, 210, 231, - 208, 10, 3, 231, 200, 10, 3, 231, 199, 10, 3, 231, 193, 10, 3, 231, 134, - 10, 3, 231, 135, 25, 220, 197, 10, 3, 231, 53, 10, 3, 231, 54, 25, 71, - 10, 3, 231, 54, 25, 66, 10, 3, 231, 54, 238, 210, 231, 53, 10, 3, 231, - 51, 10, 3, 231, 52, 139, 231, 51, 10, 3, 231, 52, 238, 210, 231, 51, 10, - 3, 231, 48, 10, 3, 231, 32, 10, 3, 231, 33, 230, 155, 10, 3, 231, 30, 10, - 3, 231, 31, 25, 42, 108, 223, 201, 10, 3, 231, 31, 25, 231, 209, 199, 84, - 10, 3, 231, 31, 25, 223, 201, 10, 3, 231, 31, 25, 218, 226, 108, 223, - 201, 10, 3, 231, 31, 25, 168, 10, 3, 231, 25, 10, 3, 231, 23, 10, 3, 231, - 24, 238, 210, 231, 23, 10, 3, 231, 24, 25, 249, 135, 10, 3, 231, 24, 25, - 199, 209, 10, 3, 231, 24, 199, 84, 10, 3, 230, 179, 10, 3, 230, 180, 238, - 210, 230, 179, 10, 3, 230, 177, 10, 3, 230, 178, 25, 222, 96, 10, 3, 230, - 178, 25, 222, 97, 25, 223, 202, 230, 155, 10, 3, 230, 178, 25, 212, 130, - 10, 3, 230, 178, 25, 205, 170, 108, 197, 82, 10, 3, 230, 178, 230, 155, - 10, 3, 230, 168, 10, 3, 230, 169, 25, 42, 108, 220, 197, 10, 3, 230, 169, - 25, 220, 197, 10, 3, 230, 169, 139, 230, 169, 218, 216, 10, 3, 230, 160, - 10, 3, 230, 158, 10, 3, 230, 159, 25, 203, 113, 10, 3, 230, 149, 10, 3, - 230, 148, 10, 3, 230, 143, 10, 3, 230, 142, 10, 3, 140, 10, 3, 230, 105, - 199, 84, 10, 3, 230, 105, 230, 155, 10, 3, 230, 73, 10, 3, 229, 158, 10, - 3, 229, 159, 25, 250, 209, 10, 3, 229, 159, 25, 250, 207, 10, 3, 229, - 159, 25, 249, 135, 10, 3, 229, 159, 25, 236, 222, 10, 3, 229, 159, 25, - 231, 231, 10, 3, 229, 159, 25, 221, 141, 10, 3, 229, 159, 25, 212, 130, - 10, 3, 229, 159, 25, 203, 113, 10, 3, 229, 159, 25, 66, 10, 3, 228, 159, - 10, 3, 228, 151, 10, 3, 228, 152, 25, 251, 132, 10, 3, 228, 152, 25, 230, - 73, 10, 3, 228, 152, 25, 222, 54, 10, 3, 228, 152, 25, 219, 89, 10, 3, - 228, 152, 25, 196, 158, 10, 3, 228, 146, 10, 3, 68, 10, 3, 228, 74, 65, - 10, 3, 228, 30, 10, 3, 223, 229, 10, 3, 223, 230, 139, 223, 230, 247, - 230, 10, 3, 223, 230, 139, 223, 230, 201, 189, 10, 3, 223, 204, 10, 3, - 223, 201, 10, 3, 223, 202, 237, 26, 10, 3, 223, 202, 207, 1, 10, 3, 223, - 202, 139, 223, 202, 203, 63, 139, 203, 63, 196, 159, 139, 196, 158, 10, - 3, 223, 202, 230, 155, 10, 3, 223, 191, 10, 3, 223, 192, 25, 231, 209, - 199, 84, 10, 3, 223, 190, 10, 3, 223, 180, 10, 3, 223, 181, 25, 199, 209, - 10, 3, 223, 181, 238, 210, 223, 180, 10, 3, 223, 181, 211, 63, 223, 180, - 10, 3, 223, 181, 201, 189, 10, 3, 223, 172, 10, 3, 223, 162, 10, 3, 223, - 77, 10, 3, 223, 62, 10, 3, 155, 10, 3, 222, 142, 25, 65, 10, 3, 222, 142, - 25, 252, 42, 10, 3, 222, 142, 25, 252, 43, 108, 220, 223, 10, 3, 222, - 142, 25, 250, 207, 10, 3, 222, 142, 25, 249, 135, 10, 3, 222, 142, 25, - 249, 114, 10, 3, 222, 142, 25, 164, 10, 3, 222, 142, 25, 248, 188, 10, 3, - 222, 142, 25, 234, 28, 10, 3, 222, 142, 25, 234, 9, 10, 3, 222, 142, 25, - 231, 240, 10, 3, 222, 142, 25, 231, 222, 10, 3, 222, 142, 25, 231, 209, - 199, 84, 10, 3, 222, 142, 25, 231, 200, 10, 3, 222, 142, 25, 231, 201, - 108, 203, 164, 108, 65, 10, 3, 222, 142, 25, 231, 53, 10, 3, 222, 142, - 25, 231, 32, 10, 3, 222, 142, 25, 231, 24, 108, 205, 127, 10, 3, 222, - 142, 25, 231, 24, 238, 210, 231, 23, 10, 3, 222, 142, 25, 230, 179, 10, - 3, 222, 142, 25, 230, 148, 10, 3, 222, 142, 25, 223, 201, 10, 3, 222, - 142, 25, 223, 180, 10, 3, 222, 142, 25, 222, 96, 10, 3, 222, 142, 25, - 221, 166, 10, 3, 222, 142, 25, 221, 152, 10, 3, 222, 142, 25, 219, 146, - 10, 3, 222, 142, 25, 218, 225, 10, 3, 222, 142, 25, 216, 232, 10, 3, 222, - 142, 25, 216, 233, 108, 235, 89, 10, 3, 222, 142, 25, 216, 233, 108, 231, - 53, 10, 3, 222, 142, 25, 216, 233, 108, 199, 145, 10, 3, 222, 142, 25, - 216, 100, 10, 3, 222, 142, 25, 216, 101, 108, 212, 125, 10, 3, 222, 142, - 25, 214, 121, 10, 3, 222, 142, 25, 212, 130, 10, 3, 222, 142, 25, 209, - 185, 10, 3, 222, 142, 25, 206, 68, 10, 3, 222, 142, 25, 188, 10, 3, 222, - 142, 25, 205, 127, 10, 3, 222, 142, 25, 203, 165, 10, 3, 222, 142, 25, - 203, 113, 10, 3, 222, 142, 25, 203, 79, 10, 3, 222, 142, 25, 203, 5, 10, - 3, 222, 142, 25, 202, 201, 10, 3, 222, 142, 25, 200, 213, 10, 3, 222, - 142, 25, 199, 179, 10, 3, 222, 142, 25, 66, 10, 3, 222, 142, 25, 196, - 169, 10, 3, 222, 142, 25, 196, 158, 10, 3, 222, 142, 25, 196, 116, 25, - 168, 10, 3, 222, 142, 25, 196, 38, 10, 3, 222, 142, 25, 191, 30, 10, 3, - 222, 128, 10, 3, 222, 129, 238, 210, 222, 128, 10, 3, 222, 117, 10, 3, - 222, 113, 10, 3, 222, 111, 10, 3, 222, 110, 10, 3, 222, 108, 10, 3, 222, - 109, 139, 222, 108, 10, 3, 222, 96, 10, 3, 222, 97, 25, 223, 202, 230, - 155, 10, 3, 222, 91, 10, 3, 222, 92, 25, 249, 135, 10, 3, 222, 92, 238, - 210, 222, 91, 10, 3, 222, 89, 10, 3, 222, 88, 10, 3, 222, 54, 10, 3, 222, - 55, 220, 105, 25, 126, 139, 220, 105, 25, 66, 10, 3, 222, 55, 139, 222, - 55, 220, 105, 25, 126, 139, 220, 105, 25, 66, 10, 3, 221, 242, 10, 3, - 221, 166, 10, 3, 221, 167, 25, 249, 135, 10, 3, 221, 167, 25, 66, 10, 3, - 221, 167, 25, 196, 158, 10, 3, 221, 152, 10, 3, 221, 141, 10, 3, 221, - 127, 10, 3, 221, 126, 10, 3, 221, 124, 10, 3, 221, 125, 139, 221, 124, - 10, 3, 220, 232, 10, 3, 220, 233, 139, 229, 159, 25, 250, 208, 220, 233, - 139, 229, 159, 25, 250, 207, 10, 3, 220, 223, 10, 3, 220, 221, 10, 3, - 220, 222, 195, 168, 20, 10, 3, 220, 220, 10, 3, 220, 211, 10, 3, 220, - 212, 230, 155, 10, 3, 220, 210, 10, 3, 220, 197, 10, 3, 220, 198, 211, - 63, 220, 197, 10, 3, 220, 190, 10, 3, 220, 167, 10, 3, 173, 10, 3, 220, - 104, 10, 3, 220, 105, 25, 65, 10, 3, 220, 105, 25, 42, 108, 238, 33, 108, - 140, 10, 3, 220, 105, 25, 42, 108, 231, 200, 10, 3, 220, 105, 25, 42, - 108, 220, 37, 10, 3, 220, 105, 25, 251, 207, 10, 3, 220, 105, 25, 251, - 132, 10, 3, 220, 105, 25, 250, 210, 191, 26, 199, 84, 10, 3, 220, 105, - 25, 249, 135, 10, 3, 220, 105, 25, 248, 188, 10, 3, 220, 105, 25, 237, - 225, 10, 3, 220, 105, 25, 234, 103, 10, 3, 220, 105, 25, 231, 240, 10, 3, - 220, 105, 25, 231, 200, 10, 3, 220, 105, 25, 230, 168, 10, 3, 220, 105, - 25, 230, 169, 108, 230, 168, 10, 3, 220, 105, 25, 140, 10, 3, 220, 105, - 25, 230, 73, 10, 3, 220, 105, 25, 229, 159, 25, 212, 130, 10, 3, 220, - 105, 25, 223, 202, 230, 155, 10, 3, 220, 105, 25, 223, 180, 10, 3, 220, - 105, 25, 223, 181, 108, 140, 10, 3, 220, 105, 25, 223, 181, 108, 218, - 225, 10, 3, 220, 105, 25, 221, 166, 10, 3, 220, 105, 25, 221, 141, 10, 3, - 220, 105, 25, 220, 223, 10, 3, 220, 105, 25, 220, 211, 10, 3, 220, 105, - 25, 220, 212, 108, 229, 159, 108, 65, 10, 3, 220, 105, 25, 220, 104, 10, - 3, 220, 105, 25, 219, 89, 10, 3, 220, 105, 25, 218, 225, 10, 3, 220, 105, - 25, 218, 210, 10, 3, 220, 105, 25, 216, 232, 10, 3, 220, 105, 25, 216, - 233, 108, 234, 103, 10, 3, 220, 105, 25, 215, 101, 10, 3, 220, 105, 25, - 214, 121, 10, 3, 220, 105, 25, 203, 114, 108, 200, 204, 10, 3, 220, 105, - 25, 203, 59, 108, 231, 24, 108, 234, 28, 10, 3, 220, 105, 25, 203, 59, - 108, 231, 24, 199, 84, 10, 3, 220, 105, 25, 203, 3, 10, 3, 220, 105, 25, - 203, 4, 108, 203, 3, 10, 3, 220, 105, 25, 200, 204, 10, 3, 220, 105, 25, - 199, 223, 10, 3, 220, 105, 25, 199, 209, 10, 3, 220, 105, 25, 199, 146, - 108, 42, 108, 201, 5, 108, 180, 10, 3, 220, 105, 25, 66, 10, 3, 220, 105, - 25, 126, 108, 65, 10, 3, 220, 105, 25, 126, 108, 126, 108, 66, 10, 3, - 220, 105, 25, 196, 170, 108, 250, 209, 10, 3, 220, 105, 25, 196, 158, 10, - 3, 220, 105, 25, 196, 38, 10, 3, 220, 105, 201, 189, 10, 3, 220, 102, 10, - 3, 220, 103, 25, 203, 113, 10, 3, 220, 103, 25, 203, 114, 108, 200, 204, - 10, 3, 220, 103, 230, 155, 10, 3, 220, 103, 230, 156, 139, 220, 103, 230, - 156, 203, 113, 10, 3, 220, 98, 10, 3, 220, 37, 10, 3, 220, 38, 25, 220, - 37, 10, 3, 220, 35, 10, 3, 220, 36, 25, 220, 197, 10, 3, 220, 36, 25, - 220, 198, 108, 206, 68, 10, 3, 219, 146, 10, 3, 219, 127, 10, 3, 219, - 115, 10, 3, 219, 89, 10, 3, 218, 225, 10, 3, 218, 226, 25, 249, 135, 10, - 3, 218, 223, 10, 3, 218, 224, 25, 251, 207, 10, 3, 218, 224, 25, 249, - 135, 10, 3, 218, 224, 25, 234, 9, 10, 3, 218, 224, 25, 234, 10, 199, 84, - 10, 3, 218, 224, 25, 231, 209, 199, 84, 10, 3, 218, 224, 25, 229, 159, - 25, 249, 135, 10, 3, 218, 224, 25, 223, 180, 10, 3, 218, 224, 25, 222, - 113, 10, 3, 218, 224, 25, 222, 111, 10, 3, 218, 224, 25, 222, 112, 108, - 250, 209, 10, 3, 218, 224, 25, 221, 166, 10, 3, 218, 224, 25, 220, 126, - 108, 250, 209, 10, 3, 218, 224, 25, 220, 104, 10, 3, 218, 224, 25, 216, - 233, 108, 234, 103, 10, 3, 218, 224, 25, 214, 121, 10, 3, 218, 224, 25, - 212, 178, 10, 3, 218, 224, 25, 202, 223, 108, 250, 209, 10, 3, 218, 224, - 25, 202, 192, 108, 248, 10, 10, 3, 218, 224, 25, 197, 82, 10, 3, 218, - 224, 199, 84, 10, 3, 218, 224, 238, 210, 218, 223, 10, 3, 218, 224, 211, - 63, 218, 223, 10, 3, 218, 224, 201, 189, 10, 3, 218, 224, 203, 94, 10, 3, - 218, 222, 10, 3, 218, 216, 10, 3, 218, 217, 139, 218, 216, 10, 3, 218, - 217, 211, 63, 218, 216, 10, 3, 218, 217, 203, 94, 10, 3, 218, 213, 10, 3, - 218, 210, 10, 3, 218, 208, 10, 3, 218, 209, 139, 218, 208, 10, 3, 218, - 209, 139, 218, 209, 231, 201, 139, 231, 200, 10, 3, 174, 10, 3, 217, 160, - 25, 199, 209, 10, 3, 217, 160, 230, 155, 10, 3, 217, 152, 10, 3, 217, - 120, 10, 3, 217, 65, 10, 3, 217, 39, 10, 3, 217, 38, 10, 3, 216, 232, 10, - 3, 216, 173, 10, 3, 216, 100, 10, 3, 216, 44, 10, 3, 215, 155, 10, 3, - 215, 156, 139, 215, 155, 10, 3, 215, 140, 10, 3, 215, 141, 230, 155, 10, - 3, 215, 119, 10, 3, 215, 105, 10, 3, 215, 101, 10, 3, 215, 102, 25, 65, - 10, 3, 215, 102, 25, 220, 197, 10, 3, 215, 102, 25, 191, 123, 10, 3, 215, - 102, 139, 215, 101, 10, 3, 215, 102, 139, 215, 102, 25, 42, 108, 180, 10, - 3, 215, 102, 238, 210, 215, 101, 10, 3, 215, 99, 10, 3, 215, 100, 25, 65, - 10, 3, 215, 100, 25, 42, 108, 237, 44, 10, 3, 215, 100, 25, 237, 44, 10, - 3, 215, 100, 230, 155, 10, 3, 180, 10, 3, 214, 253, 10, 3, 214, 240, 10, - 3, 214, 241, 223, 92, 10, 3, 214, 241, 25, 203, 6, 199, 84, 10, 3, 214, - 241, 211, 63, 214, 240, 10, 3, 214, 239, 10, 3, 214, 231, 212, 116, 10, - 3, 214, 230, 10, 3, 214, 229, 10, 3, 214, 121, 10, 3, 214, 122, 25, 65, - 10, 3, 214, 122, 25, 196, 158, 10, 3, 214, 122, 203, 94, 10, 3, 213, 219, - 10, 3, 213, 220, 25, 71, 10, 3, 213, 210, 10, 3, 213, 180, 10, 3, 213, - 181, 25, 231, 209, 199, 84, 10, 3, 213, 181, 25, 231, 201, 108, 231, 209, - 199, 84, 10, 3, 213, 176, 10, 3, 213, 177, 25, 251, 132, 10, 3, 213, 177, - 25, 250, 209, 10, 3, 213, 177, 25, 250, 210, 108, 250, 209, 10, 3, 213, - 177, 25, 230, 168, 10, 3, 213, 177, 25, 216, 233, 108, 231, 209, 199, 84, - 10, 3, 213, 177, 25, 214, 121, 10, 3, 213, 177, 25, 212, 130, 10, 3, 213, - 177, 25, 203, 113, 10, 3, 213, 177, 25, 203, 114, 108, 42, 251, 132, 10, - 3, 213, 177, 25, 203, 114, 108, 250, 209, 10, 3, 213, 177, 25, 203, 114, - 108, 250, 210, 108, 250, 209, 10, 3, 213, 177, 25, 196, 170, 108, 250, - 209, 10, 3, 213, 177, 25, 196, 38, 10, 3, 213, 163, 10, 3, 212, 178, 10, - 3, 212, 147, 10, 3, 212, 130, 10, 3, 212, 131, 220, 103, 25, 231, 200, - 10, 3, 212, 131, 220, 103, 25, 217, 39, 10, 3, 212, 131, 220, 103, 25, - 205, 169, 10, 3, 212, 131, 220, 103, 25, 205, 170, 139, 212, 131, 220, - 103, 25, 205, 169, 10, 3, 212, 131, 220, 103, 25, 196, 38, 10, 3, 212, - 131, 199, 84, 10, 3, 212, 131, 139, 212, 130, 10, 3, 212, 131, 238, 210, - 212, 130, 10, 3, 212, 131, 238, 210, 212, 131, 220, 103, 139, 220, 102, - 10, 3, 212, 125, 10, 3, 212, 126, 252, 73, 25, 250, 203, 10, 3, 212, 126, - 252, 73, 25, 248, 188, 10, 3, 212, 126, 252, 73, 25, 235, 82, 10, 3, 212, - 126, 252, 73, 25, 230, 168, 10, 3, 212, 126, 252, 73, 25, 223, 202, 230, - 155, 10, 3, 212, 126, 252, 73, 25, 222, 111, 10, 3, 212, 126, 252, 73, - 25, 173, 10, 3, 212, 126, 252, 73, 25, 214, 121, 10, 3, 212, 126, 252, - 73, 25, 202, 189, 10, 3, 212, 126, 252, 73, 25, 196, 169, 10, 3, 212, - 126, 221, 125, 25, 248, 188, 10, 3, 212, 126, 221, 125, 25, 248, 189, 66, - 10, 3, 168, 10, 3, 210, 210, 10, 3, 210, 166, 10, 3, 210, 137, 10, 3, - 209, 243, 10, 3, 209, 185, 10, 3, 209, 186, 25, 65, 10, 3, 209, 186, 25, - 252, 155, 10, 3, 209, 186, 25, 248, 188, 10, 3, 209, 186, 25, 248, 10, - 10, 3, 209, 186, 25, 71, 10, 3, 209, 186, 25, 68, 10, 3, 209, 186, 25, - 228, 30, 10, 3, 209, 186, 25, 66, 10, 3, 209, 186, 25, 196, 169, 10, 3, - 209, 186, 238, 210, 209, 185, 10, 3, 209, 121, 10, 3, 209, 122, 25, 222, - 91, 10, 3, 209, 122, 25, 196, 158, 10, 3, 209, 122, 25, 191, 123, 10, 3, - 209, 122, 211, 63, 209, 121, 10, 3, 165, 10, 3, 207, 176, 10, 3, 207, 1, - 10, 3, 206, 68, 10, 3, 188, 10, 3, 205, 186, 212, 116, 10, 3, 205, 185, - 10, 3, 205, 186, 25, 65, 10, 3, 205, 186, 25, 235, 89, 10, 3, 205, 186, - 25, 235, 87, 10, 3, 205, 186, 25, 140, 10, 3, 205, 186, 25, 222, 96, 10, - 3, 205, 186, 25, 220, 197, 10, 3, 205, 186, 25, 218, 208, 10, 3, 205, - 186, 25, 216, 100, 10, 3, 205, 186, 25, 212, 130, 10, 3, 205, 186, 25, - 205, 169, 10, 3, 205, 186, 25, 203, 79, 10, 3, 205, 186, 25, 199, 236, - 10, 3, 205, 186, 25, 196, 169, 10, 3, 205, 186, 25, 196, 164, 10, 3, 205, - 186, 25, 196, 120, 10, 3, 205, 186, 25, 196, 62, 10, 3, 205, 186, 25, - 196, 38, 10, 3, 205, 186, 139, 205, 185, 10, 3, 205, 186, 230, 155, 10, - 3, 205, 169, 10, 3, 205, 170, 220, 105, 25, 250, 207, 10, 3, 205, 136, - 10, 3, 205, 127, 10, 3, 203, 165, 10, 3, 203, 163, 10, 3, 203, 164, 25, - 65, 10, 3, 203, 164, 25, 249, 135, 10, 3, 203, 164, 25, 231, 23, 10, 3, - 203, 164, 25, 214, 121, 10, 3, 203, 164, 25, 203, 3, 10, 3, 203, 164, 25, - 197, 64, 10, 3, 203, 164, 25, 66, 10, 3, 203, 164, 25, 126, 108, 65, 10, - 3, 203, 161, 10, 3, 203, 159, 10, 3, 203, 131, 10, 3, 203, 113, 10, 3, - 203, 114, 228, 159, 10, 3, 203, 114, 139, 203, 114, 231, 232, 139, 231, - 232, 231, 201, 139, 231, 200, 10, 3, 203, 114, 139, 203, 114, 199, 237, - 139, 199, 237, 231, 201, 139, 231, 200, 10, 3, 203, 106, 10, 3, 203, 101, - 10, 3, 203, 97, 10, 3, 203, 96, 10, 3, 203, 93, 10, 3, 203, 79, 10, 3, - 203, 80, 25, 65, 10, 3, 203, 80, 25, 223, 180, 10, 3, 203, 73, 10, 3, - 203, 74, 25, 65, 10, 3, 203, 74, 25, 249, 115, 10, 3, 203, 74, 25, 247, - 242, 10, 3, 203, 74, 25, 236, 243, 10, 3, 203, 74, 25, 231, 200, 10, 3, - 203, 74, 25, 223, 201, 10, 3, 203, 74, 25, 223, 202, 230, 155, 10, 3, - 203, 74, 25, 220, 190, 10, 3, 203, 74, 25, 218, 210, 10, 3, 203, 74, 25, - 215, 140, 10, 3, 203, 74, 25, 205, 169, 10, 3, 203, 67, 10, 3, 203, 62, - 10, 3, 203, 63, 199, 84, 10, 3, 203, 63, 139, 203, 63, 247, 231, 139, - 247, 230, 10, 3, 203, 58, 10, 3, 203, 5, 10, 3, 203, 6, 139, 223, 93, - 203, 5, 10, 3, 203, 3, 10, 3, 203, 1, 10, 3, 202, 222, 10, 3, 202, 223, - 230, 155, 10, 3, 202, 201, 10, 3, 202, 199, 10, 3, 202, 200, 139, 202, - 200, 203, 3, 10, 3, 202, 191, 10, 3, 202, 189, 10, 3, 201, 4, 10, 3, 201, - 5, 139, 201, 4, 10, 3, 200, 216, 10, 3, 200, 215, 10, 3, 200, 213, 10, 3, - 200, 204, 10, 3, 200, 203, 10, 3, 200, 175, 10, 3, 200, 174, 10, 3, 190, - 190, 10, 3, 199, 252, 250, 193, 10, 3, 199, 252, 25, 229, 158, 10, 3, - 199, 252, 25, 216, 100, 10, 3, 199, 252, 230, 155, 10, 3, 199, 236, 10, - 3, 199, 237, 139, 199, 237, 213, 220, 139, 213, 220, 236, 223, 139, 236, - 222, 10, 3, 199, 237, 201, 189, 10, 3, 199, 223, 10, 3, 199, 224, 25, - 248, 188, 10, 3, 199, 224, 25, 230, 168, 10, 3, 199, 224, 25, 203, 113, - 10, 3, 199, 224, 25, 203, 5, 10, 3, 199, 224, 25, 197, 82, 10, 3, 199, - 224, 25, 196, 158, 10, 3, 199, 209, 10, 3, 199, 179, 10, 3, 199, 145, 10, - 3, 199, 146, 230, 155, 10, 3, 198, 193, 10, 3, 198, 194, 199, 84, 10, 3, - 198, 154, 10, 3, 198, 131, 10, 3, 198, 132, 25, 199, 209, 10, 3, 198, - 132, 139, 198, 131, 10, 3, 198, 132, 139, 198, 132, 231, 232, 139, 231, - 232, 231, 201, 139, 231, 200, 10, 3, 197, 94, 10, 3, 197, 82, 10, 3, 197, - 80, 10, 3, 197, 76, 10, 3, 197, 64, 10, 3, 197, 65, 139, 197, 65, 191, - 124, 139, 191, 123, 10, 3, 66, 10, 3, 126, 230, 168, 10, 3, 126, 126, 66, - 10, 3, 126, 139, 126, 210, 221, 139, 210, 221, 231, 201, 139, 231, 200, - 10, 3, 126, 139, 126, 200, 176, 139, 200, 175, 10, 3, 126, 139, 126, 126, - 207, 18, 139, 126, 207, 17, 10, 3, 196, 169, 10, 3, 196, 164, 10, 3, 196, - 158, 10, 3, 196, 159, 220, 190, 10, 3, 196, 159, 25, 249, 135, 10, 3, - 196, 159, 25, 216, 100, 10, 3, 196, 159, 25, 126, 108, 126, 108, 66, 10, - 3, 196, 159, 25, 126, 108, 126, 108, 126, 230, 155, 10, 3, 196, 159, 230, - 155, 10, 3, 196, 159, 203, 94, 10, 3, 196, 159, 203, 95, 25, 249, 135, - 10, 3, 196, 153, 10, 3, 196, 120, 10, 3, 196, 121, 25, 220, 104, 10, 3, - 196, 121, 25, 216, 233, 108, 238, 32, 10, 3, 196, 121, 25, 203, 163, 10, - 3, 196, 121, 25, 66, 10, 3, 196, 119, 10, 3, 196, 115, 10, 3, 196, 116, - 25, 222, 54, 10, 3, 196, 116, 25, 168, 10, 3, 196, 113, 10, 3, 196, 114, - 230, 155, 10, 3, 196, 62, 10, 3, 196, 63, 238, 210, 196, 62, 10, 3, 196, - 63, 203, 94, 10, 3, 196, 60, 10, 3, 196, 61, 25, 42, 108, 140, 10, 3, - 196, 61, 25, 42, 108, 180, 10, 3, 196, 61, 25, 251, 207, 10, 3, 196, 61, - 25, 140, 10, 3, 196, 61, 25, 212, 130, 10, 3, 196, 61, 25, 196, 169, 10, - 3, 196, 61, 25, 196, 170, 108, 250, 209, 10, 3, 196, 61, 25, 196, 170, - 108, 248, 188, 10, 3, 196, 59, 10, 3, 196, 56, 10, 3, 196, 55, 10, 3, - 196, 51, 10, 3, 196, 52, 25, 65, 10, 3, 196, 52, 25, 250, 203, 10, 3, - 196, 52, 25, 164, 10, 3, 196, 52, 25, 235, 75, 10, 3, 196, 52, 25, 231, - 240, 10, 3, 196, 52, 25, 231, 222, 10, 3, 196, 52, 25, 231, 209, 199, 84, - 10, 3, 196, 52, 25, 231, 200, 10, 3, 196, 52, 25, 230, 179, 10, 3, 196, - 52, 25, 140, 10, 3, 196, 52, 25, 223, 201, 10, 3, 196, 52, 25, 223, 180, - 10, 3, 196, 52, 25, 223, 62, 10, 3, 196, 52, 25, 221, 166, 10, 3, 196, - 52, 25, 218, 208, 10, 3, 196, 52, 25, 216, 44, 10, 3, 196, 52, 25, 168, - 10, 3, 196, 52, 25, 203, 113, 10, 3, 196, 52, 25, 202, 199, 10, 3, 196, - 52, 25, 197, 94, 10, 3, 196, 52, 25, 126, 108, 230, 168, 10, 3, 196, 52, - 25, 196, 158, 10, 3, 196, 52, 25, 196, 49, 10, 3, 196, 49, 10, 3, 196, - 50, 25, 66, 10, 3, 196, 38, 10, 3, 196, 39, 25, 65, 10, 3, 196, 39, 25, - 220, 232, 10, 3, 196, 39, 25, 220, 197, 10, 3, 196, 39, 25, 199, 209, 10, - 3, 196, 34, 10, 3, 196, 37, 10, 3, 196, 35, 10, 3, 196, 31, 10, 3, 196, - 16, 10, 3, 196, 17, 25, 222, 54, 10, 3, 196, 14, 10, 3, 191, 123, 10, 3, - 191, 124, 199, 84, 10, 3, 191, 124, 112, 25, 220, 197, 10, 3, 191, 118, - 10, 3, 191, 107, 10, 3, 191, 86, 10, 3, 191, 30, 10, 3, 191, 31, 139, - 191, 30, 10, 3, 191, 29, 10, 3, 191, 27, 10, 3, 191, 28, 222, 116, 199, - 84, 10, 3, 191, 22, 10, 3, 191, 13, 10, 3, 190, 251, 10, 3, 190, 249, 10, - 3, 190, 250, 25, 65, 10, 3, 190, 248, 10, 3, 190, 247, 10, 3, 222, 79, - 234, 137, 10, 3, 252, 156, 25, 212, 130, 10, 3, 252, 73, 25, 65, 10, 3, - 251, 146, 25, 220, 213, 10, 3, 238, 23, 221, 125, 25, 196, 170, 108, 217, - 39, 10, 3, 238, 21, 10, 3, 236, 223, 108, 203, 5, 10, 3, 235, 88, 25, - 203, 113, 10, 3, 233, 181, 25, 230, 168, 10, 3, 233, 181, 25, 203, 113, - 10, 3, 231, 239, 25, 251, 133, 108, 222, 97, 108, 65, 10, 3, 231, 239, - 25, 250, 207, 10, 3, 231, 164, 10, 3, 231, 42, 10, 3, 228, 131, 10, 3, - 222, 142, 25, 251, 91, 10, 3, 222, 142, 25, 250, 206, 10, 3, 222, 142, - 25, 231, 23, 10, 3, 222, 142, 25, 230, 168, 10, 3, 222, 142, 25, 229, - 159, 25, 250, 207, 10, 3, 222, 142, 25, 218, 208, 10, 3, 222, 142, 25, - 168, 10, 3, 222, 142, 25, 202, 253, 10, 3, 222, 142, 25, 197, 94, 10, 3, - 222, 142, 25, 196, 60, 10, 3, 220, 105, 25, 231, 53, 10, 3, 218, 224, - 203, 95, 25, 249, 135, 10, 3, 218, 224, 25, 234, 10, 108, 220, 37, 10, 3, - 218, 224, 25, 203, 5, 10, 3, 216, 172, 10, 3, 215, 100, 25, 191, 123, 10, - 3, 214, 252, 10, 3, 213, 179, 10, 3, 213, 178, 10, 3, 213, 177, 25, 249, - 115, 10, 3, 213, 177, 25, 231, 53, 10, 3, 212, 148, 206, 122, 213, 170, - 237, 124, 10, 3, 209, 244, 250, 193, 10, 3, 209, 125, 10, 3, 205, 186, - 25, 223, 202, 230, 155, 10, 3, 198, 185, 10, 3, 196, 121, 25, 216, 232, - 10, 3, 126, 66, 10, 167, 3, 105, 250, 209, 10, 167, 3, 115, 250, 209, 10, - 167, 3, 232, 128, 250, 209, 10, 167, 3, 232, 226, 250, 209, 10, 167, 3, - 202, 136, 250, 209, 10, 167, 3, 203, 247, 250, 209, 10, 167, 3, 234, 164, - 250, 209, 10, 167, 3, 213, 175, 250, 209, 10, 167, 3, 115, 236, 222, 10, - 167, 3, 232, 128, 236, 222, 10, 167, 3, 232, 226, 236, 222, 10, 167, 3, - 202, 136, 236, 222, 10, 167, 3, 203, 247, 236, 222, 10, 167, 3, 234, 164, - 236, 222, 10, 167, 3, 213, 175, 236, 222, 10, 167, 3, 232, 128, 66, 10, - 167, 3, 232, 226, 66, 10, 167, 3, 202, 136, 66, 10, 167, 3, 203, 247, 66, - 10, 167, 3, 234, 164, 66, 10, 167, 3, 213, 175, 66, 10, 167, 3, 91, 231, - 136, 10, 167, 3, 105, 231, 136, 10, 167, 3, 115, 231, 136, 10, 167, 3, - 232, 128, 231, 136, 10, 167, 3, 232, 226, 231, 136, 10, 167, 3, 202, 136, - 231, 136, 10, 167, 3, 203, 247, 231, 136, 10, 167, 3, 234, 164, 231, 136, - 10, 167, 3, 213, 175, 231, 136, 10, 167, 3, 91, 231, 133, 10, 167, 3, - 105, 231, 133, 10, 167, 3, 115, 231, 133, 10, 167, 3, 232, 128, 231, 133, - 10, 167, 3, 232, 226, 231, 133, 10, 167, 3, 105, 203, 131, 10, 167, 3, - 115, 203, 131, 10, 167, 3, 115, 203, 132, 195, 168, 20, 10, 167, 3, 232, - 128, 203, 131, 10, 167, 3, 232, 226, 203, 131, 10, 167, 3, 202, 136, 203, - 131, 10, 167, 3, 203, 247, 203, 131, 10, 167, 3, 234, 164, 203, 131, 10, - 167, 3, 213, 175, 203, 131, 10, 167, 3, 91, 203, 124, 10, 167, 3, 105, - 203, 124, 10, 167, 3, 115, 203, 124, 10, 167, 3, 115, 203, 125, 195, 168, - 20, 10, 167, 3, 232, 128, 203, 124, 10, 167, 3, 232, 226, 203, 124, 10, - 167, 3, 203, 132, 25, 231, 223, 108, 236, 222, 10, 167, 3, 203, 132, 25, - 231, 223, 108, 216, 44, 10, 167, 3, 91, 247, 226, 10, 167, 3, 105, 247, - 226, 10, 167, 3, 115, 247, 226, 10, 167, 3, 115, 247, 227, 195, 168, 20, - 10, 167, 3, 232, 128, 247, 226, 10, 167, 3, 232, 226, 247, 226, 10, 167, - 3, 115, 195, 168, 232, 146, 234, 11, 10, 167, 3, 115, 195, 168, 232, 146, - 234, 8, 10, 167, 3, 232, 128, 195, 168, 232, 146, 219, 116, 10, 167, 3, - 232, 128, 195, 168, 232, 146, 219, 114, 10, 167, 3, 232, 128, 195, 168, - 232, 146, 219, 117, 65, 10, 167, 3, 232, 128, 195, 168, 232, 146, 219, - 117, 250, 120, 10, 167, 3, 202, 136, 195, 168, 232, 146, 250, 205, 10, - 167, 3, 203, 247, 195, 168, 232, 146, 223, 171, 10, 167, 3, 203, 247, - 195, 168, 232, 146, 223, 173, 65, 10, 167, 3, 203, 247, 195, 168, 232, - 146, 223, 173, 250, 120, 10, 167, 3, 234, 164, 195, 168, 232, 146, 196, - 33, 10, 167, 3, 234, 164, 195, 168, 232, 146, 196, 32, 10, 167, 3, 213, - 175, 195, 168, 232, 146, 223, 188, 10, 167, 3, 213, 175, 195, 168, 232, - 146, 223, 187, 10, 167, 3, 213, 175, 195, 168, 232, 146, 223, 186, 10, - 167, 3, 213, 175, 195, 168, 232, 146, 223, 189, 65, 10, 167, 3, 105, 250, - 210, 199, 84, 10, 167, 3, 115, 250, 210, 199, 84, 10, 167, 3, 232, 128, - 250, 210, 199, 84, 10, 167, 3, 232, 226, 250, 210, 199, 84, 10, 167, 3, - 202, 136, 250, 210, 199, 84, 10, 167, 3, 91, 249, 99, 10, 167, 3, 105, - 249, 99, 10, 167, 3, 115, 249, 99, 10, 167, 3, 232, 128, 249, 99, 10, - 167, 3, 232, 128, 249, 100, 195, 168, 20, 10, 167, 3, 232, 226, 249, 99, - 10, 167, 3, 232, 226, 249, 100, 195, 168, 20, 10, 167, 3, 213, 188, 10, - 167, 3, 213, 189, 10, 167, 3, 91, 234, 7, 10, 167, 3, 105, 234, 7, 10, - 167, 3, 91, 199, 1, 236, 222, 10, 167, 3, 105, 198, 254, 236, 222, 10, - 167, 3, 232, 226, 202, 123, 236, 222, 10, 167, 3, 91, 199, 1, 195, 168, - 232, 146, 65, 10, 167, 3, 105, 198, 254, 195, 168, 232, 146, 65, 10, 167, - 3, 91, 234, 160, 250, 209, 10, 167, 3, 91, 208, 23, 250, 209, 10, 167, 3, - 39, 250, 196, 91, 202, 124, 10, 167, 3, 39, 250, 196, 91, 208, 22, 10, - 167, 3, 91, 208, 23, 230, 149, 10, 167, 3, 91, 132, 230, 149, 10, 167, 3, - 234, 138, 91, 199, 0, 10, 167, 3, 234, 138, 105, 198, 253, 10, 167, 3, - 234, 138, 232, 135, 10, 167, 3, 234, 138, 233, 15, 10, 167, 3, 232, 128, - 126, 195, 168, 20, 10, 167, 3, 232, 226, 126, 195, 168, 20, 10, 167, 3, - 202, 136, 126, 195, 168, 20, 10, 167, 3, 203, 247, 126, 195, 168, 20, 10, - 167, 3, 234, 164, 126, 195, 168, 20, 10, 167, 3, 213, 175, 126, 195, 168, - 20, 10, 208, 152, 3, 39, 250, 196, 193, 23, 236, 205, 10, 208, 152, 3, - 81, 242, 83, 10, 208, 152, 3, 237, 39, 242, 83, 10, 208, 152, 3, 237, 39, - 197, 237, 10, 208, 152, 3, 237, 39, 208, 29, 10, 3, 252, 156, 25, 212, - 131, 199, 84, 10, 3, 252, 156, 25, 203, 3, 10, 3, 252, 43, 25, 234, 9, - 10, 3, 249, 136, 25, 236, 223, 199, 84, 10, 3, 249, 122, 25, 252, 72, 10, - 3, 249, 122, 25, 213, 219, 10, 3, 249, 122, 25, 191, 123, 10, 3, 248, 11, - 139, 248, 11, 25, 214, 253, 10, 3, 238, 33, 25, 199, 209, 10, 3, 238, 23, - 25, 220, 197, 10, 3, 237, 0, 25, 223, 201, 10, 3, 237, 0, 25, 126, 126, - 66, 10, 3, 236, 254, 25, 196, 158, 10, 3, 235, 83, 25, 251, 91, 10, 3, - 235, 83, 25, 250, 209, 10, 3, 235, 83, 25, 250, 210, 250, 183, 219, 224, - 10, 3, 235, 83, 25, 236, 243, 10, 3, 235, 83, 25, 235, 75, 10, 3, 235, - 83, 25, 234, 28, 10, 3, 235, 83, 25, 231, 240, 10, 3, 235, 83, 25, 231, - 53, 10, 3, 235, 83, 25, 231, 33, 230, 155, 10, 3, 235, 83, 25, 231, 23, - 10, 3, 235, 83, 25, 140, 10, 3, 235, 83, 25, 229, 158, 10, 3, 235, 83, - 25, 223, 202, 230, 155, 10, 3, 235, 83, 25, 222, 54, 10, 3, 235, 83, 25, - 220, 197, 10, 3, 235, 83, 25, 220, 190, 10, 3, 235, 83, 25, 220, 191, - 108, 222, 54, 10, 3, 235, 83, 25, 220, 92, 10, 3, 235, 83, 25, 220, 35, - 10, 3, 235, 83, 25, 220, 36, 25, 220, 197, 10, 3, 235, 83, 25, 218, 214, - 108, 231, 23, 10, 3, 235, 83, 25, 217, 39, 10, 3, 235, 83, 25, 216, 173, - 10, 3, 235, 83, 25, 216, 100, 10, 3, 235, 83, 25, 213, 219, 10, 3, 235, - 83, 25, 209, 185, 10, 3, 235, 83, 25, 203, 113, 10, 3, 235, 83, 25, 202, - 223, 230, 155, 10, 3, 234, 219, 25, 220, 197, 10, 3, 234, 219, 25, 210, - 137, 10, 3, 234, 29, 192, 235, 10, 3, 234, 10, 238, 210, 234, 9, 10, 3, - 233, 181, 203, 95, 25, 250, 209, 10, 3, 233, 181, 203, 95, 25, 229, 158, - 10, 3, 233, 181, 203, 95, 25, 223, 202, 230, 155, 10, 3, 233, 181, 203, - 95, 25, 173, 10, 3, 233, 181, 203, 95, 25, 220, 37, 10, 3, 233, 181, 203, - 95, 25, 216, 232, 10, 3, 233, 181, 203, 95, 25, 216, 173, 10, 3, 233, - 181, 203, 95, 25, 201, 4, 10, 3, 233, 181, 25, 201, 4, 10, 3, 231, 239, - 25, 249, 121, 10, 3, 231, 239, 25, 237, 0, 230, 155, 10, 3, 231, 239, 25, - 235, 83, 25, 223, 202, 230, 155, 10, 3, 231, 239, 25, 235, 83, 25, 222, - 54, 10, 3, 231, 239, 25, 234, 31, 10, 3, 231, 239, 25, 231, 240, 10, 3, - 231, 239, 25, 231, 201, 108, 237, 44, 10, 3, 231, 239, 25, 231, 201, 108, - 214, 121, 10, 3, 231, 239, 25, 230, 105, 108, 65, 10, 3, 231, 239, 25, - 220, 191, 108, 222, 54, 10, 3, 231, 239, 25, 220, 35, 10, 3, 231, 239, - 25, 220, 36, 25, 220, 197, 10, 3, 231, 239, 25, 218, 213, 10, 3, 231, - 239, 25, 215, 101, 10, 3, 231, 239, 25, 214, 121, 10, 3, 231, 239, 25, - 214, 122, 108, 234, 218, 10, 3, 231, 239, 25, 214, 122, 108, 231, 53, 10, - 3, 231, 239, 25, 203, 73, 10, 3, 231, 239, 25, 191, 13, 10, 3, 231, 234, - 206, 122, 213, 170, 237, 124, 10, 3, 231, 135, 25, 66, 10, 3, 231, 24, - 25, 231, 24, 238, 210, 231, 23, 10, 3, 230, 178, 25, 223, 202, 230, 155, - 10, 3, 230, 169, 108, 231, 24, 25, 199, 209, 10, 3, 230, 105, 199, 85, - 230, 155, 10, 3, 229, 159, 25, 250, 210, 139, 229, 159, 25, 250, 209, 10, - 3, 222, 142, 25, 248, 10, 10, 3, 222, 142, 25, 155, 10, 3, 222, 142, 25, - 126, 126, 66, 10, 3, 222, 142, 25, 196, 62, 10, 3, 220, 105, 25, 190, - 252, 139, 190, 251, 10, 3, 220, 93, 10, 3, 220, 91, 10, 3, 220, 90, 10, - 3, 220, 89, 10, 3, 220, 88, 10, 3, 220, 87, 10, 3, 220, 86, 10, 3, 220, - 85, 139, 220, 85, 230, 155, 10, 3, 220, 84, 10, 3, 220, 83, 139, 220, 82, - 10, 3, 220, 81, 10, 3, 220, 80, 10, 3, 220, 79, 10, 3, 220, 78, 10, 3, - 220, 77, 10, 3, 220, 76, 10, 3, 220, 75, 10, 3, 220, 74, 10, 3, 220, 73, - 10, 3, 220, 72, 10, 3, 220, 71, 10, 3, 220, 70, 10, 3, 220, 69, 10, 3, - 220, 68, 10, 3, 220, 67, 10, 3, 220, 66, 10, 3, 220, 65, 10, 3, 220, 64, - 10, 3, 220, 62, 10, 3, 220, 63, 25, 230, 179, 10, 3, 220, 63, 25, 223, - 201, 10, 3, 220, 63, 25, 210, 138, 108, 218, 222, 10, 3, 220, 63, 25, - 210, 138, 108, 210, 138, 108, 218, 222, 10, 3, 220, 63, 25, 196, 170, - 108, 249, 153, 10, 3, 220, 61, 10, 3, 220, 60, 10, 3, 220, 59, 10, 3, - 220, 58, 10, 3, 220, 57, 10, 3, 220, 56, 10, 3, 220, 55, 10, 3, 220, 54, - 10, 3, 220, 53, 10, 3, 220, 52, 10, 3, 220, 50, 10, 3, 220, 51, 25, 250, - 209, 10, 3, 220, 51, 25, 249, 135, 10, 3, 220, 51, 25, 235, 74, 230, 156, - 230, 155, 10, 3, 220, 51, 25, 220, 223, 10, 3, 220, 51, 25, 173, 10, 3, - 220, 51, 25, 199, 179, 10, 3, 220, 51, 25, 199, 145, 10, 3, 220, 51, 25, - 196, 169, 10, 3, 220, 51, 25, 196, 158, 10, 3, 220, 51, 25, 196, 49, 10, - 3, 220, 49, 10, 3, 220, 47, 10, 3, 220, 48, 25, 235, 87, 10, 3, 220, 48, - 25, 231, 240, 10, 3, 220, 48, 25, 223, 201, 10, 3, 220, 48, 25, 223, 202, - 230, 155, 10, 3, 220, 48, 25, 213, 219, 10, 3, 220, 48, 25, 210, 138, - 108, 210, 138, 108, 218, 222, 10, 3, 220, 48, 25, 203, 98, 108, 221, 166, - 10, 3, 220, 48, 25, 196, 158, 10, 3, 220, 48, 25, 196, 49, 10, 3, 220, - 45, 10, 3, 220, 44, 10, 3, 218, 224, 230, 156, 25, 250, 209, 10, 3, 218, - 224, 25, 236, 222, 10, 3, 218, 224, 25, 230, 73, 10, 3, 218, 224, 25, - 210, 137, 10, 3, 218, 224, 25, 210, 138, 108, 210, 138, 108, 218, 222, - 10, 3, 218, 224, 25, 199, 209, 10, 3, 216, 101, 108, 191, 122, 10, 3, - 215, 102, 139, 215, 102, 25, 231, 240, 10, 3, 215, 102, 139, 215, 102, - 25, 222, 96, 10, 3, 213, 177, 25, 237, 0, 230, 155, 10, 3, 213, 177, 25, - 231, 23, 10, 3, 213, 177, 25, 230, 160, 10, 3, 213, 177, 25, 229, 158, - 10, 3, 213, 177, 25, 221, 242, 10, 3, 213, 177, 25, 220, 88, 10, 3, 213, - 177, 25, 217, 39, 10, 3, 213, 177, 25, 210, 138, 108, 210, 137, 10, 3, - 213, 177, 25, 66, 10, 3, 213, 177, 25, 126, 108, 66, 10, 3, 213, 177, 25, - 196, 49, 10, 3, 205, 186, 230, 156, 25, 140, 10, 3, 205, 186, 25, 234, - 103, 10, 3, 205, 186, 25, 203, 114, 250, 183, 219, 224, 10, 3, 205, 186, - 25, 199, 209, 10, 3, 203, 162, 199, 84, 10, 3, 203, 114, 139, 203, 113, - 10, 3, 203, 114, 108, 228, 151, 10, 3, 203, 114, 108, 214, 229, 10, 3, - 203, 114, 108, 205, 127, 10, 3, 203, 4, 108, 235, 83, 25, 213, 219, 10, - 3, 203, 4, 108, 234, 219, 25, 251, 132, 10, 3, 202, 223, 25, 199, 209, - 10, 3, 199, 210, 108, 205, 185, 10, 3, 197, 77, 25, 231, 209, 199, 84, - 10, 3, 197, 77, 25, 115, 236, 222, 10, 3, 196, 61, 223, 92, 10, 3, 196, - 61, 25, 196, 158, 10, 3, 196, 52, 25, 237, 224, 10, 3, 196, 52, 25, 220, - 46, 10, 3, 196, 52, 25, 218, 222, 10, 3, 191, 122, 10, 3, 190, 252, 139, - 190, 252, 108, 205, 127, 10, 3, 190, 250, 25, 115, 236, 223, 199, 84, - 238, 134, 3, 242, 198, 238, 134, 3, 242, 197, 238, 134, 3, 242, 196, 238, - 134, 3, 242, 195, 238, 134, 3, 242, 194, 238, 134, 3, 242, 193, 238, 134, - 3, 242, 192, 238, 134, 3, 242, 191, 238, 134, 3, 242, 190, 238, 134, 3, - 242, 189, 238, 134, 3, 242, 188, 238, 134, 3, 242, 187, 238, 134, 3, 242, - 186, 238, 134, 3, 242, 185, 238, 134, 3, 242, 184, 238, 134, 3, 242, 183, - 238, 134, 3, 242, 182, 238, 134, 3, 242, 181, 238, 134, 3, 242, 180, 238, - 134, 3, 242, 179, 238, 134, 3, 242, 178, 238, 134, 3, 242, 177, 238, 134, - 3, 242, 176, 238, 134, 3, 242, 175, 238, 134, 3, 242, 174, 238, 134, 3, - 242, 173, 238, 134, 3, 242, 172, 238, 134, 3, 242, 171, 238, 134, 3, 242, - 170, 238, 134, 3, 242, 169, 238, 134, 3, 242, 168, 238, 134, 3, 242, 167, - 238, 134, 3, 242, 166, 238, 134, 3, 242, 165, 238, 134, 3, 242, 164, 238, - 134, 3, 242, 163, 238, 134, 3, 242, 162, 238, 134, 3, 242, 161, 238, 134, - 3, 242, 160, 238, 134, 3, 242, 159, 238, 134, 3, 242, 158, 238, 134, 3, - 242, 157, 238, 134, 3, 242, 156, 238, 134, 3, 242, 155, 238, 134, 3, 242, - 154, 238, 134, 3, 242, 153, 238, 134, 3, 242, 152, 238, 134, 3, 242, 151, - 238, 134, 3, 242, 150, 238, 134, 3, 242, 149, 238, 134, 3, 242, 148, 238, - 134, 3, 242, 147, 238, 134, 3, 242, 146, 238, 134, 3, 242, 145, 238, 134, - 3, 242, 144, 238, 134, 3, 242, 143, 238, 134, 3, 242, 142, 238, 134, 3, - 242, 141, 238, 134, 3, 242, 140, 238, 134, 3, 242, 139, 238, 134, 3, 242, - 138, 238, 134, 3, 242, 137, 238, 134, 3, 242, 136, 238, 134, 3, 242, 135, - 238, 134, 3, 242, 134, 238, 134, 3, 242, 133, 238, 134, 3, 242, 132, 238, - 134, 3, 242, 131, 238, 134, 3, 242, 130, 238, 134, 3, 242, 129, 238, 134, - 3, 242, 128, 238, 134, 3, 242, 127, 238, 134, 3, 242, 126, 238, 134, 3, - 242, 125, 238, 134, 3, 242, 124, 238, 134, 3, 242, 123, 238, 134, 3, 242, - 122, 238, 134, 3, 242, 121, 238, 134, 3, 242, 120, 238, 134, 3, 242, 119, - 238, 134, 3, 242, 118, 238, 134, 3, 242, 117, 238, 134, 3, 242, 116, 238, - 134, 3, 242, 115, 238, 134, 3, 242, 114, 238, 134, 3, 242, 113, 238, 134, - 3, 242, 112, 238, 134, 3, 242, 111, 238, 134, 3, 242, 110, 238, 134, 3, - 242, 109, 238, 134, 3, 242, 108, 238, 134, 3, 242, 107, 238, 134, 3, 242, - 106, 238, 134, 3, 242, 105, 238, 134, 3, 242, 104, 238, 134, 3, 242, 103, - 238, 134, 3, 242, 102, 238, 134, 3, 242, 101, 238, 134, 3, 242, 100, 14, - 7, 255, 199, 14, 7, 255, 198, 14, 7, 255, 197, 14, 7, 255, 196, 14, 7, - 255, 195, 14, 7, 255, 194, 14, 7, 255, 193, 14, 7, 255, 192, 14, 7, 255, - 191, 14, 7, 255, 190, 14, 7, 255, 189, 14, 7, 255, 188, 14, 7, 255, 187, - 14, 7, 255, 185, 14, 7, 255, 184, 14, 7, 255, 183, 14, 7, 255, 182, 14, - 7, 255, 181, 14, 7, 255, 180, 14, 7, 255, 179, 14, 7, 255, 178, 14, 7, - 255, 177, 14, 7, 255, 176, 14, 7, 255, 175, 14, 7, 255, 174, 14, 7, 255, - 173, 14, 7, 255, 172, 14, 7, 255, 171, 14, 7, 255, 170, 14, 7, 255, 169, - 14, 7, 255, 168, 14, 7, 255, 166, 14, 7, 255, 165, 14, 7, 255, 163, 14, - 7, 255, 162, 14, 7, 255, 161, 14, 7, 255, 160, 14, 7, 255, 159, 14, 7, - 255, 158, 14, 7, 255, 157, 14, 7, 255, 156, 14, 7, 255, 155, 14, 7, 255, - 154, 14, 7, 255, 153, 14, 7, 255, 152, 14, 7, 255, 150, 14, 7, 255, 149, - 14, 7, 255, 148, 14, 7, 255, 146, 14, 7, 255, 145, 14, 7, 255, 144, 14, - 7, 255, 143, 14, 7, 255, 142, 14, 7, 255, 141, 14, 7, 255, 140, 14, 7, - 255, 139, 14, 7, 255, 136, 14, 7, 255, 135, 14, 7, 255, 134, 14, 7, 255, - 133, 14, 7, 255, 132, 14, 7, 255, 131, 14, 7, 255, 130, 14, 7, 255, 129, - 14, 7, 255, 128, 14, 7, 255, 127, 14, 7, 255, 126, 14, 7, 255, 125, 14, - 7, 255, 124, 14, 7, 255, 123, 14, 7, 255, 122, 14, 7, 255, 121, 14, 7, - 255, 120, 14, 7, 255, 119, 14, 7, 255, 118, 14, 7, 255, 117, 14, 7, 255, - 113, 14, 7, 255, 112, 14, 7, 255, 111, 14, 7, 255, 110, 14, 7, 250, 118, - 14, 7, 250, 116, 14, 7, 250, 114, 14, 7, 250, 112, 14, 7, 250, 110, 14, - 7, 250, 109, 14, 7, 250, 107, 14, 7, 250, 105, 14, 7, 250, 103, 14, 7, - 250, 101, 14, 7, 247, 189, 14, 7, 247, 188, 14, 7, 247, 187, 14, 7, 247, - 186, 14, 7, 247, 185, 14, 7, 247, 184, 14, 7, 247, 183, 14, 7, 247, 182, - 14, 7, 247, 181, 14, 7, 247, 180, 14, 7, 247, 179, 14, 7, 247, 178, 14, - 7, 247, 177, 14, 7, 247, 176, 14, 7, 247, 175, 14, 7, 247, 174, 14, 7, - 247, 173, 14, 7, 247, 172, 14, 7, 247, 171, 14, 7, 247, 170, 14, 7, 247, - 169, 14, 7, 247, 168, 14, 7, 247, 167, 14, 7, 247, 166, 14, 7, 247, 165, - 14, 7, 247, 164, 14, 7, 247, 163, 14, 7, 247, 162, 14, 7, 238, 126, 14, - 7, 238, 125, 14, 7, 238, 124, 14, 7, 238, 123, 14, 7, 238, 122, 14, 7, - 238, 121, 14, 7, 238, 120, 14, 7, 238, 119, 14, 7, 238, 118, 14, 7, 238, - 117, 14, 7, 238, 116, 14, 7, 238, 115, 14, 7, 238, 114, 14, 7, 238, 113, - 14, 7, 238, 112, 14, 7, 238, 111, 14, 7, 238, 110, 14, 7, 238, 109, 14, - 7, 238, 108, 14, 7, 238, 107, 14, 7, 238, 106, 14, 7, 238, 105, 14, 7, - 238, 104, 14, 7, 238, 103, 14, 7, 238, 102, 14, 7, 238, 101, 14, 7, 238, - 100, 14, 7, 238, 99, 14, 7, 238, 98, 14, 7, 238, 97, 14, 7, 238, 96, 14, - 7, 238, 95, 14, 7, 238, 94, 14, 7, 238, 93, 14, 7, 238, 92, 14, 7, 238, - 91, 14, 7, 238, 90, 14, 7, 238, 89, 14, 7, 238, 88, 14, 7, 238, 87, 14, - 7, 238, 86, 14, 7, 238, 85, 14, 7, 238, 84, 14, 7, 238, 83, 14, 7, 238, - 82, 14, 7, 238, 81, 14, 7, 238, 80, 14, 7, 238, 79, 14, 7, 238, 78, 14, - 7, 238, 77, 14, 7, 238, 76, 14, 7, 238, 75, 14, 7, 238, 74, 14, 7, 238, - 73, 14, 7, 238, 72, 14, 7, 238, 71, 14, 7, 238, 70, 14, 7, 238, 69, 14, - 7, 238, 68, 14, 7, 238, 67, 14, 7, 238, 66, 14, 7, 238, 65, 14, 7, 238, - 64, 14, 7, 238, 63, 14, 7, 238, 62, 14, 7, 238, 61, 14, 7, 238, 60, 14, - 7, 238, 59, 14, 7, 238, 58, 14, 7, 238, 57, 14, 7, 238, 56, 14, 7, 238, - 55, 14, 7, 238, 54, 14, 7, 238, 53, 14, 7, 238, 52, 14, 7, 238, 51, 14, - 7, 238, 50, 14, 7, 238, 49, 14, 7, 238, 48, 14, 7, 238, 47, 14, 7, 238, - 46, 14, 7, 238, 45, 14, 7, 238, 44, 14, 7, 238, 43, 14, 7, 238, 42, 14, - 7, 238, 41, 14, 7, 238, 40, 14, 7, 238, 39, 14, 7, 238, 38, 14, 7, 238, - 37, 14, 7, 238, 36, 14, 7, 238, 35, 14, 7, 235, 7, 14, 7, 235, 6, 14, 7, - 235, 5, 14, 7, 235, 4, 14, 7, 235, 3, 14, 7, 235, 2, 14, 7, 235, 1, 14, - 7, 235, 0, 14, 7, 234, 255, 14, 7, 234, 254, 14, 7, 234, 253, 14, 7, 234, - 252, 14, 7, 234, 251, 14, 7, 234, 250, 14, 7, 234, 249, 14, 7, 234, 248, - 14, 7, 234, 247, 14, 7, 234, 246, 14, 7, 234, 245, 14, 7, 234, 244, 14, - 7, 234, 243, 14, 7, 234, 242, 14, 7, 234, 241, 14, 7, 234, 240, 14, 7, - 234, 239, 14, 7, 234, 238, 14, 7, 234, 237, 14, 7, 234, 236, 14, 7, 234, - 235, 14, 7, 234, 234, 14, 7, 234, 233, 14, 7, 234, 232, 14, 7, 234, 231, - 14, 7, 234, 230, 14, 7, 234, 229, 14, 7, 234, 228, 14, 7, 234, 227, 14, - 7, 234, 226, 14, 7, 234, 225, 14, 7, 234, 224, 14, 7, 234, 223, 14, 7, - 234, 222, 14, 7, 234, 221, 14, 7, 234, 220, 14, 7, 233, 174, 14, 7, 233, - 173, 14, 7, 233, 172, 14, 7, 233, 171, 14, 7, 233, 170, 14, 7, 233, 169, - 14, 7, 233, 168, 14, 7, 233, 167, 14, 7, 233, 166, 14, 7, 233, 165, 14, - 7, 233, 164, 14, 7, 233, 163, 14, 7, 233, 162, 14, 7, 233, 161, 14, 7, - 233, 160, 14, 7, 233, 159, 14, 7, 233, 158, 14, 7, 233, 157, 14, 7, 233, - 156, 14, 7, 233, 155, 14, 7, 233, 154, 14, 7, 233, 153, 14, 7, 233, 152, - 14, 7, 233, 151, 14, 7, 233, 150, 14, 7, 233, 149, 14, 7, 233, 148, 14, - 7, 233, 147, 14, 7, 233, 146, 14, 7, 233, 145, 14, 7, 233, 144, 14, 7, - 233, 143, 14, 7, 233, 142, 14, 7, 233, 141, 14, 7, 233, 140, 14, 7, 233, - 139, 14, 7, 233, 138, 14, 7, 233, 137, 14, 7, 233, 136, 14, 7, 233, 135, - 14, 7, 233, 134, 14, 7, 233, 133, 14, 7, 233, 132, 14, 7, 233, 131, 14, - 7, 233, 130, 14, 7, 233, 129, 14, 7, 233, 128, 14, 7, 233, 127, 14, 7, - 233, 126, 14, 7, 233, 125, 14, 7, 233, 124, 14, 7, 233, 123, 14, 7, 233, - 122, 14, 7, 233, 121, 14, 7, 233, 120, 14, 7, 233, 119, 14, 7, 233, 118, - 14, 7, 233, 117, 14, 7, 233, 116, 14, 7, 233, 115, 14, 7, 233, 114, 14, - 7, 233, 113, 14, 7, 233, 112, 14, 7, 233, 111, 14, 7, 233, 110, 14, 7, - 232, 50, 14, 7, 232, 49, 14, 7, 232, 48, 14, 7, 232, 47, 14, 7, 232, 46, - 14, 7, 232, 45, 14, 7, 232, 44, 14, 7, 232, 43, 14, 7, 232, 42, 14, 7, - 232, 41, 14, 7, 232, 40, 14, 7, 232, 39, 14, 7, 232, 38, 14, 7, 232, 37, - 14, 7, 232, 36, 14, 7, 232, 35, 14, 7, 232, 34, 14, 7, 232, 33, 14, 7, - 232, 32, 14, 7, 232, 31, 14, 7, 232, 30, 14, 7, 232, 29, 14, 7, 232, 28, - 14, 7, 232, 27, 14, 7, 232, 26, 14, 7, 232, 25, 14, 7, 232, 24, 14, 7, - 232, 23, 14, 7, 232, 22, 14, 7, 232, 21, 14, 7, 232, 20, 14, 7, 232, 19, - 14, 7, 232, 18, 14, 7, 232, 17, 14, 7, 232, 16, 14, 7, 232, 15, 14, 7, - 232, 14, 14, 7, 232, 13, 14, 7, 232, 12, 14, 7, 232, 11, 14, 7, 232, 10, - 14, 7, 232, 9, 14, 7, 232, 8, 14, 7, 232, 7, 14, 7, 232, 6, 14, 7, 232, - 5, 14, 7, 232, 4, 14, 7, 232, 3, 14, 7, 232, 2, 14, 7, 232, 1, 14, 7, - 232, 0, 14, 7, 231, 255, 14, 7, 231, 254, 14, 7, 231, 253, 14, 7, 231, - 252, 14, 7, 231, 251, 14, 7, 231, 250, 14, 7, 231, 249, 14, 7, 231, 248, - 14, 7, 231, 247, 14, 7, 231, 246, 14, 7, 231, 245, 14, 7, 231, 244, 14, - 7, 231, 243, 14, 7, 230, 114, 14, 7, 230, 113, 14, 7, 230, 112, 14, 7, - 230, 111, 14, 7, 230, 110, 14, 7, 230, 109, 14, 7, 230, 108, 14, 7, 230, - 107, 14, 7, 230, 106, 14, 7, 228, 54, 14, 7, 228, 53, 14, 7, 228, 52, 14, - 7, 228, 51, 14, 7, 228, 50, 14, 7, 228, 49, 14, 7, 228, 48, 14, 7, 228, - 47, 14, 7, 228, 46, 14, 7, 228, 45, 14, 7, 228, 44, 14, 7, 228, 43, 14, - 7, 228, 42, 14, 7, 228, 41, 14, 7, 228, 40, 14, 7, 228, 39, 14, 7, 228, - 38, 14, 7, 228, 37, 14, 7, 228, 36, 14, 7, 222, 151, 14, 7, 222, 150, 14, - 7, 222, 149, 14, 7, 222, 148, 14, 7, 222, 147, 14, 7, 222, 146, 14, 7, - 222, 145, 14, 7, 222, 144, 14, 7, 220, 140, 14, 7, 220, 139, 14, 7, 220, - 138, 14, 7, 220, 137, 14, 7, 220, 136, 14, 7, 220, 135, 14, 7, 220, 134, - 14, 7, 220, 133, 14, 7, 220, 132, 14, 7, 220, 131, 14, 7, 218, 166, 14, - 7, 218, 165, 14, 7, 218, 164, 14, 7, 218, 162, 14, 7, 218, 160, 14, 7, - 218, 159, 14, 7, 218, 157, 14, 7, 218, 155, 14, 7, 218, 153, 14, 7, 218, - 151, 14, 7, 218, 149, 14, 7, 218, 147, 14, 7, 218, 145, 14, 7, 218, 144, - 14, 7, 218, 142, 14, 7, 218, 140, 14, 7, 218, 139, 14, 7, 218, 138, 14, - 7, 218, 137, 14, 7, 218, 136, 14, 7, 218, 135, 14, 7, 218, 134, 14, 7, - 218, 133, 14, 7, 218, 132, 14, 7, 218, 130, 14, 7, 218, 128, 14, 7, 218, - 126, 14, 7, 218, 125, 14, 7, 218, 123, 14, 7, 218, 122, 14, 7, 218, 120, - 14, 7, 218, 119, 14, 7, 218, 117, 14, 7, 218, 115, 14, 7, 218, 113, 14, - 7, 218, 111, 14, 7, 218, 109, 14, 7, 218, 108, 14, 7, 218, 106, 14, 7, - 218, 104, 14, 7, 218, 103, 14, 7, 218, 101, 14, 7, 218, 99, 14, 7, 218, - 97, 14, 7, 218, 95, 14, 7, 218, 94, 14, 7, 218, 92, 14, 7, 218, 90, 14, - 7, 218, 88, 14, 7, 218, 87, 14, 7, 218, 85, 14, 7, 218, 83, 14, 7, 218, - 82, 14, 7, 218, 81, 14, 7, 218, 79, 14, 7, 218, 77, 14, 7, 218, 75, 14, - 7, 218, 73, 14, 7, 218, 71, 14, 7, 218, 69, 14, 7, 218, 67, 14, 7, 218, - 66, 14, 7, 218, 64, 14, 7, 218, 62, 14, 7, 218, 60, 14, 7, 218, 58, 14, - 7, 215, 56, 14, 7, 215, 55, 14, 7, 215, 54, 14, 7, 215, 53, 14, 7, 215, - 52, 14, 7, 215, 51, 14, 7, 215, 50, 14, 7, 215, 49, 14, 7, 215, 48, 14, - 7, 215, 47, 14, 7, 215, 46, 14, 7, 215, 45, 14, 7, 215, 44, 14, 7, 215, - 43, 14, 7, 215, 42, 14, 7, 215, 41, 14, 7, 215, 40, 14, 7, 215, 39, 14, - 7, 215, 38, 14, 7, 215, 37, 14, 7, 215, 36, 14, 7, 215, 35, 14, 7, 215, - 34, 14, 7, 215, 33, 14, 7, 215, 32, 14, 7, 215, 31, 14, 7, 215, 30, 14, - 7, 215, 29, 14, 7, 215, 28, 14, 7, 215, 27, 14, 7, 215, 26, 14, 7, 215, - 25, 14, 7, 215, 24, 14, 7, 215, 23, 14, 7, 215, 22, 14, 7, 215, 21, 14, - 7, 215, 20, 14, 7, 215, 19, 14, 7, 215, 18, 14, 7, 215, 17, 14, 7, 215, - 16, 14, 7, 215, 15, 14, 7, 215, 14, 14, 7, 215, 13, 14, 7, 215, 12, 14, - 7, 215, 11, 14, 7, 215, 10, 14, 7, 215, 9, 14, 7, 215, 8, 14, 7, 213, - 104, 14, 7, 213, 103, 14, 7, 213, 102, 14, 7, 213, 101, 14, 7, 213, 100, - 14, 7, 213, 99, 14, 7, 213, 98, 14, 7, 213, 97, 14, 7, 213, 96, 14, 7, - 213, 95, 14, 7, 213, 94, 14, 7, 213, 93, 14, 7, 213, 92, 14, 7, 213, 91, - 14, 7, 213, 90, 14, 7, 213, 89, 14, 7, 213, 88, 14, 7, 213, 87, 14, 7, - 213, 86, 14, 7, 213, 85, 14, 7, 213, 84, 14, 7, 213, 83, 14, 7, 212, 174, - 14, 7, 212, 173, 14, 7, 212, 172, 14, 7, 212, 171, 14, 7, 212, 170, 14, - 7, 212, 169, 14, 7, 212, 168, 14, 7, 212, 167, 14, 7, 212, 166, 14, 7, - 212, 165, 14, 7, 212, 164, 14, 7, 212, 163, 14, 7, 212, 162, 14, 7, 212, - 161, 14, 7, 212, 160, 14, 7, 212, 159, 14, 7, 212, 158, 14, 7, 212, 157, - 14, 7, 212, 156, 14, 7, 212, 155, 14, 7, 212, 154, 14, 7, 212, 153, 14, - 7, 212, 152, 14, 7, 212, 151, 14, 7, 212, 150, 14, 7, 212, 149, 14, 7, - 212, 2, 14, 7, 212, 1, 14, 7, 212, 0, 14, 7, 211, 255, 14, 7, 211, 254, - 14, 7, 211, 253, 14, 7, 211, 252, 14, 7, 211, 251, 14, 7, 211, 250, 14, - 7, 211, 249, 14, 7, 211, 248, 14, 7, 211, 247, 14, 7, 211, 246, 14, 7, - 211, 245, 14, 7, 211, 244, 14, 7, 211, 243, 14, 7, 211, 242, 14, 7, 211, - 241, 14, 7, 211, 240, 14, 7, 211, 239, 14, 7, 211, 238, 14, 7, 211, 237, - 14, 7, 211, 236, 14, 7, 211, 235, 14, 7, 211, 234, 14, 7, 211, 233, 14, - 7, 211, 232, 14, 7, 211, 231, 14, 7, 211, 230, 14, 7, 211, 229, 14, 7, - 211, 228, 14, 7, 211, 227, 14, 7, 211, 226, 14, 7, 211, 225, 14, 7, 211, - 224, 14, 7, 211, 223, 14, 7, 211, 222, 14, 7, 211, 221, 14, 7, 211, 220, - 14, 7, 211, 219, 14, 7, 211, 218, 14, 7, 211, 217, 14, 7, 211, 216, 14, - 7, 211, 215, 14, 7, 211, 214, 14, 7, 211, 213, 14, 7, 211, 212, 14, 7, - 211, 211, 14, 7, 211, 210, 14, 7, 211, 209, 14, 7, 211, 208, 14, 7, 211, - 207, 14, 7, 211, 206, 14, 7, 211, 205, 14, 7, 211, 204, 14, 7, 211, 203, - 14, 7, 211, 202, 14, 7, 211, 201, 14, 7, 211, 200, 14, 7, 211, 199, 14, - 7, 211, 198, 14, 7, 211, 197, 14, 7, 211, 196, 14, 7, 211, 195, 14, 7, - 211, 194, 14, 7, 211, 193, 14, 7, 211, 192, 14, 7, 211, 191, 14, 7, 211, - 190, 14, 7, 211, 189, 14, 7, 211, 188, 14, 7, 211, 187, 14, 7, 211, 186, - 14, 7, 211, 185, 14, 7, 211, 184, 14, 7, 210, 235, 14, 7, 210, 234, 14, - 7, 210, 233, 14, 7, 210, 232, 14, 7, 210, 231, 14, 7, 210, 230, 14, 7, - 210, 229, 14, 7, 210, 228, 14, 7, 210, 227, 14, 7, 210, 226, 14, 7, 210, - 225, 14, 7, 210, 224, 14, 7, 210, 223, 14, 7, 208, 103, 14, 7, 208, 102, - 14, 7, 208, 101, 14, 7, 208, 100, 14, 7, 208, 99, 14, 7, 208, 98, 14, 7, - 208, 97, 14, 7, 207, 220, 14, 7, 207, 219, 14, 7, 207, 218, 14, 7, 207, - 217, 14, 7, 207, 216, 14, 7, 207, 215, 14, 7, 207, 214, 14, 7, 207, 213, - 14, 7, 207, 212, 14, 7, 207, 211, 14, 7, 207, 210, 14, 7, 207, 209, 14, - 7, 207, 208, 14, 7, 207, 207, 14, 7, 207, 206, 14, 7, 207, 205, 14, 7, - 207, 204, 14, 7, 207, 203, 14, 7, 207, 202, 14, 7, 207, 201, 14, 7, 207, - 200, 14, 7, 207, 199, 14, 7, 207, 198, 14, 7, 207, 197, 14, 7, 207, 196, - 14, 7, 207, 195, 14, 7, 207, 194, 14, 7, 207, 193, 14, 7, 207, 192, 14, - 7, 207, 191, 14, 7, 207, 190, 14, 7, 207, 189, 14, 7, 207, 188, 14, 7, - 207, 187, 14, 7, 206, 5, 14, 7, 206, 4, 14, 7, 206, 3, 14, 7, 206, 2, 14, - 7, 206, 1, 14, 7, 206, 0, 14, 7, 205, 255, 14, 7, 205, 254, 14, 7, 205, - 253, 14, 7, 205, 252, 14, 7, 205, 251, 14, 7, 205, 250, 14, 7, 205, 249, - 14, 7, 205, 248, 14, 7, 205, 247, 14, 7, 205, 246, 14, 7, 205, 245, 14, - 7, 205, 244, 14, 7, 205, 243, 14, 7, 205, 242, 14, 7, 205, 241, 14, 7, - 205, 240, 14, 7, 205, 239, 14, 7, 205, 238, 14, 7, 205, 237, 14, 7, 205, - 236, 14, 7, 205, 235, 14, 7, 205, 234, 14, 7, 205, 233, 14, 7, 205, 232, - 14, 7, 205, 231, 14, 7, 205, 230, 14, 7, 205, 229, 14, 7, 205, 228, 14, - 7, 205, 227, 14, 7, 205, 226, 14, 7, 205, 225, 14, 7, 205, 224, 14, 7, - 205, 223, 14, 7, 205, 222, 14, 7, 205, 221, 14, 7, 205, 220, 14, 7, 205, - 219, 14, 7, 205, 218, 14, 7, 205, 217, 14, 7, 205, 216, 14, 7, 205, 215, - 14, 7, 205, 214, 14, 7, 205, 213, 14, 7, 205, 212, 14, 7, 205, 211, 14, - 7, 205, 210, 14, 7, 205, 209, 14, 7, 205, 208, 14, 7, 200, 40, 14, 7, + 106, 51, 1, 195, 188, 191, 106, 51, 1, 203, 166, 191, 106, 51, 1, 201, + 176, 191, 106, 51, 1, 188, 191, 106, 51, 1, 140, 191, 106, 51, 1, 220, + 248, 191, 106, 51, 53, 120, 77, 191, 106, 51, 3, 195, 40, 191, 106, 51, + 3, 247, 121, 191, 106, 51, 3, 247, 122, 4, 211, 44, 191, 106, 51, 3, 247, + 124, 4, 211, 44, 191, 106, 51, 3, 251, 73, 191, 106, 51, 3, 195, 35, 191, + 106, 51, 242, 203, 1, 165, 191, 106, 51, 242, 204, 1, 170, 191, 106, 51, + 242, 204, 1, 165, 191, 106, 51, 242, 204, 1, 173, 191, 106, 51, 242, 204, + 1, 195, 188, 191, 106, 51, 89, 229, 238, 77, 191, 106, 51, 242, 217, 229, + 238, 77, 191, 106, 51, 87, 197, 152, 191, 106, 51, 87, 203, 158, 191, + 106, 51, 87, 55, 203, 158, 191, 106, 51, 87, 180, 197, 152, 191, 106, 51, + 89, 235, 132, 229, 238, 77, 191, 106, 51, 242, 217, 235, 132, 229, 238, + 77, 191, 106, 51, 200, 239, 201, 252, 1, 65, 201, 252, 18, 3, 68, 201, + 252, 18, 3, 196, 152, 201, 252, 18, 3, 66, 201, 252, 18, 3, 71, 201, 252, + 18, 3, 74, 201, 252, 18, 3, 211, 153, 201, 252, 18, 3, 251, 238, 201, + 252, 18, 3, 250, 165, 201, 252, 18, 3, 117, 146, 201, 252, 18, 3, 117, + 172, 201, 252, 18, 219, 200, 77, 201, 252, 1, 155, 201, 252, 1, 221, 217, + 201, 252, 1, 231, 242, 201, 252, 1, 231, 93, 201, 252, 1, 214, 70, 201, + 252, 1, 247, 162, 201, 252, 1, 247, 3, 201, 252, 1, 223, 34, 201, 252, 1, + 222, 254, 201, 252, 1, 212, 103, 201, 252, 1, 197, 132, 201, 252, 1, 197, + 120, 201, 252, 1, 237, 193, 201, 252, 1, 237, 177, 201, 252, 1, 213, 81, + 201, 252, 1, 190, 190, 201, 252, 1, 199, 49, 201, 252, 1, 238, 34, 201, + 252, 1, 237, 70, 201, 252, 1, 181, 201, 252, 1, 168, 201, 252, 1, 209, + 230, 201, 252, 1, 249, 155, 201, 252, 1, 248, 205, 201, 252, 1, 174, 201, + 252, 1, 197, 168, 201, 252, 1, 197, 157, 201, 252, 1, 235, 37, 201, 252, + 1, 191, 71, 201, 252, 1, 191, 123, 201, 252, 1, 255, 216, 201, 252, 1, + 170, 201, 252, 1, 165, 201, 252, 1, 173, 201, 252, 1, 195, 188, 201, 252, + 1, 203, 166, 201, 252, 1, 201, 176, 201, 252, 1, 188, 201, 252, 1, 140, + 201, 252, 1, 220, 248, 201, 252, 3, 222, 239, 201, 252, 3, 196, 75, 201, + 252, 242, 203, 1, 165, 201, 252, 242, 203, 1, 173, 201, 252, 242, 203, 1, + 203, 166, 201, 252, 242, 203, 1, 188, 201, 252, 53, 120, 3, 232, 53, 201, + 252, 53, 120, 3, 222, 154, 201, 252, 53, 120, 3, 214, 72, 201, 252, 53, + 120, 3, 238, 129, 201, 252, 53, 120, 3, 215, 63, 201, 252, 53, 120, 3, + 250, 122, 201, 252, 53, 120, 3, 218, 170, 201, 252, 53, 120, 3, 146, 201, + 252, 53, 120, 3, 172, 201, 252, 53, 120, 3, 203, 168, 201, 252, 53, 120, + 3, 206, 9, 201, 252, 53, 120, 3, 255, 216, 201, 252, 3, 251, 73, 201, + 252, 3, 195, 35, 201, 252, 231, 155, 77, 201, 252, 200, 239, 201, 252, + 87, 197, 152, 201, 252, 87, 203, 158, 201, 252, 87, 55, 203, 158, 201, + 252, 87, 209, 81, 201, 252, 229, 238, 87, 4, 215, 208, 23, 200, 199, 23, + 197, 225, 232, 212, 201, 252, 229, 238, 87, 4, 215, 208, 23, 200, 199, + 23, 232, 212, 201, 252, 229, 238, 87, 4, 215, 208, 23, 200, 198, 201, + 252, 199, 81, 217, 57, 201, 252, 199, 81, 217, 56, 21, 22, 214, 209, 229, + 160, 21, 22, 214, 209, 229, 132, 21, 22, 214, 209, 229, 25, 21, 22, 214, + 209, 228, 254, 21, 22, 214, 209, 140, 21, 22, 214, 209, 230, 93, 21, 22, + 214, 209, 203, 16, 21, 22, 214, 209, 203, 15, 21, 22, 214, 209, 203, 12, + 21, 22, 214, 209, 203, 11, 21, 22, 214, 209, 203, 18, 21, 22, 214, 209, + 203, 17, 21, 22, 201, 238, 21, 22, 201, 225, 21, 22, 201, 208, 21, 22, + 201, 250, 210, 83, 243, 17, 230, 5, 1, 168, 210, 83, 243, 17, 230, 5, 1, + 155, 210, 83, 243, 17, 230, 5, 1, 173, 210, 83, 243, 17, 230, 5, 1, 174, + 210, 83, 243, 17, 230, 5, 1, 238, 34, 210, 83, 243, 17, 230, 5, 1, 191, + 123, 210, 83, 243, 17, 230, 5, 1, 195, 188, 210, 83, 243, 17, 230, 5, 1, + 214, 70, 210, 83, 243, 17, 230, 5, 1, 140, 210, 83, 243, 17, 230, 5, 1, + 231, 242, 210, 83, 243, 17, 230, 5, 1, 221, 217, 210, 83, 243, 17, 230, + 5, 1, 188, 210, 83, 243, 17, 230, 5, 1, 249, 155, 210, 83, 243, 17, 230, + 5, 1, 247, 162, 210, 83, 243, 17, 230, 5, 1, 190, 190, 210, 83, 243, 17, + 230, 5, 1, 199, 49, 210, 83, 243, 17, 230, 5, 1, 181, 210, 83, 243, 17, + 230, 5, 1, 209, 230, 210, 83, 243, 17, 230, 5, 1, 165, 210, 83, 243, 17, + 230, 5, 1, 233, 111, 210, 83, 243, 17, 230, 5, 1, 247, 3, 210, 83, 243, + 17, 230, 5, 1, 65, 210, 83, 243, 17, 230, 5, 1, 71, 210, 83, 243, 17, + 230, 5, 1, 68, 210, 83, 243, 17, 230, 5, 1, 74, 210, 83, 243, 17, 230, 5, + 1, 66, 210, 83, 243, 17, 230, 5, 1, 196, 168, 210, 83, 243, 17, 230, 5, + 1, 228, 37, 210, 83, 243, 17, 230, 5, 1, 53, 210, 238, 210, 83, 243, 17, + 230, 5, 1, 53, 222, 154, 210, 83, 243, 17, 230, 5, 1, 53, 200, 43, 210, + 83, 243, 17, 230, 5, 1, 53, 218, 170, 210, 83, 243, 17, 230, 5, 1, 53, + 215, 63, 210, 83, 243, 17, 230, 5, 1, 53, 172, 210, 83, 243, 17, 230, 5, + 1, 53, 193, 224, 210, 83, 243, 17, 230, 5, 1, 53, 214, 72, 210, 83, 243, + 17, 230, 5, 1, 53, 192, 159, 210, 83, 243, 17, 230, 5, 206, 181, 163, + 219, 21, 210, 83, 243, 17, 230, 5, 206, 181, 198, 79, 210, 83, 243, 17, + 230, 5, 205, 139, 231, 13, 201, 64, 210, 83, 243, 17, 230, 5, 206, 181, + 163, 180, 233, 1, 210, 83, 243, 17, 230, 5, 206, 181, 163, 233, 1, 210, + 83, 243, 17, 230, 5, 205, 139, 231, 13, 201, 65, 233, 1, 210, 83, 243, + 17, 230, 5, 205, 139, 163, 219, 21, 210, 83, 243, 17, 230, 5, 205, 139, + 198, 79, 210, 83, 243, 17, 230, 5, 205, 139, 163, 180, 233, 1, 210, 83, + 243, 17, 230, 5, 205, 139, 163, 233, 1, 210, 83, 243, 17, 230, 5, 216, + 87, 198, 79, 210, 83, 243, 17, 230, 5, 231, 13, 201, 65, 195, 167, 210, + 83, 243, 17, 230, 5, 216, 87, 163, 180, 233, 1, 210, 83, 243, 17, 230, 5, + 216, 87, 163, 233, 1, 210, 83, 243, 17, 230, 5, 218, 241, 163, 219, 21, + 210, 83, 243, 17, 230, 5, 218, 241, 198, 79, 210, 83, 243, 17, 230, 5, + 231, 13, 201, 64, 210, 83, 243, 17, 230, 5, 218, 241, 163, 180, 233, 1, + 210, 83, 243, 17, 230, 5, 218, 241, 163, 233, 1, 210, 83, 243, 17, 230, + 5, 231, 13, 201, 65, 233, 1, 100, 229, 238, 77, 100, 229, 238, 87, 4, + 229, 229, 100, 3, 248, 201, 100, 3, 248, 202, 4, 102, 100, 3, 233, 207, + 248, 201, 100, 3, 233, 207, 248, 202, 4, 102, 100, 3, 193, 102, 232, 227, + 248, 201, 100, 3, 193, 102, 213, 176, 248, 201, 100, 3, 207, 19, 213, + 176, 248, 201, 100, 3, 216, 45, 248, 203, 1, 65, 248, 203, 1, 252, 208, + 248, 203, 1, 68, 248, 203, 1, 223, 201, 248, 203, 1, 66, 248, 203, 1, + 196, 30, 248, 203, 1, 117, 146, 248, 203, 1, 117, 206, 111, 248, 203, 1, + 117, 172, 248, 203, 1, 71, 248, 203, 1, 251, 238, 248, 203, 1, 74, 248, + 203, 1, 250, 165, 248, 203, 1, 155, 248, 203, 1, 221, 217, 248, 203, 1, + 231, 242, 248, 203, 1, 231, 93, 248, 203, 1, 214, 70, 248, 203, 1, 247, + 162, 248, 203, 1, 247, 3, 248, 203, 1, 223, 34, 248, 203, 1, 222, 254, + 248, 203, 1, 212, 103, 248, 203, 1, 197, 132, 248, 203, 1, 197, 120, 248, + 203, 1, 237, 193, 248, 203, 1, 237, 177, 248, 203, 1, 213, 81, 248, 203, + 1, 190, 190, 248, 203, 1, 199, 49, 248, 203, 1, 238, 34, 248, 203, 1, + 237, 70, 248, 203, 1, 181, 248, 203, 1, 168, 248, 203, 1, 209, 230, 248, + 203, 1, 249, 155, 248, 203, 1, 248, 205, 248, 203, 1, 174, 248, 203, 1, + 170, 248, 203, 1, 165, 248, 203, 1, 173, 248, 203, 1, 195, 188, 248, 203, + 1, 203, 166, 248, 203, 1, 201, 176, 248, 203, 1, 188, 248, 203, 1, 140, + 248, 203, 18, 3, 252, 208, 248, 203, 18, 3, 68, 248, 203, 18, 3, 223, + 201, 248, 203, 18, 3, 66, 248, 203, 18, 3, 196, 30, 248, 203, 18, 3, 117, + 146, 248, 203, 18, 3, 117, 206, 111, 248, 203, 18, 3, 117, 172, 248, 203, + 18, 3, 71, 248, 203, 18, 3, 251, 238, 248, 203, 18, 3, 74, 248, 203, 18, + 3, 250, 165, 248, 203, 3, 247, 121, 248, 203, 3, 251, 73, 248, 203, 3, + 195, 35, 248, 203, 3, 195, 40, 248, 203, 3, 250, 147, 248, 203, 237, 240, + 248, 203, 55, 237, 240, 248, 203, 193, 23, 204, 11, 248, 203, 231, 206, + 233, 4, 248, 203, 231, 206, 233, 3, 248, 203, 17, 191, 77, 248, 203, 17, + 107, 248, 203, 17, 109, 248, 203, 17, 138, 248, 203, 17, 134, 248, 203, + 17, 150, 248, 203, 17, 169, 248, 203, 17, 175, 248, 203, 17, 171, 248, + 203, 17, 178, 248, 203, 31, 107, 248, 203, 31, 109, 248, 203, 31, 138, + 248, 203, 31, 134, 248, 203, 31, 150, 248, 203, 31, 169, 248, 203, 31, + 175, 248, 203, 31, 171, 248, 203, 31, 178, 248, 203, 31, 199, 95, 248, + 203, 31, 197, 32, 248, 203, 31, 198, 249, 248, 203, 31, 232, 137, 248, + 203, 31, 233, 17, 248, 203, 31, 202, 121, 248, 203, 31, 203, 242, 248, + 203, 31, 234, 155, 248, 203, 31, 213, 171, 248, 203, 228, 141, 196, 91, + 77, 217, 59, 229, 238, 77, 217, 59, 87, 203, 158, 217, 59, 1, 155, 217, + 59, 1, 221, 217, 217, 59, 1, 231, 242, 217, 59, 1, 214, 70, 217, 59, 1, + 247, 162, 217, 59, 1, 247, 3, 217, 59, 1, 223, 34, 217, 59, 1, 212, 103, + 217, 59, 1, 190, 190, 217, 59, 1, 199, 49, 217, 59, 1, 238, 34, 217, 59, + 1, 181, 217, 59, 1, 168, 217, 59, 1, 209, 230, 217, 59, 1, 249, 155, 217, + 59, 1, 174, 217, 59, 1, 197, 168, 217, 59, 1, 197, 157, 217, 59, 1, 235, + 37, 217, 59, 1, 193, 190, 217, 59, 1, 191, 71, 217, 59, 1, 191, 123, 217, + 59, 1, 255, 216, 217, 59, 1, 170, 217, 59, 1, 165, 217, 59, 1, 173, 217, + 59, 1, 203, 166, 217, 59, 1, 188, 217, 59, 1, 140, 217, 59, 1, 65, 217, + 59, 200, 240, 1, 155, 217, 59, 200, 240, 1, 221, 217, 217, 59, 200, 240, + 1, 231, 242, 217, 59, 200, 240, 1, 214, 70, 217, 59, 200, 240, 1, 247, + 162, 217, 59, 200, 240, 1, 247, 3, 217, 59, 200, 240, 1, 223, 34, 217, + 59, 200, 240, 1, 212, 103, 217, 59, 200, 240, 1, 190, 190, 217, 59, 200, + 240, 1, 199, 49, 217, 59, 200, 240, 1, 238, 34, 217, 59, 200, 240, 1, + 181, 217, 59, 200, 240, 1, 168, 217, 59, 200, 240, 1, 209, 230, 217, 59, + 200, 240, 1, 249, 155, 217, 59, 200, 240, 1, 174, 217, 59, 200, 240, 1, + 197, 168, 217, 59, 200, 240, 1, 197, 157, 217, 59, 200, 240, 1, 235, 37, + 217, 59, 200, 240, 1, 193, 190, 217, 59, 200, 240, 1, 191, 71, 217, 59, + 200, 240, 1, 191, 123, 217, 59, 200, 240, 1, 170, 217, 59, 200, 240, 1, + 165, 217, 59, 200, 240, 1, 173, 217, 59, 200, 240, 1, 203, 166, 217, 59, + 200, 240, 1, 188, 217, 59, 200, 240, 1, 140, 217, 59, 200, 240, 1, 65, + 217, 59, 18, 3, 252, 208, 217, 59, 18, 3, 68, 217, 59, 18, 3, 66, 217, + 59, 18, 3, 71, 217, 59, 18, 3, 74, 217, 59, 3, 251, 73, 217, 59, 3, 247, + 121, 217, 43, 129, 1, 65, 217, 43, 129, 1, 252, 208, 217, 43, 129, 1, 68, + 217, 43, 129, 1, 223, 201, 217, 43, 129, 1, 66, 217, 43, 129, 1, 196, 30, + 217, 43, 129, 1, 71, 217, 43, 129, 1, 251, 238, 217, 43, 129, 1, 74, 217, + 43, 129, 1, 250, 165, 217, 43, 129, 1, 155, 217, 43, 129, 1, 221, 217, + 217, 43, 129, 1, 231, 242, 217, 43, 129, 1, 231, 93, 217, 43, 129, 1, + 214, 70, 217, 43, 129, 1, 247, 162, 217, 43, 129, 1, 247, 3, 217, 43, + 129, 1, 223, 34, 217, 43, 129, 1, 222, 254, 217, 43, 129, 1, 212, 103, + 217, 43, 129, 1, 197, 132, 217, 43, 129, 1, 197, 120, 217, 43, 129, 1, + 237, 193, 217, 43, 129, 1, 237, 177, 217, 43, 129, 1, 213, 81, 217, 43, + 129, 1, 190, 190, 217, 43, 129, 1, 199, 49, 217, 43, 129, 1, 238, 34, + 217, 43, 129, 1, 237, 70, 217, 43, 129, 1, 181, 217, 43, 129, 1, 168, + 217, 43, 129, 1, 209, 230, 217, 43, 129, 1, 249, 155, 217, 43, 129, 1, + 248, 205, 217, 43, 129, 1, 174, 217, 43, 129, 1, 170, 217, 43, 129, 1, + 165, 217, 43, 129, 1, 173, 217, 43, 129, 1, 195, 188, 217, 43, 129, 1, + 203, 166, 217, 43, 129, 1, 201, 176, 217, 43, 129, 1, 188, 217, 43, 129, + 1, 140, 217, 43, 129, 1, 219, 75, 217, 43, 129, 1, 220, 248, 217, 43, + 129, 1, 222, 204, 217, 43, 129, 1, 198, 26, 217, 43, 129, 18, 3, 252, + 208, 217, 43, 129, 18, 3, 68, 217, 43, 129, 18, 3, 223, 201, 217, 43, + 129, 18, 3, 66, 217, 43, 129, 18, 3, 196, 30, 217, 43, 129, 18, 3, 117, + 146, 217, 43, 129, 18, 3, 71, 217, 43, 129, 18, 3, 251, 238, 217, 43, + 129, 18, 3, 74, 217, 43, 129, 18, 3, 250, 165, 217, 43, 129, 3, 251, 73, + 217, 43, 129, 3, 195, 35, 217, 43, 129, 3, 212, 143, 217, 43, 129, 3, + 247, 123, 217, 43, 129, 3, 230, 74, 217, 43, 129, 195, 40, 217, 43, 129, + 207, 45, 217, 43, 129, 207, 183, 217, 43, 129, 17, 191, 77, 217, 43, 129, + 17, 107, 217, 43, 129, 17, 109, 217, 43, 129, 17, 138, 217, 43, 129, 17, + 134, 217, 43, 129, 17, 150, 217, 43, 129, 17, 169, 217, 43, 129, 17, 175, + 217, 43, 129, 17, 171, 217, 43, 129, 17, 178, 230, 159, 129, 1, 65, 230, + 159, 129, 1, 252, 208, 230, 159, 129, 1, 68, 230, 159, 129, 1, 223, 201, + 230, 159, 129, 1, 66, 230, 159, 129, 1, 196, 30, 230, 159, 129, 1, 234, + 190, 230, 159, 129, 1, 251, 238, 230, 159, 129, 1, 211, 89, 230, 159, + 129, 1, 250, 165, 230, 159, 129, 1, 170, 230, 159, 129, 1, 195, 188, 230, + 159, 129, 1, 249, 155, 230, 159, 129, 1, 248, 205, 230, 159, 129, 1, 174, + 230, 159, 129, 1, 155, 230, 159, 129, 1, 221, 217, 230, 159, 129, 1, 190, + 190, 230, 159, 129, 1, 199, 49, 230, 159, 129, 1, 173, 230, 159, 129, 1, + 231, 242, 230, 159, 129, 1, 231, 93, 230, 159, 129, 1, 238, 34, 230, 159, + 129, 1, 237, 70, 230, 159, 129, 1, 181, 230, 159, 129, 1, 247, 162, 230, + 159, 129, 1, 247, 3, 230, 159, 129, 1, 197, 132, 230, 159, 129, 1, 197, + 120, 230, 159, 129, 1, 219, 75, 230, 159, 129, 1, 223, 34, 230, 159, 129, + 1, 222, 254, 230, 159, 129, 1, 237, 193, 230, 159, 129, 1, 237, 177, 230, + 159, 129, 1, 214, 70, 230, 159, 129, 1, 168, 230, 159, 129, 1, 209, 230, + 230, 159, 129, 1, 140, 230, 159, 129, 1, 165, 230, 159, 129, 1, 188, 230, + 159, 129, 18, 3, 252, 208, 230, 159, 129, 18, 3, 68, 230, 159, 129, 18, + 3, 223, 201, 230, 159, 129, 18, 3, 66, 230, 159, 129, 18, 3, 196, 30, + 230, 159, 129, 18, 3, 234, 190, 230, 159, 129, 18, 3, 251, 238, 230, 159, + 129, 18, 3, 211, 89, 230, 159, 129, 18, 3, 250, 165, 230, 159, 129, 3, + 251, 73, 230, 159, 129, 3, 195, 35, 230, 159, 129, 195, 40, 230, 159, + 129, 211, 115, 230, 159, 129, 17, 191, 77, 230, 159, 129, 17, 107, 230, + 159, 129, 17, 109, 230, 159, 129, 17, 138, 230, 159, 129, 17, 134, 230, + 159, 129, 17, 150, 230, 159, 129, 17, 169, 230, 159, 129, 17, 175, 230, + 159, 129, 17, 171, 230, 159, 129, 17, 178, 217, 104, 1, 155, 217, 104, 1, + 231, 242, 217, 104, 1, 214, 70, 217, 104, 1, 168, 217, 104, 1, 249, 155, + 217, 104, 1, 174, 217, 104, 1, 190, 190, 217, 104, 1, 238, 34, 217, 104, + 1, 181, 217, 104, 1, 247, 162, 217, 104, 1, 223, 34, 217, 104, 1, 212, + 103, 217, 104, 1, 170, 217, 104, 1, 165, 217, 104, 1, 173, 217, 104, 1, + 195, 188, 217, 104, 1, 188, 217, 104, 1, 65, 217, 104, 251, 120, 217, + 104, 18, 3, 68, 217, 104, 18, 3, 66, 217, 104, 18, 3, 71, 217, 104, 18, + 3, 74, 217, 104, 210, 96, 217, 104, 234, 97, 79, 205, 54, 222, 35, 3, + 247, 121, 222, 35, 3, 251, 73, 222, 35, 3, 207, 45, 222, 35, 3, 195, 35, + 222, 35, 1, 65, 222, 35, 1, 252, 208, 222, 35, 1, 68, 222, 35, 1, 223, + 201, 222, 35, 1, 66, 222, 35, 1, 196, 30, 222, 35, 1, 117, 146, 222, 35, + 1, 117, 206, 111, 222, 35, 1, 117, 172, 222, 35, 1, 117, 219, 76, 222, + 35, 1, 71, 222, 35, 1, 251, 238, 222, 35, 1, 74, 222, 35, 1, 155, 222, + 35, 1, 221, 217, 222, 35, 1, 231, 242, 222, 35, 1, 231, 93, 222, 35, 1, + 214, 70, 222, 35, 1, 247, 162, 222, 35, 1, 247, 3, 222, 35, 1, 223, 34, + 222, 35, 1, 222, 254, 222, 35, 1, 212, 103, 222, 35, 1, 197, 132, 222, + 35, 1, 197, 120, 222, 35, 1, 237, 193, 222, 35, 1, 237, 177, 222, 35, 1, + 213, 81, 222, 35, 1, 190, 190, 222, 35, 1, 199, 49, 222, 35, 1, 238, 34, + 222, 35, 1, 237, 70, 222, 35, 1, 181, 222, 35, 1, 168, 222, 35, 1, 209, + 230, 222, 35, 1, 249, 155, 222, 35, 1, 248, 205, 222, 35, 1, 174, 222, + 35, 1, 170, 222, 35, 1, 165, 222, 35, 1, 173, 222, 35, 1, 193, 190, 222, + 35, 1, 203, 166, 222, 35, 1, 201, 176, 222, 35, 1, 188, 222, 35, 1, 140, + 222, 35, 1, 222, 204, 222, 35, 18, 3, 252, 208, 222, 35, 18, 3, 251, 159, + 252, 208, 222, 35, 18, 3, 68, 222, 35, 18, 3, 223, 201, 222, 35, 18, 3, + 66, 222, 35, 18, 3, 196, 30, 222, 35, 18, 3, 117, 146, 222, 35, 18, 3, + 71, 222, 35, 18, 3, 251, 238, 222, 35, 18, 3, 233, 244, 222, 35, 3, 221, + 145, 222, 35, 239, 47, 222, 35, 237, 240, 222, 35, 55, 237, 240, 222, 35, + 208, 154, 205, 55, 217, 53, 222, 35, 208, 154, 251, 159, 205, 55, 217, + 53, 222, 35, 208, 154, 232, 188, 222, 35, 208, 154, 201, 249, 233, 5, + 222, 35, 208, 154, 236, 142, 222, 35, 208, 154, 55, 236, 142, 222, 35, + 208, 154, 197, 225, 236, 142, 222, 35, 208, 154, 243, 12, 222, 35, 208, + 154, 233, 6, 243, 12, 222, 35, 208, 154, 201, 218, 222, 35, 208, 154, + 242, 217, 201, 218, 222, 35, 17, 191, 77, 222, 35, 17, 107, 222, 35, 17, + 109, 222, 35, 17, 138, 222, 35, 17, 134, 222, 35, 17, 150, 222, 35, 17, + 169, 222, 35, 17, 175, 222, 35, 17, 171, 222, 35, 17, 178, 219, 90, 1, + 192, 35, 44, 232, 120, 91, 198, 222, 44, 232, 120, 91, 211, 102, 44, 232, + 120, 91, 234, 158, 44, 232, 120, 91, 202, 119, 44, 232, 120, 91, 232, + 141, 44, 232, 120, 91, 198, 245, 44, 232, 120, 115, 234, 157, 44, 232, + 120, 115, 202, 118, 44, 232, 120, 91, 197, 35, 44, 232, 120, 91, 202, + 128, 44, 232, 120, 91, 202, 127, 44, 232, 120, 91, 199, 86, 44, 232, 120, + 91, 234, 161, 44, 232, 120, 115, 197, 34, 44, 232, 120, 115, 202, 126, + 44, 232, 120, 91, 233, 20, 44, 232, 120, 91, 208, 24, 44, 232, 120, 91, + 230, 71, 44, 232, 120, 91, 230, 70, 44, 232, 120, 115, 208, 22, 44, 232, + 120, 235, 123, 233, 95, 221, 146, 44, 3, 214, 106, 44, 3, 247, 8, 44, 3, + 252, 159, 44, 3, 196, 15, 44, 3, 215, 92, 44, 3, 220, 196, 44, 3, 210, + 87, 44, 3, 215, 137, 44, 3, 222, 126, 44, 3, 210, 166, 44, 3, 209, 41, + 44, 3, 195, 173, 44, 3, 210, 217, 44, 3, 220, 185, 44, 3, 195, 143, 44, + 193, 101, 238, 189, 56, 44, 235, 94, 238, 189, 56, 44, 220, 25, 56, 44, + 205, 160, 210, 169, 56, 44, 198, 21, 238, 232, 56, 44, 198, 21, 31, 56, + 44, 238, 171, 56, 44, 23, 211, 157, 56, 44, 201, 228, 56, 44, 198, 39, + 56, 44, 223, 165, 209, 24, 56, 44, 201, 97, 232, 100, 56, 44, 3, 215, 96, + 44, 3, 195, 181, 44, 208, 154, 234, 97, 79, 199, 53, 10, 3, 65, 10, 3, + 42, 25, 65, 10, 3, 42, 25, 249, 137, 10, 3, 42, 25, 231, 211, 199, 84, + 10, 3, 42, 25, 140, 10, 3, 42, 25, 223, 203, 10, 3, 42, 25, 220, 105, + 230, 157, 10, 3, 42, 25, 215, 103, 10, 3, 42, 25, 205, 186, 10, 3, 254, + 217, 10, 3, 252, 157, 10, 3, 252, 158, 25, 250, 209, 10, 3, 252, 158, 25, + 235, 76, 230, 157, 10, 3, 252, 158, 25, 231, 224, 10, 3, 252, 158, 25, + 231, 211, 199, 84, 10, 3, 252, 158, 25, 140, 10, 3, 252, 158, 25, 223, + 204, 230, 157, 10, 3, 252, 158, 25, 223, 174, 10, 3, 252, 158, 25, 220, + 106, 10, 3, 252, 158, 25, 203, 98, 10, 3, 252, 158, 25, 126, 108, 126, + 108, 66, 10, 3, 252, 158, 230, 157, 10, 3, 252, 74, 10, 3, 252, 75, 25, + 249, 116, 10, 3, 252, 75, 25, 231, 211, 199, 84, 10, 3, 252, 75, 25, 216, + 235, 108, 234, 105, 10, 3, 252, 75, 25, 203, 164, 10, 3, 252, 75, 25, + 199, 209, 10, 3, 252, 44, 10, 3, 251, 218, 10, 3, 251, 219, 25, 234, 30, + 10, 3, 251, 219, 25, 203, 60, 108, 231, 25, 10, 3, 251, 209, 10, 3, 251, + 210, 25, 251, 209, 10, 3, 251, 210, 25, 236, 255, 10, 3, 251, 210, 25, + 231, 25, 10, 3, 251, 210, 25, 140, 10, 3, 251, 210, 25, 222, 113, 10, 3, + 251, 210, 25, 221, 168, 10, 3, 251, 210, 25, 203, 114, 10, 3, 251, 210, + 25, 196, 38, 10, 3, 251, 205, 10, 3, 251, 192, 10, 3, 251, 147, 10, 3, + 251, 148, 25, 203, 114, 10, 3, 251, 134, 10, 3, 251, 135, 139, 251, 134, + 10, 3, 251, 135, 115, 198, 144, 10, 3, 251, 135, 108, 214, 243, 211, 65, + 251, 135, 108, 214, 242, 10, 3, 251, 135, 108, 214, 243, 201, 190, 10, 3, + 251, 93, 10, 3, 251, 62, 10, 3, 251, 28, 10, 3, 251, 29, 25, 220, 199, + 10, 3, 251, 0, 10, 3, 250, 217, 10, 3, 250, 211, 10, 3, 250, 212, 191, + 26, 199, 84, 10, 3, 250, 212, 222, 118, 199, 84, 10, 3, 250, 212, 139, + 250, 212, 197, 83, 139, 197, 83, 197, 83, 139, 197, 83, 210, 139, 10, 3, + 250, 212, 139, 250, 212, 139, 250, 211, 10, 3, 250, 212, 139, 250, 212, + 139, 250, 212, 238, 212, 250, 212, 139, 250, 212, 139, 250, 211, 10, 3, + 250, 209, 10, 3, 250, 205, 10, 3, 249, 155, 10, 3, 249, 137, 10, 3, 249, + 131, 10, 3, 249, 123, 10, 3, 249, 117, 10, 3, 249, 118, 139, 249, 117, + 10, 3, 249, 116, 10, 3, 164, 10, 3, 249, 89, 10, 3, 248, 190, 10, 3, 248, + 191, 25, 65, 10, 3, 248, 191, 25, 231, 202, 10, 3, 248, 191, 25, 223, + 204, 230, 157, 10, 3, 248, 12, 10, 3, 248, 13, 139, 248, 13, 252, 157, + 10, 3, 248, 13, 139, 248, 13, 196, 113, 10, 3, 248, 13, 238, 212, 248, + 12, 10, 3, 247, 244, 10, 3, 247, 245, 139, 247, 244, 10, 3, 247, 232, 10, + 3, 247, 231, 10, 3, 238, 34, 10, 3, 238, 24, 10, 3, 238, 25, 221, 127, + 25, 42, 108, 217, 41, 10, 3, 238, 25, 221, 127, 25, 251, 147, 10, 3, 238, + 25, 221, 127, 25, 249, 116, 10, 3, 238, 25, 221, 127, 25, 248, 190, 10, + 3, 238, 25, 221, 127, 25, 231, 242, 10, 3, 238, 25, 221, 127, 25, 231, + 243, 108, 217, 41, 10, 3, 238, 25, 221, 127, 25, 231, 55, 10, 3, 238, 25, + 221, 127, 25, 231, 34, 10, 3, 238, 25, 221, 127, 25, 230, 170, 10, 3, + 238, 25, 221, 127, 25, 140, 10, 3, 238, 25, 221, 127, 25, 223, 79, 10, 3, + 238, 25, 221, 127, 25, 223, 80, 108, 218, 227, 10, 3, 238, 25, 221, 127, + 25, 222, 98, 10, 3, 238, 25, 221, 127, 25, 173, 10, 3, 238, 25, 221, 127, + 25, 218, 227, 10, 3, 238, 25, 221, 127, 25, 218, 228, 108, 217, 40, 10, + 3, 238, 25, 221, 127, 25, 218, 210, 10, 3, 238, 25, 221, 127, 25, 214, + 123, 10, 3, 238, 25, 221, 127, 25, 210, 140, 108, 210, 139, 10, 3, 238, + 25, 221, 127, 25, 202, 223, 10, 3, 238, 25, 221, 127, 25, 199, 209, 10, + 3, 238, 25, 221, 127, 25, 196, 170, 108, 231, 34, 10, 3, 238, 25, 221, + 127, 25, 196, 38, 10, 3, 237, 252, 10, 3, 237, 227, 10, 3, 237, 226, 10, + 3, 237, 225, 10, 3, 237, 46, 10, 3, 237, 28, 10, 3, 237, 1, 10, 3, 237, + 2, 25, 203, 114, 10, 3, 236, 255, 10, 3, 236, 245, 10, 3, 236, 246, 222, + 57, 126, 230, 158, 236, 224, 10, 3, 236, 224, 10, 3, 235, 91, 10, 3, 235, + 92, 139, 235, 91, 10, 3, 235, 92, 230, 157, 10, 3, 235, 92, 203, 95, 10, + 3, 235, 89, 10, 3, 235, 90, 25, 234, 11, 10, 3, 235, 88, 10, 3, 235, 84, + 10, 3, 235, 83, 10, 3, 235, 82, 10, 3, 235, 77, 10, 3, 235, 75, 10, 3, + 235, 76, 230, 157, 10, 3, 235, 76, 230, 158, 230, 157, 10, 3, 235, 74, + 10, 3, 235, 67, 10, 3, 71, 10, 3, 235, 17, 25, 210, 139, 10, 3, 235, 17, + 139, 235, 17, 212, 133, 139, 212, 132, 10, 3, 234, 220, 10, 3, 234, 221, + 25, 42, 108, 230, 107, 108, 238, 34, 10, 3, 234, 221, 25, 231, 202, 10, + 3, 234, 221, 25, 216, 102, 10, 3, 234, 221, 25, 205, 170, 10, 3, 234, + 221, 25, 203, 114, 10, 3, 234, 221, 25, 66, 10, 3, 234, 192, 10, 3, 234, + 179, 10, 3, 234, 142, 10, 3, 234, 105, 10, 3, 234, 106, 25, 231, 210, 10, + 3, 234, 106, 25, 231, 211, 199, 84, 10, 3, 234, 106, 25, 216, 234, 10, 3, + 234, 106, 238, 212, 234, 105, 10, 3, 234, 106, 211, 65, 234, 105, 10, 3, + 234, 106, 201, 190, 10, 3, 234, 33, 10, 3, 234, 30, 10, 3, 234, 11, 10, + 3, 233, 182, 10, 3, 233, 183, 25, 65, 10, 3, 233, 183, 25, 42, 108, 220, + 39, 10, 3, 233, 183, 25, 42, 108, 220, 40, 25, 220, 39, 10, 3, 233, 183, + 25, 251, 134, 10, 3, 233, 183, 25, 249, 137, 10, 3, 233, 183, 25, 235, + 76, 230, 157, 10, 3, 233, 183, 25, 235, 76, 230, 158, 230, 157, 10, 3, + 233, 183, 25, 140, 10, 3, 233, 183, 25, 230, 107, 230, 157, 10, 3, 233, + 183, 25, 223, 204, 230, 157, 10, 3, 233, 183, 25, 222, 56, 10, 3, 233, + 183, 25, 222, 57, 201, 190, 10, 3, 233, 183, 25, 220, 225, 10, 3, 233, + 183, 25, 173, 10, 3, 233, 183, 25, 220, 40, 25, 220, 39, 10, 3, 233, 183, + 25, 219, 148, 10, 3, 233, 183, 25, 218, 227, 10, 3, 233, 183, 25, 196, + 169, 10, 3, 233, 183, 25, 196, 158, 10, 3, 231, 242, 10, 3, 231, 243, + 230, 157, 10, 3, 231, 240, 10, 3, 231, 241, 25, 42, 108, 238, 35, 108, + 140, 10, 3, 231, 241, 25, 42, 108, 140, 10, 3, 231, 241, 25, 42, 108, + 223, 203, 10, 3, 231, 241, 25, 252, 75, 199, 85, 108, 199, 236, 10, 3, + 231, 241, 25, 251, 134, 10, 3, 231, 241, 25, 250, 211, 10, 3, 231, 241, + 25, 250, 210, 108, 231, 224, 10, 3, 231, 241, 25, 249, 137, 10, 3, 231, + 241, 25, 249, 90, 108, 165, 10, 3, 231, 241, 25, 247, 232, 10, 3, 231, + 241, 25, 247, 233, 108, 165, 10, 3, 231, 241, 25, 238, 34, 10, 3, 231, + 241, 25, 237, 46, 10, 3, 231, 241, 25, 237, 2, 25, 203, 114, 10, 3, 231, + 241, 25, 235, 89, 10, 3, 231, 241, 25, 234, 142, 10, 3, 231, 241, 25, + 234, 143, 108, 173, 10, 3, 231, 241, 25, 234, 105, 10, 3, 231, 241, 25, + 234, 106, 25, 231, 211, 199, 84, 10, 3, 231, 241, 25, 231, 211, 199, 84, + 10, 3, 231, 241, 25, 231, 202, 10, 3, 231, 241, 25, 231, 55, 10, 3, 231, + 241, 25, 231, 53, 10, 3, 231, 241, 25, 231, 54, 108, 65, 10, 3, 231, 241, + 25, 231, 35, 108, 201, 5, 10, 3, 231, 241, 25, 230, 107, 108, 218, 228, + 108, 234, 11, 10, 3, 231, 241, 25, 230, 75, 10, 3, 231, 241, 25, 230, 76, + 108, 173, 10, 3, 231, 241, 25, 229, 161, 108, 219, 148, 10, 3, 231, 241, + 25, 228, 153, 10, 3, 231, 241, 25, 223, 204, 230, 157, 10, 3, 231, 241, + 25, 223, 65, 108, 228, 162, 108, 250, 211, 10, 3, 231, 241, 25, 222, 98, + 10, 3, 231, 241, 25, 222, 56, 10, 3, 231, 241, 25, 221, 154, 10, 3, 231, + 241, 25, 221, 155, 108, 220, 39, 10, 3, 231, 241, 25, 220, 226, 108, 251, + 134, 10, 3, 231, 241, 25, 173, 10, 3, 231, 241, 25, 216, 235, 108, 234, + 105, 10, 3, 231, 241, 25, 216, 102, 10, 3, 231, 241, 25, 212, 132, 10, 3, + 231, 241, 25, 212, 133, 139, 212, 132, 10, 3, 231, 241, 25, 168, 10, 3, + 231, 241, 25, 205, 170, 10, 3, 231, 241, 25, 205, 128, 10, 3, 231, 241, + 25, 203, 114, 10, 3, 231, 241, 25, 203, 115, 108, 197, 64, 10, 3, 231, + 241, 25, 203, 80, 10, 3, 231, 241, 25, 200, 204, 10, 3, 231, 241, 25, + 199, 209, 10, 3, 231, 241, 25, 66, 10, 3, 231, 241, 25, 196, 158, 10, 3, + 231, 241, 25, 196, 159, 108, 235, 91, 10, 3, 231, 241, 139, 231, 240, 10, + 3, 231, 235, 10, 3, 231, 236, 238, 212, 231, 235, 10, 3, 231, 233, 10, 3, + 231, 234, 139, 231, 234, 231, 203, 139, 231, 202, 10, 3, 231, 224, 10, 3, + 231, 225, 231, 234, 139, 231, 234, 231, 203, 139, 231, 202, 10, 3, 231, + 223, 10, 3, 231, 221, 10, 3, 231, 212, 10, 3, 231, 210, 10, 3, 231, 211, + 199, 84, 10, 3, 231, 211, 139, 231, 210, 10, 3, 231, 211, 238, 212, 231, + 210, 10, 3, 231, 202, 10, 3, 231, 201, 10, 3, 231, 195, 10, 3, 231, 136, + 10, 3, 231, 137, 25, 220, 199, 10, 3, 231, 55, 10, 3, 231, 56, 25, 71, + 10, 3, 231, 56, 25, 66, 10, 3, 231, 56, 238, 212, 231, 55, 10, 3, 231, + 53, 10, 3, 231, 54, 139, 231, 53, 10, 3, 231, 54, 238, 212, 231, 53, 10, + 3, 231, 50, 10, 3, 231, 34, 10, 3, 231, 35, 230, 157, 10, 3, 231, 32, 10, + 3, 231, 33, 25, 42, 108, 223, 203, 10, 3, 231, 33, 25, 231, 211, 199, 84, + 10, 3, 231, 33, 25, 223, 203, 10, 3, 231, 33, 25, 218, 228, 108, 223, + 203, 10, 3, 231, 33, 25, 168, 10, 3, 231, 27, 10, 3, 231, 25, 10, 3, 231, + 26, 238, 212, 231, 25, 10, 3, 231, 26, 25, 249, 137, 10, 3, 231, 26, 25, + 199, 209, 10, 3, 231, 26, 199, 84, 10, 3, 230, 181, 10, 3, 230, 182, 238, + 212, 230, 181, 10, 3, 230, 179, 10, 3, 230, 180, 25, 222, 98, 10, 3, 230, + 180, 25, 222, 99, 25, 223, 204, 230, 157, 10, 3, 230, 180, 25, 212, 132, + 10, 3, 230, 180, 25, 205, 171, 108, 197, 82, 10, 3, 230, 180, 230, 157, + 10, 3, 230, 170, 10, 3, 230, 171, 25, 42, 108, 220, 199, 10, 3, 230, 171, + 25, 220, 199, 10, 3, 230, 171, 139, 230, 171, 218, 218, 10, 3, 230, 162, + 10, 3, 230, 160, 10, 3, 230, 161, 25, 203, 114, 10, 3, 230, 151, 10, 3, + 230, 150, 10, 3, 230, 145, 10, 3, 230, 144, 10, 3, 140, 10, 3, 230, 107, + 199, 84, 10, 3, 230, 107, 230, 157, 10, 3, 230, 75, 10, 3, 229, 160, 10, + 3, 229, 161, 25, 250, 211, 10, 3, 229, 161, 25, 250, 209, 10, 3, 229, + 161, 25, 249, 137, 10, 3, 229, 161, 25, 236, 224, 10, 3, 229, 161, 25, + 231, 233, 10, 3, 229, 161, 25, 221, 143, 10, 3, 229, 161, 25, 212, 132, + 10, 3, 229, 161, 25, 203, 114, 10, 3, 229, 161, 25, 66, 10, 3, 228, 161, + 10, 3, 228, 153, 10, 3, 228, 154, 25, 251, 134, 10, 3, 228, 154, 25, 230, + 75, 10, 3, 228, 154, 25, 222, 56, 10, 3, 228, 154, 25, 219, 91, 10, 3, + 228, 154, 25, 196, 158, 10, 3, 228, 148, 10, 3, 68, 10, 3, 228, 76, 65, + 10, 3, 228, 32, 10, 3, 223, 231, 10, 3, 223, 232, 139, 223, 232, 247, + 232, 10, 3, 223, 232, 139, 223, 232, 201, 190, 10, 3, 223, 206, 10, 3, + 223, 203, 10, 3, 223, 204, 237, 28, 10, 3, 223, 204, 207, 2, 10, 3, 223, + 204, 139, 223, 204, 203, 64, 139, 203, 64, 196, 159, 139, 196, 158, 10, + 3, 223, 204, 230, 157, 10, 3, 223, 193, 10, 3, 223, 194, 25, 231, 211, + 199, 84, 10, 3, 223, 192, 10, 3, 223, 182, 10, 3, 223, 183, 25, 199, 209, + 10, 3, 223, 183, 238, 212, 223, 182, 10, 3, 223, 183, 211, 65, 223, 182, + 10, 3, 223, 183, 201, 190, 10, 3, 223, 174, 10, 3, 223, 164, 10, 3, 223, + 79, 10, 3, 223, 64, 10, 3, 155, 10, 3, 222, 144, 25, 65, 10, 3, 222, 144, + 25, 252, 44, 10, 3, 222, 144, 25, 252, 45, 108, 220, 225, 10, 3, 222, + 144, 25, 250, 209, 10, 3, 222, 144, 25, 249, 137, 10, 3, 222, 144, 25, + 249, 116, 10, 3, 222, 144, 25, 164, 10, 3, 222, 144, 25, 248, 190, 10, 3, + 222, 144, 25, 234, 30, 10, 3, 222, 144, 25, 234, 11, 10, 3, 222, 144, 25, + 231, 242, 10, 3, 222, 144, 25, 231, 224, 10, 3, 222, 144, 25, 231, 211, + 199, 84, 10, 3, 222, 144, 25, 231, 202, 10, 3, 222, 144, 25, 231, 203, + 108, 203, 165, 108, 65, 10, 3, 222, 144, 25, 231, 55, 10, 3, 222, 144, + 25, 231, 34, 10, 3, 222, 144, 25, 231, 26, 108, 205, 128, 10, 3, 222, + 144, 25, 231, 26, 238, 212, 231, 25, 10, 3, 222, 144, 25, 230, 181, 10, + 3, 222, 144, 25, 230, 150, 10, 3, 222, 144, 25, 223, 203, 10, 3, 222, + 144, 25, 223, 182, 10, 3, 222, 144, 25, 222, 98, 10, 3, 222, 144, 25, + 221, 168, 10, 3, 222, 144, 25, 221, 154, 10, 3, 222, 144, 25, 219, 148, + 10, 3, 222, 144, 25, 218, 227, 10, 3, 222, 144, 25, 216, 234, 10, 3, 222, + 144, 25, 216, 235, 108, 235, 91, 10, 3, 222, 144, 25, 216, 235, 108, 231, + 55, 10, 3, 222, 144, 25, 216, 235, 108, 199, 145, 10, 3, 222, 144, 25, + 216, 102, 10, 3, 222, 144, 25, 216, 103, 108, 212, 127, 10, 3, 222, 144, + 25, 214, 123, 10, 3, 222, 144, 25, 212, 132, 10, 3, 222, 144, 25, 209, + 187, 10, 3, 222, 144, 25, 206, 69, 10, 3, 222, 144, 25, 188, 10, 3, 222, + 144, 25, 205, 128, 10, 3, 222, 144, 25, 203, 166, 10, 3, 222, 144, 25, + 203, 114, 10, 3, 222, 144, 25, 203, 80, 10, 3, 222, 144, 25, 203, 6, 10, + 3, 222, 144, 25, 202, 202, 10, 3, 222, 144, 25, 200, 213, 10, 3, 222, + 144, 25, 199, 179, 10, 3, 222, 144, 25, 66, 10, 3, 222, 144, 25, 196, + 169, 10, 3, 222, 144, 25, 196, 158, 10, 3, 222, 144, 25, 196, 116, 25, + 168, 10, 3, 222, 144, 25, 196, 38, 10, 3, 222, 144, 25, 191, 30, 10, 3, + 222, 130, 10, 3, 222, 131, 238, 212, 222, 130, 10, 3, 222, 119, 10, 3, + 222, 115, 10, 3, 222, 113, 10, 3, 222, 112, 10, 3, 222, 110, 10, 3, 222, + 111, 139, 222, 110, 10, 3, 222, 98, 10, 3, 222, 99, 25, 223, 204, 230, + 157, 10, 3, 222, 93, 10, 3, 222, 94, 25, 249, 137, 10, 3, 222, 94, 238, + 212, 222, 93, 10, 3, 222, 91, 10, 3, 222, 90, 10, 3, 222, 56, 10, 3, 222, + 57, 220, 107, 25, 126, 139, 220, 107, 25, 66, 10, 3, 222, 57, 139, 222, + 57, 220, 107, 25, 126, 139, 220, 107, 25, 66, 10, 3, 221, 244, 10, 3, + 221, 168, 10, 3, 221, 169, 25, 249, 137, 10, 3, 221, 169, 25, 66, 10, 3, + 221, 169, 25, 196, 158, 10, 3, 221, 154, 10, 3, 221, 143, 10, 3, 221, + 129, 10, 3, 221, 128, 10, 3, 221, 126, 10, 3, 221, 127, 139, 221, 126, + 10, 3, 220, 234, 10, 3, 220, 235, 139, 229, 161, 25, 250, 210, 220, 235, + 139, 229, 161, 25, 250, 209, 10, 3, 220, 225, 10, 3, 220, 223, 10, 3, + 220, 224, 195, 168, 20, 10, 3, 220, 222, 10, 3, 220, 213, 10, 3, 220, + 214, 230, 157, 10, 3, 220, 212, 10, 3, 220, 199, 10, 3, 220, 200, 211, + 65, 220, 199, 10, 3, 220, 192, 10, 3, 220, 169, 10, 3, 173, 10, 3, 220, + 106, 10, 3, 220, 107, 25, 65, 10, 3, 220, 107, 25, 42, 108, 238, 35, 108, + 140, 10, 3, 220, 107, 25, 42, 108, 231, 202, 10, 3, 220, 107, 25, 42, + 108, 220, 39, 10, 3, 220, 107, 25, 251, 209, 10, 3, 220, 107, 25, 251, + 134, 10, 3, 220, 107, 25, 250, 212, 191, 26, 199, 84, 10, 3, 220, 107, + 25, 249, 137, 10, 3, 220, 107, 25, 248, 190, 10, 3, 220, 107, 25, 237, + 227, 10, 3, 220, 107, 25, 234, 105, 10, 3, 220, 107, 25, 231, 242, 10, 3, + 220, 107, 25, 231, 202, 10, 3, 220, 107, 25, 230, 170, 10, 3, 220, 107, + 25, 230, 171, 108, 230, 170, 10, 3, 220, 107, 25, 140, 10, 3, 220, 107, + 25, 230, 75, 10, 3, 220, 107, 25, 229, 161, 25, 212, 132, 10, 3, 220, + 107, 25, 223, 204, 230, 157, 10, 3, 220, 107, 25, 223, 182, 10, 3, 220, + 107, 25, 223, 183, 108, 140, 10, 3, 220, 107, 25, 223, 183, 108, 218, + 227, 10, 3, 220, 107, 25, 221, 168, 10, 3, 220, 107, 25, 221, 143, 10, 3, + 220, 107, 25, 220, 225, 10, 3, 220, 107, 25, 220, 213, 10, 3, 220, 107, + 25, 220, 214, 108, 229, 161, 108, 65, 10, 3, 220, 107, 25, 220, 106, 10, + 3, 220, 107, 25, 219, 91, 10, 3, 220, 107, 25, 218, 227, 10, 3, 220, 107, + 25, 218, 212, 10, 3, 220, 107, 25, 216, 234, 10, 3, 220, 107, 25, 216, + 235, 108, 234, 105, 10, 3, 220, 107, 25, 215, 103, 10, 3, 220, 107, 25, + 214, 123, 10, 3, 220, 107, 25, 203, 115, 108, 200, 204, 10, 3, 220, 107, + 25, 203, 60, 108, 231, 26, 108, 234, 30, 10, 3, 220, 107, 25, 203, 60, + 108, 231, 26, 199, 84, 10, 3, 220, 107, 25, 203, 4, 10, 3, 220, 107, 25, + 203, 5, 108, 203, 4, 10, 3, 220, 107, 25, 200, 204, 10, 3, 220, 107, 25, + 199, 223, 10, 3, 220, 107, 25, 199, 209, 10, 3, 220, 107, 25, 199, 146, + 108, 42, 108, 201, 6, 108, 181, 10, 3, 220, 107, 25, 66, 10, 3, 220, 107, + 25, 126, 108, 65, 10, 3, 220, 107, 25, 126, 108, 126, 108, 66, 10, 3, + 220, 107, 25, 196, 170, 108, 250, 211, 10, 3, 220, 107, 25, 196, 158, 10, + 3, 220, 107, 25, 196, 38, 10, 3, 220, 107, 201, 190, 10, 3, 220, 104, 10, + 3, 220, 105, 25, 203, 114, 10, 3, 220, 105, 25, 203, 115, 108, 200, 204, + 10, 3, 220, 105, 230, 157, 10, 3, 220, 105, 230, 158, 139, 220, 105, 230, + 158, 203, 114, 10, 3, 220, 100, 10, 3, 220, 39, 10, 3, 220, 40, 25, 220, + 39, 10, 3, 220, 37, 10, 3, 220, 38, 25, 220, 199, 10, 3, 220, 38, 25, + 220, 200, 108, 206, 69, 10, 3, 219, 148, 10, 3, 219, 129, 10, 3, 219, + 117, 10, 3, 219, 91, 10, 3, 218, 227, 10, 3, 218, 228, 25, 249, 137, 10, + 3, 218, 225, 10, 3, 218, 226, 25, 251, 209, 10, 3, 218, 226, 25, 249, + 137, 10, 3, 218, 226, 25, 234, 11, 10, 3, 218, 226, 25, 234, 12, 199, 84, + 10, 3, 218, 226, 25, 231, 211, 199, 84, 10, 3, 218, 226, 25, 229, 161, + 25, 249, 137, 10, 3, 218, 226, 25, 223, 182, 10, 3, 218, 226, 25, 222, + 115, 10, 3, 218, 226, 25, 222, 113, 10, 3, 218, 226, 25, 222, 114, 108, + 250, 211, 10, 3, 218, 226, 25, 221, 168, 10, 3, 218, 226, 25, 220, 128, + 108, 250, 211, 10, 3, 218, 226, 25, 220, 106, 10, 3, 218, 226, 25, 216, + 235, 108, 234, 105, 10, 3, 218, 226, 25, 214, 123, 10, 3, 218, 226, 25, + 212, 180, 10, 3, 218, 226, 25, 202, 224, 108, 250, 211, 10, 3, 218, 226, + 25, 202, 193, 108, 248, 12, 10, 3, 218, 226, 25, 197, 82, 10, 3, 218, + 226, 199, 84, 10, 3, 218, 226, 238, 212, 218, 225, 10, 3, 218, 226, 211, + 65, 218, 225, 10, 3, 218, 226, 201, 190, 10, 3, 218, 226, 203, 95, 10, 3, + 218, 224, 10, 3, 218, 218, 10, 3, 218, 219, 139, 218, 218, 10, 3, 218, + 219, 211, 65, 218, 218, 10, 3, 218, 219, 203, 95, 10, 3, 218, 215, 10, 3, + 218, 212, 10, 3, 218, 210, 10, 3, 218, 211, 139, 218, 210, 10, 3, 218, + 211, 139, 218, 211, 231, 203, 139, 231, 202, 10, 3, 174, 10, 3, 217, 162, + 25, 199, 209, 10, 3, 217, 162, 230, 157, 10, 3, 217, 154, 10, 3, 217, + 122, 10, 3, 217, 67, 10, 3, 217, 41, 10, 3, 217, 40, 10, 3, 216, 234, 10, + 3, 216, 175, 10, 3, 216, 102, 10, 3, 216, 46, 10, 3, 215, 157, 10, 3, + 215, 158, 139, 215, 157, 10, 3, 215, 142, 10, 3, 215, 143, 230, 157, 10, + 3, 215, 121, 10, 3, 215, 107, 10, 3, 215, 103, 10, 3, 215, 104, 25, 65, + 10, 3, 215, 104, 25, 220, 199, 10, 3, 215, 104, 25, 191, 123, 10, 3, 215, + 104, 139, 215, 103, 10, 3, 215, 104, 139, 215, 104, 25, 42, 108, 181, 10, + 3, 215, 104, 238, 212, 215, 103, 10, 3, 215, 101, 10, 3, 215, 102, 25, + 65, 10, 3, 215, 102, 25, 42, 108, 237, 46, 10, 3, 215, 102, 25, 237, 46, + 10, 3, 215, 102, 230, 157, 10, 3, 181, 10, 3, 214, 255, 10, 3, 214, 242, + 10, 3, 214, 243, 223, 94, 10, 3, 214, 243, 25, 203, 7, 199, 84, 10, 3, + 214, 243, 211, 65, 214, 242, 10, 3, 214, 241, 10, 3, 214, 233, 212, 118, + 10, 3, 214, 232, 10, 3, 214, 231, 10, 3, 214, 123, 10, 3, 214, 124, 25, + 65, 10, 3, 214, 124, 25, 196, 158, 10, 3, 214, 124, 203, 95, 10, 3, 213, + 221, 10, 3, 213, 222, 25, 71, 10, 3, 213, 212, 10, 3, 213, 182, 10, 3, + 213, 183, 25, 231, 211, 199, 84, 10, 3, 213, 183, 25, 231, 203, 108, 231, + 211, 199, 84, 10, 3, 213, 178, 10, 3, 213, 179, 25, 251, 134, 10, 3, 213, + 179, 25, 250, 211, 10, 3, 213, 179, 25, 250, 212, 108, 250, 211, 10, 3, + 213, 179, 25, 230, 170, 10, 3, 213, 179, 25, 216, 235, 108, 231, 211, + 199, 84, 10, 3, 213, 179, 25, 214, 123, 10, 3, 213, 179, 25, 212, 132, + 10, 3, 213, 179, 25, 203, 114, 10, 3, 213, 179, 25, 203, 115, 108, 42, + 251, 134, 10, 3, 213, 179, 25, 203, 115, 108, 250, 211, 10, 3, 213, 179, + 25, 203, 115, 108, 250, 212, 108, 250, 211, 10, 3, 213, 179, 25, 196, + 170, 108, 250, 211, 10, 3, 213, 179, 25, 196, 38, 10, 3, 213, 165, 10, 3, + 212, 180, 10, 3, 212, 149, 10, 3, 212, 132, 10, 3, 212, 133, 220, 105, + 25, 231, 202, 10, 3, 212, 133, 220, 105, 25, 217, 41, 10, 3, 212, 133, + 220, 105, 25, 205, 170, 10, 3, 212, 133, 220, 105, 25, 205, 171, 139, + 212, 133, 220, 105, 25, 205, 170, 10, 3, 212, 133, 220, 105, 25, 196, 38, + 10, 3, 212, 133, 199, 84, 10, 3, 212, 133, 139, 212, 132, 10, 3, 212, + 133, 238, 212, 212, 132, 10, 3, 212, 133, 238, 212, 212, 133, 220, 105, + 139, 220, 104, 10, 3, 212, 127, 10, 3, 212, 128, 252, 75, 25, 250, 205, + 10, 3, 212, 128, 252, 75, 25, 248, 190, 10, 3, 212, 128, 252, 75, 25, + 235, 84, 10, 3, 212, 128, 252, 75, 25, 230, 170, 10, 3, 212, 128, 252, + 75, 25, 223, 204, 230, 157, 10, 3, 212, 128, 252, 75, 25, 222, 113, 10, + 3, 212, 128, 252, 75, 25, 173, 10, 3, 212, 128, 252, 75, 25, 214, 123, + 10, 3, 212, 128, 252, 75, 25, 202, 190, 10, 3, 212, 128, 252, 75, 25, + 196, 169, 10, 3, 212, 128, 221, 127, 25, 248, 190, 10, 3, 212, 128, 221, + 127, 25, 248, 191, 66, 10, 3, 168, 10, 3, 210, 212, 10, 3, 210, 168, 10, + 3, 210, 139, 10, 3, 209, 245, 10, 3, 209, 187, 10, 3, 209, 188, 25, 65, + 10, 3, 209, 188, 25, 252, 157, 10, 3, 209, 188, 25, 248, 190, 10, 3, 209, + 188, 25, 248, 12, 10, 3, 209, 188, 25, 71, 10, 3, 209, 188, 25, 68, 10, + 3, 209, 188, 25, 228, 32, 10, 3, 209, 188, 25, 66, 10, 3, 209, 188, 25, + 196, 169, 10, 3, 209, 188, 238, 212, 209, 187, 10, 3, 209, 123, 10, 3, + 209, 124, 25, 222, 93, 10, 3, 209, 124, 25, 196, 158, 10, 3, 209, 124, + 25, 191, 123, 10, 3, 209, 124, 211, 65, 209, 123, 10, 3, 165, 10, 3, 207, + 178, 10, 3, 207, 2, 10, 3, 206, 69, 10, 3, 188, 10, 3, 205, 187, 212, + 118, 10, 3, 205, 186, 10, 3, 205, 187, 25, 65, 10, 3, 205, 187, 25, 235, + 91, 10, 3, 205, 187, 25, 235, 89, 10, 3, 205, 187, 25, 140, 10, 3, 205, + 187, 25, 222, 98, 10, 3, 205, 187, 25, 220, 199, 10, 3, 205, 187, 25, + 218, 210, 10, 3, 205, 187, 25, 216, 102, 10, 3, 205, 187, 25, 212, 132, + 10, 3, 205, 187, 25, 205, 170, 10, 3, 205, 187, 25, 203, 80, 10, 3, 205, + 187, 25, 199, 236, 10, 3, 205, 187, 25, 196, 169, 10, 3, 205, 187, 25, + 196, 164, 10, 3, 205, 187, 25, 196, 120, 10, 3, 205, 187, 25, 196, 62, + 10, 3, 205, 187, 25, 196, 38, 10, 3, 205, 187, 139, 205, 186, 10, 3, 205, + 187, 230, 157, 10, 3, 205, 170, 10, 3, 205, 171, 220, 107, 25, 250, 209, + 10, 3, 205, 137, 10, 3, 205, 128, 10, 3, 203, 166, 10, 3, 203, 164, 10, + 3, 203, 165, 25, 65, 10, 3, 203, 165, 25, 249, 137, 10, 3, 203, 165, 25, + 231, 25, 10, 3, 203, 165, 25, 214, 123, 10, 3, 203, 165, 25, 203, 4, 10, + 3, 203, 165, 25, 197, 64, 10, 3, 203, 165, 25, 66, 10, 3, 203, 165, 25, + 126, 108, 65, 10, 3, 203, 162, 10, 3, 203, 160, 10, 3, 203, 132, 10, 3, + 203, 114, 10, 3, 203, 115, 228, 161, 10, 3, 203, 115, 139, 203, 115, 231, + 234, 139, 231, 234, 231, 203, 139, 231, 202, 10, 3, 203, 115, 139, 203, + 115, 199, 237, 139, 199, 237, 231, 203, 139, 231, 202, 10, 3, 203, 107, + 10, 3, 203, 102, 10, 3, 203, 98, 10, 3, 203, 97, 10, 3, 203, 94, 10, 3, + 203, 80, 10, 3, 203, 81, 25, 65, 10, 3, 203, 81, 25, 223, 182, 10, 3, + 203, 74, 10, 3, 203, 75, 25, 65, 10, 3, 203, 75, 25, 249, 117, 10, 3, + 203, 75, 25, 247, 244, 10, 3, 203, 75, 25, 236, 245, 10, 3, 203, 75, 25, + 231, 202, 10, 3, 203, 75, 25, 223, 203, 10, 3, 203, 75, 25, 223, 204, + 230, 157, 10, 3, 203, 75, 25, 220, 192, 10, 3, 203, 75, 25, 218, 212, 10, + 3, 203, 75, 25, 215, 142, 10, 3, 203, 75, 25, 205, 170, 10, 3, 203, 68, + 10, 3, 203, 63, 10, 3, 203, 64, 199, 84, 10, 3, 203, 64, 139, 203, 64, + 247, 233, 139, 247, 232, 10, 3, 203, 59, 10, 3, 203, 6, 10, 3, 203, 7, + 139, 223, 95, 203, 6, 10, 3, 203, 4, 10, 3, 203, 2, 10, 3, 202, 223, 10, + 3, 202, 224, 230, 157, 10, 3, 202, 202, 10, 3, 202, 200, 10, 3, 202, 201, + 139, 202, 201, 203, 4, 10, 3, 202, 192, 10, 3, 202, 190, 10, 3, 201, 5, + 10, 3, 201, 6, 139, 201, 5, 10, 3, 200, 216, 10, 3, 200, 215, 10, 3, 200, + 213, 10, 3, 200, 204, 10, 3, 200, 203, 10, 3, 200, 175, 10, 3, 200, 174, + 10, 3, 190, 190, 10, 3, 199, 252, 250, 195, 10, 3, 199, 252, 25, 229, + 160, 10, 3, 199, 252, 25, 216, 102, 10, 3, 199, 252, 230, 157, 10, 3, + 199, 236, 10, 3, 199, 237, 139, 199, 237, 213, 222, 139, 213, 222, 236, + 225, 139, 236, 224, 10, 3, 199, 237, 201, 190, 10, 3, 199, 223, 10, 3, + 199, 224, 25, 248, 190, 10, 3, 199, 224, 25, 230, 170, 10, 3, 199, 224, + 25, 203, 114, 10, 3, 199, 224, 25, 203, 6, 10, 3, 199, 224, 25, 197, 82, + 10, 3, 199, 224, 25, 196, 158, 10, 3, 199, 209, 10, 3, 199, 179, 10, 3, + 199, 145, 10, 3, 199, 146, 230, 157, 10, 3, 198, 193, 10, 3, 198, 194, + 199, 84, 10, 3, 198, 154, 10, 3, 198, 131, 10, 3, 198, 132, 25, 199, 209, + 10, 3, 198, 132, 139, 198, 131, 10, 3, 198, 132, 139, 198, 132, 231, 234, + 139, 231, 234, 231, 203, 139, 231, 202, 10, 3, 197, 94, 10, 3, 197, 82, + 10, 3, 197, 80, 10, 3, 197, 76, 10, 3, 197, 64, 10, 3, 197, 65, 139, 197, + 65, 191, 124, 139, 191, 123, 10, 3, 66, 10, 3, 126, 230, 170, 10, 3, 126, + 126, 66, 10, 3, 126, 139, 126, 210, 223, 139, 210, 223, 231, 203, 139, + 231, 202, 10, 3, 126, 139, 126, 200, 176, 139, 200, 175, 10, 3, 126, 139, + 126, 126, 207, 19, 139, 126, 207, 18, 10, 3, 196, 169, 10, 3, 196, 164, + 10, 3, 196, 158, 10, 3, 196, 159, 220, 192, 10, 3, 196, 159, 25, 249, + 137, 10, 3, 196, 159, 25, 216, 102, 10, 3, 196, 159, 25, 126, 108, 126, + 108, 66, 10, 3, 196, 159, 25, 126, 108, 126, 108, 126, 230, 157, 10, 3, + 196, 159, 230, 157, 10, 3, 196, 159, 203, 95, 10, 3, 196, 159, 203, 96, + 25, 249, 137, 10, 3, 196, 153, 10, 3, 196, 120, 10, 3, 196, 121, 25, 220, + 106, 10, 3, 196, 121, 25, 216, 235, 108, 238, 34, 10, 3, 196, 121, 25, + 203, 164, 10, 3, 196, 121, 25, 66, 10, 3, 196, 119, 10, 3, 196, 115, 10, + 3, 196, 116, 25, 222, 56, 10, 3, 196, 116, 25, 168, 10, 3, 196, 113, 10, + 3, 196, 114, 230, 157, 10, 3, 196, 62, 10, 3, 196, 63, 238, 212, 196, 62, + 10, 3, 196, 63, 203, 95, 10, 3, 196, 60, 10, 3, 196, 61, 25, 42, 108, + 140, 10, 3, 196, 61, 25, 42, 108, 181, 10, 3, 196, 61, 25, 251, 209, 10, + 3, 196, 61, 25, 140, 10, 3, 196, 61, 25, 212, 132, 10, 3, 196, 61, 25, + 196, 169, 10, 3, 196, 61, 25, 196, 170, 108, 250, 211, 10, 3, 196, 61, + 25, 196, 170, 108, 248, 190, 10, 3, 196, 59, 10, 3, 196, 56, 10, 3, 196, + 55, 10, 3, 196, 51, 10, 3, 196, 52, 25, 65, 10, 3, 196, 52, 25, 250, 205, + 10, 3, 196, 52, 25, 164, 10, 3, 196, 52, 25, 235, 77, 10, 3, 196, 52, 25, + 231, 242, 10, 3, 196, 52, 25, 231, 224, 10, 3, 196, 52, 25, 231, 211, + 199, 84, 10, 3, 196, 52, 25, 231, 202, 10, 3, 196, 52, 25, 230, 181, 10, + 3, 196, 52, 25, 140, 10, 3, 196, 52, 25, 223, 203, 10, 3, 196, 52, 25, + 223, 182, 10, 3, 196, 52, 25, 223, 64, 10, 3, 196, 52, 25, 221, 168, 10, + 3, 196, 52, 25, 218, 210, 10, 3, 196, 52, 25, 216, 46, 10, 3, 196, 52, + 25, 168, 10, 3, 196, 52, 25, 203, 114, 10, 3, 196, 52, 25, 202, 200, 10, + 3, 196, 52, 25, 197, 94, 10, 3, 196, 52, 25, 126, 108, 230, 170, 10, 3, + 196, 52, 25, 196, 158, 10, 3, 196, 52, 25, 196, 49, 10, 3, 196, 49, 10, + 3, 196, 50, 25, 66, 10, 3, 196, 38, 10, 3, 196, 39, 25, 65, 10, 3, 196, + 39, 25, 220, 234, 10, 3, 196, 39, 25, 220, 199, 10, 3, 196, 39, 25, 199, + 209, 10, 3, 196, 34, 10, 3, 196, 37, 10, 3, 196, 35, 10, 3, 196, 31, 10, + 3, 196, 16, 10, 3, 196, 17, 25, 222, 56, 10, 3, 196, 14, 10, 3, 191, 123, + 10, 3, 191, 124, 199, 84, 10, 3, 191, 124, 112, 25, 220, 199, 10, 3, 191, + 118, 10, 3, 191, 107, 10, 3, 191, 86, 10, 3, 191, 30, 10, 3, 191, 31, + 139, 191, 30, 10, 3, 191, 29, 10, 3, 191, 27, 10, 3, 191, 28, 222, 118, + 199, 84, 10, 3, 191, 22, 10, 3, 191, 13, 10, 3, 190, 251, 10, 3, 190, + 249, 10, 3, 190, 250, 25, 65, 10, 3, 190, 248, 10, 3, 190, 247, 10, 3, + 222, 81, 234, 139, 10, 3, 252, 158, 25, 212, 132, 10, 3, 252, 75, 25, 65, + 10, 3, 251, 148, 25, 220, 215, 10, 3, 238, 25, 221, 127, 25, 196, 170, + 108, 217, 41, 10, 3, 238, 23, 10, 3, 236, 225, 108, 203, 6, 10, 3, 235, + 90, 25, 203, 114, 10, 3, 233, 183, 25, 230, 170, 10, 3, 233, 183, 25, + 203, 114, 10, 3, 231, 241, 25, 251, 135, 108, 222, 99, 108, 65, 10, 3, + 231, 241, 25, 250, 209, 10, 3, 231, 166, 10, 3, 231, 44, 10, 3, 228, 133, + 10, 3, 222, 144, 25, 251, 93, 10, 3, 222, 144, 25, 250, 208, 10, 3, 222, + 144, 25, 231, 25, 10, 3, 222, 144, 25, 230, 170, 10, 3, 222, 144, 25, + 229, 161, 25, 250, 209, 10, 3, 222, 144, 25, 218, 210, 10, 3, 222, 144, + 25, 168, 10, 3, 222, 144, 25, 202, 254, 10, 3, 222, 144, 25, 197, 94, 10, + 3, 222, 144, 25, 196, 60, 10, 3, 220, 107, 25, 231, 55, 10, 3, 218, 226, + 203, 96, 25, 249, 137, 10, 3, 218, 226, 25, 234, 12, 108, 220, 39, 10, 3, + 218, 226, 25, 203, 6, 10, 3, 216, 174, 10, 3, 215, 102, 25, 191, 123, 10, + 3, 214, 254, 10, 3, 213, 181, 10, 3, 213, 180, 10, 3, 213, 179, 25, 249, + 117, 10, 3, 213, 179, 25, 231, 55, 10, 3, 212, 150, 206, 123, 213, 172, + 237, 126, 10, 3, 209, 246, 250, 195, 10, 3, 209, 127, 10, 3, 205, 187, + 25, 223, 204, 230, 157, 10, 3, 198, 185, 10, 3, 196, 121, 25, 216, 234, + 10, 3, 126, 66, 10, 167, 3, 105, 250, 211, 10, 167, 3, 115, 250, 211, 10, + 167, 3, 232, 130, 250, 211, 10, 167, 3, 232, 228, 250, 211, 10, 167, 3, + 202, 137, 250, 211, 10, 167, 3, 203, 248, 250, 211, 10, 167, 3, 234, 166, + 250, 211, 10, 167, 3, 213, 177, 250, 211, 10, 167, 3, 115, 236, 224, 10, + 167, 3, 232, 130, 236, 224, 10, 167, 3, 232, 228, 236, 224, 10, 167, 3, + 202, 137, 236, 224, 10, 167, 3, 203, 248, 236, 224, 10, 167, 3, 234, 166, + 236, 224, 10, 167, 3, 213, 177, 236, 224, 10, 167, 3, 232, 130, 66, 10, + 167, 3, 232, 228, 66, 10, 167, 3, 202, 137, 66, 10, 167, 3, 203, 248, 66, + 10, 167, 3, 234, 166, 66, 10, 167, 3, 213, 177, 66, 10, 167, 3, 91, 231, + 138, 10, 167, 3, 105, 231, 138, 10, 167, 3, 115, 231, 138, 10, 167, 3, + 232, 130, 231, 138, 10, 167, 3, 232, 228, 231, 138, 10, 167, 3, 202, 137, + 231, 138, 10, 167, 3, 203, 248, 231, 138, 10, 167, 3, 234, 166, 231, 138, + 10, 167, 3, 213, 177, 231, 138, 10, 167, 3, 91, 231, 135, 10, 167, 3, + 105, 231, 135, 10, 167, 3, 115, 231, 135, 10, 167, 3, 232, 130, 231, 135, + 10, 167, 3, 232, 228, 231, 135, 10, 167, 3, 105, 203, 132, 10, 167, 3, + 115, 203, 132, 10, 167, 3, 115, 203, 133, 195, 168, 20, 10, 167, 3, 232, + 130, 203, 132, 10, 167, 3, 232, 228, 203, 132, 10, 167, 3, 202, 137, 203, + 132, 10, 167, 3, 203, 248, 203, 132, 10, 167, 3, 234, 166, 203, 132, 10, + 167, 3, 213, 177, 203, 132, 10, 167, 3, 91, 203, 125, 10, 167, 3, 105, + 203, 125, 10, 167, 3, 115, 203, 125, 10, 167, 3, 115, 203, 126, 195, 168, + 20, 10, 167, 3, 232, 130, 203, 125, 10, 167, 3, 232, 228, 203, 125, 10, + 167, 3, 203, 133, 25, 231, 225, 108, 236, 224, 10, 167, 3, 203, 133, 25, + 231, 225, 108, 216, 46, 10, 167, 3, 91, 247, 228, 10, 167, 3, 105, 247, + 228, 10, 167, 3, 115, 247, 228, 10, 167, 3, 115, 247, 229, 195, 168, 20, + 10, 167, 3, 232, 130, 247, 228, 10, 167, 3, 232, 228, 247, 228, 10, 167, + 3, 115, 195, 168, 232, 148, 234, 13, 10, 167, 3, 115, 195, 168, 232, 148, + 234, 10, 10, 167, 3, 232, 130, 195, 168, 232, 148, 219, 118, 10, 167, 3, + 232, 130, 195, 168, 232, 148, 219, 116, 10, 167, 3, 232, 130, 195, 168, + 232, 148, 219, 119, 65, 10, 167, 3, 232, 130, 195, 168, 232, 148, 219, + 119, 250, 122, 10, 167, 3, 202, 137, 195, 168, 232, 148, 250, 207, 10, + 167, 3, 203, 248, 195, 168, 232, 148, 223, 173, 10, 167, 3, 203, 248, + 195, 168, 232, 148, 223, 175, 65, 10, 167, 3, 203, 248, 195, 168, 232, + 148, 223, 175, 250, 122, 10, 167, 3, 234, 166, 195, 168, 232, 148, 196, + 33, 10, 167, 3, 234, 166, 195, 168, 232, 148, 196, 32, 10, 167, 3, 213, + 177, 195, 168, 232, 148, 223, 190, 10, 167, 3, 213, 177, 195, 168, 232, + 148, 223, 189, 10, 167, 3, 213, 177, 195, 168, 232, 148, 223, 188, 10, + 167, 3, 213, 177, 195, 168, 232, 148, 223, 191, 65, 10, 167, 3, 105, 250, + 212, 199, 84, 10, 167, 3, 115, 250, 212, 199, 84, 10, 167, 3, 232, 130, + 250, 212, 199, 84, 10, 167, 3, 232, 228, 250, 212, 199, 84, 10, 167, 3, + 202, 137, 250, 212, 199, 84, 10, 167, 3, 91, 249, 101, 10, 167, 3, 105, + 249, 101, 10, 167, 3, 115, 249, 101, 10, 167, 3, 232, 130, 249, 101, 10, + 167, 3, 232, 130, 249, 102, 195, 168, 20, 10, 167, 3, 232, 228, 249, 101, + 10, 167, 3, 232, 228, 249, 102, 195, 168, 20, 10, 167, 3, 213, 190, 10, + 167, 3, 213, 191, 10, 167, 3, 91, 234, 9, 10, 167, 3, 105, 234, 9, 10, + 167, 3, 91, 199, 1, 236, 224, 10, 167, 3, 105, 198, 254, 236, 224, 10, + 167, 3, 232, 228, 202, 124, 236, 224, 10, 167, 3, 91, 199, 1, 195, 168, + 232, 148, 65, 10, 167, 3, 105, 198, 254, 195, 168, 232, 148, 65, 10, 167, + 3, 91, 234, 162, 250, 211, 10, 167, 3, 91, 208, 25, 250, 211, 10, 167, 3, + 39, 250, 198, 91, 202, 125, 10, 167, 3, 39, 250, 198, 91, 208, 24, 10, + 167, 3, 91, 208, 25, 230, 151, 10, 167, 3, 91, 132, 230, 151, 10, 167, 3, + 234, 140, 91, 199, 0, 10, 167, 3, 234, 140, 105, 198, 253, 10, 167, 3, + 234, 140, 232, 137, 10, 167, 3, 234, 140, 233, 17, 10, 167, 3, 232, 130, + 126, 195, 168, 20, 10, 167, 3, 232, 228, 126, 195, 168, 20, 10, 167, 3, + 202, 137, 126, 195, 168, 20, 10, 167, 3, 203, 248, 126, 195, 168, 20, 10, + 167, 3, 234, 166, 126, 195, 168, 20, 10, 167, 3, 213, 177, 126, 195, 168, + 20, 10, 208, 154, 3, 39, 250, 198, 193, 23, 236, 207, 10, 208, 154, 3, + 81, 242, 85, 10, 208, 154, 3, 237, 41, 242, 85, 10, 208, 154, 3, 237, 41, + 197, 237, 10, 208, 154, 3, 237, 41, 208, 31, 10, 3, 252, 158, 25, 212, + 133, 199, 84, 10, 3, 252, 158, 25, 203, 4, 10, 3, 252, 45, 25, 234, 11, + 10, 3, 249, 138, 25, 236, 225, 199, 84, 10, 3, 249, 124, 25, 252, 74, 10, + 3, 249, 124, 25, 213, 221, 10, 3, 249, 124, 25, 191, 123, 10, 3, 248, 13, + 139, 248, 13, 25, 214, 255, 10, 3, 238, 35, 25, 199, 209, 10, 3, 238, 25, + 25, 220, 199, 10, 3, 237, 2, 25, 223, 203, 10, 3, 237, 2, 25, 126, 126, + 66, 10, 3, 237, 0, 25, 196, 158, 10, 3, 235, 85, 25, 251, 93, 10, 3, 235, + 85, 25, 250, 211, 10, 3, 235, 85, 25, 250, 212, 250, 185, 219, 226, 10, + 3, 235, 85, 25, 236, 245, 10, 3, 235, 85, 25, 235, 77, 10, 3, 235, 85, + 25, 234, 30, 10, 3, 235, 85, 25, 231, 242, 10, 3, 235, 85, 25, 231, 55, + 10, 3, 235, 85, 25, 231, 35, 230, 157, 10, 3, 235, 85, 25, 231, 25, 10, + 3, 235, 85, 25, 140, 10, 3, 235, 85, 25, 229, 160, 10, 3, 235, 85, 25, + 223, 204, 230, 157, 10, 3, 235, 85, 25, 222, 56, 10, 3, 235, 85, 25, 220, + 199, 10, 3, 235, 85, 25, 220, 192, 10, 3, 235, 85, 25, 220, 193, 108, + 222, 56, 10, 3, 235, 85, 25, 220, 94, 10, 3, 235, 85, 25, 220, 37, 10, 3, + 235, 85, 25, 220, 38, 25, 220, 199, 10, 3, 235, 85, 25, 218, 216, 108, + 231, 25, 10, 3, 235, 85, 25, 217, 41, 10, 3, 235, 85, 25, 216, 175, 10, + 3, 235, 85, 25, 216, 102, 10, 3, 235, 85, 25, 213, 221, 10, 3, 235, 85, + 25, 209, 187, 10, 3, 235, 85, 25, 203, 114, 10, 3, 235, 85, 25, 202, 224, + 230, 157, 10, 3, 234, 221, 25, 220, 199, 10, 3, 234, 221, 25, 210, 139, + 10, 3, 234, 31, 192, 235, 10, 3, 234, 12, 238, 212, 234, 11, 10, 3, 233, + 183, 203, 96, 25, 250, 211, 10, 3, 233, 183, 203, 96, 25, 229, 160, 10, + 3, 233, 183, 203, 96, 25, 223, 204, 230, 157, 10, 3, 233, 183, 203, 96, + 25, 173, 10, 3, 233, 183, 203, 96, 25, 220, 39, 10, 3, 233, 183, 203, 96, + 25, 216, 234, 10, 3, 233, 183, 203, 96, 25, 216, 175, 10, 3, 233, 183, + 203, 96, 25, 201, 5, 10, 3, 233, 183, 25, 201, 5, 10, 3, 231, 241, 25, + 249, 123, 10, 3, 231, 241, 25, 237, 2, 230, 157, 10, 3, 231, 241, 25, + 235, 85, 25, 223, 204, 230, 157, 10, 3, 231, 241, 25, 235, 85, 25, 222, + 56, 10, 3, 231, 241, 25, 234, 33, 10, 3, 231, 241, 25, 231, 242, 10, 3, + 231, 241, 25, 231, 203, 108, 237, 46, 10, 3, 231, 241, 25, 231, 203, 108, + 214, 123, 10, 3, 231, 241, 25, 230, 107, 108, 65, 10, 3, 231, 241, 25, + 220, 193, 108, 222, 56, 10, 3, 231, 241, 25, 220, 37, 10, 3, 231, 241, + 25, 220, 38, 25, 220, 199, 10, 3, 231, 241, 25, 218, 215, 10, 3, 231, + 241, 25, 215, 103, 10, 3, 231, 241, 25, 214, 123, 10, 3, 231, 241, 25, + 214, 124, 108, 234, 220, 10, 3, 231, 241, 25, 214, 124, 108, 231, 55, 10, + 3, 231, 241, 25, 203, 74, 10, 3, 231, 241, 25, 191, 13, 10, 3, 231, 236, + 206, 123, 213, 172, 237, 126, 10, 3, 231, 137, 25, 66, 10, 3, 231, 26, + 25, 231, 26, 238, 212, 231, 25, 10, 3, 230, 180, 25, 223, 204, 230, 157, + 10, 3, 230, 171, 108, 231, 26, 25, 199, 209, 10, 3, 230, 107, 199, 85, + 230, 157, 10, 3, 229, 161, 25, 250, 212, 139, 229, 161, 25, 250, 211, 10, + 3, 222, 144, 25, 248, 12, 10, 3, 222, 144, 25, 155, 10, 3, 222, 144, 25, + 126, 126, 66, 10, 3, 222, 144, 25, 196, 62, 10, 3, 220, 107, 25, 190, + 252, 139, 190, 251, 10, 3, 220, 95, 10, 3, 220, 93, 10, 3, 220, 92, 10, + 3, 220, 91, 10, 3, 220, 90, 10, 3, 220, 89, 10, 3, 220, 88, 10, 3, 220, + 87, 139, 220, 87, 230, 157, 10, 3, 220, 86, 10, 3, 220, 85, 139, 220, 84, + 10, 3, 220, 83, 10, 3, 220, 82, 10, 3, 220, 81, 10, 3, 220, 80, 10, 3, + 220, 79, 10, 3, 220, 78, 10, 3, 220, 77, 10, 3, 220, 76, 10, 3, 220, 75, + 10, 3, 220, 74, 10, 3, 220, 73, 10, 3, 220, 72, 10, 3, 220, 71, 10, 3, + 220, 70, 10, 3, 220, 69, 10, 3, 220, 68, 10, 3, 220, 67, 10, 3, 220, 66, + 10, 3, 220, 64, 10, 3, 220, 65, 25, 230, 181, 10, 3, 220, 65, 25, 223, + 203, 10, 3, 220, 65, 25, 210, 140, 108, 218, 224, 10, 3, 220, 65, 25, + 210, 140, 108, 210, 140, 108, 218, 224, 10, 3, 220, 65, 25, 196, 170, + 108, 249, 155, 10, 3, 220, 63, 10, 3, 220, 62, 10, 3, 220, 61, 10, 3, + 220, 60, 10, 3, 220, 59, 10, 3, 220, 58, 10, 3, 220, 57, 10, 3, 220, 56, + 10, 3, 220, 55, 10, 3, 220, 54, 10, 3, 220, 52, 10, 3, 220, 53, 25, 250, + 211, 10, 3, 220, 53, 25, 249, 137, 10, 3, 220, 53, 25, 235, 76, 230, 158, + 230, 157, 10, 3, 220, 53, 25, 220, 225, 10, 3, 220, 53, 25, 173, 10, 3, + 220, 53, 25, 199, 179, 10, 3, 220, 53, 25, 199, 145, 10, 3, 220, 53, 25, + 196, 169, 10, 3, 220, 53, 25, 196, 158, 10, 3, 220, 53, 25, 196, 49, 10, + 3, 220, 51, 10, 3, 220, 49, 10, 3, 220, 50, 25, 235, 89, 10, 3, 220, 50, + 25, 231, 242, 10, 3, 220, 50, 25, 223, 203, 10, 3, 220, 50, 25, 223, 204, + 230, 157, 10, 3, 220, 50, 25, 213, 221, 10, 3, 220, 50, 25, 210, 140, + 108, 210, 140, 108, 218, 224, 10, 3, 220, 50, 25, 203, 99, 108, 221, 168, + 10, 3, 220, 50, 25, 196, 158, 10, 3, 220, 50, 25, 196, 49, 10, 3, 220, + 47, 10, 3, 220, 46, 10, 3, 218, 226, 230, 158, 25, 250, 211, 10, 3, 218, + 226, 25, 236, 224, 10, 3, 218, 226, 25, 230, 75, 10, 3, 218, 226, 25, + 210, 139, 10, 3, 218, 226, 25, 210, 140, 108, 210, 140, 108, 218, 224, + 10, 3, 218, 226, 25, 199, 209, 10, 3, 216, 103, 108, 191, 122, 10, 3, + 215, 104, 139, 215, 104, 25, 231, 242, 10, 3, 215, 104, 139, 215, 104, + 25, 222, 98, 10, 3, 213, 179, 25, 237, 2, 230, 157, 10, 3, 213, 179, 25, + 231, 25, 10, 3, 213, 179, 25, 230, 162, 10, 3, 213, 179, 25, 229, 160, + 10, 3, 213, 179, 25, 221, 244, 10, 3, 213, 179, 25, 220, 90, 10, 3, 213, + 179, 25, 217, 41, 10, 3, 213, 179, 25, 210, 140, 108, 210, 139, 10, 3, + 213, 179, 25, 66, 10, 3, 213, 179, 25, 126, 108, 66, 10, 3, 213, 179, 25, + 196, 49, 10, 3, 205, 187, 230, 158, 25, 140, 10, 3, 205, 187, 25, 234, + 105, 10, 3, 205, 187, 25, 203, 115, 250, 185, 219, 226, 10, 3, 205, 187, + 25, 199, 209, 10, 3, 203, 163, 199, 84, 10, 3, 203, 115, 139, 203, 114, + 10, 3, 203, 115, 108, 228, 153, 10, 3, 203, 115, 108, 214, 231, 10, 3, + 203, 115, 108, 205, 128, 10, 3, 203, 5, 108, 235, 85, 25, 213, 221, 10, + 3, 203, 5, 108, 234, 221, 25, 251, 134, 10, 3, 202, 224, 25, 199, 209, + 10, 3, 199, 210, 108, 205, 186, 10, 3, 197, 77, 25, 231, 211, 199, 84, + 10, 3, 197, 77, 25, 115, 236, 224, 10, 3, 196, 61, 223, 94, 10, 3, 196, + 61, 25, 196, 158, 10, 3, 196, 52, 25, 237, 226, 10, 3, 196, 52, 25, 220, + 48, 10, 3, 196, 52, 25, 218, 224, 10, 3, 191, 122, 10, 3, 190, 252, 139, + 190, 252, 108, 205, 128, 10, 3, 190, 250, 25, 115, 236, 225, 199, 84, + 238, 136, 3, 242, 200, 238, 136, 3, 242, 199, 238, 136, 3, 242, 198, 238, + 136, 3, 242, 197, 238, 136, 3, 242, 196, 238, 136, 3, 242, 195, 238, 136, + 3, 242, 194, 238, 136, 3, 242, 193, 238, 136, 3, 242, 192, 238, 136, 3, + 242, 191, 238, 136, 3, 242, 190, 238, 136, 3, 242, 189, 238, 136, 3, 242, + 188, 238, 136, 3, 242, 187, 238, 136, 3, 242, 186, 238, 136, 3, 242, 185, + 238, 136, 3, 242, 184, 238, 136, 3, 242, 183, 238, 136, 3, 242, 182, 238, + 136, 3, 242, 181, 238, 136, 3, 242, 180, 238, 136, 3, 242, 179, 238, 136, + 3, 242, 178, 238, 136, 3, 242, 177, 238, 136, 3, 242, 176, 238, 136, 3, + 242, 175, 238, 136, 3, 242, 174, 238, 136, 3, 242, 173, 238, 136, 3, 242, + 172, 238, 136, 3, 242, 171, 238, 136, 3, 242, 170, 238, 136, 3, 242, 169, + 238, 136, 3, 242, 168, 238, 136, 3, 242, 167, 238, 136, 3, 242, 166, 238, + 136, 3, 242, 165, 238, 136, 3, 242, 164, 238, 136, 3, 242, 163, 238, 136, + 3, 242, 162, 238, 136, 3, 242, 161, 238, 136, 3, 242, 160, 238, 136, 3, + 242, 159, 238, 136, 3, 242, 158, 238, 136, 3, 242, 157, 238, 136, 3, 242, + 156, 238, 136, 3, 242, 155, 238, 136, 3, 242, 154, 238, 136, 3, 242, 153, + 238, 136, 3, 242, 152, 238, 136, 3, 242, 151, 238, 136, 3, 242, 150, 238, + 136, 3, 242, 149, 238, 136, 3, 242, 148, 238, 136, 3, 242, 147, 238, 136, + 3, 242, 146, 238, 136, 3, 242, 145, 238, 136, 3, 242, 144, 238, 136, 3, + 242, 143, 238, 136, 3, 242, 142, 238, 136, 3, 242, 141, 238, 136, 3, 242, + 140, 238, 136, 3, 242, 139, 238, 136, 3, 242, 138, 238, 136, 3, 242, 137, + 238, 136, 3, 242, 136, 238, 136, 3, 242, 135, 238, 136, 3, 242, 134, 238, + 136, 3, 242, 133, 238, 136, 3, 242, 132, 238, 136, 3, 242, 131, 238, 136, + 3, 242, 130, 238, 136, 3, 242, 129, 238, 136, 3, 242, 128, 238, 136, 3, + 242, 127, 238, 136, 3, 242, 126, 238, 136, 3, 242, 125, 238, 136, 3, 242, + 124, 238, 136, 3, 242, 123, 238, 136, 3, 242, 122, 238, 136, 3, 242, 121, + 238, 136, 3, 242, 120, 238, 136, 3, 242, 119, 238, 136, 3, 242, 118, 238, + 136, 3, 242, 117, 238, 136, 3, 242, 116, 238, 136, 3, 242, 115, 238, 136, + 3, 242, 114, 238, 136, 3, 242, 113, 238, 136, 3, 242, 112, 238, 136, 3, + 242, 111, 238, 136, 3, 242, 110, 238, 136, 3, 242, 109, 238, 136, 3, 242, + 108, 238, 136, 3, 242, 107, 238, 136, 3, 242, 106, 238, 136, 3, 242, 105, + 238, 136, 3, 242, 104, 238, 136, 3, 242, 103, 238, 136, 3, 242, 102, 14, + 7, 255, 201, 14, 7, 255, 200, 14, 7, 255, 199, 14, 7, 255, 198, 14, 7, + 255, 197, 14, 7, 255, 196, 14, 7, 255, 195, 14, 7, 255, 194, 14, 7, 255, + 193, 14, 7, 255, 192, 14, 7, 255, 191, 14, 7, 255, 190, 14, 7, 255, 189, + 14, 7, 255, 187, 14, 7, 255, 186, 14, 7, 255, 185, 14, 7, 255, 184, 14, + 7, 255, 183, 14, 7, 255, 182, 14, 7, 255, 181, 14, 7, 255, 180, 14, 7, + 255, 179, 14, 7, 255, 178, 14, 7, 255, 177, 14, 7, 255, 176, 14, 7, 255, + 175, 14, 7, 255, 174, 14, 7, 255, 173, 14, 7, 255, 172, 14, 7, 255, 171, + 14, 7, 255, 170, 14, 7, 255, 168, 14, 7, 255, 167, 14, 7, 255, 165, 14, + 7, 255, 164, 14, 7, 255, 163, 14, 7, 255, 162, 14, 7, 255, 161, 14, 7, + 255, 160, 14, 7, 255, 159, 14, 7, 255, 158, 14, 7, 255, 157, 14, 7, 255, + 156, 14, 7, 255, 155, 14, 7, 255, 154, 14, 7, 255, 152, 14, 7, 255, 151, + 14, 7, 255, 150, 14, 7, 255, 148, 14, 7, 255, 147, 14, 7, 255, 146, 14, + 7, 255, 145, 14, 7, 255, 144, 14, 7, 255, 143, 14, 7, 255, 142, 14, 7, + 255, 141, 14, 7, 255, 138, 14, 7, 255, 137, 14, 7, 255, 136, 14, 7, 255, + 135, 14, 7, 255, 134, 14, 7, 255, 133, 14, 7, 255, 132, 14, 7, 255, 131, + 14, 7, 255, 130, 14, 7, 255, 129, 14, 7, 255, 128, 14, 7, 255, 127, 14, + 7, 255, 126, 14, 7, 255, 125, 14, 7, 255, 124, 14, 7, 255, 123, 14, 7, + 255, 122, 14, 7, 255, 121, 14, 7, 255, 120, 14, 7, 255, 119, 14, 7, 255, + 115, 14, 7, 255, 114, 14, 7, 255, 113, 14, 7, 255, 112, 14, 7, 250, 120, + 14, 7, 250, 118, 14, 7, 250, 116, 14, 7, 250, 114, 14, 7, 250, 112, 14, + 7, 250, 111, 14, 7, 250, 109, 14, 7, 250, 107, 14, 7, 250, 105, 14, 7, + 250, 103, 14, 7, 247, 191, 14, 7, 247, 190, 14, 7, 247, 189, 14, 7, 247, + 188, 14, 7, 247, 187, 14, 7, 247, 186, 14, 7, 247, 185, 14, 7, 247, 184, + 14, 7, 247, 183, 14, 7, 247, 182, 14, 7, 247, 181, 14, 7, 247, 180, 14, + 7, 247, 179, 14, 7, 247, 178, 14, 7, 247, 177, 14, 7, 247, 176, 14, 7, + 247, 175, 14, 7, 247, 174, 14, 7, 247, 173, 14, 7, 247, 172, 14, 7, 247, + 171, 14, 7, 247, 170, 14, 7, 247, 169, 14, 7, 247, 168, 14, 7, 247, 167, + 14, 7, 247, 166, 14, 7, 247, 165, 14, 7, 247, 164, 14, 7, 238, 128, 14, + 7, 238, 127, 14, 7, 238, 126, 14, 7, 238, 125, 14, 7, 238, 124, 14, 7, + 238, 123, 14, 7, 238, 122, 14, 7, 238, 121, 14, 7, 238, 120, 14, 7, 238, + 119, 14, 7, 238, 118, 14, 7, 238, 117, 14, 7, 238, 116, 14, 7, 238, 115, + 14, 7, 238, 114, 14, 7, 238, 113, 14, 7, 238, 112, 14, 7, 238, 111, 14, + 7, 238, 110, 14, 7, 238, 109, 14, 7, 238, 108, 14, 7, 238, 107, 14, 7, + 238, 106, 14, 7, 238, 105, 14, 7, 238, 104, 14, 7, 238, 103, 14, 7, 238, + 102, 14, 7, 238, 101, 14, 7, 238, 100, 14, 7, 238, 99, 14, 7, 238, 98, + 14, 7, 238, 97, 14, 7, 238, 96, 14, 7, 238, 95, 14, 7, 238, 94, 14, 7, + 238, 93, 14, 7, 238, 92, 14, 7, 238, 91, 14, 7, 238, 90, 14, 7, 238, 89, + 14, 7, 238, 88, 14, 7, 238, 87, 14, 7, 238, 86, 14, 7, 238, 85, 14, 7, + 238, 84, 14, 7, 238, 83, 14, 7, 238, 82, 14, 7, 238, 81, 14, 7, 238, 80, + 14, 7, 238, 79, 14, 7, 238, 78, 14, 7, 238, 77, 14, 7, 238, 76, 14, 7, + 238, 75, 14, 7, 238, 74, 14, 7, 238, 73, 14, 7, 238, 72, 14, 7, 238, 71, + 14, 7, 238, 70, 14, 7, 238, 69, 14, 7, 238, 68, 14, 7, 238, 67, 14, 7, + 238, 66, 14, 7, 238, 65, 14, 7, 238, 64, 14, 7, 238, 63, 14, 7, 238, 62, + 14, 7, 238, 61, 14, 7, 238, 60, 14, 7, 238, 59, 14, 7, 238, 58, 14, 7, + 238, 57, 14, 7, 238, 56, 14, 7, 238, 55, 14, 7, 238, 54, 14, 7, 238, 53, + 14, 7, 238, 52, 14, 7, 238, 51, 14, 7, 238, 50, 14, 7, 238, 49, 14, 7, + 238, 48, 14, 7, 238, 47, 14, 7, 238, 46, 14, 7, 238, 45, 14, 7, 238, 44, + 14, 7, 238, 43, 14, 7, 238, 42, 14, 7, 238, 41, 14, 7, 238, 40, 14, 7, + 238, 39, 14, 7, 238, 38, 14, 7, 238, 37, 14, 7, 235, 9, 14, 7, 235, 8, + 14, 7, 235, 7, 14, 7, 235, 6, 14, 7, 235, 5, 14, 7, 235, 4, 14, 7, 235, + 3, 14, 7, 235, 2, 14, 7, 235, 1, 14, 7, 235, 0, 14, 7, 234, 255, 14, 7, + 234, 254, 14, 7, 234, 253, 14, 7, 234, 252, 14, 7, 234, 251, 14, 7, 234, + 250, 14, 7, 234, 249, 14, 7, 234, 248, 14, 7, 234, 247, 14, 7, 234, 246, + 14, 7, 234, 245, 14, 7, 234, 244, 14, 7, 234, 243, 14, 7, 234, 242, 14, + 7, 234, 241, 14, 7, 234, 240, 14, 7, 234, 239, 14, 7, 234, 238, 14, 7, + 234, 237, 14, 7, 234, 236, 14, 7, 234, 235, 14, 7, 234, 234, 14, 7, 234, + 233, 14, 7, 234, 232, 14, 7, 234, 231, 14, 7, 234, 230, 14, 7, 234, 229, + 14, 7, 234, 228, 14, 7, 234, 227, 14, 7, 234, 226, 14, 7, 234, 225, 14, + 7, 234, 224, 14, 7, 234, 223, 14, 7, 234, 222, 14, 7, 233, 176, 14, 7, + 233, 175, 14, 7, 233, 174, 14, 7, 233, 173, 14, 7, 233, 172, 14, 7, 233, + 171, 14, 7, 233, 170, 14, 7, 233, 169, 14, 7, 233, 168, 14, 7, 233, 167, + 14, 7, 233, 166, 14, 7, 233, 165, 14, 7, 233, 164, 14, 7, 233, 163, 14, + 7, 233, 162, 14, 7, 233, 161, 14, 7, 233, 160, 14, 7, 233, 159, 14, 7, + 233, 158, 14, 7, 233, 157, 14, 7, 233, 156, 14, 7, 233, 155, 14, 7, 233, + 154, 14, 7, 233, 153, 14, 7, 233, 152, 14, 7, 233, 151, 14, 7, 233, 150, + 14, 7, 233, 149, 14, 7, 233, 148, 14, 7, 233, 147, 14, 7, 233, 146, 14, + 7, 233, 145, 14, 7, 233, 144, 14, 7, 233, 143, 14, 7, 233, 142, 14, 7, + 233, 141, 14, 7, 233, 140, 14, 7, 233, 139, 14, 7, 233, 138, 14, 7, 233, + 137, 14, 7, 233, 136, 14, 7, 233, 135, 14, 7, 233, 134, 14, 7, 233, 133, + 14, 7, 233, 132, 14, 7, 233, 131, 14, 7, 233, 130, 14, 7, 233, 129, 14, + 7, 233, 128, 14, 7, 233, 127, 14, 7, 233, 126, 14, 7, 233, 125, 14, 7, + 233, 124, 14, 7, 233, 123, 14, 7, 233, 122, 14, 7, 233, 121, 14, 7, 233, + 120, 14, 7, 233, 119, 14, 7, 233, 118, 14, 7, 233, 117, 14, 7, 233, 116, + 14, 7, 233, 115, 14, 7, 233, 114, 14, 7, 233, 113, 14, 7, 233, 112, 14, + 7, 232, 52, 14, 7, 232, 51, 14, 7, 232, 50, 14, 7, 232, 49, 14, 7, 232, + 48, 14, 7, 232, 47, 14, 7, 232, 46, 14, 7, 232, 45, 14, 7, 232, 44, 14, + 7, 232, 43, 14, 7, 232, 42, 14, 7, 232, 41, 14, 7, 232, 40, 14, 7, 232, + 39, 14, 7, 232, 38, 14, 7, 232, 37, 14, 7, 232, 36, 14, 7, 232, 35, 14, + 7, 232, 34, 14, 7, 232, 33, 14, 7, 232, 32, 14, 7, 232, 31, 14, 7, 232, + 30, 14, 7, 232, 29, 14, 7, 232, 28, 14, 7, 232, 27, 14, 7, 232, 26, 14, + 7, 232, 25, 14, 7, 232, 24, 14, 7, 232, 23, 14, 7, 232, 22, 14, 7, 232, + 21, 14, 7, 232, 20, 14, 7, 232, 19, 14, 7, 232, 18, 14, 7, 232, 17, 14, + 7, 232, 16, 14, 7, 232, 15, 14, 7, 232, 14, 14, 7, 232, 13, 14, 7, 232, + 12, 14, 7, 232, 11, 14, 7, 232, 10, 14, 7, 232, 9, 14, 7, 232, 8, 14, 7, + 232, 7, 14, 7, 232, 6, 14, 7, 232, 5, 14, 7, 232, 4, 14, 7, 232, 3, 14, + 7, 232, 2, 14, 7, 232, 1, 14, 7, 232, 0, 14, 7, 231, 255, 14, 7, 231, + 254, 14, 7, 231, 253, 14, 7, 231, 252, 14, 7, 231, 251, 14, 7, 231, 250, + 14, 7, 231, 249, 14, 7, 231, 248, 14, 7, 231, 247, 14, 7, 231, 246, 14, + 7, 231, 245, 14, 7, 230, 116, 14, 7, 230, 115, 14, 7, 230, 114, 14, 7, + 230, 113, 14, 7, 230, 112, 14, 7, 230, 111, 14, 7, 230, 110, 14, 7, 230, + 109, 14, 7, 230, 108, 14, 7, 228, 56, 14, 7, 228, 55, 14, 7, 228, 54, 14, + 7, 228, 53, 14, 7, 228, 52, 14, 7, 228, 51, 14, 7, 228, 50, 14, 7, 228, + 49, 14, 7, 228, 48, 14, 7, 228, 47, 14, 7, 228, 46, 14, 7, 228, 45, 14, + 7, 228, 44, 14, 7, 228, 43, 14, 7, 228, 42, 14, 7, 228, 41, 14, 7, 228, + 40, 14, 7, 228, 39, 14, 7, 228, 38, 14, 7, 222, 153, 14, 7, 222, 152, 14, + 7, 222, 151, 14, 7, 222, 150, 14, 7, 222, 149, 14, 7, 222, 148, 14, 7, + 222, 147, 14, 7, 222, 146, 14, 7, 220, 142, 14, 7, 220, 141, 14, 7, 220, + 140, 14, 7, 220, 139, 14, 7, 220, 138, 14, 7, 220, 137, 14, 7, 220, 136, + 14, 7, 220, 135, 14, 7, 220, 134, 14, 7, 220, 133, 14, 7, 218, 168, 14, + 7, 218, 167, 14, 7, 218, 166, 14, 7, 218, 164, 14, 7, 218, 162, 14, 7, + 218, 161, 14, 7, 218, 159, 14, 7, 218, 157, 14, 7, 218, 155, 14, 7, 218, + 153, 14, 7, 218, 151, 14, 7, 218, 149, 14, 7, 218, 147, 14, 7, 218, 146, + 14, 7, 218, 144, 14, 7, 218, 142, 14, 7, 218, 141, 14, 7, 218, 140, 14, + 7, 218, 139, 14, 7, 218, 138, 14, 7, 218, 137, 14, 7, 218, 136, 14, 7, + 218, 135, 14, 7, 218, 134, 14, 7, 218, 132, 14, 7, 218, 130, 14, 7, 218, + 128, 14, 7, 218, 127, 14, 7, 218, 125, 14, 7, 218, 124, 14, 7, 218, 122, + 14, 7, 218, 121, 14, 7, 218, 119, 14, 7, 218, 117, 14, 7, 218, 115, 14, + 7, 218, 113, 14, 7, 218, 111, 14, 7, 218, 110, 14, 7, 218, 108, 14, 7, + 218, 106, 14, 7, 218, 105, 14, 7, 218, 103, 14, 7, 218, 101, 14, 7, 218, + 99, 14, 7, 218, 97, 14, 7, 218, 96, 14, 7, 218, 94, 14, 7, 218, 92, 14, + 7, 218, 90, 14, 7, 218, 89, 14, 7, 218, 87, 14, 7, 218, 85, 14, 7, 218, + 84, 14, 7, 218, 83, 14, 7, 218, 81, 14, 7, 218, 79, 14, 7, 218, 77, 14, + 7, 218, 75, 14, 7, 218, 73, 14, 7, 218, 71, 14, 7, 218, 69, 14, 7, 218, + 68, 14, 7, 218, 66, 14, 7, 218, 64, 14, 7, 218, 62, 14, 7, 218, 60, 14, + 7, 215, 58, 14, 7, 215, 57, 14, 7, 215, 56, 14, 7, 215, 55, 14, 7, 215, + 54, 14, 7, 215, 53, 14, 7, 215, 52, 14, 7, 215, 51, 14, 7, 215, 50, 14, + 7, 215, 49, 14, 7, 215, 48, 14, 7, 215, 47, 14, 7, 215, 46, 14, 7, 215, + 45, 14, 7, 215, 44, 14, 7, 215, 43, 14, 7, 215, 42, 14, 7, 215, 41, 14, + 7, 215, 40, 14, 7, 215, 39, 14, 7, 215, 38, 14, 7, 215, 37, 14, 7, 215, + 36, 14, 7, 215, 35, 14, 7, 215, 34, 14, 7, 215, 33, 14, 7, 215, 32, 14, + 7, 215, 31, 14, 7, 215, 30, 14, 7, 215, 29, 14, 7, 215, 28, 14, 7, 215, + 27, 14, 7, 215, 26, 14, 7, 215, 25, 14, 7, 215, 24, 14, 7, 215, 23, 14, + 7, 215, 22, 14, 7, 215, 21, 14, 7, 215, 20, 14, 7, 215, 19, 14, 7, 215, + 18, 14, 7, 215, 17, 14, 7, 215, 16, 14, 7, 215, 15, 14, 7, 215, 14, 14, + 7, 215, 13, 14, 7, 215, 12, 14, 7, 215, 11, 14, 7, 215, 10, 14, 7, 213, + 106, 14, 7, 213, 105, 14, 7, 213, 104, 14, 7, 213, 103, 14, 7, 213, 102, + 14, 7, 213, 101, 14, 7, 213, 100, 14, 7, 213, 99, 14, 7, 213, 98, 14, 7, + 213, 97, 14, 7, 213, 96, 14, 7, 213, 95, 14, 7, 213, 94, 14, 7, 213, 93, + 14, 7, 213, 92, 14, 7, 213, 91, 14, 7, 213, 90, 14, 7, 213, 89, 14, 7, + 213, 88, 14, 7, 213, 87, 14, 7, 213, 86, 14, 7, 213, 85, 14, 7, 212, 176, + 14, 7, 212, 175, 14, 7, 212, 174, 14, 7, 212, 173, 14, 7, 212, 172, 14, + 7, 212, 171, 14, 7, 212, 170, 14, 7, 212, 169, 14, 7, 212, 168, 14, 7, + 212, 167, 14, 7, 212, 166, 14, 7, 212, 165, 14, 7, 212, 164, 14, 7, 212, + 163, 14, 7, 212, 162, 14, 7, 212, 161, 14, 7, 212, 160, 14, 7, 212, 159, + 14, 7, 212, 158, 14, 7, 212, 157, 14, 7, 212, 156, 14, 7, 212, 155, 14, + 7, 212, 154, 14, 7, 212, 153, 14, 7, 212, 152, 14, 7, 212, 151, 14, 7, + 212, 4, 14, 7, 212, 3, 14, 7, 212, 2, 14, 7, 212, 1, 14, 7, 212, 0, 14, + 7, 211, 255, 14, 7, 211, 254, 14, 7, 211, 253, 14, 7, 211, 252, 14, 7, + 211, 251, 14, 7, 211, 250, 14, 7, 211, 249, 14, 7, 211, 248, 14, 7, 211, + 247, 14, 7, 211, 246, 14, 7, 211, 245, 14, 7, 211, 244, 14, 7, 211, 243, + 14, 7, 211, 242, 14, 7, 211, 241, 14, 7, 211, 240, 14, 7, 211, 239, 14, + 7, 211, 238, 14, 7, 211, 237, 14, 7, 211, 236, 14, 7, 211, 235, 14, 7, + 211, 234, 14, 7, 211, 233, 14, 7, 211, 232, 14, 7, 211, 231, 14, 7, 211, + 230, 14, 7, 211, 229, 14, 7, 211, 228, 14, 7, 211, 227, 14, 7, 211, 226, + 14, 7, 211, 225, 14, 7, 211, 224, 14, 7, 211, 223, 14, 7, 211, 222, 14, + 7, 211, 221, 14, 7, 211, 220, 14, 7, 211, 219, 14, 7, 211, 218, 14, 7, + 211, 217, 14, 7, 211, 216, 14, 7, 211, 215, 14, 7, 211, 214, 14, 7, 211, + 213, 14, 7, 211, 212, 14, 7, 211, 211, 14, 7, 211, 210, 14, 7, 211, 209, + 14, 7, 211, 208, 14, 7, 211, 207, 14, 7, 211, 206, 14, 7, 211, 205, 14, + 7, 211, 204, 14, 7, 211, 203, 14, 7, 211, 202, 14, 7, 211, 201, 14, 7, + 211, 200, 14, 7, 211, 199, 14, 7, 211, 198, 14, 7, 211, 197, 14, 7, 211, + 196, 14, 7, 211, 195, 14, 7, 211, 194, 14, 7, 211, 193, 14, 7, 211, 192, + 14, 7, 211, 191, 14, 7, 211, 190, 14, 7, 211, 189, 14, 7, 211, 188, 14, + 7, 211, 187, 14, 7, 211, 186, 14, 7, 210, 237, 14, 7, 210, 236, 14, 7, + 210, 235, 14, 7, 210, 234, 14, 7, 210, 233, 14, 7, 210, 232, 14, 7, 210, + 231, 14, 7, 210, 230, 14, 7, 210, 229, 14, 7, 210, 228, 14, 7, 210, 227, + 14, 7, 210, 226, 14, 7, 210, 225, 14, 7, 208, 105, 14, 7, 208, 104, 14, + 7, 208, 103, 14, 7, 208, 102, 14, 7, 208, 101, 14, 7, 208, 100, 14, 7, + 208, 99, 14, 7, 207, 222, 14, 7, 207, 221, 14, 7, 207, 220, 14, 7, 207, + 219, 14, 7, 207, 218, 14, 7, 207, 217, 14, 7, 207, 216, 14, 7, 207, 215, + 14, 7, 207, 214, 14, 7, 207, 213, 14, 7, 207, 212, 14, 7, 207, 211, 14, + 7, 207, 210, 14, 7, 207, 209, 14, 7, 207, 208, 14, 7, 207, 207, 14, 7, + 207, 206, 14, 7, 207, 205, 14, 7, 207, 204, 14, 7, 207, 203, 14, 7, 207, + 202, 14, 7, 207, 201, 14, 7, 207, 200, 14, 7, 207, 199, 14, 7, 207, 198, + 14, 7, 207, 197, 14, 7, 207, 196, 14, 7, 207, 195, 14, 7, 207, 194, 14, + 7, 207, 193, 14, 7, 207, 192, 14, 7, 207, 191, 14, 7, 207, 190, 14, 7, + 207, 189, 14, 7, 206, 6, 14, 7, 206, 5, 14, 7, 206, 4, 14, 7, 206, 3, 14, + 7, 206, 2, 14, 7, 206, 1, 14, 7, 206, 0, 14, 7, 205, 255, 14, 7, 205, + 254, 14, 7, 205, 253, 14, 7, 205, 252, 14, 7, 205, 251, 14, 7, 205, 250, + 14, 7, 205, 249, 14, 7, 205, 248, 14, 7, 205, 247, 14, 7, 205, 246, 14, + 7, 205, 245, 14, 7, 205, 244, 14, 7, 205, 243, 14, 7, 205, 242, 14, 7, + 205, 241, 14, 7, 205, 240, 14, 7, 205, 239, 14, 7, 205, 238, 14, 7, 205, + 237, 14, 7, 205, 236, 14, 7, 205, 235, 14, 7, 205, 234, 14, 7, 205, 233, + 14, 7, 205, 232, 14, 7, 205, 231, 14, 7, 205, 230, 14, 7, 205, 229, 14, + 7, 205, 228, 14, 7, 205, 227, 14, 7, 205, 226, 14, 7, 205, 225, 14, 7, + 205, 224, 14, 7, 205, 223, 14, 7, 205, 222, 14, 7, 205, 221, 14, 7, 205, + 220, 14, 7, 205, 219, 14, 7, 205, 218, 14, 7, 205, 217, 14, 7, 205, 216, + 14, 7, 205, 215, 14, 7, 205, 214, 14, 7, 205, 213, 14, 7, 205, 212, 14, + 7, 205, 211, 14, 7, 205, 210, 14, 7, 205, 209, 14, 7, 200, 40, 14, 7, 200, 39, 14, 7, 200, 38, 14, 7, 200, 37, 14, 7, 200, 36, 14, 7, 200, 35, 14, 7, 200, 34, 14, 7, 200, 33, 14, 7, 200, 32, 14, 7, 200, 31, 14, 7, 200, 30, 14, 7, 200, 29, 14, 7, 200, 28, 14, 7, 200, 27, 14, 7, 200, 26, @@ -16914,698 +16919,698 @@ static const unsigned char phrasebook[] = { 139, 14, 7, 191, 138, 14, 7, 191, 137, 14, 7, 191, 136, 14, 7, 191, 135, 14, 7, 191, 134, 14, 7, 191, 133, 14, 7, 191, 132, 14, 7, 191, 131, 14, 7, 191, 130, 14, 7, 191, 129, 14, 7, 191, 128, 14, 7, 191, 127, 14, 7, - 191, 126, 14, 7, 191, 125, 14, 7, 252, 205, 14, 7, 252, 204, 14, 7, 252, - 203, 14, 7, 252, 202, 14, 7, 252, 201, 14, 7, 252, 200, 14, 7, 252, 199, - 14, 7, 252, 198, 14, 7, 252, 197, 14, 7, 252, 196, 14, 7, 252, 195, 14, - 7, 252, 194, 14, 7, 252, 193, 14, 7, 252, 192, 14, 7, 252, 191, 14, 7, - 252, 190, 14, 7, 252, 189, 14, 7, 252, 188, 14, 7, 252, 187, 14, 7, 252, - 186, 14, 7, 252, 185, 14, 7, 252, 184, 14, 7, 252, 183, 14, 7, 252, 182, - 14, 7, 252, 181, 14, 7, 252, 180, 14, 7, 252, 179, 14, 7, 252, 178, 14, - 7, 252, 177, 14, 7, 252, 176, 14, 7, 252, 175, 14, 7, 252, 174, 14, 7, - 252, 173, 14, 7, 252, 172, 14, 7, 195, 241, 14, 7, 81, 222, 196, 14, 7, - 228, 241, 222, 196, 14, 7, 223, 120, 250, 183, 198, 54, 201, 97, 14, 7, - 223, 120, 250, 183, 248, 77, 201, 97, 14, 7, 223, 120, 250, 183, 198, 54, - 234, 94, 14, 7, 223, 120, 250, 183, 248, 77, 234, 94, 14, 7, 211, 0, 216, - 84, 14, 7, 248, 249, 205, 43, 14, 7, 234, 95, 205, 43, 14, 7, 223, 120, - 250, 183, 216, 84, 14, 7, 223, 120, 250, 183, 198, 53, 14, 7, 223, 120, - 250, 183, 248, 76, 14, 7, 248, 249, 234, 98, 14, 7, 234, 95, 234, 98, 14, - 7, 248, 249, 193, 166, 234, 98, 14, 7, 234, 95, 193, 166, 234, 98, 14, 7, - 216, 27, 228, 189, 14, 7, 232, 80, 248, 132, 14, 7, 132, 248, 132, 14, 7, - 218, 251, 56, 14, 7, 132, 218, 251, 56, 14, 7, 199, 200, 218, 251, 56, - 14, 7, 193, 78, 218, 251, 56, 14, 7, 52, 237, 249, 250, 183, 198, 54, - 201, 97, 14, 7, 52, 237, 249, 250, 183, 248, 77, 201, 97, 14, 7, 52, 237, - 249, 250, 183, 201, 97, 14, 7, 52, 237, 249, 250, 183, 198, 54, 234, 94, - 14, 7, 52, 237, 249, 250, 183, 198, 53, 14, 7, 52, 237, 249, 250, 183, - 248, 77, 201, 98, 23, 198, 54, 234, 94, 14, 7, 52, 237, 249, 250, 183, - 201, 98, 23, 198, 53, 14, 7, 52, 237, 249, 250, 183, 248, 77, 234, 94, - 14, 7, 52, 237, 249, 250, 183, 198, 54, 201, 98, 23, 248, 77, 234, 94, - 14, 7, 52, 237, 249, 250, 183, 248, 76, 14, 7, 52, 237, 249, 250, 183, - 201, 98, 23, 248, 76, 14, 7, 52, 237, 249, 250, 183, 234, 94, 14, 7, 52, - 237, 249, 250, 183, 198, 54, 23, 234, 94, 14, 7, 52, 237, 249, 250, 183, - 248, 77, 23, 234, 94, 14, 7, 52, 237, 248, 29, 7, 255, 199, 29, 7, 255, - 198, 29, 7, 255, 197, 29, 7, 255, 196, 29, 7, 255, 195, 29, 7, 255, 193, - 29, 7, 255, 190, 29, 7, 255, 189, 29, 7, 255, 188, 29, 7, 255, 187, 29, - 7, 255, 186, 29, 7, 255, 185, 29, 7, 255, 184, 29, 7, 255, 183, 29, 7, - 255, 182, 29, 7, 255, 180, 29, 7, 255, 179, 29, 7, 255, 178, 29, 7, 255, - 176, 29, 7, 255, 175, 29, 7, 255, 174, 29, 7, 255, 173, 29, 7, 255, 172, - 29, 7, 255, 171, 29, 7, 255, 170, 29, 7, 255, 169, 29, 7, 255, 168, 29, - 7, 255, 167, 29, 7, 255, 166, 29, 7, 255, 165, 29, 7, 255, 163, 29, 7, - 255, 162, 29, 7, 255, 161, 29, 7, 255, 160, 29, 7, 255, 158, 29, 7, 255, - 157, 29, 7, 255, 156, 29, 7, 255, 155, 29, 7, 255, 154, 29, 7, 255, 153, - 29, 7, 255, 152, 29, 7, 255, 151, 29, 7, 255, 150, 29, 7, 255, 148, 29, - 7, 255, 147, 29, 7, 255, 146, 29, 7, 255, 144, 29, 7, 255, 142, 29, 7, - 255, 141, 29, 7, 255, 140, 29, 7, 255, 139, 29, 7, 255, 138, 29, 7, 255, - 137, 29, 7, 255, 136, 29, 7, 255, 135, 29, 7, 255, 134, 29, 7, 255, 133, - 29, 7, 255, 132, 29, 7, 255, 131, 29, 7, 255, 130, 29, 7, 255, 129, 29, - 7, 255, 128, 29, 7, 255, 127, 29, 7, 255, 126, 29, 7, 255, 125, 29, 7, - 255, 124, 29, 7, 255, 123, 29, 7, 255, 122, 29, 7, 255, 121, 29, 7, 255, - 120, 29, 7, 255, 119, 29, 7, 255, 118, 29, 7, 255, 117, 29, 7, 255, 116, - 29, 7, 255, 115, 29, 7, 255, 114, 29, 7, 255, 113, 29, 7, 255, 112, 29, - 7, 255, 111, 29, 7, 255, 110, 29, 7, 255, 109, 29, 7, 255, 108, 29, 7, - 255, 107, 29, 7, 255, 106, 29, 7, 255, 105, 29, 7, 255, 104, 29, 7, 255, - 103, 29, 7, 255, 102, 29, 7, 255, 101, 29, 7, 255, 100, 29, 7, 255, 99, - 29, 7, 255, 98, 29, 7, 255, 97, 29, 7, 255, 96, 29, 7, 255, 95, 29, 7, - 255, 94, 29, 7, 255, 93, 29, 7, 255, 92, 29, 7, 255, 91, 29, 7, 255, 90, - 29, 7, 255, 89, 29, 7, 255, 88, 29, 7, 255, 87, 29, 7, 255, 86, 29, 7, - 255, 85, 29, 7, 255, 84, 29, 7, 255, 83, 29, 7, 255, 82, 29, 7, 255, 81, - 29, 7, 255, 80, 29, 7, 255, 79, 29, 7, 255, 78, 29, 7, 255, 76, 29, 7, - 255, 75, 29, 7, 255, 74, 29, 7, 255, 73, 29, 7, 255, 72, 29, 7, 255, 71, - 29, 7, 255, 70, 29, 7, 255, 69, 29, 7, 255, 68, 29, 7, 255, 67, 29, 7, - 255, 66, 29, 7, 255, 65, 29, 7, 255, 64, 29, 7, 255, 63, 29, 7, 255, 62, - 29, 7, 255, 61, 29, 7, 255, 60, 29, 7, 255, 59, 29, 7, 255, 58, 29, 7, - 255, 57, 29, 7, 255, 56, 29, 7, 255, 55, 29, 7, 255, 54, 29, 7, 255, 53, - 29, 7, 255, 52, 29, 7, 255, 51, 29, 7, 255, 50, 29, 7, 255, 49, 29, 7, - 255, 48, 29, 7, 255, 47, 29, 7, 255, 46, 29, 7, 255, 45, 29, 7, 255, 44, - 29, 7, 255, 43, 29, 7, 255, 41, 29, 7, 255, 40, 29, 7, 255, 39, 29, 7, - 255, 38, 29, 7, 255, 37, 29, 7, 255, 36, 29, 7, 255, 35, 29, 7, 255, 34, - 29, 7, 255, 33, 29, 7, 255, 32, 29, 7, 255, 31, 29, 7, 255, 30, 29, 7, - 255, 28, 29, 7, 255, 27, 29, 7, 255, 26, 29, 7, 255, 25, 29, 7, 255, 24, - 29, 7, 255, 23, 29, 7, 255, 22, 29, 7, 255, 21, 29, 7, 255, 20, 29, 7, - 255, 19, 29, 7, 255, 18, 29, 7, 255, 17, 29, 7, 255, 16, 29, 7, 255, 15, - 29, 7, 255, 14, 29, 7, 255, 13, 29, 7, 255, 12, 29, 7, 255, 11, 29, 7, - 255, 10, 29, 7, 255, 9, 29, 7, 255, 8, 29, 7, 255, 7, 29, 7, 255, 6, 29, - 7, 255, 5, 29, 7, 255, 4, 29, 7, 255, 3, 29, 7, 255, 2, 29, 7, 255, 1, - 29, 7, 255, 0, 29, 7, 254, 255, 29, 7, 254, 254, 29, 7, 254, 253, 29, 7, - 254, 252, 29, 7, 254, 251, 29, 7, 254, 250, 29, 7, 254, 249, 29, 7, 254, - 248, 29, 7, 254, 247, 29, 7, 254, 246, 29, 7, 254, 245, 29, 7, 254, 244, - 29, 7, 254, 243, 29, 7, 254, 242, 29, 7, 254, 241, 29, 7, 254, 240, 29, - 7, 254, 239, 29, 7, 254, 238, 29, 7, 254, 237, 29, 7, 254, 236, 29, 7, - 254, 235, 29, 7, 254, 234, 29, 7, 254, 233, 29, 7, 254, 232, 29, 7, 254, - 231, 29, 7, 254, 230, 29, 7, 254, 229, 29, 7, 254, 228, 29, 7, 254, 227, - 29, 7, 254, 226, 29, 7, 254, 225, 29, 7, 254, 224, 29, 7, 254, 223, 29, - 7, 254, 222, 29, 7, 254, 221, 29, 7, 254, 220, 29, 7, 254, 219, 29, 7, - 254, 218, 29, 7, 254, 217, 29, 7, 254, 216, 29, 7, 254, 214, 29, 7, 254, - 213, 29, 7, 254, 212, 29, 7, 254, 211, 29, 7, 254, 210, 29, 7, 254, 209, - 29, 7, 254, 208, 29, 7, 254, 207, 29, 7, 254, 206, 29, 7, 254, 205, 29, - 7, 254, 204, 29, 7, 254, 203, 29, 7, 254, 202, 29, 7, 254, 201, 29, 7, - 254, 200, 29, 7, 254, 199, 29, 7, 254, 198, 29, 7, 254, 197, 29, 7, 254, - 196, 29, 7, 254, 195, 29, 7, 254, 194, 29, 7, 254, 193, 29, 7, 254, 192, - 29, 7, 254, 191, 29, 7, 254, 190, 29, 7, 254, 189, 29, 7, 254, 188, 29, - 7, 254, 187, 29, 7, 254, 186, 29, 7, 254, 185, 29, 7, 254, 184, 29, 7, - 254, 183, 29, 7, 254, 182, 29, 7, 254, 181, 29, 7, 254, 180, 29, 7, 254, - 179, 29, 7, 254, 178, 29, 7, 254, 177, 29, 7, 254, 176, 29, 7, 254, 175, - 29, 7, 254, 174, 29, 7, 254, 173, 29, 7, 254, 172, 29, 7, 254, 171, 29, - 7, 254, 170, 29, 7, 254, 169, 29, 7, 254, 168, 29, 7, 254, 167, 29, 7, - 254, 166, 29, 7, 254, 165, 29, 7, 254, 164, 29, 7, 254, 163, 29, 7, 254, - 162, 29, 7, 254, 161, 29, 7, 254, 160, 29, 7, 254, 159, 29, 7, 254, 158, - 29, 7, 254, 157, 29, 7, 254, 156, 29, 7, 254, 155, 29, 7, 254, 154, 29, - 7, 254, 153, 29, 7, 254, 152, 29, 7, 254, 151, 29, 7, 254, 150, 29, 7, - 254, 149, 29, 7, 254, 148, 29, 7, 254, 147, 29, 7, 254, 146, 29, 7, 254, - 145, 29, 7, 254, 144, 29, 7, 254, 143, 29, 7, 254, 142, 29, 7, 254, 141, - 29, 7, 254, 140, 29, 7, 254, 139, 29, 7, 254, 138, 29, 7, 254, 137, 29, - 7, 254, 136, 29, 7, 254, 135, 29, 7, 254, 134, 29, 7, 254, 133, 29, 7, - 254, 132, 29, 7, 254, 131, 29, 7, 254, 130, 29, 7, 254, 129, 29, 7, 254, - 128, 29, 7, 254, 127, 29, 7, 254, 126, 29, 7, 254, 125, 29, 7, 254, 124, - 29, 7, 254, 123, 29, 7, 254, 122, 29, 7, 254, 121, 29, 7, 254, 120, 29, - 7, 254, 119, 29, 7, 254, 118, 29, 7, 254, 117, 29, 7, 254, 116, 29, 7, - 254, 115, 29, 7, 254, 114, 29, 7, 254, 113, 29, 7, 254, 112, 29, 7, 254, - 111, 29, 7, 254, 110, 29, 7, 254, 109, 29, 7, 254, 108, 29, 7, 254, 107, - 29, 7, 254, 106, 29, 7, 254, 105, 29, 7, 254, 104, 29, 7, 254, 102, 29, - 7, 254, 101, 29, 7, 254, 100, 29, 7, 254, 99, 29, 7, 254, 98, 29, 7, 254, - 97, 29, 7, 254, 96, 29, 7, 254, 95, 29, 7, 254, 94, 29, 7, 254, 93, 29, - 7, 254, 92, 29, 7, 254, 89, 29, 7, 254, 88, 29, 7, 254, 87, 29, 7, 254, - 86, 29, 7, 254, 82, 29, 7, 254, 81, 29, 7, 254, 80, 29, 7, 254, 79, 29, - 7, 254, 78, 29, 7, 254, 77, 29, 7, 254, 76, 29, 7, 254, 75, 29, 7, 254, - 74, 29, 7, 254, 73, 29, 7, 254, 72, 29, 7, 254, 71, 29, 7, 254, 70, 29, - 7, 254, 69, 29, 7, 254, 68, 29, 7, 254, 67, 29, 7, 254, 66, 29, 7, 254, - 65, 29, 7, 254, 64, 29, 7, 254, 62, 29, 7, 254, 61, 29, 7, 254, 60, 29, - 7, 254, 59, 29, 7, 254, 58, 29, 7, 254, 57, 29, 7, 254, 56, 29, 7, 254, - 55, 29, 7, 254, 54, 29, 7, 254, 53, 29, 7, 254, 52, 29, 7, 254, 51, 29, - 7, 254, 50, 29, 7, 254, 49, 29, 7, 254, 48, 29, 7, 254, 47, 29, 7, 254, - 46, 29, 7, 254, 45, 29, 7, 254, 44, 29, 7, 254, 43, 29, 7, 254, 42, 29, - 7, 254, 41, 29, 7, 254, 40, 29, 7, 254, 39, 29, 7, 254, 38, 29, 7, 254, - 37, 29, 7, 254, 36, 29, 7, 254, 35, 29, 7, 254, 34, 29, 7, 254, 33, 29, - 7, 254, 32, 29, 7, 254, 31, 29, 7, 254, 30, 29, 7, 254, 29, 29, 7, 254, - 28, 29, 7, 254, 27, 29, 7, 254, 26, 29, 7, 254, 25, 29, 7, 254, 24, 29, - 7, 254, 23, 29, 7, 254, 22, 29, 7, 254, 21, 29, 7, 254, 20, 29, 7, 254, - 19, 29, 7, 254, 18, 29, 7, 254, 17, 29, 7, 254, 16, 29, 7, 254, 15, 29, - 7, 254, 14, 29, 7, 254, 13, 29, 7, 254, 12, 29, 7, 254, 11, 29, 7, 254, - 10, 29, 7, 254, 9, 29, 7, 254, 8, 29, 7, 254, 7, 29, 7, 254, 6, 29, 7, - 254, 5, 29, 7, 254, 4, 29, 7, 254, 3, 29, 7, 254, 2, 29, 7, 254, 1, 207, - 186, 211, 57, 207, 1, 29, 7, 254, 0, 29, 7, 253, 255, 29, 7, 253, 254, - 29, 7, 253, 253, 29, 7, 253, 252, 29, 7, 253, 251, 29, 7, 253, 250, 29, - 7, 253, 249, 29, 7, 253, 248, 29, 7, 253, 247, 29, 7, 253, 246, 29, 7, - 253, 245, 171, 29, 7, 253, 244, 29, 7, 253, 243, 29, 7, 253, 242, 29, 7, - 253, 241, 29, 7, 253, 240, 29, 7, 253, 239, 29, 7, 253, 238, 29, 7, 253, - 236, 29, 7, 253, 234, 29, 7, 253, 232, 29, 7, 253, 230, 29, 7, 253, 228, - 29, 7, 253, 226, 29, 7, 253, 224, 29, 7, 253, 222, 29, 7, 253, 220, 29, - 7, 253, 218, 248, 249, 219, 28, 77, 29, 7, 253, 216, 234, 95, 219, 28, - 77, 29, 7, 253, 215, 29, 7, 253, 213, 29, 7, 253, 211, 29, 7, 253, 209, - 29, 7, 253, 207, 29, 7, 253, 205, 29, 7, 253, 203, 29, 7, 253, 201, 29, - 7, 253, 199, 29, 7, 253, 198, 29, 7, 253, 197, 29, 7, 253, 196, 29, 7, - 253, 195, 29, 7, 253, 194, 29, 7, 253, 193, 29, 7, 253, 192, 29, 7, 253, - 191, 29, 7, 253, 190, 29, 7, 253, 189, 29, 7, 253, 188, 29, 7, 253, 187, - 29, 7, 253, 186, 29, 7, 253, 185, 29, 7, 253, 184, 29, 7, 253, 183, 29, - 7, 253, 182, 29, 7, 253, 181, 29, 7, 253, 180, 29, 7, 253, 179, 29, 7, - 253, 178, 29, 7, 253, 177, 29, 7, 253, 176, 29, 7, 253, 175, 29, 7, 253, - 174, 29, 7, 253, 173, 29, 7, 253, 172, 29, 7, 253, 171, 29, 7, 253, 170, - 29, 7, 253, 169, 29, 7, 253, 168, 29, 7, 253, 167, 29, 7, 253, 166, 29, - 7, 253, 165, 29, 7, 253, 164, 29, 7, 253, 163, 29, 7, 253, 162, 29, 7, - 253, 161, 29, 7, 253, 160, 29, 7, 253, 159, 29, 7, 253, 158, 29, 7, 253, - 157, 29, 7, 253, 156, 29, 7, 253, 155, 29, 7, 253, 154, 29, 7, 253, 153, - 29, 7, 253, 152, 29, 7, 253, 151, 29, 7, 253, 150, 29, 7, 253, 149, 29, - 7, 253, 148, 29, 7, 253, 147, 29, 7, 253, 146, 29, 7, 253, 145, 29, 7, - 253, 144, 29, 7, 253, 143, 29, 7, 253, 142, 29, 7, 253, 141, 29, 7, 253, - 140, 29, 7, 253, 139, 29, 7, 253, 138, 29, 7, 253, 137, 29, 7, 253, 136, - 29, 7, 253, 135, 29, 7, 253, 134, 29, 7, 253, 133, 29, 7, 253, 132, 29, - 7, 253, 131, 29, 7, 253, 130, 29, 7, 253, 129, 29, 7, 253, 128, 29, 7, - 253, 127, 29, 7, 253, 126, 29, 7, 253, 125, 29, 7, 253, 124, 29, 7, 253, - 123, 29, 7, 253, 122, 29, 7, 253, 121, 29, 7, 253, 120, 29, 7, 253, 119, - 29, 7, 253, 118, 29, 7, 253, 117, 29, 7, 253, 116, 29, 7, 253, 115, 29, - 7, 253, 114, 29, 7, 253, 113, 29, 7, 253, 112, 29, 7, 253, 111, 29, 7, - 253, 110, 29, 7, 253, 109, 29, 7, 253, 108, 29, 7, 253, 107, 29, 7, 253, - 106, 29, 7, 253, 105, 29, 7, 253, 104, 29, 7, 253, 103, 29, 7, 253, 102, - 29, 7, 253, 101, 29, 7, 253, 100, 29, 7, 253, 99, 29, 7, 253, 98, 29, 7, - 253, 97, 29, 7, 253, 96, 29, 7, 253, 95, 29, 7, 253, 94, 29, 7, 253, 93, - 29, 7, 253, 92, 29, 7, 253, 91, 29, 7, 253, 90, 29, 7, 253, 89, 26, 1, - 209, 218, 214, 1, 216, 142, 26, 1, 209, 218, 231, 173, 232, 166, 26, 1, - 209, 218, 209, 40, 216, 143, 209, 127, 26, 1, 209, 218, 209, 40, 216, - 143, 209, 128, 26, 1, 209, 218, 214, 251, 216, 142, 26, 1, 209, 218, 203, - 0, 26, 1, 209, 218, 198, 124, 216, 142, 26, 1, 209, 218, 212, 47, 216, - 142, 26, 1, 209, 218, 203, 68, 210, 221, 213, 141, 26, 1, 209, 218, 209, - 40, 210, 221, 213, 142, 209, 127, 26, 1, 209, 218, 209, 40, 210, 221, - 213, 142, 209, 128, 26, 1, 209, 218, 217, 131, 26, 1, 209, 218, 197, 95, - 217, 132, 26, 1, 209, 218, 214, 62, 26, 1, 209, 218, 217, 128, 26, 1, - 209, 218, 217, 77, 26, 1, 209, 218, 215, 86, 26, 1, 209, 218, 203, 249, - 26, 1, 209, 218, 212, 187, 26, 1, 209, 218, 221, 234, 26, 1, 209, 218, - 213, 108, 26, 1, 209, 218, 200, 160, 26, 1, 209, 218, 214, 0, 26, 1, 209, - 218, 220, 15, 26, 1, 209, 218, 219, 177, 220, 188, 26, 1, 209, 218, 212, - 197, 216, 150, 26, 1, 209, 218, 217, 135, 26, 1, 209, 218, 210, 98, 26, - 1, 209, 218, 231, 72, 26, 1, 209, 218, 210, 170, 26, 1, 209, 218, 215, - 232, 214, 35, 26, 1, 209, 218, 212, 28, 216, 153, 26, 1, 209, 218, 126, - 191, 195, 214, 244, 26, 1, 209, 218, 231, 73, 26, 1, 209, 218, 212, 197, - 212, 198, 26, 1, 209, 218, 202, 139, 26, 1, 209, 218, 216, 135, 26, 1, - 209, 218, 216, 156, 26, 1, 209, 218, 215, 207, 26, 1, 209, 218, 222, 105, - 26, 1, 209, 218, 210, 221, 219, 225, 26, 1, 209, 218, 214, 163, 219, 225, - 26, 1, 209, 218, 209, 240, 26, 1, 209, 218, 217, 129, 26, 1, 209, 218, - 213, 185, 26, 1, 209, 218, 208, 144, 26, 1, 209, 218, 197, 87, 26, 1, - 209, 218, 218, 221, 26, 1, 209, 218, 202, 17, 26, 1, 209, 218, 199, 58, - 26, 1, 209, 218, 217, 126, 26, 1, 209, 218, 221, 241, 26, 1, 209, 218, - 214, 159, 26, 1, 209, 218, 220, 203, 26, 1, 209, 218, 215, 208, 26, 1, - 209, 218, 202, 252, 26, 1, 209, 218, 219, 20, 26, 1, 209, 218, 232, 239, - 26, 1, 209, 218, 206, 137, 26, 1, 209, 218, 221, 10, 26, 1, 209, 218, - 202, 13, 26, 1, 209, 218, 217, 72, 209, 173, 26, 1, 209, 218, 203, 61, - 26, 1, 209, 218, 212, 196, 26, 1, 209, 218, 203, 42, 212, 208, 191, 203, - 26, 1, 209, 218, 212, 69, 215, 228, 26, 1, 209, 218, 210, 216, 26, 1, - 209, 218, 213, 110, 26, 1, 209, 218, 196, 85, 26, 1, 209, 218, 214, 38, - 26, 1, 209, 218, 217, 125, 26, 1, 209, 218, 213, 153, 26, 1, 209, 218, - 217, 6, 26, 1, 209, 218, 212, 84, 26, 1, 209, 218, 199, 62, 26, 1, 209, - 218, 202, 8, 26, 1, 209, 218, 210, 217, 26, 1, 209, 218, 212, 212, 26, 1, - 209, 218, 217, 133, 26, 1, 209, 218, 212, 81, 26, 1, 209, 218, 222, 66, - 26, 1, 209, 218, 212, 215, 26, 1, 209, 218, 195, 148, 26, 1, 209, 218, - 218, 225, 26, 1, 209, 218, 214, 102, 26, 1, 209, 218, 214, 217, 26, 1, - 209, 218, 217, 5, 26, 1, 209, 217, 212, 210, 26, 1, 209, 217, 197, 95, - 217, 130, 26, 1, 209, 217, 202, 204, 26, 1, 209, 217, 203, 253, 197, 94, - 26, 1, 209, 217, 219, 23, 212, 193, 26, 1, 209, 217, 217, 12, 217, 134, - 26, 1, 209, 217, 221, 150, 26, 1, 209, 217, 192, 43, 26, 1, 209, 217, - 217, 7, 26, 1, 209, 217, 222, 90, 26, 1, 209, 217, 210, 44, 26, 1, 209, - 217, 192, 126, 219, 225, 26, 1, 209, 217, 220, 36, 212, 208, 212, 95, 26, - 1, 209, 217, 212, 190, 203, 87, 26, 1, 209, 217, 214, 130, 213, 156, 26, - 1, 209, 217, 231, 70, 26, 1, 209, 217, 209, 117, 26, 1, 209, 217, 197, - 95, 212, 206, 26, 1, 209, 217, 203, 92, 213, 151, 26, 1, 209, 217, 203, - 88, 26, 1, 209, 217, 216, 143, 199, 61, 26, 1, 209, 217, 216, 250, 217, - 8, 26, 1, 209, 217, 212, 82, 212, 193, 26, 1, 209, 217, 221, 230, 26, 1, - 209, 217, 231, 71, 26, 1, 209, 217, 221, 226, 26, 1, 209, 217, 220, 120, - 26, 1, 209, 217, 210, 101, 26, 1, 209, 217, 195, 77, 26, 1, 209, 217, - 214, 2, 215, 84, 26, 1, 209, 217, 214, 37, 216, 246, 26, 1, 209, 217, - 192, 254, 26, 1, 209, 217, 205, 175, 26, 1, 209, 217, 199, 240, 26, 1, - 209, 217, 216, 155, 26, 1, 209, 217, 214, 21, 26, 1, 209, 217, 214, 22, - 220, 12, 26, 1, 209, 217, 216, 145, 26, 1, 209, 217, 200, 214, 26, 1, - 209, 217, 216, 254, 26, 1, 209, 217, 215, 212, 26, 1, 209, 217, 212, 99, - 26, 1, 209, 217, 208, 148, 26, 1, 209, 217, 216, 154, 214, 39, 26, 1, - 209, 217, 233, 28, 26, 1, 209, 217, 216, 241, 26, 1, 209, 217, 233, 52, - 26, 1, 209, 217, 221, 238, 26, 1, 209, 217, 217, 160, 213, 145, 26, 1, - 209, 217, 217, 160, 213, 121, 26, 1, 209, 217, 219, 176, 26, 1, 209, 217, - 214, 45, 26, 1, 209, 217, 212, 217, 26, 1, 209, 217, 174, 26, 1, 209, - 217, 221, 133, 26, 1, 209, 217, 213, 246, 26, 1, 209, 216, 214, 1, 217, - 132, 26, 1, 209, 216, 212, 46, 26, 1, 209, 216, 191, 203, 26, 1, 209, - 216, 193, 160, 26, 1, 209, 216, 214, 38, 26, 1, 209, 216, 214, 151, 26, - 1, 209, 216, 214, 8, 26, 1, 209, 216, 231, 80, 26, 1, 209, 216, 217, 2, - 26, 1, 209, 216, 231, 180, 26, 1, 209, 216, 212, 71, 216, 21, 216, 157, - 26, 1, 209, 216, 212, 184, 216, 249, 26, 1, 209, 216, 216, 255, 26, 1, - 209, 216, 209, 123, 26, 1, 209, 216, 214, 136, 26, 1, 209, 216, 217, 10, - 247, 156, 26, 1, 209, 216, 221, 228, 26, 1, 209, 216, 231, 81, 26, 1, - 209, 216, 221, 235, 26, 1, 209, 216, 191, 226, 215, 117, 26, 1, 209, 216, - 212, 40, 26, 1, 209, 216, 216, 243, 26, 1, 209, 216, 212, 216, 26, 1, - 209, 216, 216, 249, 26, 1, 209, 216, 192, 44, 26, 1, 209, 216, 221, 18, - 26, 1, 209, 216, 222, 127, 26, 1, 209, 216, 203, 248, 26, 1, 209, 216, - 214, 145, 26, 1, 209, 216, 199, 238, 26, 1, 209, 216, 213, 125, 26, 1, - 209, 216, 198, 124, 191, 207, 26, 1, 209, 216, 200, 247, 26, 1, 209, 216, - 214, 28, 212, 95, 26, 1, 209, 216, 195, 76, 26, 1, 209, 216, 214, 220, - 26, 1, 209, 216, 217, 160, 221, 237, 26, 1, 209, 216, 212, 198, 26, 1, - 209, 216, 214, 23, 26, 1, 209, 216, 220, 16, 26, 1, 209, 216, 216, 251, - 26, 1, 209, 216, 216, 134, 26, 1, 209, 216, 212, 192, 26, 1, 209, 216, - 199, 57, 26, 1, 209, 216, 214, 25, 26, 1, 209, 216, 232, 84, 26, 1, 209, - 216, 214, 150, 26, 1, 209, 216, 212, 218, 26, 1, 209, 216, 212, 214, 26, - 1, 209, 216, 247, 240, 26, 1, 209, 216, 195, 78, 26, 1, 209, 216, 217, 0, - 26, 1, 209, 216, 206, 68, 26, 1, 209, 216, 213, 155, 26, 1, 209, 216, - 220, 35, 26, 1, 209, 216, 198, 121, 26, 1, 209, 216, 212, 200, 213, 246, - 26, 1, 209, 216, 213, 147, 26, 1, 209, 216, 221, 241, 26, 1, 209, 216, - 214, 30, 26, 1, 209, 216, 217, 125, 26, 1, 209, 216, 216, 244, 26, 1, - 209, 216, 218, 225, 26, 1, 209, 216, 220, 188, 26, 1, 209, 216, 213, 153, - 26, 1, 209, 216, 213, 246, 26, 1, 209, 216, 192, 244, 26, 1, 209, 216, - 214, 26, 26, 1, 209, 216, 212, 203, 26, 1, 209, 216, 212, 194, 26, 1, - 209, 216, 220, 205, 213, 110, 26, 1, 209, 216, 212, 201, 26, 1, 209, 216, - 214, 158, 26, 1, 209, 216, 217, 160, 212, 206, 26, 1, 209, 216, 192, 140, - 26, 1, 209, 216, 214, 157, 26, 1, 209, 216, 202, 255, 26, 1, 209, 216, - 203, 251, 26, 1, 209, 216, 216, 252, 26, 1, 209, 216, 217, 132, 26, 1, - 209, 216, 217, 6, 26, 1, 209, 216, 221, 229, 26, 1, 209, 216, 216, 253, - 26, 1, 209, 216, 221, 233, 26, 1, 209, 216, 217, 10, 209, 179, 26, 1, - 209, 216, 191, 186, 26, 1, 209, 216, 213, 143, 26, 1, 209, 216, 216, 80, - 26, 1, 209, 216, 215, 149, 26, 1, 209, 216, 203, 64, 26, 1, 209, 216, - 221, 252, 219, 250, 26, 1, 209, 216, 221, 252, 233, 65, 26, 1, 209, 216, - 214, 60, 26, 1, 209, 216, 214, 217, 26, 1, 209, 216, 219, 94, 26, 1, 209, - 216, 209, 139, 26, 1, 209, 216, 210, 34, 26, 1, 209, 216, 199, 73, 26, 1, - 158, 216, 242, 26, 1, 158, 193, 158, 26, 1, 158, 213, 141, 26, 1, 158, - 216, 142, 26, 1, 158, 213, 139, 26, 1, 158, 219, 139, 26, 1, 158, 213, - 144, 26, 1, 158, 212, 213, 26, 1, 158, 214, 44, 26, 1, 158, 212, 95, 26, - 1, 158, 192, 255, 26, 1, 158, 213, 254, 26, 1, 158, 203, 111, 26, 1, 158, - 214, 9, 26, 1, 158, 221, 236, 26, 1, 158, 199, 59, 26, 1, 158, 203, 90, - 26, 1, 158, 213, 152, 26, 1, 158, 200, 214, 26, 1, 158, 221, 241, 26, 1, - 158, 192, 128, 26, 1, 158, 220, 206, 26, 1, 158, 205, 130, 26, 1, 158, - 216, 147, 26, 1, 158, 214, 149, 26, 1, 158, 217, 95, 26, 1, 158, 216, - 153, 26, 1, 158, 203, 250, 26, 1, 158, 192, 70, 26, 1, 158, 213, 146, 26, - 1, 158, 221, 232, 216, 245, 26, 1, 158, 214, 5, 26, 1, 158, 197, 94, 26, - 1, 158, 231, 90, 26, 1, 158, 213, 251, 26, 1, 158, 233, 29, 26, 1, 158, - 214, 153, 26, 1, 158, 216, 126, 26, 1, 158, 219, 170, 26, 1, 158, 214, - 135, 26, 1, 158, 215, 227, 26, 1, 158, 216, 130, 26, 1, 158, 208, 127, - 26, 1, 158, 216, 128, 26, 1, 158, 216, 144, 26, 1, 158, 218, 208, 26, 1, - 158, 212, 205, 26, 1, 158, 217, 9, 26, 1, 158, 220, 177, 26, 1, 158, 212, - 84, 26, 1, 158, 199, 62, 26, 1, 158, 202, 8, 26, 1, 158, 191, 186, 26, 1, - 158, 221, 233, 26, 1, 158, 207, 162, 26, 1, 158, 199, 120, 26, 1, 158, - 214, 6, 26, 1, 158, 216, 149, 26, 1, 158, 212, 204, 26, 1, 158, 221, 231, - 26, 1, 158, 209, 129, 26, 1, 158, 209, 233, 26, 1, 158, 212, 57, 26, 1, - 158, 219, 176, 26, 1, 158, 214, 45, 26, 1, 158, 216, 146, 26, 1, 158, - 214, 18, 26, 1, 158, 191, 200, 26, 1, 158, 210, 137, 26, 1, 158, 191, - 199, 26, 1, 158, 214, 158, 26, 1, 158, 212, 193, 26, 1, 158, 200, 249, - 26, 1, 158, 220, 210, 26, 1, 158, 214, 34, 26, 1, 158, 214, 3, 26, 1, - 158, 197, 69, 26, 1, 158, 216, 157, 26, 1, 158, 220, 199, 26, 1, 158, - 212, 202, 26, 1, 158, 199, 60, 26, 1, 158, 217, 127, 26, 1, 158, 214, 43, - 26, 1, 158, 219, 169, 26, 1, 158, 214, 24, 26, 1, 158, 212, 207, 26, 1, - 158, 213, 125, 26, 1, 158, 231, 74, 26, 1, 158, 220, 232, 26, 1, 158, - 207, 56, 211, 119, 26, 1, 158, 199, 226, 26, 1, 158, 198, 50, 26, 1, 158, - 212, 81, 26, 1, 158, 206, 195, 26, 1, 158, 219, 227, 26, 1, 158, 216, - 210, 26, 1, 158, 218, 168, 26, 1, 158, 200, 160, 26, 1, 158, 215, 155, - 26, 1, 158, 203, 76, 26, 1, 158, 203, 86, 26, 1, 158, 220, 149, 26, 1, - 158, 212, 178, 26, 1, 158, 203, 5, 26, 1, 158, 212, 195, 26, 1, 158, 210, - 49, 26, 1, 158, 213, 219, 26, 1, 158, 203, 41, 26, 1, 158, 208, 143, 26, - 1, 158, 215, 84, 26, 1, 158, 219, 0, 26, 1, 158, 207, 56, 215, 144, 26, - 1, 158, 198, 193, 26, 1, 158, 212, 181, 26, 1, 158, 217, 10, 175, 26, 1, - 158, 205, 128, 26, 1, 158, 233, 108, 26, 1, 114, 214, 157, 26, 1, 114, - 198, 57, 26, 1, 114, 216, 255, 26, 1, 114, 220, 16, 26, 1, 114, 195, 10, - 26, 1, 114, 219, 6, 26, 1, 114, 210, 220, 26, 1, 114, 202, 21, 26, 1, - 114, 207, 134, 26, 1, 114, 212, 209, 26, 1, 114, 214, 128, 26, 1, 114, - 208, 161, 26, 1, 114, 199, 197, 26, 1, 114, 214, 11, 26, 1, 114, 221, 14, - 26, 1, 114, 192, 247, 26, 1, 114, 205, 50, 26, 1, 114, 214, 35, 26, 1, - 114, 210, 217, 26, 1, 114, 198, 59, 26, 1, 114, 220, 204, 26, 1, 114, - 219, 22, 26, 1, 114, 212, 212, 26, 1, 114, 213, 243, 26, 1, 114, 217, - 133, 26, 1, 114, 214, 4, 26, 1, 114, 213, 242, 26, 1, 114, 212, 211, 26, - 1, 114, 206, 192, 26, 1, 114, 213, 143, 26, 1, 114, 210, 46, 26, 1, 114, - 205, 197, 26, 1, 114, 214, 19, 26, 1, 114, 216, 136, 26, 1, 114, 231, 68, - 26, 1, 114, 214, 7, 26, 1, 114, 213, 154, 26, 1, 114, 217, 71, 26, 1, - 114, 219, 2, 26, 1, 114, 214, 40, 26, 1, 114, 214, 141, 26, 1, 114, 199, - 225, 212, 193, 26, 1, 114, 203, 252, 26, 1, 114, 208, 154, 26, 1, 114, - 214, 161, 202, 30, 26, 1, 114, 214, 27, 212, 95, 26, 1, 114, 192, 29, 26, - 1, 114, 231, 69, 26, 1, 114, 197, 88, 26, 1, 114, 192, 47, 26, 1, 114, - 209, 73, 26, 1, 114, 197, 75, 26, 1, 114, 221, 239, 26, 1, 114, 200, 248, - 26, 1, 114, 199, 61, 26, 1, 114, 195, 79, 26, 1, 114, 193, 100, 26, 1, - 114, 220, 123, 26, 1, 114, 208, 165, 26, 1, 114, 199, 239, 26, 1, 114, - 231, 89, 26, 1, 114, 214, 50, 26, 1, 114, 203, 89, 26, 1, 114, 216, 131, - 26, 1, 114, 217, 3, 26, 1, 114, 212, 44, 26, 1, 114, 213, 106, 26, 1, - 114, 231, 176, 26, 1, 114, 197, 76, 26, 1, 114, 220, 215, 26, 1, 114, - 192, 104, 26, 1, 114, 212, 82, 242, 237, 26, 1, 114, 192, 18, 26, 1, 114, - 216, 148, 26, 1, 114, 214, 146, 26, 1, 114, 209, 174, 26, 1, 114, 191, - 206, 26, 1, 114, 219, 171, 26, 1, 114, 232, 84, 26, 1, 114, 231, 175, 26, - 1, 114, 213, 253, 26, 1, 114, 221, 241, 26, 1, 114, 217, 136, 26, 1, 114, - 214, 10, 26, 1, 114, 231, 75, 26, 1, 114, 233, 109, 26, 1, 114, 212, 182, - 26, 1, 114, 209, 234, 26, 1, 114, 192, 45, 26, 1, 114, 214, 36, 26, 1, - 114, 212, 82, 248, 209, 26, 1, 114, 212, 24, 26, 1, 114, 209, 35, 26, 1, - 114, 216, 80, 26, 1, 114, 232, 82, 26, 1, 114, 214, 244, 26, 1, 114, 215, - 149, 26, 1, 114, 231, 74, 26, 1, 114, 232, 87, 68, 26, 1, 114, 215, 85, - 26, 1, 114, 208, 160, 26, 1, 114, 213, 255, 26, 1, 114, 220, 188, 26, 1, - 114, 209, 171, 26, 1, 114, 212, 196, 26, 1, 114, 192, 46, 26, 1, 114, - 214, 20, 26, 1, 114, 210, 221, 210, 19, 26, 1, 114, 232, 87, 247, 138, - 26, 1, 114, 232, 167, 26, 1, 114, 213, 148, 26, 1, 114, 65, 26, 1, 114, - 198, 50, 26, 1, 114, 74, 26, 1, 114, 68, 26, 1, 114, 220, 14, 26, 1, 114, - 210, 221, 209, 82, 26, 1, 114, 199, 245, 26, 1, 114, 199, 180, 26, 1, - 114, 214, 161, 215, 71, 228, 172, 26, 1, 114, 203, 64, 26, 1, 114, 192, - 42, 26, 1, 114, 213, 236, 26, 1, 114, 191, 211, 26, 1, 114, 191, 244, - 200, 136, 26, 1, 114, 191, 244, 238, 242, 26, 1, 114, 191, 194, 26, 1, - 114, 191, 202, 26, 1, 114, 221, 227, 26, 1, 114, 209, 232, 26, 1, 114, - 213, 149, 234, 49, 26, 1, 114, 208, 156, 26, 1, 114, 192, 253, 26, 1, - 114, 233, 52, 26, 1, 114, 195, 148, 26, 1, 114, 218, 225, 26, 1, 114, - 216, 100, 26, 1, 114, 207, 20, 26, 1, 114, 207, 163, 26, 1, 114, 213, - 235, 26, 1, 114, 214, 68, 26, 1, 114, 203, 56, 26, 1, 114, 203, 41, 26, - 1, 114, 232, 87, 207, 59, 26, 1, 114, 180, 26, 1, 114, 209, 185, 26, 1, - 114, 219, 0, 26, 1, 114, 221, 67, 26, 1, 114, 216, 186, 26, 1, 114, 174, - 26, 1, 114, 217, 68, 26, 1, 114, 199, 63, 26, 1, 114, 221, 166, 26, 1, - 114, 215, 231, 26, 1, 114, 199, 95, 26, 1, 114, 233, 76, 26, 1, 114, 231, - 62, 26, 1, 209, 215, 155, 26, 1, 209, 215, 66, 26, 1, 209, 215, 220, 232, - 26, 1, 209, 215, 234, 188, 26, 1, 209, 215, 207, 84, 26, 1, 209, 215, - 199, 226, 26, 1, 209, 215, 212, 81, 26, 1, 209, 215, 173, 26, 1, 209, - 215, 206, 195, 26, 1, 209, 215, 206, 242, 26, 1, 209, 215, 216, 210, 26, - 1, 209, 215, 199, 245, 26, 1, 209, 215, 214, 160, 26, 1, 209, 215, 213, - 155, 26, 1, 209, 215, 218, 168, 26, 1, 209, 215, 200, 160, 26, 1, 209, - 215, 203, 76, 26, 1, 209, 215, 202, 222, 26, 1, 209, 215, 203, 248, 26, - 1, 209, 215, 220, 149, 26, 1, 209, 215, 221, 241, 26, 1, 209, 215, 212, - 146, 26, 1, 209, 215, 212, 178, 26, 1, 209, 215, 213, 126, 26, 1, 209, - 215, 191, 243, 26, 1, 209, 215, 203, 5, 26, 1, 209, 215, 170, 26, 1, 209, - 215, 212, 215, 26, 1, 209, 215, 209, 232, 26, 1, 209, 215, 212, 195, 26, - 1, 209, 215, 192, 253, 26, 1, 209, 215, 210, 49, 26, 1, 209, 215, 206, - 68, 26, 1, 209, 215, 213, 219, 26, 1, 209, 215, 207, 20, 26, 1, 209, 215, - 221, 251, 26, 1, 209, 215, 213, 252, 26, 1, 209, 215, 214, 47, 26, 1, - 209, 215, 203, 56, 26, 1, 209, 215, 208, 161, 26, 1, 209, 215, 232, 167, - 26, 1, 209, 215, 193, 190, 26, 1, 209, 215, 219, 146, 26, 1, 209, 215, - 219, 0, 26, 1, 209, 215, 221, 67, 26, 1, 209, 215, 217, 1, 26, 1, 209, - 215, 207, 55, 26, 1, 209, 215, 174, 26, 1, 209, 215, 216, 12, 26, 1, 209, - 215, 217, 9, 26, 1, 209, 215, 199, 73, 26, 1, 209, 215, 221, 21, 26, 1, - 209, 215, 205, 150, 26, 1, 209, 215, 193, 248, 215, 159, 1, 190, 190, - 215, 159, 1, 214, 16, 215, 159, 1, 192, 12, 215, 159, 1, 216, 46, 215, - 159, 1, 249, 153, 215, 159, 1, 238, 32, 215, 159, 1, 65, 215, 159, 1, - 209, 211, 215, 159, 1, 221, 209, 215, 159, 1, 230, 22, 215, 159, 1, 238, - 7, 215, 159, 1, 243, 48, 215, 159, 1, 222, 15, 215, 159, 1, 211, 120, - 215, 159, 1, 217, 133, 215, 159, 1, 213, 179, 215, 159, 1, 168, 215, 159, - 1, 211, 87, 215, 159, 1, 74, 215, 159, 1, 206, 162, 215, 159, 1, 203, 81, - 215, 159, 1, 199, 32, 215, 159, 1, 234, 217, 215, 159, 1, 193, 190, 215, - 159, 1, 71, 215, 159, 1, 221, 67, 215, 159, 1, 220, 24, 215, 159, 1, 173, - 215, 159, 1, 230, 80, 215, 159, 1, 207, 1, 215, 159, 1, 199, 110, 215, - 159, 17, 191, 77, 215, 159, 17, 107, 215, 159, 17, 109, 215, 159, 17, - 138, 215, 159, 17, 134, 215, 159, 17, 149, 215, 159, 17, 169, 215, 159, - 17, 175, 215, 159, 17, 171, 215, 159, 17, 178, 215, 159, 237, 238, 215, - 159, 55, 237, 238, 199, 186, 1, 210, 238, 199, 186, 1, 211, 166, 199, - 186, 1, 211, 58, 199, 186, 1, 210, 247, 199, 186, 1, 250, 123, 199, 186, - 1, 252, 63, 199, 186, 1, 251, 37, 199, 186, 1, 250, 133, 199, 186, 1, - 193, 227, 199, 186, 1, 195, 155, 199, 186, 1, 194, 255, 199, 186, 1, 193, - 236, 199, 186, 1, 233, 182, 199, 186, 1, 234, 197, 199, 186, 1, 234, 46, - 199, 186, 1, 233, 221, 199, 186, 1, 223, 41, 199, 186, 1, 228, 28, 199, - 186, 1, 223, 79, 199, 186, 1, 223, 45, 199, 186, 1, 196, 18, 199, 186, 1, - 196, 160, 199, 186, 1, 196, 64, 199, 186, 1, 196, 22, 199, 186, 1, 250, - 134, 199, 186, 1, 250, 138, 199, 186, 1, 250, 136, 199, 186, 1, 250, 135, - 199, 186, 1, 196, 129, 199, 186, 1, 196, 138, 199, 186, 1, 196, 135, 199, - 186, 1, 196, 130, 199, 186, 1, 53, 214, 70, 199, 186, 1, 179, 196, 145, - 199, 186, 1, 203, 40, 196, 143, 199, 186, 1, 203, 40, 250, 135, 199, 186, - 1, 196, 150, 199, 186, 1, 196, 143, 199, 186, 1, 196, 146, 199, 186, 1, - 196, 145, 199, 186, 1, 196, 131, 199, 186, 1, 196, 134, 199, 186, 1, 196, - 133, 199, 186, 1, 196, 132, 199, 186, 1, 215, 63, 199, 186, 1, 216, 238, - 199, 186, 1, 215, 165, 199, 186, 1, 215, 72, 199, 186, 1, 155, 199, 186, - 1, 221, 215, 199, 186, 1, 231, 240, 199, 186, 1, 214, 68, 199, 186, 1, - 188, 199, 186, 1, 170, 199, 186, 1, 193, 190, 199, 186, 1, 168, 199, 186, - 1, 212, 101, 199, 186, 1, 209, 228, 199, 186, 1, 249, 153, 199, 186, 1, - 174, 199, 186, 1, 180, 199, 186, 1, 140, 199, 186, 1, 173, 199, 186, 1, - 228, 164, 199, 186, 1, 190, 190, 199, 186, 1, 238, 32, 199, 186, 1, 165, - 199, 186, 1, 213, 224, 199, 186, 1, 203, 165, 199, 186, 1, 247, 160, 199, - 186, 1, 197, 168, 199, 186, 1, 231, 91, 199, 186, 1, 228, 161, 199, 186, - 1, 199, 49, 199, 186, 1, 192, 220, 199, 186, 1, 233, 109, 199, 186, 1, - 237, 68, 199, 186, 1, 247, 1, 199, 186, 1, 191, 123, 199, 186, 17, 191, - 77, 199, 186, 17, 107, 199, 186, 17, 109, 199, 186, 17, 138, 199, 186, - 17, 134, 199, 186, 17, 149, 199, 186, 17, 169, 199, 186, 17, 175, 199, - 186, 17, 171, 199, 186, 17, 178, 249, 67, 195, 185, 1, 234, 84, 249, 67, - 195, 185, 1, 155, 249, 67, 195, 185, 1, 205, 68, 249, 67, 195, 185, 1, - 233, 109, 249, 67, 195, 185, 1, 217, 4, 249, 67, 195, 185, 1, 192, 30, - 249, 67, 195, 185, 1, 231, 225, 249, 67, 195, 185, 1, 237, 49, 249, 67, - 195, 185, 1, 221, 20, 249, 67, 195, 185, 1, 222, 201, 249, 67, 195, 185, - 1, 228, 124, 249, 67, 195, 185, 1, 193, 190, 249, 67, 195, 185, 1, 191, - 7, 249, 67, 195, 185, 1, 231, 169, 249, 67, 195, 185, 1, 236, 174, 249, - 67, 195, 185, 1, 247, 42, 249, 67, 195, 185, 1, 196, 23, 249, 67, 195, - 185, 1, 159, 249, 67, 195, 185, 1, 249, 153, 249, 67, 195, 185, 1, 193, - 249, 249, 67, 195, 185, 1, 192, 74, 249, 67, 195, 185, 1, 168, 249, 67, - 195, 185, 1, 193, 177, 249, 67, 195, 185, 1, 65, 249, 67, 195, 185, 1, - 74, 249, 67, 195, 185, 1, 211, 87, 249, 67, 195, 185, 1, 66, 249, 67, - 195, 185, 1, 234, 188, 249, 67, 195, 185, 1, 71, 249, 67, 195, 185, 1, - 68, 249, 67, 195, 185, 33, 137, 198, 79, 249, 67, 195, 185, 33, 130, 198, - 79, 249, 67, 195, 185, 33, 216, 87, 198, 79, 249, 67, 195, 185, 33, 218, - 238, 198, 79, 249, 67, 195, 185, 33, 229, 133, 198, 79, 249, 67, 195, - 185, 232, 80, 201, 63, 145, 90, 18, 222, 12, 145, 90, 18, 222, 8, 145, - 90, 18, 221, 155, 145, 90, 18, 221, 118, 145, 90, 18, 222, 41, 145, 90, - 18, 222, 38, 145, 90, 18, 220, 216, 145, 90, 18, 220, 185, 145, 90, 18, - 222, 14, 145, 90, 18, 221, 225, 145, 90, 18, 222, 101, 145, 90, 18, 222, - 98, 145, 90, 18, 221, 40, 145, 90, 18, 221, 37, 145, 90, 18, 222, 34, - 145, 90, 18, 222, 31, 145, 90, 18, 220, 218, 145, 90, 18, 220, 217, 145, - 90, 18, 221, 60, 145, 90, 18, 221, 25, 145, 90, 18, 221, 157, 145, 90, - 18, 221, 156, 145, 90, 18, 222, 117, 145, 90, 18, 222, 37, 145, 90, 18, - 220, 175, 145, 90, 18, 220, 166, 145, 90, 18, 222, 126, 145, 90, 18, 222, - 118, 145, 90, 120, 195, 160, 145, 90, 120, 212, 185, 145, 90, 120, 220, - 0, 145, 90, 120, 230, 2, 145, 90, 120, 213, 82, 145, 90, 120, 207, 125, - 145, 90, 120, 213, 109, 145, 90, 120, 208, 69, 145, 90, 120, 192, 91, - 145, 90, 120, 229, 108, 145, 90, 120, 217, 25, 145, 90, 120, 243, 131, - 145, 90, 120, 214, 165, 145, 90, 120, 229, 44, 145, 90, 120, 209, 91, - 145, 90, 120, 212, 191, 145, 90, 120, 214, 205, 145, 90, 120, 250, 163, - 145, 90, 120, 192, 216, 145, 90, 120, 247, 76, 145, 90, 87, 243, 17, 197, - 85, 145, 90, 87, 243, 17, 202, 46, 145, 90, 87, 243, 17, 221, 243, 145, - 90, 87, 243, 17, 221, 198, 145, 90, 87, 243, 17, 200, 246, 145, 90, 87, - 243, 17, 229, 2, 145, 90, 87, 243, 17, 199, 165, 145, 90, 3, 195, 5, 198, - 238, 145, 90, 3, 195, 5, 197, 156, 247, 33, 145, 90, 3, 243, 17, 243, - 120, 145, 90, 3, 195, 5, 199, 10, 145, 90, 3, 195, 5, 233, 49, 145, 90, - 3, 192, 171, 212, 179, 145, 90, 3, 192, 171, 207, 3, 145, 90, 3, 192, - 171, 198, 32, 145, 90, 3, 192, 171, 233, 90, 145, 90, 3, 195, 5, 205, 44, - 145, 90, 3, 216, 209, 200, 250, 145, 90, 3, 195, 5, 212, 231, 145, 90, 3, - 228, 31, 192, 111, 145, 90, 3, 192, 215, 145, 90, 3, 243, 17, 197, 143, - 206, 144, 145, 90, 17, 191, 77, 145, 90, 17, 107, 145, 90, 17, 109, 145, - 90, 17, 138, 145, 90, 17, 134, 145, 90, 17, 149, 145, 90, 17, 169, 145, - 90, 17, 175, 145, 90, 17, 171, 145, 90, 17, 178, 145, 90, 31, 199, 90, - 145, 90, 31, 228, 138, 145, 90, 31, 199, 96, 198, 228, 145, 90, 31, 216, - 47, 145, 90, 31, 228, 141, 216, 47, 145, 90, 31, 199, 96, 248, 169, 145, - 90, 31, 197, 227, 145, 90, 3, 195, 5, 218, 220, 145, 90, 3, 192, 168, - 145, 90, 3, 229, 103, 145, 90, 3, 198, 255, 229, 103, 145, 90, 3, 190, - 236, 199, 43, 145, 90, 3, 229, 28, 145, 90, 3, 212, 245, 145, 90, 3, 192, - 206, 145, 90, 3, 212, 183, 145, 90, 3, 250, 146, 145, 90, 3, 197, 7, 247, - 32, 145, 90, 3, 216, 209, 197, 159, 145, 90, 3, 199, 166, 145, 90, 3, - 218, 253, 145, 90, 3, 215, 103, 145, 90, 3, 243, 17, 230, 76, 218, 196, - 212, 189, 212, 188, 145, 90, 3, 243, 17, 238, 194, 197, 150, 145, 90, 3, - 243, 17, 197, 5, 145, 90, 3, 243, 17, 197, 6, 243, 36, 145, 90, 3, 243, - 17, 208, 159, 237, 206, 145, 90, 3, 243, 17, 212, 238, 198, 41, 145, 90, - 242, 244, 3, 197, 154, 145, 90, 242, 244, 3, 192, 76, 145, 90, 242, 244, - 3, 219, 90, 145, 90, 242, 244, 3, 219, 254, 145, 90, 242, 244, 3, 192, - 167, 145, 90, 242, 244, 3, 221, 41, 145, 90, 242, 244, 3, 229, 254, 145, - 90, 242, 244, 3, 215, 147, 145, 90, 242, 244, 3, 198, 239, 145, 90, 242, - 244, 3, 197, 165, 145, 90, 242, 244, 3, 209, 225, 145, 90, 242, 244, 3, - 221, 213, 145, 90, 242, 244, 3, 230, 64, 145, 90, 242, 244, 3, 195, 182, - 145, 90, 242, 244, 3, 233, 86, 145, 90, 242, 244, 3, 192, 118, 145, 90, - 242, 244, 3, 197, 137, 145, 90, 242, 244, 3, 220, 170, 145, 90, 242, 244, - 3, 193, 237, 216, 218, 6, 1, 218, 168, 216, 218, 6, 1, 206, 8, 216, 218, - 6, 1, 196, 12, 216, 218, 6, 1, 193, 224, 216, 218, 6, 1, 250, 176, 216, - 218, 6, 1, 191, 166, 216, 218, 6, 1, 221, 22, 216, 218, 6, 1, 210, 236, - 216, 218, 6, 1, 200, 43, 216, 218, 6, 1, 232, 51, 216, 218, 6, 1, 233, - 175, 216, 218, 6, 1, 68, 216, 218, 6, 1, 222, 152, 216, 218, 6, 1, 65, - 216, 218, 6, 1, 223, 35, 216, 218, 6, 1, 71, 216, 218, 6, 1, 250, 120, - 216, 218, 6, 1, 247, 193, 216, 218, 6, 1, 66, 216, 218, 6, 1, 191, 225, - 216, 218, 6, 1, 172, 216, 218, 6, 1, 208, 104, 216, 218, 6, 1, 228, 169, - 216, 218, 6, 1, 212, 103, 216, 218, 6, 1, 192, 235, 216, 218, 6, 1, 238, - 127, 216, 218, 6, 1, 211, 151, 216, 218, 6, 1, 215, 61, 216, 218, 6, 1, - 146, 216, 218, 6, 1, 74, 216, 218, 6, 1, 251, 236, 216, 218, 6, 1, 192, - 159, 216, 218, 2, 1, 218, 168, 216, 218, 2, 1, 206, 8, 216, 218, 2, 1, - 196, 12, 216, 218, 2, 1, 193, 224, 216, 218, 2, 1, 250, 176, 216, 218, 2, - 1, 191, 166, 216, 218, 2, 1, 221, 22, 216, 218, 2, 1, 210, 236, 216, 218, - 2, 1, 200, 43, 216, 218, 2, 1, 232, 51, 216, 218, 2, 1, 233, 175, 216, - 218, 2, 1, 68, 216, 218, 2, 1, 222, 152, 216, 218, 2, 1, 65, 216, 218, 2, - 1, 223, 35, 216, 218, 2, 1, 71, 216, 218, 2, 1, 250, 120, 216, 218, 2, 1, - 247, 193, 216, 218, 2, 1, 66, 216, 218, 2, 1, 191, 225, 216, 218, 2, 1, - 172, 216, 218, 2, 1, 208, 104, 216, 218, 2, 1, 228, 169, 216, 218, 2, 1, - 212, 103, 216, 218, 2, 1, 192, 235, 216, 218, 2, 1, 238, 127, 216, 218, - 2, 1, 211, 151, 216, 218, 2, 1, 215, 61, 216, 218, 2, 1, 146, 216, 218, - 2, 1, 74, 216, 218, 2, 1, 251, 236, 216, 218, 2, 1, 192, 159, 216, 218, - 17, 191, 77, 216, 218, 17, 107, 216, 218, 17, 109, 216, 218, 17, 138, - 216, 218, 17, 134, 216, 218, 17, 149, 216, 218, 17, 169, 216, 218, 17, - 175, 216, 218, 17, 171, 216, 218, 17, 178, 216, 218, 31, 199, 95, 216, - 218, 31, 234, 127, 216, 218, 31, 197, 37, 216, 218, 31, 198, 251, 216, - 218, 31, 232, 122, 216, 218, 31, 233, 19, 216, 218, 31, 202, 130, 216, - 218, 31, 203, 244, 216, 218, 31, 234, 161, 216, 218, 31, 213, 171, 216, - 218, 17, 91, 251, 157, 20, 216, 218, 17, 105, 251, 157, 20, 216, 218, 17, - 115, 251, 157, 20, 216, 218, 242, 74, 216, 218, 232, 80, 201, 63, 216, - 218, 16, 251, 221, 216, 218, 233, 216, 211, 136, 121, 1, 168, 121, 1, - 249, 153, 121, 1, 11, 168, 121, 1, 209, 110, 121, 1, 174, 121, 1, 216, - 103, 121, 1, 251, 14, 174, 121, 1, 233, 109, 121, 1, 195, 188, 121, 1, - 195, 71, 121, 1, 190, 190, 121, 1, 238, 32, 121, 1, 11, 197, 132, 121, 1, - 11, 190, 190, 121, 1, 197, 132, 121, 1, 237, 191, 121, 1, 180, 121, 1, - 213, 224, 121, 1, 11, 213, 79, 121, 1, 251, 14, 180, 121, 1, 213, 79, - 121, 1, 213, 65, 121, 1, 173, 121, 1, 218, 182, 121, 1, 219, 159, 121, 1, - 219, 148, 121, 1, 198, 112, 121, 1, 236, 183, 121, 1, 198, 104, 121, 1, - 236, 182, 121, 1, 155, 121, 1, 231, 240, 121, 1, 11, 155, 121, 1, 208, - 96, 121, 1, 208, 72, 121, 1, 214, 68, 121, 1, 214, 17, 121, 1, 251, 14, - 214, 68, 121, 1, 140, 121, 1, 192, 220, 121, 1, 231, 91, 121, 1, 231, 66, - 121, 1, 197, 142, 121, 1, 235, 18, 121, 1, 212, 101, 121, 1, 212, 83, - 121, 1, 197, 157, 121, 1, 235, 29, 121, 1, 11, 197, 157, 121, 1, 11, 235, - 29, 121, 1, 207, 82, 197, 157, 121, 1, 203, 165, 121, 1, 201, 175, 121, - 1, 191, 71, 121, 1, 190, 253, 121, 1, 197, 168, 121, 1, 235, 35, 121, 1, - 11, 197, 168, 121, 1, 188, 121, 1, 191, 123, 121, 1, 190, 254, 121, 1, - 190, 224, 121, 1, 190, 204, 121, 1, 251, 14, 190, 224, 121, 1, 190, 196, - 121, 1, 190, 203, 121, 1, 193, 190, 121, 1, 251, 245, 121, 1, 229, 177, - 121, 1, 248, 32, 121, 1, 200, 125, 121, 1, 235, 19, 121, 1, 199, 145, - 121, 1, 197, 161, 121, 1, 206, 71, 121, 3, 120, 52, 164, 121, 1, 214, - 212, 121, 3, 250, 199, 121, 3, 207, 82, 195, 18, 121, 3, 207, 82, 250, - 199, 121, 18, 3, 65, 121, 18, 3, 252, 206, 121, 18, 3, 251, 241, 121, 18, - 3, 251, 132, 121, 18, 3, 251, 122, 121, 18, 3, 74, 121, 18, 3, 211, 87, - 121, 18, 3, 193, 48, 121, 18, 3, 193, 224, 121, 18, 3, 71, 121, 18, 3, - 234, 103, 121, 18, 3, 234, 88, 121, 18, 3, 211, 147, 121, 18, 3, 68, 121, - 18, 3, 228, 35, 121, 18, 3, 228, 34, 121, 18, 3, 228, 33, 121, 18, 3, - 223, 88, 121, 18, 3, 223, 226, 121, 18, 3, 223, 199, 121, 18, 3, 223, 49, - 121, 18, 3, 223, 136, 121, 18, 3, 66, 121, 18, 3, 196, 168, 121, 18, 3, - 196, 167, 121, 18, 3, 196, 166, 121, 18, 3, 196, 30, 121, 18, 3, 196, - 148, 121, 18, 3, 196, 97, 121, 18, 3, 192, 159, 121, 18, 3, 192, 33, 121, - 18, 3, 252, 25, 121, 18, 3, 252, 21, 121, 18, 3, 234, 26, 121, 18, 3, - 206, 113, 234, 26, 121, 18, 3, 234, 34, 121, 18, 3, 206, 113, 234, 34, - 121, 18, 3, 251, 236, 121, 18, 3, 234, 166, 121, 18, 3, 250, 163, 121, - 18, 3, 211, 19, 121, 18, 3, 215, 61, 121, 18, 3, 214, 70, 121, 18, 3, - 196, 81, 121, 18, 3, 191, 205, 121, 18, 3, 211, 141, 121, 18, 3, 211, - 148, 121, 18, 3, 193, 239, 121, 18, 3, 223, 204, 121, 18, 3, 234, 217, - 121, 18, 3, 223, 86, 121, 18, 3, 196, 139, 121, 163, 183, 121, 163, 198, - 54, 183, 121, 163, 58, 121, 163, 60, 121, 1, 198, 77, 121, 1, 198, 76, - 121, 1, 198, 75, 121, 1, 198, 74, 121, 1, 198, 73, 121, 1, 198, 72, 121, - 1, 198, 71, 121, 1, 207, 82, 198, 78, 121, 1, 207, 82, 198, 77, 121, 1, - 207, 82, 198, 75, 121, 1, 207, 82, 198, 74, 121, 1, 207, 82, 198, 73, - 121, 1, 207, 82, 198, 71, 19, 223, 51, 77, 46, 223, 51, 77, 39, 243, 80, - 228, 251, 77, 39, 243, 80, 223, 51, 77, 41, 2, 27, 233, 3, 195, 57, 251, - 157, 207, 107, 87, 247, 160, 195, 57, 251, 157, 207, 107, 87, 213, 223, - 19, 242, 63, 19, 242, 62, 19, 242, 61, 19, 242, 60, 19, 242, 59, 19, 242, - 58, 19, 242, 57, 19, 242, 56, 19, 242, 55, 19, 242, 54, 19, 242, 53, 19, - 242, 52, 19, 242, 51, 19, 242, 50, 19, 242, 49, 19, 242, 48, 19, 242, 47, - 19, 242, 46, 19, 242, 45, 19, 242, 44, 19, 242, 43, 19, 242, 42, 19, 242, - 41, 19, 242, 40, 19, 242, 39, 19, 242, 38, 19, 242, 37, 19, 242, 36, 19, - 242, 35, 19, 242, 34, 19, 242, 33, 19, 242, 32, 19, 242, 31, 19, 242, 30, - 19, 242, 29, 19, 242, 28, 19, 242, 27, 19, 242, 26, 19, 242, 25, 19, 242, - 24, 19, 242, 23, 19, 242, 22, 19, 242, 21, 19, 242, 20, 19, 242, 19, 19, - 242, 18, 19, 242, 17, 19, 242, 16, 19, 242, 15, 19, 242, 14, 19, 242, 13, - 19, 242, 12, 19, 242, 11, 19, 242, 10, 19, 242, 9, 19, 242, 8, 19, 242, - 7, 19, 242, 6, 19, 242, 5, 19, 242, 4, 19, 242, 3, 19, 242, 2, 19, 242, - 1, 19, 242, 0, 19, 241, 255, 19, 241, 254, 19, 241, 253, 19, 241, 252, - 19, 241, 251, 19, 241, 250, 19, 241, 249, 19, 241, 248, 19, 241, 247, 19, - 241, 246, 19, 241, 245, 19, 241, 244, 19, 241, 243, 19, 241, 242, 19, - 241, 241, 19, 241, 240, 19, 241, 239, 19, 241, 238, 19, 241, 237, 19, - 241, 236, 19, 241, 235, 19, 241, 234, 19, 241, 233, 19, 241, 232, 19, - 241, 231, 19, 241, 230, 19, 241, 229, 19, 241, 228, 19, 241, 227, 19, - 241, 226, 19, 241, 225, 19, 241, 224, 19, 241, 223, 19, 241, 222, 19, - 241, 221, 19, 241, 220, 19, 241, 219, 19, 241, 218, 19, 241, 217, 19, - 241, 216, 19, 241, 215, 19, 241, 214, 19, 241, 213, 19, 241, 212, 19, - 241, 211, 19, 241, 210, 19, 241, 209, 19, 241, 208, 19, 241, 207, 19, - 241, 206, 19, 241, 205, 19, 241, 204, 19, 241, 203, 19, 241, 202, 19, - 241, 201, 19, 241, 200, 19, 241, 199, 19, 241, 198, 19, 241, 197, 19, - 241, 196, 19, 241, 195, 19, 241, 194, 19, 241, 193, 19, 241, 192, 19, - 241, 191, 19, 241, 190, 19, 241, 189, 19, 241, 188, 19, 241, 187, 19, - 241, 186, 19, 241, 185, 19, 241, 184, 19, 241, 183, 19, 241, 182, 19, - 241, 181, 19, 241, 180, 19, 241, 179, 19, 241, 178, 19, 241, 177, 19, - 241, 176, 19, 241, 175, 19, 241, 174, 19, 241, 173, 19, 241, 172, 19, - 241, 171, 19, 241, 170, 19, 241, 169, 19, 241, 168, 19, 241, 167, 19, - 241, 166, 19, 241, 165, 19, 241, 164, 19, 241, 163, 19, 241, 162, 19, - 241, 161, 19, 241, 160, 19, 241, 159, 19, 241, 158, 19, 241, 157, 19, - 241, 156, 19, 241, 155, 19, 241, 154, 19, 241, 153, 19, 241, 152, 19, - 241, 151, 19, 241, 150, 19, 241, 149, 19, 241, 148, 19, 241, 147, 19, - 241, 146, 19, 241, 145, 19, 241, 144, 19, 241, 143, 19, 241, 142, 19, - 241, 141, 19, 241, 140, 19, 241, 139, 19, 241, 138, 19, 241, 137, 19, - 241, 136, 19, 241, 135, 19, 241, 134, 19, 241, 133, 19, 241, 132, 19, - 241, 131, 19, 241, 130, 19, 241, 129, 19, 241, 128, 19, 241, 127, 19, - 241, 126, 19, 241, 125, 19, 241, 124, 19, 241, 123, 19, 241, 122, 19, - 241, 121, 19, 241, 120, 19, 241, 119, 19, 241, 118, 19, 241, 117, 19, - 241, 116, 19, 241, 115, 19, 241, 114, 19, 241, 113, 19, 241, 112, 19, - 241, 111, 19, 241, 110, 19, 241, 109, 19, 241, 108, 19, 241, 107, 19, - 241, 106, 19, 241, 105, 19, 241, 104, 19, 241, 103, 19, 241, 102, 19, - 241, 101, 19, 241, 100, 19, 241, 99, 19, 241, 98, 19, 241, 97, 19, 241, - 96, 19, 241, 95, 19, 241, 94, 19, 241, 93, 19, 241, 92, 19, 241, 91, 19, - 241, 90, 19, 241, 89, 19, 241, 88, 19, 241, 87, 19, 241, 86, 19, 241, 85, - 19, 241, 84, 19, 241, 83, 19, 241, 82, 19, 241, 81, 19, 241, 80, 19, 241, - 79, 19, 241, 78, 19, 241, 77, 19, 241, 76, 19, 241, 75, 19, 241, 74, 19, - 241, 73, 19, 241, 72, 19, 241, 71, 19, 241, 70, 19, 241, 69, 19, 241, 68, - 19, 241, 67, 19, 241, 66, 19, 241, 65, 19, 241, 64, 19, 241, 63, 19, 241, - 62, 19, 241, 61, 19, 241, 60, 19, 241, 59, 19, 241, 58, 19, 241, 57, 19, - 241, 56, 19, 241, 55, 19, 241, 54, 19, 241, 53, 19, 241, 52, 19, 241, 51, - 19, 241, 50, 19, 241, 49, 19, 241, 48, 19, 241, 47, 19, 241, 46, 19, 241, - 45, 19, 241, 44, 19, 241, 43, 19, 241, 42, 19, 241, 41, 19, 241, 40, 19, - 241, 39, 19, 241, 38, 19, 241, 37, 19, 241, 36, 19, 241, 35, 19, 241, 34, - 19, 241, 33, 19, 241, 32, 19, 241, 31, 19, 241, 30, 19, 241, 29, 19, 241, - 28, 19, 241, 27, 19, 241, 26, 19, 241, 25, 19, 241, 24, 19, 241, 23, 19, - 241, 22, 19, 241, 21, 19, 241, 20, 19, 241, 19, 19, 241, 18, 19, 241, 17, - 19, 241, 16, 19, 241, 15, 19, 241, 14, 19, 241, 13, 19, 241, 12, 19, 241, - 11, 19, 241, 10, 19, 241, 9, 19, 241, 8, 19, 241, 7, 19, 241, 6, 19, 241, - 5, 19, 241, 4, 19, 241, 3, 19, 241, 2, 19, 241, 1, 19, 241, 0, 19, 240, - 255, 19, 240, 254, 19, 240, 253, 19, 240, 252, 19, 240, 251, 19, 240, - 250, 19, 240, 249, 19, 240, 248, 19, 240, 247, 19, 240, 246, 19, 240, - 245, 19, 240, 244, 19, 240, 243, 19, 240, 242, 19, 240, 241, 19, 240, - 240, 19, 240, 239, 19, 240, 238, 19, 240, 237, 19, 240, 236, 19, 240, - 235, 19, 240, 234, 19, 240, 233, 19, 240, 232, 19, 240, 231, 19, 240, - 230, 19, 240, 229, 19, 240, 228, 19, 240, 227, 19, 240, 226, 19, 240, - 225, 19, 240, 224, 19, 240, 223, 19, 240, 222, 19, 240, 221, 19, 240, - 220, 19, 240, 219, 19, 240, 218, 19, 240, 217, 19, 240, 216, 19, 240, - 215, 19, 240, 214, 19, 240, 213, 19, 240, 212, 19, 240, 211, 19, 240, - 210, 19, 240, 209, 19, 240, 208, 19, 240, 207, 19, 240, 206, 19, 240, - 205, 19, 240, 204, 19, 240, 203, 19, 240, 202, 19, 240, 201, 19, 240, - 200, 19, 240, 199, 19, 240, 198, 19, 240, 197, 19, 240, 196, 19, 240, - 195, 19, 240, 194, 19, 240, 193, 19, 240, 192, 19, 240, 191, 19, 240, - 190, 19, 240, 189, 19, 240, 188, 19, 240, 187, 19, 240, 186, 19, 240, - 185, 19, 240, 184, 19, 240, 183, 19, 240, 182, 19, 240, 181, 19, 240, - 180, 19, 240, 179, 19, 240, 178, 19, 240, 177, 19, 240, 176, 19, 240, - 175, 19, 240, 174, 19, 240, 173, 19, 240, 172, 19, 240, 171, 19, 240, - 170, 19, 240, 169, 19, 240, 168, 19, 240, 167, 19, 240, 166, 19, 240, - 165, 19, 240, 164, 19, 240, 163, 19, 240, 162, 19, 240, 161, 19, 240, - 160, 19, 240, 159, 19, 240, 158, 19, 240, 157, 19, 240, 156, 19, 240, - 155, 19, 240, 154, 19, 240, 153, 19, 240, 152, 19, 240, 151, 19, 240, - 150, 19, 240, 149, 19, 240, 148, 19, 240, 147, 19, 240, 146, 19, 240, - 145, 19, 240, 144, 19, 240, 143, 19, 240, 142, 19, 240, 141, 19, 240, - 140, 19, 240, 139, 19, 240, 138, 19, 240, 137, 19, 240, 136, 19, 240, - 135, 19, 240, 134, 19, 240, 133, 19, 240, 132, 19, 240, 131, 19, 240, - 130, 19, 240, 129, 19, 240, 128, 19, 240, 127, 19, 240, 126, 19, 240, - 125, 19, 240, 124, 19, 240, 123, 19, 240, 122, 19, 240, 121, 19, 240, - 120, 19, 240, 119, 19, 240, 118, 19, 240, 117, 19, 240, 116, 19, 240, - 115, 19, 240, 114, 19, 240, 113, 19, 240, 112, 19, 240, 111, 19, 240, - 110, 19, 240, 109, 19, 240, 108, 19, 240, 107, 19, 240, 106, 19, 240, - 105, 19, 240, 104, 19, 240, 103, 19, 240, 102, 19, 240, 101, 19, 240, - 100, 19, 240, 99, 19, 240, 98, 19, 240, 97, 19, 240, 96, 19, 240, 95, 19, - 240, 94, 19, 240, 93, 19, 240, 92, 19, 240, 91, 19, 240, 90, 19, 240, 89, - 19, 240, 88, 19, 240, 87, 19, 240, 86, 19, 240, 85, 19, 240, 84, 19, 240, - 83, 19, 240, 82, 19, 240, 81, 19, 240, 80, 19, 240, 79, 19, 240, 78, 19, - 240, 77, 19, 240, 76, 19, 240, 75, 19, 240, 74, 19, 240, 73, 19, 240, 72, - 19, 240, 71, 19, 240, 70, 19, 240, 69, 19, 240, 68, 19, 240, 67, 19, 240, - 66, 19, 240, 65, 19, 240, 64, 19, 240, 63, 19, 240, 62, 19, 240, 61, 19, - 240, 60, 19, 240, 59, 19, 240, 58, 19, 240, 57, 19, 240, 56, 19, 240, 55, - 19, 240, 54, 19, 240, 53, 19, 240, 52, 19, 240, 51, 19, 240, 50, 19, 240, - 49, 19, 240, 48, 19, 240, 47, 19, 240, 46, 19, 240, 45, 19, 240, 44, 19, - 240, 43, 19, 240, 42, 19, 240, 41, 19, 240, 40, 19, 240, 39, 19, 240, 38, - 19, 240, 37, 19, 240, 36, 19, 240, 35, 19, 240, 34, 19, 240, 33, 19, 240, - 32, 19, 240, 31, 19, 240, 30, 19, 240, 29, 19, 240, 28, 19, 240, 27, 19, - 240, 26, 19, 240, 25, 19, 240, 24, 19, 240, 23, 19, 240, 22, 19, 240, 21, - 19, 240, 20, 19, 240, 19, 19, 240, 18, 19, 240, 17, 19, 240, 16, 19, 240, - 15, 19, 240, 14, 19, 240, 13, 19, 240, 12, 19, 240, 11, 19, 240, 10, 19, - 240, 9, 19, 240, 8, 19, 240, 7, 19, 240, 6, 19, 240, 5, 19, 240, 4, 19, - 240, 3, 19, 240, 2, 19, 240, 1, 19, 240, 0, 19, 239, 255, 19, 239, 254, - 19, 239, 253, 19, 239, 252, 19, 239, 251, 19, 239, 250, 19, 239, 249, 19, - 239, 248, 19, 239, 247, 19, 239, 246, 19, 239, 245, 19, 239, 244, 19, - 239, 243, 19, 239, 242, 19, 239, 241, 19, 239, 240, 19, 239, 239, 19, - 239, 238, 19, 239, 237, 19, 239, 236, 19, 239, 235, 19, 239, 234, 19, - 239, 233, 19, 239, 232, 19, 239, 231, 19, 239, 230, 19, 239, 229, 19, - 239, 228, 19, 239, 227, 19, 239, 226, 19, 239, 225, 19, 239, 224, 19, - 239, 223, 19, 239, 222, 19, 239, 221, 19, 239, 220, 19, 239, 219, 19, - 239, 218, 19, 239, 217, 19, 239, 216, 19, 239, 215, 19, 239, 214, 19, - 239, 213, 19, 239, 212, 19, 239, 211, 19, 239, 210, 19, 239, 209, 19, - 239, 208, 19, 239, 207, 19, 239, 206, 19, 239, 205, 19, 239, 204, 19, - 239, 203, 19, 239, 202, 19, 239, 201, 19, 239, 200, 19, 239, 199, 19, - 239, 198, 19, 239, 197, 19, 239, 196, 19, 239, 195, 19, 239, 194, 19, - 239, 193, 19, 239, 192, 19, 239, 191, 19, 239, 190, 19, 239, 189, 19, - 239, 188, 19, 239, 187, 19, 239, 186, 19, 239, 185, 19, 239, 184, 19, - 239, 183, 19, 239, 182, 19, 239, 181, 19, 239, 180, 19, 239, 179, 19, - 239, 178, 19, 239, 177, 19, 239, 176, 19, 239, 175, 19, 239, 174, 19, - 239, 173, 19, 239, 172, 19, 239, 171, 19, 239, 170, 19, 239, 169, 19, - 239, 168, 19, 239, 167, 19, 239, 166, 19, 239, 165, 19, 239, 164, 19, - 239, 163, 19, 239, 162, 19, 239, 161, 19, 239, 160, 19, 239, 159, 19, - 239, 158, 19, 239, 157, 19, 239, 156, 19, 239, 155, 19, 239, 154, 19, - 239, 153, 19, 239, 152, 19, 239, 151, 19, 239, 150, 19, 239, 149, 19, - 239, 148, 19, 239, 147, 19, 239, 146, 19, 239, 145, 19, 239, 144, 19, - 239, 143, 19, 239, 142, 19, 239, 141, 19, 239, 140, 19, 239, 139, 19, - 239, 138, 19, 239, 137, 19, 239, 136, 19, 239, 135, 19, 239, 134, 19, - 239, 133, 19, 239, 132, 19, 239, 131, 19, 239, 130, 19, 239, 129, 19, - 239, 128, 19, 239, 127, 19, 239, 126, 19, 239, 125, 19, 239, 124, 19, - 239, 123, 19, 239, 122, 19, 239, 121, 19, 239, 120, 19, 239, 119, 19, - 239, 118, 19, 239, 117, 19, 239, 116, 19, 239, 115, 19, 239, 114, 19, - 239, 113, 19, 239, 112, 19, 239, 111, 19, 239, 110, 19, 239, 109, 19, - 239, 108, 19, 239, 107, 19, 239, 106, 19, 239, 105, 19, 239, 104, 19, - 239, 103, 19, 239, 102, 19, 239, 101, 19, 239, 100, 19, 239, 99, 19, 239, - 98, 19, 239, 97, 19, 239, 96, 19, 239, 95, 19, 239, 94, 19, 239, 93, 19, - 239, 92, 19, 239, 91, 19, 239, 90, 19, 239, 89, 19, 239, 88, 19, 239, 87, - 19, 239, 86, 19, 239, 85, 19, 239, 84, 19, 239, 83, 19, 239, 82, 19, 239, - 81, 19, 239, 80, 19, 239, 79, 19, 239, 78, 19, 239, 77, 19, 239, 76, 19, - 239, 75, 19, 239, 74, 19, 239, 73, 19, 239, 72, 19, 239, 71, 19, 239, 70, - 19, 239, 69, 19, 239, 68, 19, 239, 67, 19, 239, 66, 19, 239, 65, 19, 239, - 64, 41, 2, 27, 246, 238, 41, 2, 27, 246, 237, 41, 2, 27, 246, 236, 41, 2, - 27, 246, 235, 41, 2, 27, 246, 234, 41, 2, 27, 246, 233, 41, 2, 27, 246, - 232, 41, 2, 27, 246, 231, 41, 2, 27, 246, 230, 41, 2, 27, 246, 229, 41, - 2, 27, 246, 228, 41, 2, 27, 246, 227, 41, 2, 27, 246, 226, 41, 2, 27, + 191, 126, 14, 7, 191, 125, 14, 7, 252, 207, 14, 7, 252, 206, 14, 7, 252, + 205, 14, 7, 252, 204, 14, 7, 252, 203, 14, 7, 252, 202, 14, 7, 252, 201, + 14, 7, 252, 200, 14, 7, 252, 199, 14, 7, 252, 198, 14, 7, 252, 197, 14, + 7, 252, 196, 14, 7, 252, 195, 14, 7, 252, 194, 14, 7, 252, 193, 14, 7, + 252, 192, 14, 7, 252, 191, 14, 7, 252, 190, 14, 7, 252, 189, 14, 7, 252, + 188, 14, 7, 252, 187, 14, 7, 252, 186, 14, 7, 252, 185, 14, 7, 252, 184, + 14, 7, 252, 183, 14, 7, 252, 182, 14, 7, 252, 181, 14, 7, 252, 180, 14, + 7, 252, 179, 14, 7, 252, 178, 14, 7, 252, 177, 14, 7, 252, 176, 14, 7, + 252, 175, 14, 7, 252, 174, 14, 7, 195, 241, 14, 7, 81, 222, 198, 14, 7, + 228, 243, 222, 198, 14, 7, 223, 122, 250, 185, 198, 54, 201, 98, 14, 7, + 223, 122, 250, 185, 248, 79, 201, 98, 14, 7, 223, 122, 250, 185, 198, 54, + 234, 96, 14, 7, 223, 122, 250, 185, 248, 79, 234, 96, 14, 7, 211, 2, 216, + 86, 14, 7, 248, 251, 205, 44, 14, 7, 234, 97, 205, 44, 14, 7, 223, 122, + 250, 185, 216, 86, 14, 7, 223, 122, 250, 185, 198, 53, 14, 7, 223, 122, + 250, 185, 248, 78, 14, 7, 248, 251, 234, 100, 14, 7, 234, 97, 234, 100, + 14, 7, 248, 251, 193, 166, 234, 100, 14, 7, 234, 97, 193, 166, 234, 100, + 14, 7, 216, 29, 228, 191, 14, 7, 232, 82, 248, 134, 14, 7, 132, 248, 134, + 14, 7, 218, 253, 56, 14, 7, 132, 218, 253, 56, 14, 7, 199, 200, 218, 253, + 56, 14, 7, 193, 78, 218, 253, 56, 14, 7, 52, 237, 251, 250, 185, 198, 54, + 201, 98, 14, 7, 52, 237, 251, 250, 185, 248, 79, 201, 98, 14, 7, 52, 237, + 251, 250, 185, 201, 98, 14, 7, 52, 237, 251, 250, 185, 198, 54, 234, 96, + 14, 7, 52, 237, 251, 250, 185, 198, 53, 14, 7, 52, 237, 251, 250, 185, + 248, 79, 201, 99, 23, 198, 54, 234, 96, 14, 7, 52, 237, 251, 250, 185, + 201, 99, 23, 198, 53, 14, 7, 52, 237, 251, 250, 185, 248, 79, 234, 96, + 14, 7, 52, 237, 251, 250, 185, 198, 54, 201, 99, 23, 248, 79, 234, 96, + 14, 7, 52, 237, 251, 250, 185, 248, 78, 14, 7, 52, 237, 251, 250, 185, + 201, 99, 23, 248, 78, 14, 7, 52, 237, 251, 250, 185, 234, 96, 14, 7, 52, + 237, 251, 250, 185, 198, 54, 23, 234, 96, 14, 7, 52, 237, 251, 250, 185, + 248, 79, 23, 234, 96, 14, 7, 52, 237, 250, 29, 7, 255, 201, 29, 7, 255, + 200, 29, 7, 255, 199, 29, 7, 255, 198, 29, 7, 255, 197, 29, 7, 255, 195, + 29, 7, 255, 192, 29, 7, 255, 191, 29, 7, 255, 190, 29, 7, 255, 189, 29, + 7, 255, 188, 29, 7, 255, 187, 29, 7, 255, 186, 29, 7, 255, 185, 29, 7, + 255, 184, 29, 7, 255, 182, 29, 7, 255, 181, 29, 7, 255, 180, 29, 7, 255, + 178, 29, 7, 255, 177, 29, 7, 255, 176, 29, 7, 255, 175, 29, 7, 255, 174, + 29, 7, 255, 173, 29, 7, 255, 172, 29, 7, 255, 171, 29, 7, 255, 170, 29, + 7, 255, 169, 29, 7, 255, 168, 29, 7, 255, 167, 29, 7, 255, 165, 29, 7, + 255, 164, 29, 7, 255, 163, 29, 7, 255, 162, 29, 7, 255, 160, 29, 7, 255, + 159, 29, 7, 255, 158, 29, 7, 255, 157, 29, 7, 255, 156, 29, 7, 255, 155, + 29, 7, 255, 154, 29, 7, 255, 153, 29, 7, 255, 152, 29, 7, 255, 150, 29, + 7, 255, 149, 29, 7, 255, 148, 29, 7, 255, 146, 29, 7, 255, 144, 29, 7, + 255, 143, 29, 7, 255, 142, 29, 7, 255, 141, 29, 7, 255, 140, 29, 7, 255, + 139, 29, 7, 255, 138, 29, 7, 255, 137, 29, 7, 255, 136, 29, 7, 255, 135, + 29, 7, 255, 134, 29, 7, 255, 133, 29, 7, 255, 132, 29, 7, 255, 131, 29, + 7, 255, 130, 29, 7, 255, 129, 29, 7, 255, 128, 29, 7, 255, 127, 29, 7, + 255, 126, 29, 7, 255, 125, 29, 7, 255, 124, 29, 7, 255, 123, 29, 7, 255, + 122, 29, 7, 255, 121, 29, 7, 255, 120, 29, 7, 255, 119, 29, 7, 255, 118, + 29, 7, 255, 117, 29, 7, 255, 116, 29, 7, 255, 115, 29, 7, 255, 114, 29, + 7, 255, 113, 29, 7, 255, 112, 29, 7, 255, 111, 29, 7, 255, 110, 29, 7, + 255, 109, 29, 7, 255, 108, 29, 7, 255, 107, 29, 7, 255, 106, 29, 7, 255, + 105, 29, 7, 255, 104, 29, 7, 255, 103, 29, 7, 255, 102, 29, 7, 255, 101, + 29, 7, 255, 100, 29, 7, 255, 99, 29, 7, 255, 98, 29, 7, 255, 97, 29, 7, + 255, 96, 29, 7, 255, 95, 29, 7, 255, 94, 29, 7, 255, 93, 29, 7, 255, 92, + 29, 7, 255, 91, 29, 7, 255, 90, 29, 7, 255, 89, 29, 7, 255, 88, 29, 7, + 255, 87, 29, 7, 255, 86, 29, 7, 255, 85, 29, 7, 255, 84, 29, 7, 255, 83, + 29, 7, 255, 82, 29, 7, 255, 81, 29, 7, 255, 80, 29, 7, 255, 78, 29, 7, + 255, 77, 29, 7, 255, 76, 29, 7, 255, 75, 29, 7, 255, 74, 29, 7, 255, 73, + 29, 7, 255, 72, 29, 7, 255, 71, 29, 7, 255, 70, 29, 7, 255, 69, 29, 7, + 255, 68, 29, 7, 255, 67, 29, 7, 255, 66, 29, 7, 255, 65, 29, 7, 255, 64, + 29, 7, 255, 63, 29, 7, 255, 62, 29, 7, 255, 61, 29, 7, 255, 60, 29, 7, + 255, 59, 29, 7, 255, 58, 29, 7, 255, 57, 29, 7, 255, 56, 29, 7, 255, 55, + 29, 7, 255, 54, 29, 7, 255, 53, 29, 7, 255, 52, 29, 7, 255, 51, 29, 7, + 255, 50, 29, 7, 255, 49, 29, 7, 255, 48, 29, 7, 255, 47, 29, 7, 255, 46, + 29, 7, 255, 45, 29, 7, 255, 43, 29, 7, 255, 42, 29, 7, 255, 41, 29, 7, + 255, 40, 29, 7, 255, 39, 29, 7, 255, 38, 29, 7, 255, 37, 29, 7, 255, 36, + 29, 7, 255, 35, 29, 7, 255, 34, 29, 7, 255, 33, 29, 7, 255, 32, 29, 7, + 255, 30, 29, 7, 255, 29, 29, 7, 255, 28, 29, 7, 255, 27, 29, 7, 255, 26, + 29, 7, 255, 25, 29, 7, 255, 24, 29, 7, 255, 23, 29, 7, 255, 22, 29, 7, + 255, 21, 29, 7, 255, 20, 29, 7, 255, 19, 29, 7, 255, 18, 29, 7, 255, 17, + 29, 7, 255, 16, 29, 7, 255, 15, 29, 7, 255, 14, 29, 7, 255, 13, 29, 7, + 255, 12, 29, 7, 255, 11, 29, 7, 255, 10, 29, 7, 255, 9, 29, 7, 255, 8, + 29, 7, 255, 7, 29, 7, 255, 6, 29, 7, 255, 5, 29, 7, 255, 4, 29, 7, 255, + 3, 29, 7, 255, 2, 29, 7, 255, 1, 29, 7, 255, 0, 29, 7, 254, 255, 29, 7, + 254, 254, 29, 7, 254, 253, 29, 7, 254, 252, 29, 7, 254, 251, 29, 7, 254, + 250, 29, 7, 254, 249, 29, 7, 254, 248, 29, 7, 254, 247, 29, 7, 254, 246, + 29, 7, 254, 245, 29, 7, 254, 244, 29, 7, 254, 243, 29, 7, 254, 242, 29, + 7, 254, 241, 29, 7, 254, 240, 29, 7, 254, 239, 29, 7, 254, 238, 29, 7, + 254, 237, 29, 7, 254, 236, 29, 7, 254, 235, 29, 7, 254, 234, 29, 7, 254, + 233, 29, 7, 254, 232, 29, 7, 254, 231, 29, 7, 254, 230, 29, 7, 254, 229, + 29, 7, 254, 228, 29, 7, 254, 227, 29, 7, 254, 226, 29, 7, 254, 225, 29, + 7, 254, 224, 29, 7, 254, 223, 29, 7, 254, 222, 29, 7, 254, 221, 29, 7, + 254, 220, 29, 7, 254, 219, 29, 7, 254, 218, 29, 7, 254, 216, 29, 7, 254, + 215, 29, 7, 254, 214, 29, 7, 254, 213, 29, 7, 254, 212, 29, 7, 254, 211, + 29, 7, 254, 210, 29, 7, 254, 209, 29, 7, 254, 208, 29, 7, 254, 207, 29, + 7, 254, 206, 29, 7, 254, 205, 29, 7, 254, 204, 29, 7, 254, 203, 29, 7, + 254, 202, 29, 7, 254, 201, 29, 7, 254, 200, 29, 7, 254, 199, 29, 7, 254, + 198, 29, 7, 254, 197, 29, 7, 254, 196, 29, 7, 254, 195, 29, 7, 254, 194, + 29, 7, 254, 193, 29, 7, 254, 192, 29, 7, 254, 191, 29, 7, 254, 190, 29, + 7, 254, 189, 29, 7, 254, 188, 29, 7, 254, 187, 29, 7, 254, 186, 29, 7, + 254, 185, 29, 7, 254, 184, 29, 7, 254, 183, 29, 7, 254, 182, 29, 7, 254, + 181, 29, 7, 254, 180, 29, 7, 254, 179, 29, 7, 254, 178, 29, 7, 254, 177, + 29, 7, 254, 176, 29, 7, 254, 175, 29, 7, 254, 174, 29, 7, 254, 173, 29, + 7, 254, 172, 29, 7, 254, 171, 29, 7, 254, 170, 29, 7, 254, 169, 29, 7, + 254, 168, 29, 7, 254, 167, 29, 7, 254, 166, 29, 7, 254, 165, 29, 7, 254, + 164, 29, 7, 254, 163, 29, 7, 254, 162, 29, 7, 254, 161, 29, 7, 254, 160, + 29, 7, 254, 159, 29, 7, 254, 158, 29, 7, 254, 157, 29, 7, 254, 156, 29, + 7, 254, 155, 29, 7, 254, 154, 29, 7, 254, 153, 29, 7, 254, 152, 29, 7, + 254, 151, 29, 7, 254, 150, 29, 7, 254, 149, 29, 7, 254, 148, 29, 7, 254, + 147, 29, 7, 254, 146, 29, 7, 254, 145, 29, 7, 254, 144, 29, 7, 254, 143, + 29, 7, 254, 142, 29, 7, 254, 141, 29, 7, 254, 140, 29, 7, 254, 139, 29, + 7, 254, 138, 29, 7, 254, 137, 29, 7, 254, 136, 29, 7, 254, 135, 29, 7, + 254, 134, 29, 7, 254, 133, 29, 7, 254, 132, 29, 7, 254, 131, 29, 7, 254, + 130, 29, 7, 254, 129, 29, 7, 254, 128, 29, 7, 254, 127, 29, 7, 254, 126, + 29, 7, 254, 125, 29, 7, 254, 124, 29, 7, 254, 123, 29, 7, 254, 122, 29, + 7, 254, 121, 29, 7, 254, 120, 29, 7, 254, 119, 29, 7, 254, 118, 29, 7, + 254, 117, 29, 7, 254, 116, 29, 7, 254, 115, 29, 7, 254, 114, 29, 7, 254, + 113, 29, 7, 254, 112, 29, 7, 254, 111, 29, 7, 254, 110, 29, 7, 254, 109, + 29, 7, 254, 108, 29, 7, 254, 107, 29, 7, 254, 106, 29, 7, 254, 104, 29, + 7, 254, 103, 29, 7, 254, 102, 29, 7, 254, 101, 29, 7, 254, 100, 29, 7, + 254, 99, 29, 7, 254, 98, 29, 7, 254, 97, 29, 7, 254, 96, 29, 7, 254, 95, + 29, 7, 254, 94, 29, 7, 254, 91, 29, 7, 254, 90, 29, 7, 254, 89, 29, 7, + 254, 88, 29, 7, 254, 84, 29, 7, 254, 83, 29, 7, 254, 82, 29, 7, 254, 81, + 29, 7, 254, 80, 29, 7, 254, 79, 29, 7, 254, 78, 29, 7, 254, 77, 29, 7, + 254, 76, 29, 7, 254, 75, 29, 7, 254, 74, 29, 7, 254, 73, 29, 7, 254, 72, + 29, 7, 254, 71, 29, 7, 254, 70, 29, 7, 254, 69, 29, 7, 254, 68, 29, 7, + 254, 67, 29, 7, 254, 66, 29, 7, 254, 64, 29, 7, 254, 63, 29, 7, 254, 62, + 29, 7, 254, 61, 29, 7, 254, 60, 29, 7, 254, 59, 29, 7, 254, 58, 29, 7, + 254, 57, 29, 7, 254, 56, 29, 7, 254, 55, 29, 7, 254, 54, 29, 7, 254, 53, + 29, 7, 254, 52, 29, 7, 254, 51, 29, 7, 254, 50, 29, 7, 254, 49, 29, 7, + 254, 48, 29, 7, 254, 47, 29, 7, 254, 46, 29, 7, 254, 45, 29, 7, 254, 44, + 29, 7, 254, 43, 29, 7, 254, 42, 29, 7, 254, 41, 29, 7, 254, 40, 29, 7, + 254, 39, 29, 7, 254, 38, 29, 7, 254, 37, 29, 7, 254, 36, 29, 7, 254, 35, + 29, 7, 254, 34, 29, 7, 254, 33, 29, 7, 254, 32, 29, 7, 254, 31, 29, 7, + 254, 30, 29, 7, 254, 29, 29, 7, 254, 28, 29, 7, 254, 27, 29, 7, 254, 26, + 29, 7, 254, 25, 29, 7, 254, 24, 29, 7, 254, 23, 29, 7, 254, 22, 29, 7, + 254, 21, 29, 7, 254, 20, 29, 7, 254, 19, 29, 7, 254, 18, 29, 7, 254, 17, + 29, 7, 254, 16, 29, 7, 254, 15, 29, 7, 254, 14, 29, 7, 254, 13, 29, 7, + 254, 12, 29, 7, 254, 11, 29, 7, 254, 10, 29, 7, 254, 9, 29, 7, 254, 8, + 29, 7, 254, 7, 29, 7, 254, 6, 29, 7, 254, 5, 29, 7, 254, 4, 29, 7, 254, + 3, 207, 188, 211, 59, 207, 2, 29, 7, 254, 2, 29, 7, 254, 1, 29, 7, 254, + 0, 29, 7, 253, 255, 29, 7, 253, 254, 29, 7, 253, 253, 29, 7, 253, 252, + 29, 7, 253, 251, 29, 7, 253, 250, 29, 7, 253, 249, 29, 7, 253, 248, 29, + 7, 253, 247, 171, 29, 7, 253, 246, 29, 7, 253, 245, 29, 7, 253, 244, 29, + 7, 253, 243, 29, 7, 253, 242, 29, 7, 253, 241, 29, 7, 253, 240, 29, 7, + 253, 238, 29, 7, 253, 236, 29, 7, 253, 234, 29, 7, 253, 232, 29, 7, 253, + 230, 29, 7, 253, 228, 29, 7, 253, 226, 29, 7, 253, 224, 29, 7, 253, 222, + 29, 7, 253, 220, 248, 251, 219, 30, 77, 29, 7, 253, 218, 234, 97, 219, + 30, 77, 29, 7, 253, 217, 29, 7, 253, 215, 29, 7, 253, 213, 29, 7, 253, + 211, 29, 7, 253, 209, 29, 7, 253, 207, 29, 7, 253, 205, 29, 7, 253, 203, + 29, 7, 253, 201, 29, 7, 253, 200, 29, 7, 253, 199, 29, 7, 253, 198, 29, + 7, 253, 197, 29, 7, 253, 196, 29, 7, 253, 195, 29, 7, 253, 194, 29, 7, + 253, 193, 29, 7, 253, 192, 29, 7, 253, 191, 29, 7, 253, 190, 29, 7, 253, + 189, 29, 7, 253, 188, 29, 7, 253, 187, 29, 7, 253, 186, 29, 7, 253, 185, + 29, 7, 253, 184, 29, 7, 253, 183, 29, 7, 253, 182, 29, 7, 253, 181, 29, + 7, 253, 180, 29, 7, 253, 179, 29, 7, 253, 178, 29, 7, 253, 177, 29, 7, + 253, 176, 29, 7, 253, 175, 29, 7, 253, 174, 29, 7, 253, 173, 29, 7, 253, + 172, 29, 7, 253, 171, 29, 7, 253, 170, 29, 7, 253, 169, 29, 7, 253, 168, + 29, 7, 253, 167, 29, 7, 253, 166, 29, 7, 253, 165, 29, 7, 253, 164, 29, + 7, 253, 163, 29, 7, 253, 162, 29, 7, 253, 161, 29, 7, 253, 160, 29, 7, + 253, 159, 29, 7, 253, 158, 29, 7, 253, 157, 29, 7, 253, 156, 29, 7, 253, + 155, 29, 7, 253, 154, 29, 7, 253, 153, 29, 7, 253, 152, 29, 7, 253, 151, + 29, 7, 253, 150, 29, 7, 253, 149, 29, 7, 253, 148, 29, 7, 253, 147, 29, + 7, 253, 146, 29, 7, 253, 145, 29, 7, 253, 144, 29, 7, 253, 143, 29, 7, + 253, 142, 29, 7, 253, 141, 29, 7, 253, 140, 29, 7, 253, 139, 29, 7, 253, + 138, 29, 7, 253, 137, 29, 7, 253, 136, 29, 7, 253, 135, 29, 7, 253, 134, + 29, 7, 253, 133, 29, 7, 253, 132, 29, 7, 253, 131, 29, 7, 253, 130, 29, + 7, 253, 129, 29, 7, 253, 128, 29, 7, 253, 127, 29, 7, 253, 126, 29, 7, + 253, 125, 29, 7, 253, 124, 29, 7, 253, 123, 29, 7, 253, 122, 29, 7, 253, + 121, 29, 7, 253, 120, 29, 7, 253, 119, 29, 7, 253, 118, 29, 7, 253, 117, + 29, 7, 253, 116, 29, 7, 253, 115, 29, 7, 253, 114, 29, 7, 253, 113, 29, + 7, 253, 112, 29, 7, 253, 111, 29, 7, 253, 110, 29, 7, 253, 109, 29, 7, + 253, 108, 29, 7, 253, 107, 29, 7, 253, 106, 29, 7, 253, 105, 29, 7, 253, + 104, 29, 7, 253, 103, 29, 7, 253, 102, 29, 7, 253, 101, 29, 7, 253, 100, + 29, 7, 253, 99, 29, 7, 253, 98, 29, 7, 253, 97, 29, 7, 253, 96, 29, 7, + 253, 95, 29, 7, 253, 94, 29, 7, 253, 93, 29, 7, 253, 92, 29, 7, 253, 91, + 26, 1, 209, 220, 214, 3, 216, 144, 26, 1, 209, 220, 231, 175, 232, 168, + 26, 1, 209, 220, 209, 42, 216, 145, 209, 129, 26, 1, 209, 220, 209, 42, + 216, 145, 209, 130, 26, 1, 209, 220, 214, 253, 216, 144, 26, 1, 209, 220, + 203, 1, 26, 1, 209, 220, 198, 124, 216, 144, 26, 1, 209, 220, 212, 49, + 216, 144, 26, 1, 209, 220, 203, 69, 210, 223, 213, 143, 26, 1, 209, 220, + 209, 42, 210, 223, 213, 144, 209, 129, 26, 1, 209, 220, 209, 42, 210, + 223, 213, 144, 209, 130, 26, 1, 209, 220, 217, 133, 26, 1, 209, 220, 197, + 95, 217, 134, 26, 1, 209, 220, 214, 64, 26, 1, 209, 220, 217, 130, 26, 1, + 209, 220, 217, 79, 26, 1, 209, 220, 215, 88, 26, 1, 209, 220, 203, 250, + 26, 1, 209, 220, 212, 189, 26, 1, 209, 220, 221, 236, 26, 1, 209, 220, + 213, 110, 26, 1, 209, 220, 200, 160, 26, 1, 209, 220, 214, 2, 26, 1, 209, + 220, 220, 17, 26, 1, 209, 220, 219, 179, 220, 190, 26, 1, 209, 220, 212, + 199, 216, 152, 26, 1, 209, 220, 217, 137, 26, 1, 209, 220, 210, 100, 26, + 1, 209, 220, 231, 74, 26, 1, 209, 220, 210, 172, 26, 1, 209, 220, 215, + 234, 214, 37, 26, 1, 209, 220, 212, 30, 216, 155, 26, 1, 209, 220, 126, + 191, 195, 214, 246, 26, 1, 209, 220, 231, 75, 26, 1, 209, 220, 212, 199, + 212, 200, 26, 1, 209, 220, 202, 140, 26, 1, 209, 220, 216, 137, 26, 1, + 209, 220, 216, 158, 26, 1, 209, 220, 215, 209, 26, 1, 209, 220, 222, 107, + 26, 1, 209, 220, 210, 223, 219, 227, 26, 1, 209, 220, 214, 165, 219, 227, + 26, 1, 209, 220, 209, 242, 26, 1, 209, 220, 217, 131, 26, 1, 209, 220, + 213, 187, 26, 1, 209, 220, 208, 146, 26, 1, 209, 220, 197, 87, 26, 1, + 209, 220, 218, 223, 26, 1, 209, 220, 202, 18, 26, 1, 209, 220, 199, 58, + 26, 1, 209, 220, 217, 128, 26, 1, 209, 220, 221, 243, 26, 1, 209, 220, + 214, 161, 26, 1, 209, 220, 220, 205, 26, 1, 209, 220, 215, 210, 26, 1, + 209, 220, 202, 253, 26, 1, 209, 220, 219, 22, 26, 1, 209, 220, 232, 241, + 26, 1, 209, 220, 206, 138, 26, 1, 209, 220, 221, 12, 26, 1, 209, 220, + 202, 14, 26, 1, 209, 220, 217, 74, 209, 175, 26, 1, 209, 220, 203, 62, + 26, 1, 209, 220, 212, 198, 26, 1, 209, 220, 203, 43, 212, 210, 191, 203, + 26, 1, 209, 220, 212, 71, 215, 230, 26, 1, 209, 220, 210, 218, 26, 1, + 209, 220, 213, 112, 26, 1, 209, 220, 196, 85, 26, 1, 209, 220, 214, 40, + 26, 1, 209, 220, 217, 127, 26, 1, 209, 220, 213, 155, 26, 1, 209, 220, + 217, 8, 26, 1, 209, 220, 212, 86, 26, 1, 209, 220, 199, 62, 26, 1, 209, + 220, 202, 9, 26, 1, 209, 220, 210, 219, 26, 1, 209, 220, 212, 214, 26, 1, + 209, 220, 217, 135, 26, 1, 209, 220, 212, 83, 26, 1, 209, 220, 222, 68, + 26, 1, 209, 220, 212, 217, 26, 1, 209, 220, 195, 148, 26, 1, 209, 220, + 218, 227, 26, 1, 209, 220, 214, 104, 26, 1, 209, 220, 214, 219, 26, 1, + 209, 220, 217, 7, 26, 1, 209, 219, 212, 212, 26, 1, 209, 219, 197, 95, + 217, 132, 26, 1, 209, 219, 202, 205, 26, 1, 209, 219, 203, 254, 197, 94, + 26, 1, 209, 219, 219, 25, 212, 195, 26, 1, 209, 219, 217, 14, 217, 136, + 26, 1, 209, 219, 221, 152, 26, 1, 209, 219, 192, 43, 26, 1, 209, 219, + 217, 9, 26, 1, 209, 219, 222, 92, 26, 1, 209, 219, 210, 46, 26, 1, 209, + 219, 192, 126, 219, 227, 26, 1, 209, 219, 220, 38, 212, 210, 212, 97, 26, + 1, 209, 219, 212, 192, 203, 88, 26, 1, 209, 219, 214, 132, 213, 158, 26, + 1, 209, 219, 231, 72, 26, 1, 209, 219, 209, 119, 26, 1, 209, 219, 197, + 95, 212, 208, 26, 1, 209, 219, 203, 93, 213, 153, 26, 1, 209, 219, 203, + 89, 26, 1, 209, 219, 216, 145, 199, 61, 26, 1, 209, 219, 216, 252, 217, + 10, 26, 1, 209, 219, 212, 84, 212, 195, 26, 1, 209, 219, 221, 232, 26, 1, + 209, 219, 231, 73, 26, 1, 209, 219, 221, 228, 26, 1, 209, 219, 220, 122, + 26, 1, 209, 219, 210, 103, 26, 1, 209, 219, 195, 77, 26, 1, 209, 219, + 214, 4, 215, 86, 26, 1, 209, 219, 214, 39, 216, 248, 26, 1, 209, 219, + 192, 254, 26, 1, 209, 219, 205, 176, 26, 1, 209, 219, 199, 240, 26, 1, + 209, 219, 216, 157, 26, 1, 209, 219, 214, 23, 26, 1, 209, 219, 214, 24, + 220, 14, 26, 1, 209, 219, 216, 147, 26, 1, 209, 219, 200, 214, 26, 1, + 209, 219, 217, 0, 26, 1, 209, 219, 215, 214, 26, 1, 209, 219, 212, 101, + 26, 1, 209, 219, 208, 150, 26, 1, 209, 219, 216, 156, 214, 41, 26, 1, + 209, 219, 233, 30, 26, 1, 209, 219, 216, 243, 26, 1, 209, 219, 233, 54, + 26, 1, 209, 219, 221, 240, 26, 1, 209, 219, 217, 162, 213, 147, 26, 1, + 209, 219, 217, 162, 213, 123, 26, 1, 209, 219, 219, 178, 26, 1, 209, 219, + 214, 47, 26, 1, 209, 219, 212, 219, 26, 1, 209, 219, 174, 26, 1, 209, + 219, 221, 135, 26, 1, 209, 219, 213, 248, 26, 1, 209, 218, 214, 3, 217, + 134, 26, 1, 209, 218, 212, 48, 26, 1, 209, 218, 191, 203, 26, 1, 209, + 218, 193, 160, 26, 1, 209, 218, 214, 40, 26, 1, 209, 218, 214, 153, 26, + 1, 209, 218, 214, 10, 26, 1, 209, 218, 231, 82, 26, 1, 209, 218, 217, 4, + 26, 1, 209, 218, 231, 182, 26, 1, 209, 218, 212, 73, 216, 23, 216, 159, + 26, 1, 209, 218, 212, 186, 216, 251, 26, 1, 209, 218, 217, 1, 26, 1, 209, + 218, 209, 125, 26, 1, 209, 218, 214, 138, 26, 1, 209, 218, 217, 12, 247, + 158, 26, 1, 209, 218, 221, 230, 26, 1, 209, 218, 231, 83, 26, 1, 209, + 218, 221, 237, 26, 1, 209, 218, 191, 226, 215, 119, 26, 1, 209, 218, 212, + 42, 26, 1, 209, 218, 216, 245, 26, 1, 209, 218, 212, 218, 26, 1, 209, + 218, 216, 251, 26, 1, 209, 218, 192, 44, 26, 1, 209, 218, 221, 20, 26, 1, + 209, 218, 222, 129, 26, 1, 209, 218, 203, 249, 26, 1, 209, 218, 214, 147, + 26, 1, 209, 218, 199, 238, 26, 1, 209, 218, 213, 127, 26, 1, 209, 218, + 198, 124, 191, 207, 26, 1, 209, 218, 200, 248, 26, 1, 209, 218, 214, 30, + 212, 97, 26, 1, 209, 218, 195, 76, 26, 1, 209, 218, 214, 222, 26, 1, 209, + 218, 217, 162, 221, 239, 26, 1, 209, 218, 212, 200, 26, 1, 209, 218, 214, + 25, 26, 1, 209, 218, 220, 18, 26, 1, 209, 218, 216, 253, 26, 1, 209, 218, + 216, 136, 26, 1, 209, 218, 212, 194, 26, 1, 209, 218, 199, 57, 26, 1, + 209, 218, 214, 27, 26, 1, 209, 218, 232, 86, 26, 1, 209, 218, 214, 152, + 26, 1, 209, 218, 212, 220, 26, 1, 209, 218, 212, 216, 26, 1, 209, 218, + 247, 242, 26, 1, 209, 218, 195, 78, 26, 1, 209, 218, 217, 2, 26, 1, 209, + 218, 206, 69, 26, 1, 209, 218, 213, 157, 26, 1, 209, 218, 220, 37, 26, 1, + 209, 218, 198, 121, 26, 1, 209, 218, 212, 202, 213, 248, 26, 1, 209, 218, + 213, 149, 26, 1, 209, 218, 221, 243, 26, 1, 209, 218, 214, 32, 26, 1, + 209, 218, 217, 127, 26, 1, 209, 218, 216, 246, 26, 1, 209, 218, 218, 227, + 26, 1, 209, 218, 220, 190, 26, 1, 209, 218, 213, 155, 26, 1, 209, 218, + 213, 248, 26, 1, 209, 218, 192, 244, 26, 1, 209, 218, 214, 28, 26, 1, + 209, 218, 212, 205, 26, 1, 209, 218, 212, 196, 26, 1, 209, 218, 220, 207, + 213, 112, 26, 1, 209, 218, 212, 203, 26, 1, 209, 218, 214, 160, 26, 1, + 209, 218, 217, 162, 212, 208, 26, 1, 209, 218, 192, 140, 26, 1, 209, 218, + 214, 159, 26, 1, 209, 218, 203, 0, 26, 1, 209, 218, 203, 252, 26, 1, 209, + 218, 216, 254, 26, 1, 209, 218, 217, 134, 26, 1, 209, 218, 217, 8, 26, 1, + 209, 218, 221, 231, 26, 1, 209, 218, 216, 255, 26, 1, 209, 218, 221, 235, + 26, 1, 209, 218, 217, 12, 209, 181, 26, 1, 209, 218, 191, 186, 26, 1, + 209, 218, 213, 145, 26, 1, 209, 218, 216, 82, 26, 1, 209, 218, 215, 151, + 26, 1, 209, 218, 203, 65, 26, 1, 209, 218, 221, 254, 219, 252, 26, 1, + 209, 218, 221, 254, 233, 67, 26, 1, 209, 218, 214, 62, 26, 1, 209, 218, + 214, 219, 26, 1, 209, 218, 219, 96, 26, 1, 209, 218, 209, 141, 26, 1, + 209, 218, 210, 36, 26, 1, 209, 218, 199, 73, 26, 1, 158, 216, 244, 26, 1, + 158, 193, 158, 26, 1, 158, 213, 143, 26, 1, 158, 216, 144, 26, 1, 158, + 213, 141, 26, 1, 158, 219, 141, 26, 1, 158, 213, 146, 26, 1, 158, 212, + 215, 26, 1, 158, 214, 46, 26, 1, 158, 212, 97, 26, 1, 158, 192, 255, 26, + 1, 158, 214, 0, 26, 1, 158, 203, 112, 26, 1, 158, 214, 11, 26, 1, 158, + 221, 238, 26, 1, 158, 199, 59, 26, 1, 158, 203, 91, 26, 1, 158, 213, 154, + 26, 1, 158, 200, 214, 26, 1, 158, 221, 243, 26, 1, 158, 192, 128, 26, 1, + 158, 220, 208, 26, 1, 158, 205, 131, 26, 1, 158, 216, 149, 26, 1, 158, + 214, 151, 26, 1, 158, 217, 97, 26, 1, 158, 216, 155, 26, 1, 158, 203, + 251, 26, 1, 158, 192, 70, 26, 1, 158, 213, 148, 26, 1, 158, 221, 234, + 216, 247, 26, 1, 158, 214, 7, 26, 1, 158, 197, 94, 26, 1, 158, 231, 92, + 26, 1, 158, 213, 253, 26, 1, 158, 233, 31, 26, 1, 158, 214, 155, 26, 1, + 158, 216, 128, 26, 1, 158, 219, 172, 26, 1, 158, 214, 137, 26, 1, 158, + 215, 229, 26, 1, 158, 216, 132, 26, 1, 158, 208, 129, 26, 1, 158, 216, + 130, 26, 1, 158, 216, 146, 26, 1, 158, 218, 210, 26, 1, 158, 212, 207, + 26, 1, 158, 217, 11, 26, 1, 158, 220, 179, 26, 1, 158, 212, 86, 26, 1, + 158, 199, 62, 26, 1, 158, 202, 9, 26, 1, 158, 191, 186, 26, 1, 158, 221, + 235, 26, 1, 158, 207, 164, 26, 1, 158, 199, 120, 26, 1, 158, 214, 8, 26, + 1, 158, 216, 151, 26, 1, 158, 212, 206, 26, 1, 158, 221, 233, 26, 1, 158, + 209, 131, 26, 1, 158, 209, 235, 26, 1, 158, 212, 59, 26, 1, 158, 219, + 178, 26, 1, 158, 214, 47, 26, 1, 158, 216, 148, 26, 1, 158, 214, 20, 26, + 1, 158, 191, 200, 26, 1, 158, 210, 139, 26, 1, 158, 191, 199, 26, 1, 158, + 214, 160, 26, 1, 158, 212, 195, 26, 1, 158, 200, 250, 26, 1, 158, 220, + 212, 26, 1, 158, 214, 36, 26, 1, 158, 214, 5, 26, 1, 158, 197, 69, 26, 1, + 158, 216, 159, 26, 1, 158, 220, 201, 26, 1, 158, 212, 204, 26, 1, 158, + 199, 60, 26, 1, 158, 217, 129, 26, 1, 158, 214, 45, 26, 1, 158, 219, 171, + 26, 1, 158, 214, 26, 26, 1, 158, 212, 209, 26, 1, 158, 213, 127, 26, 1, + 158, 231, 76, 26, 1, 158, 220, 234, 26, 1, 158, 207, 57, 211, 121, 26, 1, + 158, 199, 226, 26, 1, 158, 198, 50, 26, 1, 158, 212, 83, 26, 1, 158, 206, + 196, 26, 1, 158, 219, 229, 26, 1, 158, 216, 212, 26, 1, 158, 218, 170, + 26, 1, 158, 200, 160, 26, 1, 158, 215, 157, 26, 1, 158, 203, 77, 26, 1, + 158, 203, 87, 26, 1, 158, 220, 151, 26, 1, 158, 212, 180, 26, 1, 158, + 203, 6, 26, 1, 158, 212, 197, 26, 1, 158, 210, 51, 26, 1, 158, 213, 221, + 26, 1, 158, 203, 42, 26, 1, 158, 208, 145, 26, 1, 158, 215, 86, 26, 1, + 158, 219, 2, 26, 1, 158, 207, 57, 215, 146, 26, 1, 158, 198, 193, 26, 1, + 158, 212, 183, 26, 1, 158, 217, 12, 175, 26, 1, 158, 205, 129, 26, 1, + 158, 233, 110, 26, 1, 114, 214, 159, 26, 1, 114, 198, 57, 26, 1, 114, + 217, 1, 26, 1, 114, 220, 18, 26, 1, 114, 195, 10, 26, 1, 114, 219, 8, 26, + 1, 114, 210, 222, 26, 1, 114, 202, 22, 26, 1, 114, 207, 136, 26, 1, 114, + 212, 211, 26, 1, 114, 214, 130, 26, 1, 114, 208, 163, 26, 1, 114, 199, + 197, 26, 1, 114, 214, 13, 26, 1, 114, 221, 16, 26, 1, 114, 192, 247, 26, + 1, 114, 205, 51, 26, 1, 114, 214, 37, 26, 1, 114, 210, 219, 26, 1, 114, + 198, 59, 26, 1, 114, 220, 206, 26, 1, 114, 219, 24, 26, 1, 114, 212, 214, + 26, 1, 114, 213, 245, 26, 1, 114, 217, 135, 26, 1, 114, 214, 6, 26, 1, + 114, 213, 244, 26, 1, 114, 212, 213, 26, 1, 114, 206, 193, 26, 1, 114, + 213, 145, 26, 1, 114, 210, 48, 26, 1, 114, 205, 198, 26, 1, 114, 214, 21, + 26, 1, 114, 216, 138, 26, 1, 114, 231, 70, 26, 1, 114, 214, 9, 26, 1, + 114, 213, 156, 26, 1, 114, 217, 73, 26, 1, 114, 219, 4, 26, 1, 114, 214, + 42, 26, 1, 114, 214, 143, 26, 1, 114, 199, 225, 212, 195, 26, 1, 114, + 203, 253, 26, 1, 114, 208, 156, 26, 1, 114, 214, 163, 202, 31, 26, 1, + 114, 214, 29, 212, 97, 26, 1, 114, 192, 29, 26, 1, 114, 231, 71, 26, 1, + 114, 197, 88, 26, 1, 114, 192, 47, 26, 1, 114, 209, 75, 26, 1, 114, 197, + 75, 26, 1, 114, 221, 241, 26, 1, 114, 200, 249, 26, 1, 114, 199, 61, 26, + 1, 114, 195, 79, 26, 1, 114, 193, 100, 26, 1, 114, 220, 125, 26, 1, 114, + 208, 167, 26, 1, 114, 199, 239, 26, 1, 114, 231, 91, 26, 1, 114, 214, 52, + 26, 1, 114, 203, 90, 26, 1, 114, 216, 133, 26, 1, 114, 217, 5, 26, 1, + 114, 212, 46, 26, 1, 114, 213, 108, 26, 1, 114, 231, 178, 26, 1, 114, + 197, 76, 26, 1, 114, 220, 217, 26, 1, 114, 192, 104, 26, 1, 114, 212, 84, + 242, 239, 26, 1, 114, 192, 18, 26, 1, 114, 216, 150, 26, 1, 114, 214, + 148, 26, 1, 114, 209, 176, 26, 1, 114, 191, 206, 26, 1, 114, 219, 173, + 26, 1, 114, 232, 86, 26, 1, 114, 231, 177, 26, 1, 114, 213, 255, 26, 1, + 114, 221, 243, 26, 1, 114, 217, 138, 26, 1, 114, 214, 12, 26, 1, 114, + 231, 77, 26, 1, 114, 233, 111, 26, 1, 114, 212, 184, 26, 1, 114, 209, + 236, 26, 1, 114, 192, 45, 26, 1, 114, 214, 38, 26, 1, 114, 212, 84, 248, + 211, 26, 1, 114, 212, 26, 26, 1, 114, 209, 37, 26, 1, 114, 216, 82, 26, + 1, 114, 232, 84, 26, 1, 114, 214, 246, 26, 1, 114, 215, 151, 26, 1, 114, + 231, 76, 26, 1, 114, 232, 89, 68, 26, 1, 114, 215, 87, 26, 1, 114, 208, + 162, 26, 1, 114, 214, 1, 26, 1, 114, 220, 190, 26, 1, 114, 209, 173, 26, + 1, 114, 212, 198, 26, 1, 114, 192, 46, 26, 1, 114, 214, 22, 26, 1, 114, + 210, 223, 210, 21, 26, 1, 114, 232, 89, 247, 140, 26, 1, 114, 232, 169, + 26, 1, 114, 213, 150, 26, 1, 114, 65, 26, 1, 114, 198, 50, 26, 1, 114, + 74, 26, 1, 114, 68, 26, 1, 114, 220, 16, 26, 1, 114, 210, 223, 209, 84, + 26, 1, 114, 199, 245, 26, 1, 114, 199, 180, 26, 1, 114, 214, 163, 215, + 73, 228, 174, 26, 1, 114, 203, 65, 26, 1, 114, 192, 42, 26, 1, 114, 213, + 238, 26, 1, 114, 191, 211, 26, 1, 114, 191, 244, 200, 136, 26, 1, 114, + 191, 244, 238, 244, 26, 1, 114, 191, 194, 26, 1, 114, 191, 202, 26, 1, + 114, 221, 229, 26, 1, 114, 209, 234, 26, 1, 114, 213, 151, 234, 51, 26, + 1, 114, 208, 158, 26, 1, 114, 192, 253, 26, 1, 114, 233, 54, 26, 1, 114, + 195, 148, 26, 1, 114, 218, 227, 26, 1, 114, 216, 102, 26, 1, 114, 207, + 21, 26, 1, 114, 207, 165, 26, 1, 114, 213, 237, 26, 1, 114, 214, 70, 26, + 1, 114, 203, 57, 26, 1, 114, 203, 42, 26, 1, 114, 232, 89, 207, 60, 26, + 1, 114, 181, 26, 1, 114, 209, 187, 26, 1, 114, 219, 2, 26, 1, 114, 221, + 69, 26, 1, 114, 216, 188, 26, 1, 114, 174, 26, 1, 114, 217, 70, 26, 1, + 114, 199, 63, 26, 1, 114, 221, 168, 26, 1, 114, 215, 233, 26, 1, 114, + 199, 95, 26, 1, 114, 233, 78, 26, 1, 114, 231, 64, 26, 1, 209, 217, 155, + 26, 1, 209, 217, 66, 26, 1, 209, 217, 220, 234, 26, 1, 209, 217, 234, + 190, 26, 1, 209, 217, 207, 86, 26, 1, 209, 217, 199, 226, 26, 1, 209, + 217, 212, 83, 26, 1, 209, 217, 173, 26, 1, 209, 217, 206, 196, 26, 1, + 209, 217, 206, 243, 26, 1, 209, 217, 216, 212, 26, 1, 209, 217, 199, 245, + 26, 1, 209, 217, 214, 162, 26, 1, 209, 217, 213, 157, 26, 1, 209, 217, + 218, 170, 26, 1, 209, 217, 200, 160, 26, 1, 209, 217, 203, 77, 26, 1, + 209, 217, 202, 223, 26, 1, 209, 217, 203, 249, 26, 1, 209, 217, 220, 151, + 26, 1, 209, 217, 221, 243, 26, 1, 209, 217, 212, 148, 26, 1, 209, 217, + 212, 180, 26, 1, 209, 217, 213, 128, 26, 1, 209, 217, 191, 243, 26, 1, + 209, 217, 203, 6, 26, 1, 209, 217, 170, 26, 1, 209, 217, 212, 217, 26, 1, + 209, 217, 209, 234, 26, 1, 209, 217, 212, 197, 26, 1, 209, 217, 192, 253, + 26, 1, 209, 217, 210, 51, 26, 1, 209, 217, 206, 69, 26, 1, 209, 217, 213, + 221, 26, 1, 209, 217, 207, 21, 26, 1, 209, 217, 221, 253, 26, 1, 209, + 217, 213, 254, 26, 1, 209, 217, 214, 49, 26, 1, 209, 217, 203, 57, 26, 1, + 209, 217, 208, 163, 26, 1, 209, 217, 232, 169, 26, 1, 209, 217, 193, 190, + 26, 1, 209, 217, 219, 148, 26, 1, 209, 217, 219, 2, 26, 1, 209, 217, 221, + 69, 26, 1, 209, 217, 217, 3, 26, 1, 209, 217, 207, 56, 26, 1, 209, 217, + 174, 26, 1, 209, 217, 216, 14, 26, 1, 209, 217, 217, 11, 26, 1, 209, 217, + 199, 73, 26, 1, 209, 217, 221, 23, 26, 1, 209, 217, 205, 151, 26, 1, 209, + 217, 193, 248, 215, 161, 1, 190, 190, 215, 161, 1, 214, 18, 215, 161, 1, + 192, 12, 215, 161, 1, 216, 48, 215, 161, 1, 249, 155, 215, 161, 1, 238, + 34, 215, 161, 1, 65, 215, 161, 1, 209, 213, 215, 161, 1, 221, 211, 215, + 161, 1, 230, 24, 215, 161, 1, 238, 9, 215, 161, 1, 243, 50, 215, 161, 1, + 222, 17, 215, 161, 1, 211, 122, 215, 161, 1, 217, 135, 215, 161, 1, 213, + 181, 215, 161, 1, 168, 215, 161, 1, 211, 89, 215, 161, 1, 74, 215, 161, + 1, 206, 163, 215, 161, 1, 203, 82, 215, 161, 1, 199, 32, 215, 161, 1, + 234, 219, 215, 161, 1, 193, 190, 215, 161, 1, 71, 215, 161, 1, 221, 69, + 215, 161, 1, 220, 26, 215, 161, 1, 173, 215, 161, 1, 230, 82, 215, 161, + 1, 207, 2, 215, 161, 1, 199, 110, 215, 161, 17, 191, 77, 215, 161, 17, + 107, 215, 161, 17, 109, 215, 161, 17, 138, 215, 161, 17, 134, 215, 161, + 17, 150, 215, 161, 17, 169, 215, 161, 17, 175, 215, 161, 17, 171, 215, + 161, 17, 178, 215, 161, 237, 240, 215, 161, 55, 237, 240, 199, 186, 1, + 210, 240, 199, 186, 1, 211, 168, 199, 186, 1, 211, 60, 199, 186, 1, 210, + 249, 199, 186, 1, 250, 125, 199, 186, 1, 252, 65, 199, 186, 1, 251, 39, + 199, 186, 1, 250, 135, 199, 186, 1, 193, 227, 199, 186, 1, 195, 155, 199, + 186, 1, 194, 255, 199, 186, 1, 193, 236, 199, 186, 1, 233, 184, 199, 186, + 1, 234, 199, 199, 186, 1, 234, 48, 199, 186, 1, 233, 223, 199, 186, 1, + 223, 43, 199, 186, 1, 228, 30, 199, 186, 1, 223, 81, 199, 186, 1, 223, + 47, 199, 186, 1, 196, 18, 199, 186, 1, 196, 160, 199, 186, 1, 196, 64, + 199, 186, 1, 196, 22, 199, 186, 1, 250, 136, 199, 186, 1, 250, 140, 199, + 186, 1, 250, 138, 199, 186, 1, 250, 137, 199, 186, 1, 196, 129, 199, 186, + 1, 196, 138, 199, 186, 1, 196, 135, 199, 186, 1, 196, 130, 199, 186, 1, + 53, 214, 72, 199, 186, 1, 180, 196, 145, 199, 186, 1, 203, 41, 196, 143, + 199, 186, 1, 203, 41, 250, 137, 199, 186, 1, 196, 150, 199, 186, 1, 196, + 143, 199, 186, 1, 196, 146, 199, 186, 1, 196, 145, 199, 186, 1, 196, 131, + 199, 186, 1, 196, 134, 199, 186, 1, 196, 133, 199, 186, 1, 196, 132, 199, + 186, 1, 215, 65, 199, 186, 1, 216, 240, 199, 186, 1, 215, 167, 199, 186, + 1, 215, 74, 199, 186, 1, 155, 199, 186, 1, 221, 217, 199, 186, 1, 231, + 242, 199, 186, 1, 214, 70, 199, 186, 1, 188, 199, 186, 1, 170, 199, 186, + 1, 193, 190, 199, 186, 1, 168, 199, 186, 1, 212, 103, 199, 186, 1, 209, + 230, 199, 186, 1, 249, 155, 199, 186, 1, 174, 199, 186, 1, 181, 199, 186, + 1, 140, 199, 186, 1, 173, 199, 186, 1, 228, 166, 199, 186, 1, 190, 190, + 199, 186, 1, 238, 34, 199, 186, 1, 165, 199, 186, 1, 213, 226, 199, 186, + 1, 203, 166, 199, 186, 1, 247, 162, 199, 186, 1, 197, 168, 199, 186, 1, + 231, 93, 199, 186, 1, 228, 163, 199, 186, 1, 199, 49, 199, 186, 1, 192, + 220, 199, 186, 1, 233, 111, 199, 186, 1, 237, 70, 199, 186, 1, 247, 3, + 199, 186, 1, 191, 123, 199, 186, 17, 191, 77, 199, 186, 17, 107, 199, + 186, 17, 109, 199, 186, 17, 138, 199, 186, 17, 134, 199, 186, 17, 150, + 199, 186, 17, 169, 199, 186, 17, 175, 199, 186, 17, 171, 199, 186, 17, + 178, 249, 69, 195, 185, 1, 234, 86, 249, 69, 195, 185, 1, 155, 249, 69, + 195, 185, 1, 205, 69, 249, 69, 195, 185, 1, 233, 111, 249, 69, 195, 185, + 1, 217, 6, 249, 69, 195, 185, 1, 192, 30, 249, 69, 195, 185, 1, 231, 227, + 249, 69, 195, 185, 1, 237, 51, 249, 69, 195, 185, 1, 221, 22, 249, 69, + 195, 185, 1, 222, 203, 249, 69, 195, 185, 1, 228, 126, 249, 69, 195, 185, + 1, 193, 190, 249, 69, 195, 185, 1, 191, 7, 249, 69, 195, 185, 1, 231, + 171, 249, 69, 195, 185, 1, 236, 176, 249, 69, 195, 185, 1, 247, 44, 249, + 69, 195, 185, 1, 196, 23, 249, 69, 195, 185, 1, 159, 249, 69, 195, 185, + 1, 249, 155, 249, 69, 195, 185, 1, 193, 249, 249, 69, 195, 185, 1, 192, + 74, 249, 69, 195, 185, 1, 168, 249, 69, 195, 185, 1, 193, 177, 249, 69, + 195, 185, 1, 65, 249, 69, 195, 185, 1, 74, 249, 69, 195, 185, 1, 211, 89, + 249, 69, 195, 185, 1, 66, 249, 69, 195, 185, 1, 234, 190, 249, 69, 195, + 185, 1, 71, 249, 69, 195, 185, 1, 68, 249, 69, 195, 185, 33, 137, 198, + 79, 249, 69, 195, 185, 33, 130, 198, 79, 249, 69, 195, 185, 33, 216, 89, + 198, 79, 249, 69, 195, 185, 33, 218, 240, 198, 79, 249, 69, 195, 185, 33, + 229, 135, 198, 79, 249, 69, 195, 185, 232, 82, 201, 64, 145, 90, 18, 222, + 14, 145, 90, 18, 222, 10, 145, 90, 18, 221, 157, 145, 90, 18, 221, 120, + 145, 90, 18, 222, 43, 145, 90, 18, 222, 40, 145, 90, 18, 220, 218, 145, + 90, 18, 220, 187, 145, 90, 18, 222, 16, 145, 90, 18, 221, 227, 145, 90, + 18, 222, 103, 145, 90, 18, 222, 100, 145, 90, 18, 221, 42, 145, 90, 18, + 221, 39, 145, 90, 18, 222, 36, 145, 90, 18, 222, 33, 145, 90, 18, 220, + 220, 145, 90, 18, 220, 219, 145, 90, 18, 221, 62, 145, 90, 18, 221, 27, + 145, 90, 18, 221, 159, 145, 90, 18, 221, 158, 145, 90, 18, 222, 119, 145, + 90, 18, 222, 39, 145, 90, 18, 220, 177, 145, 90, 18, 220, 168, 145, 90, + 18, 222, 128, 145, 90, 18, 222, 120, 145, 90, 120, 195, 160, 145, 90, + 120, 212, 187, 145, 90, 120, 220, 2, 145, 90, 120, 230, 4, 145, 90, 120, + 213, 84, 145, 90, 120, 207, 127, 145, 90, 120, 213, 111, 145, 90, 120, + 208, 71, 145, 90, 120, 192, 91, 145, 90, 120, 229, 110, 145, 90, 120, + 217, 27, 145, 90, 120, 243, 133, 145, 90, 120, 214, 167, 145, 90, 120, + 229, 46, 145, 90, 120, 209, 93, 145, 90, 120, 212, 193, 145, 90, 120, + 214, 207, 145, 90, 120, 250, 165, 145, 90, 120, 192, 216, 145, 90, 120, + 247, 78, 145, 90, 87, 243, 19, 197, 85, 145, 90, 87, 243, 19, 202, 47, + 145, 90, 87, 243, 19, 221, 245, 145, 90, 87, 243, 19, 221, 200, 145, 90, + 87, 243, 19, 200, 247, 145, 90, 87, 243, 19, 229, 4, 145, 90, 87, 243, + 19, 199, 165, 145, 90, 3, 195, 5, 198, 238, 145, 90, 3, 195, 5, 197, 156, + 247, 35, 145, 90, 3, 243, 19, 243, 122, 145, 90, 3, 195, 5, 199, 10, 145, + 90, 3, 195, 5, 233, 51, 145, 90, 3, 192, 171, 212, 181, 145, 90, 3, 192, + 171, 207, 4, 145, 90, 3, 192, 171, 198, 32, 145, 90, 3, 192, 171, 233, + 92, 145, 90, 3, 195, 5, 205, 45, 145, 90, 3, 216, 211, 200, 251, 145, 90, + 3, 195, 5, 212, 233, 145, 90, 3, 228, 33, 192, 111, 145, 90, 3, 192, 215, + 145, 90, 3, 243, 19, 197, 143, 206, 145, 145, 90, 17, 191, 77, 145, 90, + 17, 107, 145, 90, 17, 109, 145, 90, 17, 138, 145, 90, 17, 134, 145, 90, + 17, 150, 145, 90, 17, 169, 145, 90, 17, 175, 145, 90, 17, 171, 145, 90, + 17, 178, 145, 90, 31, 199, 90, 145, 90, 31, 228, 140, 145, 90, 31, 199, + 96, 198, 228, 145, 90, 31, 216, 49, 145, 90, 31, 228, 143, 216, 49, 145, + 90, 31, 199, 96, 248, 171, 145, 90, 31, 197, 227, 145, 90, 3, 195, 5, + 218, 222, 145, 90, 3, 192, 168, 145, 90, 3, 229, 105, 145, 90, 3, 198, + 255, 229, 105, 145, 90, 3, 190, 236, 199, 43, 145, 90, 3, 229, 30, 145, + 90, 3, 212, 247, 145, 90, 3, 192, 206, 145, 90, 3, 212, 185, 145, 90, 3, + 250, 148, 145, 90, 3, 197, 7, 247, 34, 145, 90, 3, 216, 211, 197, 159, + 145, 90, 3, 199, 166, 145, 90, 3, 218, 255, 145, 90, 3, 215, 105, 145, + 90, 3, 243, 19, 230, 78, 218, 198, 212, 191, 212, 190, 145, 90, 3, 243, + 19, 238, 196, 197, 150, 145, 90, 3, 243, 19, 197, 5, 145, 90, 3, 243, 19, + 197, 6, 243, 38, 145, 90, 3, 243, 19, 208, 161, 237, 208, 145, 90, 3, + 243, 19, 212, 240, 198, 41, 145, 90, 242, 246, 3, 197, 154, 145, 90, 242, + 246, 3, 192, 76, 145, 90, 242, 246, 3, 219, 92, 145, 90, 242, 246, 3, + 220, 0, 145, 90, 242, 246, 3, 192, 167, 145, 90, 242, 246, 3, 221, 43, + 145, 90, 242, 246, 3, 230, 0, 145, 90, 242, 246, 3, 215, 149, 145, 90, + 242, 246, 3, 198, 239, 145, 90, 242, 246, 3, 197, 165, 145, 90, 242, 246, + 3, 209, 227, 145, 90, 242, 246, 3, 221, 215, 145, 90, 242, 246, 3, 230, + 66, 145, 90, 242, 246, 3, 195, 182, 145, 90, 242, 246, 3, 233, 88, 145, + 90, 242, 246, 3, 192, 118, 145, 90, 242, 246, 3, 197, 137, 145, 90, 242, + 246, 3, 220, 172, 145, 90, 242, 246, 3, 193, 237, 216, 220, 6, 1, 218, + 170, 216, 220, 6, 1, 206, 9, 216, 220, 6, 1, 196, 12, 216, 220, 6, 1, + 193, 224, 216, 220, 6, 1, 250, 178, 216, 220, 6, 1, 191, 166, 216, 220, + 6, 1, 221, 24, 216, 220, 6, 1, 210, 238, 216, 220, 6, 1, 200, 43, 216, + 220, 6, 1, 232, 53, 216, 220, 6, 1, 233, 177, 216, 220, 6, 1, 68, 216, + 220, 6, 1, 222, 154, 216, 220, 6, 1, 65, 216, 220, 6, 1, 223, 37, 216, + 220, 6, 1, 71, 216, 220, 6, 1, 250, 122, 216, 220, 6, 1, 247, 195, 216, + 220, 6, 1, 66, 216, 220, 6, 1, 191, 225, 216, 220, 6, 1, 172, 216, 220, + 6, 1, 208, 106, 216, 220, 6, 1, 228, 171, 216, 220, 6, 1, 212, 105, 216, + 220, 6, 1, 192, 235, 216, 220, 6, 1, 238, 129, 216, 220, 6, 1, 211, 153, + 216, 220, 6, 1, 215, 63, 216, 220, 6, 1, 146, 216, 220, 6, 1, 74, 216, + 220, 6, 1, 251, 238, 216, 220, 6, 1, 192, 159, 216, 220, 2, 1, 218, 170, + 216, 220, 2, 1, 206, 9, 216, 220, 2, 1, 196, 12, 216, 220, 2, 1, 193, + 224, 216, 220, 2, 1, 250, 178, 216, 220, 2, 1, 191, 166, 216, 220, 2, 1, + 221, 24, 216, 220, 2, 1, 210, 238, 216, 220, 2, 1, 200, 43, 216, 220, 2, + 1, 232, 53, 216, 220, 2, 1, 233, 177, 216, 220, 2, 1, 68, 216, 220, 2, 1, + 222, 154, 216, 220, 2, 1, 65, 216, 220, 2, 1, 223, 37, 216, 220, 2, 1, + 71, 216, 220, 2, 1, 250, 122, 216, 220, 2, 1, 247, 195, 216, 220, 2, 1, + 66, 216, 220, 2, 1, 191, 225, 216, 220, 2, 1, 172, 216, 220, 2, 1, 208, + 106, 216, 220, 2, 1, 228, 171, 216, 220, 2, 1, 212, 105, 216, 220, 2, 1, + 192, 235, 216, 220, 2, 1, 238, 129, 216, 220, 2, 1, 211, 153, 216, 220, + 2, 1, 215, 63, 216, 220, 2, 1, 146, 216, 220, 2, 1, 74, 216, 220, 2, 1, + 251, 238, 216, 220, 2, 1, 192, 159, 216, 220, 17, 191, 77, 216, 220, 17, + 107, 216, 220, 17, 109, 216, 220, 17, 138, 216, 220, 17, 134, 216, 220, + 17, 150, 216, 220, 17, 169, 216, 220, 17, 175, 216, 220, 17, 171, 216, + 220, 17, 178, 216, 220, 31, 199, 95, 216, 220, 31, 234, 129, 216, 220, + 31, 197, 37, 216, 220, 31, 198, 251, 216, 220, 31, 232, 124, 216, 220, + 31, 233, 21, 216, 220, 31, 202, 131, 216, 220, 31, 203, 245, 216, 220, + 31, 234, 163, 216, 220, 31, 213, 173, 216, 220, 17, 91, 251, 159, 20, + 216, 220, 17, 105, 251, 159, 20, 216, 220, 17, 115, 251, 159, 20, 216, + 220, 242, 76, 216, 220, 232, 82, 201, 64, 216, 220, 16, 251, 223, 216, + 220, 233, 218, 211, 138, 121, 1, 168, 121, 1, 249, 155, 121, 1, 11, 168, + 121, 1, 209, 112, 121, 1, 174, 121, 1, 216, 105, 121, 1, 251, 16, 174, + 121, 1, 233, 111, 121, 1, 195, 188, 121, 1, 195, 71, 121, 1, 190, 190, + 121, 1, 238, 34, 121, 1, 11, 197, 132, 121, 1, 11, 190, 190, 121, 1, 197, + 132, 121, 1, 237, 193, 121, 1, 181, 121, 1, 213, 226, 121, 1, 11, 213, + 81, 121, 1, 251, 16, 181, 121, 1, 213, 81, 121, 1, 213, 67, 121, 1, 173, + 121, 1, 218, 184, 121, 1, 219, 161, 121, 1, 219, 150, 121, 1, 198, 112, + 121, 1, 236, 185, 121, 1, 198, 104, 121, 1, 236, 184, 121, 1, 155, 121, + 1, 231, 242, 121, 1, 11, 155, 121, 1, 208, 98, 121, 1, 208, 74, 121, 1, + 214, 70, 121, 1, 214, 19, 121, 1, 251, 16, 214, 70, 121, 1, 140, 121, 1, + 192, 220, 121, 1, 231, 93, 121, 1, 231, 68, 121, 1, 197, 142, 121, 1, + 235, 20, 121, 1, 212, 103, 121, 1, 212, 85, 121, 1, 197, 157, 121, 1, + 235, 31, 121, 1, 11, 197, 157, 121, 1, 11, 235, 31, 121, 1, 207, 83, 197, + 157, 121, 1, 203, 166, 121, 1, 201, 176, 121, 1, 191, 71, 121, 1, 190, + 253, 121, 1, 197, 168, 121, 1, 235, 37, 121, 1, 11, 197, 168, 121, 1, + 188, 121, 1, 191, 123, 121, 1, 190, 254, 121, 1, 190, 224, 121, 1, 190, + 204, 121, 1, 251, 16, 190, 224, 121, 1, 190, 196, 121, 1, 190, 203, 121, + 1, 193, 190, 121, 1, 251, 247, 121, 1, 229, 179, 121, 1, 248, 34, 121, 1, + 200, 125, 121, 1, 235, 21, 121, 1, 199, 145, 121, 1, 197, 161, 121, 1, + 206, 72, 121, 3, 120, 52, 164, 121, 1, 214, 214, 121, 3, 250, 201, 121, + 3, 207, 83, 195, 18, 121, 3, 207, 83, 250, 201, 121, 18, 3, 65, 121, 18, + 3, 252, 208, 121, 18, 3, 251, 243, 121, 18, 3, 251, 134, 121, 18, 3, 251, + 124, 121, 18, 3, 74, 121, 18, 3, 211, 89, 121, 18, 3, 193, 48, 121, 18, + 3, 193, 224, 121, 18, 3, 71, 121, 18, 3, 234, 105, 121, 18, 3, 234, 90, + 121, 18, 3, 211, 149, 121, 18, 3, 68, 121, 18, 3, 228, 37, 121, 18, 3, + 228, 36, 121, 18, 3, 228, 35, 121, 18, 3, 223, 90, 121, 18, 3, 223, 228, + 121, 18, 3, 223, 201, 121, 18, 3, 223, 51, 121, 18, 3, 223, 138, 121, 18, + 3, 66, 121, 18, 3, 196, 168, 121, 18, 3, 196, 167, 121, 18, 3, 196, 166, + 121, 18, 3, 196, 30, 121, 18, 3, 196, 148, 121, 18, 3, 196, 97, 121, 18, + 3, 192, 159, 121, 18, 3, 192, 33, 121, 18, 3, 252, 27, 121, 18, 3, 252, + 23, 121, 18, 3, 234, 28, 121, 18, 3, 206, 114, 234, 28, 121, 18, 3, 234, + 36, 121, 18, 3, 206, 114, 234, 36, 121, 18, 3, 251, 238, 121, 18, 3, 234, + 168, 121, 18, 3, 250, 165, 121, 18, 3, 211, 21, 121, 18, 3, 215, 63, 121, + 18, 3, 214, 72, 121, 18, 3, 196, 81, 121, 18, 3, 191, 205, 121, 18, 3, + 211, 143, 121, 18, 3, 211, 150, 121, 18, 3, 193, 239, 121, 18, 3, 223, + 206, 121, 18, 3, 234, 219, 121, 18, 3, 223, 88, 121, 18, 3, 196, 139, + 121, 163, 179, 121, 163, 198, 54, 179, 121, 163, 58, 121, 163, 60, 121, + 1, 198, 77, 121, 1, 198, 76, 121, 1, 198, 75, 121, 1, 198, 74, 121, 1, + 198, 73, 121, 1, 198, 72, 121, 1, 198, 71, 121, 1, 207, 83, 198, 78, 121, + 1, 207, 83, 198, 77, 121, 1, 207, 83, 198, 75, 121, 1, 207, 83, 198, 74, + 121, 1, 207, 83, 198, 73, 121, 1, 207, 83, 198, 71, 19, 223, 53, 77, 46, + 223, 53, 77, 39, 243, 82, 228, 253, 77, 39, 243, 82, 223, 53, 77, 41, 2, + 27, 233, 5, 195, 57, 251, 159, 207, 109, 87, 247, 162, 195, 57, 251, 159, + 207, 109, 87, 213, 225, 19, 242, 65, 19, 242, 64, 19, 242, 63, 19, 242, + 62, 19, 242, 61, 19, 242, 60, 19, 242, 59, 19, 242, 58, 19, 242, 57, 19, + 242, 56, 19, 242, 55, 19, 242, 54, 19, 242, 53, 19, 242, 52, 19, 242, 51, + 19, 242, 50, 19, 242, 49, 19, 242, 48, 19, 242, 47, 19, 242, 46, 19, 242, + 45, 19, 242, 44, 19, 242, 43, 19, 242, 42, 19, 242, 41, 19, 242, 40, 19, + 242, 39, 19, 242, 38, 19, 242, 37, 19, 242, 36, 19, 242, 35, 19, 242, 34, + 19, 242, 33, 19, 242, 32, 19, 242, 31, 19, 242, 30, 19, 242, 29, 19, 242, + 28, 19, 242, 27, 19, 242, 26, 19, 242, 25, 19, 242, 24, 19, 242, 23, 19, + 242, 22, 19, 242, 21, 19, 242, 20, 19, 242, 19, 19, 242, 18, 19, 242, 17, + 19, 242, 16, 19, 242, 15, 19, 242, 14, 19, 242, 13, 19, 242, 12, 19, 242, + 11, 19, 242, 10, 19, 242, 9, 19, 242, 8, 19, 242, 7, 19, 242, 6, 19, 242, + 5, 19, 242, 4, 19, 242, 3, 19, 242, 2, 19, 242, 1, 19, 242, 0, 19, 241, + 255, 19, 241, 254, 19, 241, 253, 19, 241, 252, 19, 241, 251, 19, 241, + 250, 19, 241, 249, 19, 241, 248, 19, 241, 247, 19, 241, 246, 19, 241, + 245, 19, 241, 244, 19, 241, 243, 19, 241, 242, 19, 241, 241, 19, 241, + 240, 19, 241, 239, 19, 241, 238, 19, 241, 237, 19, 241, 236, 19, 241, + 235, 19, 241, 234, 19, 241, 233, 19, 241, 232, 19, 241, 231, 19, 241, + 230, 19, 241, 229, 19, 241, 228, 19, 241, 227, 19, 241, 226, 19, 241, + 225, 19, 241, 224, 19, 241, 223, 19, 241, 222, 19, 241, 221, 19, 241, + 220, 19, 241, 219, 19, 241, 218, 19, 241, 217, 19, 241, 216, 19, 241, + 215, 19, 241, 214, 19, 241, 213, 19, 241, 212, 19, 241, 211, 19, 241, + 210, 19, 241, 209, 19, 241, 208, 19, 241, 207, 19, 241, 206, 19, 241, + 205, 19, 241, 204, 19, 241, 203, 19, 241, 202, 19, 241, 201, 19, 241, + 200, 19, 241, 199, 19, 241, 198, 19, 241, 197, 19, 241, 196, 19, 241, + 195, 19, 241, 194, 19, 241, 193, 19, 241, 192, 19, 241, 191, 19, 241, + 190, 19, 241, 189, 19, 241, 188, 19, 241, 187, 19, 241, 186, 19, 241, + 185, 19, 241, 184, 19, 241, 183, 19, 241, 182, 19, 241, 181, 19, 241, + 180, 19, 241, 179, 19, 241, 178, 19, 241, 177, 19, 241, 176, 19, 241, + 175, 19, 241, 174, 19, 241, 173, 19, 241, 172, 19, 241, 171, 19, 241, + 170, 19, 241, 169, 19, 241, 168, 19, 241, 167, 19, 241, 166, 19, 241, + 165, 19, 241, 164, 19, 241, 163, 19, 241, 162, 19, 241, 161, 19, 241, + 160, 19, 241, 159, 19, 241, 158, 19, 241, 157, 19, 241, 156, 19, 241, + 155, 19, 241, 154, 19, 241, 153, 19, 241, 152, 19, 241, 151, 19, 241, + 150, 19, 241, 149, 19, 241, 148, 19, 241, 147, 19, 241, 146, 19, 241, + 145, 19, 241, 144, 19, 241, 143, 19, 241, 142, 19, 241, 141, 19, 241, + 140, 19, 241, 139, 19, 241, 138, 19, 241, 137, 19, 241, 136, 19, 241, + 135, 19, 241, 134, 19, 241, 133, 19, 241, 132, 19, 241, 131, 19, 241, + 130, 19, 241, 129, 19, 241, 128, 19, 241, 127, 19, 241, 126, 19, 241, + 125, 19, 241, 124, 19, 241, 123, 19, 241, 122, 19, 241, 121, 19, 241, + 120, 19, 241, 119, 19, 241, 118, 19, 241, 117, 19, 241, 116, 19, 241, + 115, 19, 241, 114, 19, 241, 113, 19, 241, 112, 19, 241, 111, 19, 241, + 110, 19, 241, 109, 19, 241, 108, 19, 241, 107, 19, 241, 106, 19, 241, + 105, 19, 241, 104, 19, 241, 103, 19, 241, 102, 19, 241, 101, 19, 241, + 100, 19, 241, 99, 19, 241, 98, 19, 241, 97, 19, 241, 96, 19, 241, 95, 19, + 241, 94, 19, 241, 93, 19, 241, 92, 19, 241, 91, 19, 241, 90, 19, 241, 89, + 19, 241, 88, 19, 241, 87, 19, 241, 86, 19, 241, 85, 19, 241, 84, 19, 241, + 83, 19, 241, 82, 19, 241, 81, 19, 241, 80, 19, 241, 79, 19, 241, 78, 19, + 241, 77, 19, 241, 76, 19, 241, 75, 19, 241, 74, 19, 241, 73, 19, 241, 72, + 19, 241, 71, 19, 241, 70, 19, 241, 69, 19, 241, 68, 19, 241, 67, 19, 241, + 66, 19, 241, 65, 19, 241, 64, 19, 241, 63, 19, 241, 62, 19, 241, 61, 19, + 241, 60, 19, 241, 59, 19, 241, 58, 19, 241, 57, 19, 241, 56, 19, 241, 55, + 19, 241, 54, 19, 241, 53, 19, 241, 52, 19, 241, 51, 19, 241, 50, 19, 241, + 49, 19, 241, 48, 19, 241, 47, 19, 241, 46, 19, 241, 45, 19, 241, 44, 19, + 241, 43, 19, 241, 42, 19, 241, 41, 19, 241, 40, 19, 241, 39, 19, 241, 38, + 19, 241, 37, 19, 241, 36, 19, 241, 35, 19, 241, 34, 19, 241, 33, 19, 241, + 32, 19, 241, 31, 19, 241, 30, 19, 241, 29, 19, 241, 28, 19, 241, 27, 19, + 241, 26, 19, 241, 25, 19, 241, 24, 19, 241, 23, 19, 241, 22, 19, 241, 21, + 19, 241, 20, 19, 241, 19, 19, 241, 18, 19, 241, 17, 19, 241, 16, 19, 241, + 15, 19, 241, 14, 19, 241, 13, 19, 241, 12, 19, 241, 11, 19, 241, 10, 19, + 241, 9, 19, 241, 8, 19, 241, 7, 19, 241, 6, 19, 241, 5, 19, 241, 4, 19, + 241, 3, 19, 241, 2, 19, 241, 1, 19, 241, 0, 19, 240, 255, 19, 240, 254, + 19, 240, 253, 19, 240, 252, 19, 240, 251, 19, 240, 250, 19, 240, 249, 19, + 240, 248, 19, 240, 247, 19, 240, 246, 19, 240, 245, 19, 240, 244, 19, + 240, 243, 19, 240, 242, 19, 240, 241, 19, 240, 240, 19, 240, 239, 19, + 240, 238, 19, 240, 237, 19, 240, 236, 19, 240, 235, 19, 240, 234, 19, + 240, 233, 19, 240, 232, 19, 240, 231, 19, 240, 230, 19, 240, 229, 19, + 240, 228, 19, 240, 227, 19, 240, 226, 19, 240, 225, 19, 240, 224, 19, + 240, 223, 19, 240, 222, 19, 240, 221, 19, 240, 220, 19, 240, 219, 19, + 240, 218, 19, 240, 217, 19, 240, 216, 19, 240, 215, 19, 240, 214, 19, + 240, 213, 19, 240, 212, 19, 240, 211, 19, 240, 210, 19, 240, 209, 19, + 240, 208, 19, 240, 207, 19, 240, 206, 19, 240, 205, 19, 240, 204, 19, + 240, 203, 19, 240, 202, 19, 240, 201, 19, 240, 200, 19, 240, 199, 19, + 240, 198, 19, 240, 197, 19, 240, 196, 19, 240, 195, 19, 240, 194, 19, + 240, 193, 19, 240, 192, 19, 240, 191, 19, 240, 190, 19, 240, 189, 19, + 240, 188, 19, 240, 187, 19, 240, 186, 19, 240, 185, 19, 240, 184, 19, + 240, 183, 19, 240, 182, 19, 240, 181, 19, 240, 180, 19, 240, 179, 19, + 240, 178, 19, 240, 177, 19, 240, 176, 19, 240, 175, 19, 240, 174, 19, + 240, 173, 19, 240, 172, 19, 240, 171, 19, 240, 170, 19, 240, 169, 19, + 240, 168, 19, 240, 167, 19, 240, 166, 19, 240, 165, 19, 240, 164, 19, + 240, 163, 19, 240, 162, 19, 240, 161, 19, 240, 160, 19, 240, 159, 19, + 240, 158, 19, 240, 157, 19, 240, 156, 19, 240, 155, 19, 240, 154, 19, + 240, 153, 19, 240, 152, 19, 240, 151, 19, 240, 150, 19, 240, 149, 19, + 240, 148, 19, 240, 147, 19, 240, 146, 19, 240, 145, 19, 240, 144, 19, + 240, 143, 19, 240, 142, 19, 240, 141, 19, 240, 140, 19, 240, 139, 19, + 240, 138, 19, 240, 137, 19, 240, 136, 19, 240, 135, 19, 240, 134, 19, + 240, 133, 19, 240, 132, 19, 240, 131, 19, 240, 130, 19, 240, 129, 19, + 240, 128, 19, 240, 127, 19, 240, 126, 19, 240, 125, 19, 240, 124, 19, + 240, 123, 19, 240, 122, 19, 240, 121, 19, 240, 120, 19, 240, 119, 19, + 240, 118, 19, 240, 117, 19, 240, 116, 19, 240, 115, 19, 240, 114, 19, + 240, 113, 19, 240, 112, 19, 240, 111, 19, 240, 110, 19, 240, 109, 19, + 240, 108, 19, 240, 107, 19, 240, 106, 19, 240, 105, 19, 240, 104, 19, + 240, 103, 19, 240, 102, 19, 240, 101, 19, 240, 100, 19, 240, 99, 19, 240, + 98, 19, 240, 97, 19, 240, 96, 19, 240, 95, 19, 240, 94, 19, 240, 93, 19, + 240, 92, 19, 240, 91, 19, 240, 90, 19, 240, 89, 19, 240, 88, 19, 240, 87, + 19, 240, 86, 19, 240, 85, 19, 240, 84, 19, 240, 83, 19, 240, 82, 19, 240, + 81, 19, 240, 80, 19, 240, 79, 19, 240, 78, 19, 240, 77, 19, 240, 76, 19, + 240, 75, 19, 240, 74, 19, 240, 73, 19, 240, 72, 19, 240, 71, 19, 240, 70, + 19, 240, 69, 19, 240, 68, 19, 240, 67, 19, 240, 66, 19, 240, 65, 19, 240, + 64, 19, 240, 63, 19, 240, 62, 19, 240, 61, 19, 240, 60, 19, 240, 59, 19, + 240, 58, 19, 240, 57, 19, 240, 56, 19, 240, 55, 19, 240, 54, 19, 240, 53, + 19, 240, 52, 19, 240, 51, 19, 240, 50, 19, 240, 49, 19, 240, 48, 19, 240, + 47, 19, 240, 46, 19, 240, 45, 19, 240, 44, 19, 240, 43, 19, 240, 42, 19, + 240, 41, 19, 240, 40, 19, 240, 39, 19, 240, 38, 19, 240, 37, 19, 240, 36, + 19, 240, 35, 19, 240, 34, 19, 240, 33, 19, 240, 32, 19, 240, 31, 19, 240, + 30, 19, 240, 29, 19, 240, 28, 19, 240, 27, 19, 240, 26, 19, 240, 25, 19, + 240, 24, 19, 240, 23, 19, 240, 22, 19, 240, 21, 19, 240, 20, 19, 240, 19, + 19, 240, 18, 19, 240, 17, 19, 240, 16, 19, 240, 15, 19, 240, 14, 19, 240, + 13, 19, 240, 12, 19, 240, 11, 19, 240, 10, 19, 240, 9, 19, 240, 8, 19, + 240, 7, 19, 240, 6, 19, 240, 5, 19, 240, 4, 19, 240, 3, 19, 240, 2, 19, + 240, 1, 19, 240, 0, 19, 239, 255, 19, 239, 254, 19, 239, 253, 19, 239, + 252, 19, 239, 251, 19, 239, 250, 19, 239, 249, 19, 239, 248, 19, 239, + 247, 19, 239, 246, 19, 239, 245, 19, 239, 244, 19, 239, 243, 19, 239, + 242, 19, 239, 241, 19, 239, 240, 19, 239, 239, 19, 239, 238, 19, 239, + 237, 19, 239, 236, 19, 239, 235, 19, 239, 234, 19, 239, 233, 19, 239, + 232, 19, 239, 231, 19, 239, 230, 19, 239, 229, 19, 239, 228, 19, 239, + 227, 19, 239, 226, 19, 239, 225, 19, 239, 224, 19, 239, 223, 19, 239, + 222, 19, 239, 221, 19, 239, 220, 19, 239, 219, 19, 239, 218, 19, 239, + 217, 19, 239, 216, 19, 239, 215, 19, 239, 214, 19, 239, 213, 19, 239, + 212, 19, 239, 211, 19, 239, 210, 19, 239, 209, 19, 239, 208, 19, 239, + 207, 19, 239, 206, 19, 239, 205, 19, 239, 204, 19, 239, 203, 19, 239, + 202, 19, 239, 201, 19, 239, 200, 19, 239, 199, 19, 239, 198, 19, 239, + 197, 19, 239, 196, 19, 239, 195, 19, 239, 194, 19, 239, 193, 19, 239, + 192, 19, 239, 191, 19, 239, 190, 19, 239, 189, 19, 239, 188, 19, 239, + 187, 19, 239, 186, 19, 239, 185, 19, 239, 184, 19, 239, 183, 19, 239, + 182, 19, 239, 181, 19, 239, 180, 19, 239, 179, 19, 239, 178, 19, 239, + 177, 19, 239, 176, 19, 239, 175, 19, 239, 174, 19, 239, 173, 19, 239, + 172, 19, 239, 171, 19, 239, 170, 19, 239, 169, 19, 239, 168, 19, 239, + 167, 19, 239, 166, 19, 239, 165, 19, 239, 164, 19, 239, 163, 19, 239, + 162, 19, 239, 161, 19, 239, 160, 19, 239, 159, 19, 239, 158, 19, 239, + 157, 19, 239, 156, 19, 239, 155, 19, 239, 154, 19, 239, 153, 19, 239, + 152, 19, 239, 151, 19, 239, 150, 19, 239, 149, 19, 239, 148, 19, 239, + 147, 19, 239, 146, 19, 239, 145, 19, 239, 144, 19, 239, 143, 19, 239, + 142, 19, 239, 141, 19, 239, 140, 19, 239, 139, 19, 239, 138, 19, 239, + 137, 19, 239, 136, 19, 239, 135, 19, 239, 134, 19, 239, 133, 19, 239, + 132, 19, 239, 131, 19, 239, 130, 19, 239, 129, 19, 239, 128, 19, 239, + 127, 19, 239, 126, 19, 239, 125, 19, 239, 124, 19, 239, 123, 19, 239, + 122, 19, 239, 121, 19, 239, 120, 19, 239, 119, 19, 239, 118, 19, 239, + 117, 19, 239, 116, 19, 239, 115, 19, 239, 114, 19, 239, 113, 19, 239, + 112, 19, 239, 111, 19, 239, 110, 19, 239, 109, 19, 239, 108, 19, 239, + 107, 19, 239, 106, 19, 239, 105, 19, 239, 104, 19, 239, 103, 19, 239, + 102, 19, 239, 101, 19, 239, 100, 19, 239, 99, 19, 239, 98, 19, 239, 97, + 19, 239, 96, 19, 239, 95, 19, 239, 94, 19, 239, 93, 19, 239, 92, 19, 239, + 91, 19, 239, 90, 19, 239, 89, 19, 239, 88, 19, 239, 87, 19, 239, 86, 19, + 239, 85, 19, 239, 84, 19, 239, 83, 19, 239, 82, 19, 239, 81, 19, 239, 80, + 19, 239, 79, 19, 239, 78, 19, 239, 77, 19, 239, 76, 19, 239, 75, 19, 239, + 74, 19, 239, 73, 19, 239, 72, 19, 239, 71, 19, 239, 70, 19, 239, 69, 19, + 239, 68, 19, 239, 67, 19, 239, 66, 41, 2, 27, 246, 240, 41, 2, 27, 246, + 239, 41, 2, 27, 246, 238, 41, 2, 27, 246, 237, 41, 2, 27, 246, 236, 41, + 2, 27, 246, 235, 41, 2, 27, 246, 234, 41, 2, 27, 246, 233, 41, 2, 27, + 246, 232, 41, 2, 27, 246, 231, 41, 2, 27, 246, 230, 41, 2, 27, 246, 229, + 41, 2, 27, 246, 228, 41, 2, 27, 246, 227, 41, 2, 27, 246, 226, 41, 2, 27, 246, 225, 41, 2, 27, 246, 224, 41, 2, 27, 246, 223, 41, 2, 27, 246, 222, 41, 2, 27, 246, 221, 41, 2, 27, 246, 220, 41, 2, 27, 246, 219, 41, 2, 27, 246, 218, 41, 2, 27, 246, 217, 41, 2, 27, 246, 216, 41, 2, 27, 246, 215, @@ -17734,2952 +17739,2953 @@ static const unsigned char phrasebook[] = { 39, 41, 2, 27, 245, 38, 41, 2, 27, 245, 37, 41, 2, 27, 245, 36, 41, 2, 27, 245, 35, 41, 2, 27, 245, 34, 41, 2, 27, 245, 33, 41, 2, 27, 245, 32, 41, 2, 27, 245, 31, 41, 2, 27, 245, 30, 41, 2, 27, 245, 29, 41, 2, 27, - 245, 28, 41, 2, 27, 245, 27, 41, 2, 27, 245, 26, 41, 2, 27, 245, 25, 72, - 1, 216, 36, 198, 77, 72, 1, 216, 36, 198, 76, 72, 1, 216, 36, 198, 75, - 72, 1, 216, 36, 198, 74, 72, 1, 216, 36, 198, 72, 72, 1, 216, 36, 198, - 71, 72, 1, 216, 36, 214, 211, 198, 78, 72, 1, 216, 36, 214, 211, 198, 77, - 72, 1, 216, 36, 214, 211, 198, 76, 72, 1, 216, 36, 214, 211, 198, 75, 72, - 1, 216, 36, 214, 211, 198, 74, 72, 1, 216, 36, 214, 211, 198, 72, 72, 1, - 216, 36, 214, 211, 198, 71, 72, 1, 251, 14, 71, 229, 120, 1, 251, 14, - 192, 80, 61, 1, 255, 206, 61, 1, 255, 205, 61, 1, 255, 204, 61, 1, 255, - 200, 61, 1, 228, 73, 61, 1, 228, 72, 61, 1, 228, 71, 61, 1, 228, 70, 61, - 1, 196, 231, 61, 1, 196, 230, 61, 1, 196, 229, 61, 1, 196, 228, 61, 1, - 196, 227, 61, 1, 235, 13, 61, 1, 235, 12, 61, 1, 235, 11, 61, 1, 235, 10, - 61, 1, 235, 9, 61, 1, 212, 14, 61, 1, 212, 13, 61, 1, 212, 12, 61, 1, - 222, 141, 61, 1, 222, 138, 61, 1, 222, 137, 61, 1, 222, 136, 61, 1, 222, - 135, 61, 1, 222, 134, 61, 1, 222, 133, 61, 1, 222, 132, 61, 1, 222, 131, - 61, 1, 222, 140, 61, 1, 222, 139, 61, 1, 222, 130, 61, 1, 221, 165, 61, - 1, 221, 164, 61, 1, 221, 163, 61, 1, 221, 162, 61, 1, 221, 161, 61, 1, - 221, 160, 61, 1, 221, 159, 61, 1, 221, 158, 61, 1, 220, 231, 61, 1, 220, - 230, 61, 1, 220, 229, 61, 1, 220, 228, 61, 1, 220, 227, 61, 1, 220, 226, - 61, 1, 220, 225, 61, 1, 222, 21, 61, 1, 222, 20, 61, 1, 222, 19, 61, 1, - 222, 18, 61, 1, 222, 17, 61, 1, 222, 16, 61, 1, 221, 66, 61, 1, 221, 65, - 61, 1, 221, 64, 61, 1, 221, 63, 61, 1, 205, 206, 61, 1, 205, 205, 61, 1, - 205, 204, 61, 1, 205, 203, 61, 1, 205, 202, 61, 1, 205, 201, 61, 1, 205, - 200, 61, 1, 205, 199, 61, 1, 202, 221, 61, 1, 202, 220, 61, 1, 202, 219, - 61, 1, 202, 218, 61, 1, 202, 217, 61, 1, 202, 216, 61, 1, 201, 3, 61, 1, - 201, 2, 61, 1, 201, 1, 61, 1, 201, 0, 61, 1, 200, 255, 61, 1, 200, 254, - 61, 1, 200, 253, 61, 1, 200, 252, 61, 1, 205, 67, 61, 1, 205, 66, 61, 1, - 205, 65, 61, 1, 205, 64, 61, 1, 205, 63, 61, 1, 202, 45, 61, 1, 202, 44, - 61, 1, 202, 43, 61, 1, 202, 42, 61, 1, 202, 41, 61, 1, 202, 40, 61, 1, - 202, 39, 61, 1, 199, 251, 61, 1, 199, 250, 61, 1, 199, 249, 61, 1, 199, - 248, 61, 1, 198, 192, 61, 1, 198, 191, 61, 1, 198, 190, 61, 1, 198, 189, - 61, 1, 198, 188, 61, 1, 198, 187, 61, 1, 198, 186, 61, 1, 197, 93, 61, 1, - 197, 92, 61, 1, 197, 91, 61, 1, 197, 90, 61, 1, 197, 89, 61, 1, 199, 144, - 61, 1, 199, 143, 61, 1, 199, 142, 61, 1, 199, 141, 61, 1, 199, 140, 61, - 1, 199, 139, 61, 1, 199, 138, 61, 1, 199, 137, 61, 1, 199, 136, 61, 1, - 198, 98, 61, 1, 198, 97, 61, 1, 198, 96, 61, 1, 198, 95, 61, 1, 198, 94, - 61, 1, 198, 93, 61, 1, 198, 92, 61, 1, 215, 6, 61, 1, 215, 5, 61, 1, 215, - 4, 61, 1, 215, 3, 61, 1, 215, 2, 61, 1, 215, 1, 61, 1, 215, 0, 61, 1, - 214, 255, 61, 1, 214, 254, 61, 1, 213, 218, 61, 1, 213, 217, 61, 1, 213, - 216, 61, 1, 213, 215, 61, 1, 213, 214, 61, 1, 213, 213, 61, 1, 213, 212, - 61, 1, 213, 211, 61, 1, 212, 177, 61, 1, 212, 176, 61, 1, 212, 175, 61, - 1, 214, 120, 61, 1, 214, 119, 61, 1, 214, 118, 61, 1, 214, 117, 61, 1, - 214, 116, 61, 1, 214, 115, 61, 1, 214, 114, 61, 1, 213, 42, 61, 1, 213, - 41, 61, 1, 213, 40, 61, 1, 213, 39, 61, 1, 213, 38, 61, 1, 230, 104, 61, - 1, 230, 101, 61, 1, 230, 100, 61, 1, 230, 99, 61, 1, 230, 98, 61, 1, 230, - 97, 61, 1, 230, 96, 61, 1, 230, 95, 61, 1, 230, 94, 61, 1, 230, 103, 61, - 1, 230, 102, 61, 1, 229, 157, 61, 1, 229, 156, 61, 1, 229, 155, 61, 1, - 229, 154, 61, 1, 229, 153, 61, 1, 229, 152, 61, 1, 229, 151, 61, 1, 228, - 158, 61, 1, 228, 157, 61, 1, 228, 156, 61, 1, 229, 244, 61, 1, 229, 243, - 61, 1, 229, 242, 61, 1, 229, 241, 61, 1, 229, 240, 61, 1, 229, 239, 61, - 1, 229, 238, 61, 1, 229, 22, 61, 1, 229, 21, 61, 1, 229, 20, 61, 1, 229, - 19, 61, 1, 229, 18, 61, 1, 229, 17, 61, 1, 229, 16, 61, 1, 229, 15, 61, - 1, 217, 159, 61, 1, 217, 158, 61, 1, 217, 157, 61, 1, 217, 156, 61, 1, - 217, 155, 61, 1, 217, 154, 61, 1, 217, 153, 61, 1, 216, 99, 61, 1, 216, - 98, 61, 1, 216, 97, 61, 1, 216, 96, 61, 1, 216, 95, 61, 1, 216, 94, 61, - 1, 216, 93, 61, 1, 215, 154, 61, 1, 215, 153, 61, 1, 215, 152, 61, 1, - 215, 151, 61, 1, 216, 231, 61, 1, 216, 230, 61, 1, 216, 229, 61, 1, 216, - 11, 61, 1, 216, 10, 61, 1, 216, 9, 61, 1, 216, 8, 61, 1, 216, 7, 61, 1, - 216, 6, 61, 1, 192, 148, 61, 1, 192, 147, 61, 1, 192, 146, 61, 1, 192, - 145, 61, 1, 192, 144, 61, 1, 192, 141, 61, 1, 191, 224, 61, 1, 191, 223, - 61, 1, 191, 222, 61, 1, 191, 221, 61, 1, 192, 11, 61, 1, 192, 10, 61, 1, - 192, 9, 61, 1, 192, 8, 61, 1, 192, 7, 61, 1, 192, 6, 61, 1, 207, 185, 61, - 1, 207, 184, 61, 1, 207, 183, 61, 1, 207, 182, 61, 1, 207, 0, 61, 1, 206, - 255, 61, 1, 206, 254, 61, 1, 206, 253, 61, 1, 206, 252, 61, 1, 206, 251, - 61, 1, 206, 250, 61, 1, 206, 67, 61, 1, 206, 66, 61, 1, 206, 65, 61, 1, - 206, 64, 61, 1, 206, 63, 61, 1, 206, 62, 61, 1, 207, 112, 61, 1, 207, - 111, 61, 1, 207, 110, 61, 1, 207, 109, 61, 1, 206, 161, 61, 1, 206, 160, - 61, 1, 206, 159, 61, 1, 206, 158, 61, 1, 206, 157, 61, 1, 206, 156, 61, - 1, 193, 189, 61, 1, 193, 188, 61, 1, 193, 187, 61, 1, 193, 186, 61, 1, - 193, 185, 61, 1, 193, 85, 61, 1, 193, 84, 61, 1, 193, 83, 61, 1, 193, 82, - 61, 1, 193, 81, 61, 1, 193, 124, 61, 1, 193, 123, 61, 1, 193, 122, 61, 1, - 193, 121, 61, 1, 193, 47, 61, 1, 193, 46, 61, 1, 193, 45, 61, 1, 193, 44, - 61, 1, 193, 43, 61, 1, 193, 42, 61, 1, 193, 41, 61, 1, 215, 58, 61, 1, - 215, 57, 229, 120, 1, 251, 14, 193, 0, 72, 1, 251, 14, 192, 33, 72, 1, - 251, 14, 192, 80, 72, 1, 251, 14, 193, 0, 229, 120, 1, 2, 221, 67, 229, - 120, 1, 2, 193, 86, 229, 120, 1, 2, 193, 125, 229, 120, 1, 2, 193, 48, - 72, 1, 2, 221, 67, 72, 1, 2, 193, 86, 72, 1, 2, 193, 125, 72, 1, 2, 193, - 48, 72, 1, 2, 215, 61, 46, 245, 24, 46, 245, 23, 46, 245, 22, 46, 245, - 21, 46, 245, 20, 46, 245, 19, 46, 245, 18, 46, 245, 17, 46, 245, 16, 46, - 245, 15, 46, 245, 14, 46, 245, 13, 46, 245, 12, 46, 245, 11, 46, 245, 10, - 46, 245, 9, 46, 245, 8, 46, 245, 7, 46, 245, 6, 46, 245, 5, 46, 245, 4, - 46, 245, 3, 46, 245, 2, 46, 245, 1, 46, 245, 0, 46, 244, 255, 46, 244, - 254, 46, 244, 253, 46, 244, 252, 46, 244, 251, 46, 244, 250, 46, 244, - 249, 46, 244, 248, 46, 244, 247, 46, 244, 246, 46, 244, 245, 46, 244, - 244, 46, 244, 243, 46, 244, 242, 46, 244, 241, 46, 244, 240, 46, 244, - 239, 46, 244, 238, 46, 244, 237, 46, 244, 236, 46, 244, 235, 46, 244, - 234, 46, 244, 233, 46, 244, 232, 46, 244, 231, 46, 244, 230, 46, 244, - 229, 46, 244, 228, 46, 244, 227, 46, 244, 226, 46, 244, 225, 46, 244, - 224, 46, 244, 223, 46, 244, 222, 46, 244, 221, 46, 244, 220, 46, 244, - 219, 46, 244, 218, 46, 244, 217, 46, 244, 216, 46, 244, 215, 46, 244, - 214, 46, 244, 213, 46, 244, 212, 46, 244, 211, 46, 244, 210, 46, 244, - 209, 46, 244, 208, 46, 244, 207, 46, 244, 206, 46, 244, 205, 46, 244, - 204, 46, 244, 203, 46, 244, 202, 46, 244, 201, 46, 244, 200, 46, 244, - 199, 46, 244, 198, 46, 244, 197, 46, 244, 196, 46, 244, 195, 46, 244, - 194, 46, 244, 193, 46, 244, 192, 46, 244, 191, 46, 244, 190, 46, 244, - 189, 46, 244, 188, 46, 244, 187, 46, 244, 186, 46, 244, 185, 46, 244, - 184, 46, 244, 183, 46, 244, 182, 46, 244, 181, 46, 244, 180, 46, 244, - 179, 46, 244, 178, 46, 244, 177, 46, 244, 176, 46, 244, 175, 46, 244, - 174, 46, 244, 173, 46, 244, 172, 46, 244, 171, 46, 244, 170, 46, 244, - 169, 46, 244, 168, 46, 244, 167, 46, 244, 166, 46, 244, 165, 46, 244, - 164, 46, 244, 163, 46, 244, 162, 46, 244, 161, 46, 244, 160, 46, 244, - 159, 46, 244, 158, 46, 244, 157, 46, 244, 156, 46, 244, 155, 46, 244, - 154, 46, 244, 153, 46, 244, 152, 46, 244, 151, 46, 244, 150, 46, 244, - 149, 46, 244, 148, 46, 244, 147, 46, 244, 146, 46, 244, 145, 46, 244, - 144, 46, 244, 143, 46, 244, 142, 46, 244, 141, 46, 244, 140, 46, 244, - 139, 46, 244, 138, 46, 244, 137, 46, 244, 136, 46, 244, 135, 46, 244, - 134, 46, 244, 133, 46, 244, 132, 46, 244, 131, 46, 244, 130, 46, 244, - 129, 46, 244, 128, 46, 244, 127, 46, 244, 126, 46, 244, 125, 46, 244, - 124, 46, 244, 123, 46, 244, 122, 46, 244, 121, 46, 244, 120, 46, 244, - 119, 46, 244, 118, 46, 244, 117, 46, 244, 116, 46, 244, 115, 46, 244, - 114, 46, 244, 113, 46, 244, 112, 46, 244, 111, 46, 244, 110, 46, 244, - 109, 46, 244, 108, 46, 244, 107, 46, 244, 106, 46, 244, 105, 46, 244, - 104, 46, 244, 103, 46, 244, 102, 46, 244, 101, 46, 244, 100, 46, 244, 99, - 46, 244, 98, 46, 244, 97, 46, 244, 96, 46, 244, 95, 46, 244, 94, 46, 244, - 93, 46, 244, 92, 46, 244, 91, 46, 244, 90, 46, 244, 89, 46, 244, 88, 46, - 244, 87, 46, 244, 86, 46, 244, 85, 46, 244, 84, 46, 244, 83, 46, 244, 82, - 46, 244, 81, 46, 244, 80, 46, 244, 79, 46, 244, 78, 46, 244, 77, 46, 244, - 76, 46, 244, 75, 46, 244, 74, 46, 244, 73, 46, 244, 72, 46, 244, 71, 46, - 244, 70, 46, 244, 69, 46, 244, 68, 46, 244, 67, 46, 244, 66, 46, 244, 65, - 46, 244, 64, 46, 244, 63, 46, 244, 62, 46, 244, 61, 46, 244, 60, 46, 244, - 59, 46, 244, 58, 46, 244, 57, 46, 244, 56, 46, 244, 55, 46, 244, 54, 46, - 244, 53, 46, 244, 52, 46, 244, 51, 46, 244, 50, 46, 244, 49, 46, 244, 48, - 46, 244, 47, 46, 244, 46, 46, 244, 45, 46, 244, 44, 46, 244, 43, 46, 244, - 42, 46, 244, 41, 46, 244, 40, 46, 244, 39, 46, 244, 38, 46, 244, 37, 46, - 244, 36, 46, 244, 35, 46, 244, 34, 46, 244, 33, 46, 244, 32, 46, 244, 31, - 46, 244, 30, 46, 244, 29, 46, 244, 28, 46, 244, 27, 46, 244, 26, 46, 244, - 25, 46, 244, 24, 46, 244, 23, 46, 244, 22, 46, 244, 21, 46, 244, 20, 46, - 244, 19, 46, 244, 18, 46, 244, 17, 46, 244, 16, 46, 244, 15, 46, 244, 14, - 46, 244, 13, 46, 244, 12, 46, 244, 11, 46, 244, 10, 46, 244, 9, 46, 244, - 8, 46, 244, 7, 46, 244, 6, 46, 244, 5, 46, 244, 4, 46, 244, 3, 46, 244, - 2, 46, 244, 1, 46, 244, 0, 46, 243, 255, 46, 243, 254, 46, 243, 253, 46, - 243, 252, 46, 243, 251, 46, 243, 250, 46, 243, 249, 46, 243, 248, 46, - 243, 247, 46, 243, 246, 46, 243, 245, 46, 243, 244, 46, 243, 243, 46, - 243, 242, 46, 243, 241, 46, 243, 240, 46, 243, 239, 46, 243, 238, 46, - 243, 237, 46, 243, 236, 46, 243, 235, 46, 243, 234, 46, 243, 233, 46, - 243, 232, 46, 243, 231, 46, 243, 230, 46, 243, 229, 46, 243, 228, 46, - 243, 227, 46, 243, 226, 46, 243, 225, 46, 243, 224, 46, 243, 223, 46, - 243, 222, 46, 243, 221, 46, 243, 220, 46, 243, 219, 46, 243, 218, 46, - 243, 217, 46, 243, 216, 46, 243, 215, 46, 243, 214, 46, 243, 213, 46, - 243, 212, 46, 243, 211, 46, 243, 210, 46, 243, 209, 46, 243, 208, 46, - 243, 207, 46, 243, 206, 46, 243, 205, 46, 243, 204, 46, 243, 203, 46, - 243, 202, 46, 243, 201, 46, 243, 200, 46, 243, 199, 46, 243, 198, 46, - 243, 197, 46, 243, 196, 46, 243, 195, 46, 243, 194, 46, 243, 193, 46, - 243, 192, 46, 243, 191, 46, 243, 190, 46, 243, 189, 46, 243, 188, 46, - 243, 187, 46, 243, 186, 46, 243, 185, 46, 243, 184, 46, 243, 183, 46, - 243, 182, 46, 243, 181, 46, 243, 180, 46, 243, 179, 46, 243, 178, 46, - 243, 177, 46, 243, 176, 46, 243, 175, 46, 243, 174, 46, 243, 173, 46, - 243, 172, 46, 243, 171, 46, 243, 170, 46, 243, 169, 46, 243, 168, 46, - 243, 167, 46, 243, 166, 46, 243, 165, 46, 243, 164, 46, 243, 163, 46, - 243, 162, 46, 243, 161, 46, 243, 160, 46, 243, 159, 46, 243, 158, 46, - 243, 157, 46, 243, 156, 46, 243, 155, 46, 243, 154, 46, 243, 153, 46, - 243, 152, 46, 243, 151, 46, 243, 150, 46, 243, 149, 46, 243, 148, 46, - 243, 147, 46, 243, 146, 46, 243, 145, 46, 243, 144, 46, 243, 143, 46, - 243, 142, 46, 243, 141, 124, 1, 230, 116, 124, 1, 192, 235, 124, 1, 210, - 236, 124, 1, 200, 43, 124, 1, 233, 175, 124, 1, 222, 152, 124, 1, 172, - 124, 1, 250, 120, 124, 1, 238, 127, 124, 1, 196, 12, 124, 1, 232, 51, - 124, 1, 146, 124, 1, 210, 237, 215, 61, 124, 1, 238, 128, 206, 8, 124, 1, - 233, 176, 215, 61, 124, 1, 222, 153, 218, 168, 124, 1, 207, 222, 206, 8, - 124, 1, 199, 51, 124, 1, 202, 82, 237, 69, 124, 1, 237, 69, 124, 1, 221, - 102, 124, 1, 202, 82, 223, 35, 124, 1, 229, 112, 124, 1, 219, 160, 124, - 1, 207, 7, 124, 1, 218, 168, 124, 1, 215, 61, 124, 1, 223, 35, 124, 1, - 206, 8, 124, 1, 218, 169, 215, 61, 124, 1, 215, 62, 218, 168, 124, 1, - 223, 36, 218, 168, 124, 1, 206, 9, 223, 35, 124, 1, 218, 169, 4, 236, - 140, 124, 1, 215, 62, 4, 236, 140, 124, 1, 223, 36, 4, 236, 140, 124, 1, - 223, 36, 4, 185, 223, 118, 23, 58, 124, 1, 206, 9, 4, 236, 140, 124, 1, - 206, 9, 4, 75, 60, 124, 1, 218, 169, 206, 8, 124, 1, 215, 62, 206, 8, - 124, 1, 223, 36, 206, 8, 124, 1, 206, 9, 206, 8, 124, 1, 218, 169, 215, - 62, 206, 8, 124, 1, 215, 62, 218, 169, 206, 8, 124, 1, 223, 36, 218, 169, - 206, 8, 124, 1, 206, 9, 223, 36, 206, 8, 124, 1, 223, 36, 206, 9, 4, 236, - 140, 124, 1, 223, 36, 215, 61, 124, 1, 223, 36, 215, 62, 206, 8, 124, 1, - 206, 9, 200, 43, 124, 1, 206, 9, 200, 44, 146, 124, 1, 206, 9, 210, 236, - 124, 1, 206, 9, 210, 237, 146, 124, 1, 200, 44, 206, 8, 124, 1, 200, 44, - 207, 222, 206, 8, 124, 1, 193, 224, 124, 1, 193, 97, 124, 1, 193, 225, - 146, 124, 1, 206, 9, 215, 61, 124, 1, 206, 9, 218, 168, 124, 1, 222, 153, - 207, 222, 206, 8, 124, 1, 232, 52, 207, 222, 206, 8, 124, 1, 206, 9, 222, - 152, 124, 1, 206, 9, 222, 153, 146, 124, 1, 65, 124, 1, 202, 82, 210, - 250, 124, 1, 211, 182, 124, 1, 74, 124, 1, 251, 66, 124, 1, 68, 124, 1, - 71, 124, 1, 223, 226, 124, 1, 203, 40, 68, 124, 1, 196, 139, 124, 1, 234, - 188, 124, 1, 202, 82, 234, 173, 124, 1, 206, 135, 68, 124, 1, 202, 82, - 234, 188, 124, 1, 179, 68, 124, 1, 192, 80, 124, 1, 66, 124, 1, 233, 242, - 124, 1, 192, 182, 124, 1, 126, 215, 61, 124, 1, 179, 66, 124, 1, 206, - 135, 66, 124, 1, 196, 141, 124, 1, 202, 82, 66, 124, 1, 211, 84, 124, 1, - 210, 250, 124, 1, 211, 19, 124, 1, 193, 190, 124, 1, 193, 48, 124, 1, - 193, 86, 124, 1, 193, 112, 124, 1, 193, 14, 124, 1, 214, 214, 66, 124, 1, - 214, 214, 74, 124, 1, 214, 214, 68, 124, 1, 214, 214, 65, 124, 1, 210, 0, - 251, 132, 124, 1, 210, 0, 251, 149, 124, 1, 202, 82, 234, 103, 124, 1, - 202, 82, 251, 132, 124, 1, 202, 82, 211, 104, 124, 1, 117, 218, 168, 124, - 252, 4, 45, 228, 241, 205, 58, 124, 252, 4, 216, 87, 228, 241, 205, 58, - 124, 252, 4, 50, 228, 241, 205, 58, 124, 252, 4, 130, 81, 205, 58, 124, - 252, 4, 216, 87, 81, 205, 58, 124, 252, 4, 137, 81, 205, 58, 124, 252, 4, - 250, 170, 205, 58, 124, 252, 4, 250, 170, 219, 215, 205, 58, 124, 252, 4, - 250, 170, 199, 188, 124, 252, 4, 250, 170, 199, 215, 124, 252, 4, 250, - 170, 235, 15, 102, 124, 252, 4, 250, 170, 228, 74, 102, 124, 252, 4, 250, - 170, 199, 189, 102, 124, 252, 4, 137, 252, 46, 124, 252, 4, 137, 198, - 172, 252, 46, 124, 252, 4, 137, 230, 210, 124, 252, 4, 137, 179, 230, - 210, 124, 252, 4, 137, 236, 140, 124, 252, 4, 137, 243, 10, 124, 252, 4, - 137, 219, 112, 124, 252, 4, 137, 193, 138, 124, 252, 4, 137, 195, 135, - 124, 252, 4, 130, 252, 46, 124, 252, 4, 130, 198, 172, 252, 46, 124, 252, - 4, 130, 230, 210, 124, 252, 4, 130, 179, 230, 210, 124, 252, 4, 130, 236, - 140, 124, 252, 4, 130, 243, 10, 124, 252, 4, 130, 219, 112, 124, 252, 4, - 130, 193, 138, 124, 252, 4, 130, 195, 135, 124, 252, 4, 130, 57, 124, 3, - 187, 4, 238, 217, 124, 199, 9, 1, 205, 34, 124, 55, 77, 124, 208, 152, - 243, 78, 232, 80, 201, 63, 203, 27, 232, 145, 1, 211, 2, 203, 27, 232, - 145, 239, 28, 211, 2, 203, 27, 232, 145, 144, 201, 78, 203, 27, 232, 145, - 133, 201, 78, 97, 33, 87, 230, 240, 213, 159, 206, 9, 220, 251, 211, 105, - 219, 224, 97, 33, 87, 213, 159, 206, 9, 220, 251, 211, 105, 219, 224, 97, - 33, 87, 197, 162, 211, 105, 219, 224, 97, 33, 87, 230, 240, 213, 159, - 211, 105, 219, 224, 97, 33, 87, 213, 159, 211, 105, 219, 224, 97, 33, 87, - 201, 179, 211, 105, 219, 224, 97, 33, 87, 217, 94, 209, 3, 211, 105, 219, - 224, 97, 33, 87, 209, 3, 211, 105, 219, 224, 97, 33, 87, 193, 231, 211, - 105, 219, 224, 97, 33, 87, 217, 94, 209, 3, 206, 9, 221, 181, 211, 105, - 219, 224, 97, 33, 87, 209, 3, 206, 9, 221, 181, 211, 105, 219, 224, 97, - 33, 87, 193, 231, 206, 9, 221, 181, 211, 105, 219, 224, 97, 33, 87, 230, - 240, 213, 159, 206, 9, 220, 251, 211, 105, 183, 97, 33, 87, 213, 159, - 206, 9, 220, 251, 211, 105, 183, 97, 33, 87, 197, 162, 211, 105, 183, 97, - 33, 87, 230, 240, 213, 159, 211, 105, 183, 97, 33, 87, 213, 159, 211, - 105, 183, 97, 33, 87, 201, 179, 211, 105, 183, 97, 33, 87, 217, 94, 209, - 3, 211, 105, 183, 97, 33, 87, 209, 3, 211, 105, 183, 97, 33, 87, 193, - 231, 211, 105, 183, 97, 33, 87, 217, 94, 209, 3, 206, 9, 221, 181, 211, - 105, 183, 97, 33, 87, 209, 3, 206, 9, 221, 181, 211, 105, 183, 97, 33, - 87, 193, 231, 206, 9, 221, 181, 211, 105, 183, 97, 33, 87, 197, 162, 206, - 9, 220, 250, 97, 33, 87, 217, 94, 209, 3, 206, 9, 220, 250, 97, 33, 87, - 201, 49, 217, 94, 209, 2, 97, 33, 87, 209, 3, 206, 9, 220, 250, 97, 33, - 87, 209, 3, 201, 48, 97, 33, 87, 193, 231, 206, 9, 220, 250, 97, 33, 87, - 217, 94, 209, 3, 201, 48, 97, 33, 87, 230, 240, 193, 230, 97, 33, 87, - 191, 83, 97, 33, 87, 211, 104, 97, 33, 87, 207, 124, 97, 33, 87, 198, - 157, 97, 33, 87, 248, 83, 97, 33, 87, 196, 156, 97, 33, 87, 209, 65, 97, - 33, 87, 219, 21, 97, 33, 87, 220, 200, 97, 33, 87, 222, 115, 97, 33, 87, - 191, 74, 97, 33, 87, 202, 105, 97, 33, 87, 207, 117, 97, 33, 87, 220, - 253, 211, 105, 219, 224, 97, 33, 198, 80, 207, 137, 87, 215, 162, 97, 33, - 198, 80, 207, 137, 87, 200, 153, 97, 33, 198, 80, 207, 137, 87, 197, 246, - 97, 33, 87, 191, 120, 97, 33, 87, 237, 105, 191, 120, 97, 33, 87, 211, - 25, 97, 33, 87, 209, 67, 97, 33, 87, 209, 68, 4, 81, 106, 97, 33, 87, - 243, 134, 97, 33, 87, 243, 135, 209, 45, 97, 33, 87, 211, 174, 97, 33, - 87, 202, 10, 212, 249, 97, 33, 87, 198, 89, 97, 33, 87, 235, 48, 97, 33, - 250, 169, 81, 211, 109, 97, 33, 87, 238, 163, 211, 109, 97, 33, 87, 220, - 252, 97, 33, 110, 198, 80, 207, 137, 223, 144, 97, 208, 203, 52, 219, - 167, 97, 208, 203, 52, 219, 166, 97, 208, 203, 52, 236, 233, 232, 195, - 97, 208, 203, 52, 220, 252, 97, 208, 203, 52, 206, 144, 97, 161, 221, 0, - 97, 161, 221, 1, 198, 156, 97, 161, 210, 122, 97, 161, 235, 56, 196, 13, - 243, 113, 97, 161, 221, 90, 97, 161, 191, 105, 97, 161, 201, 61, 97, 161, - 201, 62, 206, 9, 211, 163, 97, 161, 210, 10, 97, 161, 210, 11, 214, 96, - 97, 161, 201, 62, 4, 202, 10, 212, 249, 97, 161, 243, 112, 97, 161, 210, - 186, 97, 161, 191, 103, 97, 161, 230, 248, 248, 82, 97, 161, 230, 248, - 198, 156, 97, 161, 230, 248, 215, 160, 97, 161, 230, 248, 200, 152, 97, - 161, 230, 248, 197, 245, 97, 161, 194, 253, 208, 183, 97, 161, 194, 253, - 215, 163, 97, 161, 194, 253, 200, 154, 97, 161, 194, 253, 197, 247, 97, - 161, 194, 253, 221, 85, 208, 183, 97, 161, 194, 253, 221, 85, 215, 163, - 97, 161, 194, 253, 221, 85, 200, 154, 97, 161, 194, 253, 221, 85, 197, - 247, 97, 161, 55, 191, 103, 97, 161, 207, 18, 243, 112, 97, 161, 237, 91, - 97, 161, 221, 207, 97, 161, 243, 134, 97, 161, 209, 67, 97, 161, 202, - 113, 215, 163, 97, 161, 202, 113, 200, 154, 97, 161, 202, 113, 197, 247, - 97, 161, 202, 113, 198, 157, 97, 161, 237, 105, 221, 90, 97, 161, 202, - 113, 221, 85, 200, 154, 97, 161, 202, 113, 221, 89, 97, 161, 202, 113, - 221, 85, 198, 157, 97, 161, 202, 113, 235, 53, 208, 183, 97, 161, 202, - 113, 235, 53, 200, 154, 97, 161, 202, 113, 235, 53, 214, 96, 97, 161, - 202, 113, 235, 53, 221, 84, 97, 161, 202, 72, 97, 161, 202, 73, 206, 9, - 191, 101, 97, 161, 202, 73, 191, 110, 97, 161, 202, 73, 206, 9, 220, 250, - 97, 161, 220, 252, 97, 161, 206, 144, 97, 161, 232, 228, 97, 161, 221, - 59, 97, 161, 191, 8, 97, 161, 201, 90, 97, 161, 201, 91, 206, 9, 191, - 101, 97, 161, 201, 91, 206, 9, 220, 250, 97, 161, 201, 91, 206, 9, 191, - 102, 228, 74, 220, 250, 97, 161, 201, 91, 206, 9, 220, 251, 228, 74, 191, - 101, 97, 161, 201, 91, 191, 111, 97, 161, 201, 91, 191, 112, 206, 9, 191, - 101, 97, 161, 201, 91, 206, 9, 206, 143, 97, 161, 201, 91, 206, 9, 235, - 47, 191, 100, 97, 161, 201, 91, 206, 9, 191, 102, 228, 74, 209, 66, 97, - 161, 209, 47, 97, 161, 201, 91, 214, 96, 97, 161, 201, 40, 208, 183, 97, - 161, 201, 40, 215, 161, 97, 161, 201, 40, 220, 249, 97, 161, 201, 40, - 209, 43, 97, 161, 201, 40, 209, 5, 97, 161, 201, 40, 214, 96, 97, 161, - 201, 40, 221, 87, 97, 161, 201, 40, 221, 89, 97, 161, 201, 40, 198, 158, - 208, 130, 97, 161, 201, 40, 235, 52, 97, 161, 201, 40, 235, 51, 97, 161, - 201, 40, 235, 49, 97, 161, 201, 40, 235, 53, 221, 84, 97, 161, 201, 40, - 235, 50, 221, 84, 97, 161, 201, 40, 230, 195, 4, 202, 170, 191, 103, 97, - 161, 201, 40, 230, 191, 4, 202, 170, 191, 103, 97, 161, 201, 40, 230, - 194, 97, 161, 201, 40, 230, 190, 97, 161, 201, 40, 230, 191, 4, 55, 191, - 103, 97, 161, 201, 40, 230, 192, 97, 161, 201, 40, 230, 193, 209, 5, 97, - 161, 216, 221, 97, 161, 216, 222, 209, 4, 97, 161, 216, 222, 221, 83, 97, - 161, 216, 222, 221, 86, 97, 161, 216, 222, 221, 88, 97, 161, 201, 40, - 197, 174, 97, 161, 201, 40, 197, 173, 97, 161, 201, 40, 197, 172, 97, - 161, 211, 31, 97, 161, 211, 32, 200, 154, 97, 161, 211, 32, 197, 247, 97, - 161, 211, 32, 220, 255, 200, 154, 97, 161, 211, 32, 221, 85, 200, 154, - 97, 161, 211, 32, 221, 85, 214, 96, 97, 161, 201, 40, 220, 254, 97, 161, - 201, 40, 220, 255, 209, 5, 97, 161, 201, 40, 220, 255, 230, 195, 4, 202, - 170, 191, 103, 97, 161, 201, 40, 220, 255, 230, 191, 4, 202, 170, 191, - 103, 97, 161, 201, 40, 220, 255, 230, 194, 97, 161, 201, 40, 220, 255, - 230, 190, 97, 161, 201, 40, 220, 255, 230, 191, 4, 55, 191, 103, 97, 161, - 201, 40, 220, 255, 230, 192, 97, 161, 201, 40, 220, 255, 230, 193, 209, - 5, 97, 161, 201, 40, 220, 255, 197, 175, 97, 161, 220, 214, 97, 161, 211, - 173, 97, 161, 235, 84, 97, 161, 214, 103, 97, 161, 210, 79, 73, 37, 16, - 208, 169, 73, 37, 16, 237, 217, 73, 37, 16, 210, 4, 73, 37, 16, 210, 246, - 234, 144, 73, 37, 16, 210, 246, 236, 238, 73, 37, 16, 195, 172, 234, 144, - 73, 37, 16, 195, 172, 236, 238, 73, 37, 16, 222, 44, 73, 37, 16, 200, 60, - 73, 37, 16, 210, 120, 73, 37, 16, 191, 231, 73, 37, 16, 191, 232, 236, - 238, 73, 37, 16, 221, 3, 73, 37, 16, 251, 61, 234, 144, 73, 37, 16, 233, - 210, 234, 144, 73, 37, 16, 199, 108, 73, 37, 16, 221, 247, 73, 37, 16, - 251, 50, 73, 37, 16, 251, 51, 236, 238, 73, 37, 16, 200, 67, 73, 37, 16, - 198, 244, 73, 37, 16, 211, 116, 251, 12, 73, 37, 16, 230, 238, 251, 12, - 73, 37, 16, 208, 168, 73, 37, 16, 246, 248, 73, 37, 16, 195, 161, 73, 37, - 16, 223, 58, 251, 12, 73, 37, 16, 221, 249, 251, 12, 73, 37, 16, 221, - 248, 251, 12, 73, 37, 16, 205, 105, 73, 37, 16, 210, 110, 73, 37, 16, - 201, 88, 251, 54, 73, 37, 16, 210, 245, 251, 12, 73, 37, 16, 195, 171, - 251, 12, 73, 37, 16, 251, 55, 251, 12, 73, 37, 16, 251, 48, 73, 37, 16, - 221, 92, 73, 37, 16, 207, 14, 73, 37, 16, 209, 183, 251, 12, 73, 37, 16, - 198, 142, 73, 37, 16, 251, 128, 73, 37, 16, 205, 37, 73, 37, 16, 200, 71, - 251, 12, 73, 37, 16, 200, 71, 216, 166, 201, 86, 73, 37, 16, 210, 240, - 251, 12, 73, 37, 16, 199, 27, 73, 37, 16, 219, 202, 73, 37, 16, 235, 38, - 73, 37, 16, 197, 243, 73, 37, 16, 199, 76, 73, 37, 16, 221, 6, 73, 37, - 16, 251, 61, 233, 210, 214, 98, 73, 37, 16, 232, 88, 251, 12, 73, 37, 16, - 223, 175, 73, 37, 16, 197, 210, 251, 12, 73, 37, 16, 222, 47, 197, 209, - 73, 37, 16, 210, 36, 73, 37, 16, 208, 173, 73, 37, 16, 221, 42, 73, 37, - 16, 243, 60, 251, 12, 73, 37, 16, 207, 135, 73, 37, 16, 210, 124, 251, - 12, 73, 37, 16, 210, 121, 251, 12, 73, 37, 16, 228, 24, 73, 37, 16, 214, - 225, 73, 37, 16, 209, 238, 73, 37, 16, 221, 43, 251, 167, 73, 37, 16, - 197, 210, 251, 167, 73, 37, 16, 201, 55, 73, 37, 16, 230, 189, 73, 37, - 16, 223, 58, 214, 98, 73, 37, 16, 211, 116, 214, 98, 73, 37, 16, 210, - 246, 214, 98, 73, 37, 16, 209, 237, 73, 37, 16, 221, 26, 73, 37, 16, 209, - 236, 73, 37, 16, 221, 5, 73, 37, 16, 210, 37, 214, 98, 73, 37, 16, 221, - 248, 214, 99, 251, 93, 73, 37, 16, 221, 249, 214, 99, 251, 93, 73, 37, - 16, 191, 229, 73, 37, 16, 251, 51, 214, 98, 73, 37, 16, 251, 52, 200, 68, - 214, 98, 73, 37, 16, 191, 230, 73, 37, 16, 221, 4, 73, 37, 16, 234, 139, - 73, 37, 16, 246, 249, 73, 37, 16, 216, 57, 223, 57, 73, 37, 16, 195, 172, - 214, 98, 73, 37, 16, 209, 183, 214, 98, 73, 37, 16, 208, 174, 214, 98, - 73, 37, 16, 211, 112, 73, 37, 16, 251, 80, 73, 37, 16, 218, 179, 73, 37, - 16, 210, 121, 214, 98, 73, 37, 16, 210, 124, 214, 98, 73, 37, 16, 233, - 249, 210, 123, 73, 37, 16, 220, 147, 73, 37, 16, 251, 81, 73, 37, 16, - 197, 210, 214, 98, 73, 37, 16, 234, 142, 73, 37, 16, 200, 71, 214, 98, - 73, 37, 16, 200, 61, 73, 37, 16, 243, 60, 214, 98, 73, 37, 16, 234, 53, - 73, 37, 16, 205, 38, 214, 98, 73, 37, 16, 192, 199, 221, 92, 73, 37, 16, - 197, 207, 73, 37, 16, 208, 175, 73, 37, 16, 197, 211, 73, 37, 16, 197, - 208, 73, 37, 16, 208, 172, 73, 37, 16, 197, 206, 73, 37, 16, 208, 171, - 73, 37, 16, 230, 237, 73, 37, 16, 251, 4, 73, 37, 16, 233, 249, 251, 4, - 73, 37, 16, 210, 240, 214, 98, 73, 37, 16, 199, 26, 234, 6, 73, 37, 16, - 199, 26, 233, 209, 73, 37, 16, 199, 28, 251, 56, 73, 37, 16, 199, 20, - 222, 103, 251, 47, 73, 37, 16, 222, 46, 73, 37, 16, 234, 90, 73, 37, 16, - 192, 38, 222, 43, 73, 37, 16, 192, 38, 251, 93, 73, 37, 16, 201, 87, 73, - 37, 16, 221, 93, 251, 93, 73, 37, 16, 236, 239, 251, 12, 73, 37, 16, 221, - 7, 251, 12, 73, 37, 16, 221, 7, 251, 167, 73, 37, 16, 221, 7, 214, 98, - 73, 37, 16, 251, 55, 214, 98, 73, 37, 16, 251, 57, 73, 37, 16, 236, 238, - 73, 37, 16, 197, 223, 73, 37, 16, 199, 66, 73, 37, 16, 221, 30, 73, 37, - 16, 219, 207, 234, 83, 243, 50, 73, 37, 16, 219, 207, 235, 39, 243, 51, - 73, 37, 16, 219, 207, 197, 226, 243, 51, 73, 37, 16, 219, 207, 199, 78, - 243, 51, 73, 37, 16, 219, 207, 223, 170, 243, 50, 73, 37, 16, 230, 238, - 214, 99, 251, 93, 73, 37, 16, 230, 238, 210, 111, 251, 0, 73, 37, 16, - 230, 238, 210, 111, 237, 73, 73, 37, 16, 237, 7, 73, 37, 16, 237, 8, 210, - 111, 251, 1, 222, 43, 73, 37, 16, 237, 8, 210, 111, 251, 1, 251, 93, 73, - 37, 16, 237, 8, 210, 111, 237, 73, 73, 37, 16, 197, 232, 73, 37, 16, 251, - 5, 73, 37, 16, 223, 177, 73, 37, 16, 237, 30, 73, 37, 16, 251, 247, 209, - 51, 251, 6, 73, 37, 16, 251, 247, 251, 3, 73, 37, 16, 251, 247, 251, 6, - 73, 37, 16, 251, 247, 216, 160, 73, 37, 16, 251, 247, 216, 171, 73, 37, - 16, 251, 247, 230, 239, 73, 37, 16, 251, 247, 230, 236, 73, 37, 16, 251, - 247, 209, 51, 230, 239, 73, 37, 16, 217, 45, 208, 181, 228, 22, 73, 37, - 16, 217, 45, 251, 169, 208, 181, 228, 22, 73, 37, 16, 217, 45, 237, 72, - 228, 22, 73, 37, 16, 217, 45, 251, 169, 237, 72, 228, 22, 73, 37, 16, - 217, 45, 197, 218, 228, 22, 73, 37, 16, 217, 45, 197, 233, 73, 37, 16, - 217, 45, 199, 71, 228, 22, 73, 37, 16, 217, 45, 199, 71, 219, 211, 228, - 22, 73, 37, 16, 217, 45, 219, 211, 228, 22, 73, 37, 16, 217, 45, 209, - 105, 228, 22, 73, 37, 16, 223, 66, 199, 101, 228, 23, 73, 37, 16, 251, - 52, 199, 101, 228, 23, 73, 37, 16, 233, 79, 199, 68, 73, 37, 16, 233, 79, - 215, 222, 73, 37, 16, 233, 79, 237, 13, 73, 37, 16, 217, 45, 195, 165, - 228, 22, 73, 37, 16, 217, 45, 208, 180, 228, 22, 73, 37, 16, 217, 45, - 209, 105, 199, 71, 228, 22, 73, 37, 16, 230, 233, 215, 62, 251, 56, 73, - 37, 16, 230, 233, 215, 62, 236, 237, 73, 37, 16, 234, 101, 222, 103, 232, - 88, 195, 3, 73, 37, 16, 223, 176, 73, 37, 16, 223, 174, 73, 37, 16, 232, - 88, 251, 13, 237, 71, 228, 21, 73, 37, 16, 232, 88, 237, 28, 168, 73, 37, - 16, 232, 88, 237, 28, 214, 225, 73, 37, 16, 232, 88, 214, 219, 228, 22, - 73, 37, 16, 232, 88, 237, 28, 237, 44, 73, 37, 16, 232, 88, 202, 106, - 237, 27, 237, 44, 73, 37, 16, 232, 88, 237, 28, 222, 22, 73, 37, 16, 232, - 88, 237, 28, 191, 7, 73, 37, 16, 232, 88, 237, 28, 213, 220, 222, 43, 73, - 37, 16, 232, 88, 237, 28, 213, 220, 251, 93, 73, 37, 16, 232, 88, 217, - 98, 243, 52, 237, 13, 73, 37, 16, 232, 88, 217, 98, 243, 52, 215, 222, - 73, 37, 16, 233, 24, 202, 106, 243, 52, 195, 164, 73, 37, 16, 232, 88, - 202, 106, 243, 52, 200, 72, 73, 37, 16, 232, 88, 214, 101, 73, 37, 16, - 243, 53, 190, 230, 73, 37, 16, 243, 53, 221, 91, 73, 37, 16, 243, 53, - 201, 238, 73, 37, 16, 232, 88, 228, 74, 192, 37, 199, 72, 73, 37, 16, - 232, 88, 234, 102, 251, 82, 73, 37, 16, 192, 37, 197, 219, 73, 37, 16, - 237, 21, 197, 219, 73, 37, 16, 237, 21, 199, 72, 73, 37, 16, 237, 21, - 251, 58, 235, 39, 236, 166, 73, 37, 16, 237, 21, 215, 220, 199, 77, 236, - 166, 73, 37, 16, 237, 21, 237, 4, 233, 222, 236, 166, 73, 37, 16, 237, - 21, 197, 230, 211, 122, 236, 166, 73, 37, 16, 192, 37, 251, 58, 235, 39, - 236, 166, 73, 37, 16, 192, 37, 215, 220, 199, 77, 236, 166, 73, 37, 16, - 192, 37, 237, 4, 233, 222, 236, 166, 73, 37, 16, 192, 37, 197, 230, 211, - 122, 236, 166, 73, 37, 16, 231, 147, 237, 20, 73, 37, 16, 231, 147, 192, - 36, 73, 37, 16, 237, 29, 251, 58, 216, 58, 73, 37, 16, 237, 29, 251, 58, - 216, 202, 73, 37, 16, 237, 29, 236, 238, 73, 37, 16, 237, 29, 199, 18, - 73, 37, 16, 202, 181, 199, 18, 73, 37, 16, 202, 181, 199, 19, 236, 221, - 73, 37, 16, 202, 181, 199, 19, 197, 220, 73, 37, 16, 202, 181, 199, 19, - 199, 64, 73, 37, 16, 202, 181, 250, 228, 73, 37, 16, 202, 181, 250, 229, - 236, 221, 73, 37, 16, 202, 181, 250, 229, 197, 220, 73, 37, 16, 202, 181, - 250, 229, 199, 64, 73, 37, 16, 237, 5, 231, 128, 73, 37, 16, 237, 12, - 211, 19, 73, 37, 16, 201, 73, 73, 37, 16, 250, 253, 168, 73, 37, 16, 250, - 253, 195, 3, 73, 37, 16, 250, 253, 231, 240, 73, 37, 16, 250, 253, 237, - 44, 73, 37, 16, 250, 253, 222, 22, 73, 37, 16, 250, 253, 191, 7, 73, 37, - 16, 250, 253, 213, 219, 73, 37, 16, 221, 248, 214, 99, 216, 170, 73, 37, - 16, 221, 249, 214, 99, 216, 170, 73, 37, 16, 221, 248, 214, 99, 222, 43, - 73, 37, 16, 221, 249, 214, 99, 222, 43, 73, 37, 16, 221, 93, 222, 43, 73, - 37, 16, 230, 238, 214, 99, 222, 43, 37, 16, 202, 170, 249, 83, 37, 16, - 55, 249, 83, 37, 16, 53, 249, 83, 37, 16, 207, 19, 53, 249, 83, 37, 16, - 237, 214, 249, 83, 37, 16, 203, 40, 249, 83, 37, 16, 45, 207, 49, 56, 37, - 16, 50, 207, 49, 56, 37, 16, 207, 49, 236, 138, 37, 16, 238, 4, 205, 41, - 37, 16, 238, 33, 247, 108, 37, 16, 205, 41, 37, 16, 242, 92, 37, 16, 207, - 47, 233, 11, 37, 16, 207, 47, 233, 10, 37, 16, 207, 47, 233, 9, 37, 16, - 233, 34, 37, 16, 233, 35, 60, 37, 16, 248, 39, 77, 37, 16, 247, 150, 37, - 16, 248, 55, 37, 16, 248, 53, 37, 16, 211, 99, 201, 111, 37, 16, 197, 12, - 201, 111, 37, 16, 198, 220, 201, 111, 37, 16, 232, 127, 201, 111, 37, 16, - 232, 224, 201, 111, 37, 16, 202, 135, 201, 111, 37, 16, 202, 133, 232, - 105, 37, 16, 232, 125, 232, 105, 37, 16, 232, 52, 242, 235, 37, 16, 232, - 52, 242, 236, 211, 23, 251, 158, 37, 16, 232, 52, 242, 236, 211, 23, 249, - 66, 37, 16, 247, 194, 242, 235, 37, 16, 233, 176, 242, 235, 37, 16, 233, - 176, 242, 236, 211, 23, 251, 158, 37, 16, 233, 176, 242, 236, 211, 23, - 249, 66, 37, 16, 235, 95, 242, 234, 37, 16, 235, 95, 242, 233, 37, 16, - 215, 129, 216, 228, 207, 30, 37, 16, 55, 203, 126, 37, 16, 55, 232, 206, - 37, 16, 232, 207, 196, 77, 37, 16, 232, 207, 235, 123, 37, 16, 214, 206, - 196, 77, 37, 16, 214, 206, 235, 123, 37, 16, 203, 127, 196, 77, 37, 16, - 203, 127, 235, 123, 37, 16, 208, 23, 163, 203, 126, 37, 16, 208, 23, 163, - 232, 206, 37, 16, 242, 71, 198, 146, 37, 16, 238, 155, 198, 146, 37, 16, - 211, 23, 251, 158, 37, 16, 211, 23, 249, 66, 37, 16, 208, 3, 251, 158, - 37, 16, 208, 3, 249, 66, 37, 16, 215, 132, 207, 30, 37, 16, 193, 87, 207, - 30, 37, 16, 132, 207, 30, 37, 16, 208, 23, 207, 30, 37, 16, 234, 160, - 207, 30, 37, 16, 202, 129, 207, 30, 37, 16, 198, 246, 207, 30, 37, 16, - 202, 119, 207, 30, 37, 16, 91, 228, 141, 197, 30, 207, 30, 37, 16, 192, - 236, 213, 2, 37, 16, 108, 213, 2, 37, 16, 243, 11, 192, 236, 213, 2, 37, - 16, 51, 213, 3, 193, 89, 37, 16, 51, 213, 3, 248, 139, 37, 16, 197, 242, - 213, 3, 133, 193, 89, 37, 16, 197, 242, 213, 3, 133, 248, 139, 37, 16, - 197, 242, 213, 3, 45, 193, 89, 37, 16, 197, 242, 213, 3, 45, 248, 139, - 37, 16, 197, 242, 213, 3, 50, 193, 89, 37, 16, 197, 242, 213, 3, 50, 248, - 139, 37, 16, 197, 242, 213, 3, 144, 193, 89, 37, 16, 197, 242, 213, 3, - 144, 248, 139, 37, 16, 197, 242, 213, 3, 133, 50, 193, 89, 37, 16, 197, - 242, 213, 3, 133, 50, 248, 139, 37, 16, 215, 206, 213, 3, 193, 89, 37, - 16, 215, 206, 213, 3, 248, 139, 37, 16, 197, 239, 213, 3, 144, 193, 89, - 37, 16, 197, 239, 213, 3, 144, 248, 139, 37, 16, 210, 114, 213, 2, 37, - 16, 195, 17, 213, 2, 37, 16, 213, 3, 248, 139, 37, 16, 212, 139, 213, 2, - 37, 16, 242, 203, 213, 3, 193, 89, 37, 16, 242, 203, 213, 3, 248, 139, - 37, 16, 248, 36, 37, 16, 193, 87, 213, 6, 37, 16, 132, 213, 6, 37, 16, - 208, 23, 213, 6, 37, 16, 234, 160, 213, 6, 37, 16, 202, 129, 213, 6, 37, - 16, 198, 246, 213, 6, 37, 16, 202, 119, 213, 6, 37, 16, 91, 228, 141, - 197, 30, 213, 6, 37, 16, 33, 201, 80, 37, 16, 33, 201, 197, 201, 80, 37, + 245, 28, 41, 2, 27, 245, 27, 72, 1, 216, 38, 198, 77, 72, 1, 216, 38, + 198, 76, 72, 1, 216, 38, 198, 75, 72, 1, 216, 38, 198, 74, 72, 1, 216, + 38, 198, 72, 72, 1, 216, 38, 198, 71, 72, 1, 216, 38, 214, 213, 198, 78, + 72, 1, 216, 38, 214, 213, 198, 77, 72, 1, 216, 38, 214, 213, 198, 76, 72, + 1, 216, 38, 214, 213, 198, 75, 72, 1, 216, 38, 214, 213, 198, 74, 72, 1, + 216, 38, 214, 213, 198, 72, 72, 1, 216, 38, 214, 213, 198, 71, 72, 1, + 251, 16, 71, 229, 122, 1, 251, 16, 192, 80, 61, 1, 255, 208, 61, 1, 255, + 207, 61, 1, 255, 206, 61, 1, 255, 202, 61, 1, 228, 75, 61, 1, 228, 74, + 61, 1, 228, 73, 61, 1, 228, 72, 61, 1, 196, 231, 61, 1, 196, 230, 61, 1, + 196, 229, 61, 1, 196, 228, 61, 1, 196, 227, 61, 1, 235, 15, 61, 1, 235, + 14, 61, 1, 235, 13, 61, 1, 235, 12, 61, 1, 235, 11, 61, 1, 212, 16, 61, + 1, 212, 15, 61, 1, 212, 14, 61, 1, 222, 143, 61, 1, 222, 140, 61, 1, 222, + 139, 61, 1, 222, 138, 61, 1, 222, 137, 61, 1, 222, 136, 61, 1, 222, 135, + 61, 1, 222, 134, 61, 1, 222, 133, 61, 1, 222, 142, 61, 1, 222, 141, 61, + 1, 222, 132, 61, 1, 221, 167, 61, 1, 221, 166, 61, 1, 221, 165, 61, 1, + 221, 164, 61, 1, 221, 163, 61, 1, 221, 162, 61, 1, 221, 161, 61, 1, 221, + 160, 61, 1, 220, 233, 61, 1, 220, 232, 61, 1, 220, 231, 61, 1, 220, 230, + 61, 1, 220, 229, 61, 1, 220, 228, 61, 1, 220, 227, 61, 1, 222, 23, 61, 1, + 222, 22, 61, 1, 222, 21, 61, 1, 222, 20, 61, 1, 222, 19, 61, 1, 222, 18, + 61, 1, 221, 68, 61, 1, 221, 67, 61, 1, 221, 66, 61, 1, 221, 65, 61, 1, + 205, 207, 61, 1, 205, 206, 61, 1, 205, 205, 61, 1, 205, 204, 61, 1, 205, + 203, 61, 1, 205, 202, 61, 1, 205, 201, 61, 1, 205, 200, 61, 1, 202, 222, + 61, 1, 202, 221, 61, 1, 202, 220, 61, 1, 202, 219, 61, 1, 202, 218, 61, + 1, 202, 217, 61, 1, 201, 4, 61, 1, 201, 3, 61, 1, 201, 2, 61, 1, 201, 1, + 61, 1, 201, 0, 61, 1, 200, 255, 61, 1, 200, 254, 61, 1, 200, 253, 61, 1, + 205, 68, 61, 1, 205, 67, 61, 1, 205, 66, 61, 1, 205, 65, 61, 1, 205, 64, + 61, 1, 202, 46, 61, 1, 202, 45, 61, 1, 202, 44, 61, 1, 202, 43, 61, 1, + 202, 42, 61, 1, 202, 41, 61, 1, 202, 40, 61, 1, 199, 251, 61, 1, 199, + 250, 61, 1, 199, 249, 61, 1, 199, 248, 61, 1, 198, 192, 61, 1, 198, 191, + 61, 1, 198, 190, 61, 1, 198, 189, 61, 1, 198, 188, 61, 1, 198, 187, 61, + 1, 198, 186, 61, 1, 197, 93, 61, 1, 197, 92, 61, 1, 197, 91, 61, 1, 197, + 90, 61, 1, 197, 89, 61, 1, 199, 144, 61, 1, 199, 143, 61, 1, 199, 142, + 61, 1, 199, 141, 61, 1, 199, 140, 61, 1, 199, 139, 61, 1, 199, 138, 61, + 1, 199, 137, 61, 1, 199, 136, 61, 1, 198, 98, 61, 1, 198, 97, 61, 1, 198, + 96, 61, 1, 198, 95, 61, 1, 198, 94, 61, 1, 198, 93, 61, 1, 198, 92, 61, + 1, 215, 8, 61, 1, 215, 7, 61, 1, 215, 6, 61, 1, 215, 5, 61, 1, 215, 4, + 61, 1, 215, 3, 61, 1, 215, 2, 61, 1, 215, 1, 61, 1, 215, 0, 61, 1, 213, + 220, 61, 1, 213, 219, 61, 1, 213, 218, 61, 1, 213, 217, 61, 1, 213, 216, + 61, 1, 213, 215, 61, 1, 213, 214, 61, 1, 213, 213, 61, 1, 212, 179, 61, + 1, 212, 178, 61, 1, 212, 177, 61, 1, 214, 122, 61, 1, 214, 121, 61, 1, + 214, 120, 61, 1, 214, 119, 61, 1, 214, 118, 61, 1, 214, 117, 61, 1, 214, + 116, 61, 1, 213, 44, 61, 1, 213, 43, 61, 1, 213, 42, 61, 1, 213, 41, 61, + 1, 213, 40, 61, 1, 230, 106, 61, 1, 230, 103, 61, 1, 230, 102, 61, 1, + 230, 101, 61, 1, 230, 100, 61, 1, 230, 99, 61, 1, 230, 98, 61, 1, 230, + 97, 61, 1, 230, 96, 61, 1, 230, 105, 61, 1, 230, 104, 61, 1, 229, 159, + 61, 1, 229, 158, 61, 1, 229, 157, 61, 1, 229, 156, 61, 1, 229, 155, 61, + 1, 229, 154, 61, 1, 229, 153, 61, 1, 228, 160, 61, 1, 228, 159, 61, 1, + 228, 158, 61, 1, 229, 246, 61, 1, 229, 245, 61, 1, 229, 244, 61, 1, 229, + 243, 61, 1, 229, 242, 61, 1, 229, 241, 61, 1, 229, 240, 61, 1, 229, 24, + 61, 1, 229, 23, 61, 1, 229, 22, 61, 1, 229, 21, 61, 1, 229, 20, 61, 1, + 229, 19, 61, 1, 229, 18, 61, 1, 229, 17, 61, 1, 217, 161, 61, 1, 217, + 160, 61, 1, 217, 159, 61, 1, 217, 158, 61, 1, 217, 157, 61, 1, 217, 156, + 61, 1, 217, 155, 61, 1, 216, 101, 61, 1, 216, 100, 61, 1, 216, 99, 61, 1, + 216, 98, 61, 1, 216, 97, 61, 1, 216, 96, 61, 1, 216, 95, 61, 1, 215, 156, + 61, 1, 215, 155, 61, 1, 215, 154, 61, 1, 215, 153, 61, 1, 216, 233, 61, + 1, 216, 232, 61, 1, 216, 231, 61, 1, 216, 13, 61, 1, 216, 12, 61, 1, 216, + 11, 61, 1, 216, 10, 61, 1, 216, 9, 61, 1, 216, 8, 61, 1, 192, 148, 61, 1, + 192, 147, 61, 1, 192, 146, 61, 1, 192, 145, 61, 1, 192, 144, 61, 1, 192, + 141, 61, 1, 191, 224, 61, 1, 191, 223, 61, 1, 191, 222, 61, 1, 191, 221, + 61, 1, 192, 11, 61, 1, 192, 10, 61, 1, 192, 9, 61, 1, 192, 8, 61, 1, 192, + 7, 61, 1, 192, 6, 61, 1, 207, 187, 61, 1, 207, 186, 61, 1, 207, 185, 61, + 1, 207, 184, 61, 1, 207, 1, 61, 1, 207, 0, 61, 1, 206, 255, 61, 1, 206, + 254, 61, 1, 206, 253, 61, 1, 206, 252, 61, 1, 206, 251, 61, 1, 206, 68, + 61, 1, 206, 67, 61, 1, 206, 66, 61, 1, 206, 65, 61, 1, 206, 64, 61, 1, + 206, 63, 61, 1, 207, 114, 61, 1, 207, 113, 61, 1, 207, 112, 61, 1, 207, + 111, 61, 1, 206, 162, 61, 1, 206, 161, 61, 1, 206, 160, 61, 1, 206, 159, + 61, 1, 206, 158, 61, 1, 206, 157, 61, 1, 193, 189, 61, 1, 193, 188, 61, + 1, 193, 187, 61, 1, 193, 186, 61, 1, 193, 185, 61, 1, 193, 85, 61, 1, + 193, 84, 61, 1, 193, 83, 61, 1, 193, 82, 61, 1, 193, 81, 61, 1, 193, 124, + 61, 1, 193, 123, 61, 1, 193, 122, 61, 1, 193, 121, 61, 1, 193, 47, 61, 1, + 193, 46, 61, 1, 193, 45, 61, 1, 193, 44, 61, 1, 193, 43, 61, 1, 193, 42, + 61, 1, 193, 41, 61, 1, 215, 60, 61, 1, 215, 59, 229, 122, 1, 251, 16, + 193, 0, 72, 1, 251, 16, 192, 33, 72, 1, 251, 16, 192, 80, 72, 1, 251, 16, + 193, 0, 229, 122, 1, 2, 221, 69, 229, 122, 1, 2, 193, 86, 229, 122, 1, 2, + 193, 125, 229, 122, 1, 2, 193, 48, 72, 1, 2, 221, 69, 72, 1, 2, 193, 86, + 72, 1, 2, 193, 125, 72, 1, 2, 193, 48, 72, 1, 2, 215, 63, 46, 245, 26, + 46, 245, 25, 46, 245, 24, 46, 245, 23, 46, 245, 22, 46, 245, 21, 46, 245, + 20, 46, 245, 19, 46, 245, 18, 46, 245, 17, 46, 245, 16, 46, 245, 15, 46, + 245, 14, 46, 245, 13, 46, 245, 12, 46, 245, 11, 46, 245, 10, 46, 245, 9, + 46, 245, 8, 46, 245, 7, 46, 245, 6, 46, 245, 5, 46, 245, 4, 46, 245, 3, + 46, 245, 2, 46, 245, 1, 46, 245, 0, 46, 244, 255, 46, 244, 254, 46, 244, + 253, 46, 244, 252, 46, 244, 251, 46, 244, 250, 46, 244, 249, 46, 244, + 248, 46, 244, 247, 46, 244, 246, 46, 244, 245, 46, 244, 244, 46, 244, + 243, 46, 244, 242, 46, 244, 241, 46, 244, 240, 46, 244, 239, 46, 244, + 238, 46, 244, 237, 46, 244, 236, 46, 244, 235, 46, 244, 234, 46, 244, + 233, 46, 244, 232, 46, 244, 231, 46, 244, 230, 46, 244, 229, 46, 244, + 228, 46, 244, 227, 46, 244, 226, 46, 244, 225, 46, 244, 224, 46, 244, + 223, 46, 244, 222, 46, 244, 221, 46, 244, 220, 46, 244, 219, 46, 244, + 218, 46, 244, 217, 46, 244, 216, 46, 244, 215, 46, 244, 214, 46, 244, + 213, 46, 244, 212, 46, 244, 211, 46, 244, 210, 46, 244, 209, 46, 244, + 208, 46, 244, 207, 46, 244, 206, 46, 244, 205, 46, 244, 204, 46, 244, + 203, 46, 244, 202, 46, 244, 201, 46, 244, 200, 46, 244, 199, 46, 244, + 198, 46, 244, 197, 46, 244, 196, 46, 244, 195, 46, 244, 194, 46, 244, + 193, 46, 244, 192, 46, 244, 191, 46, 244, 190, 46, 244, 189, 46, 244, + 188, 46, 244, 187, 46, 244, 186, 46, 244, 185, 46, 244, 184, 46, 244, + 183, 46, 244, 182, 46, 244, 181, 46, 244, 180, 46, 244, 179, 46, 244, + 178, 46, 244, 177, 46, 244, 176, 46, 244, 175, 46, 244, 174, 46, 244, + 173, 46, 244, 172, 46, 244, 171, 46, 244, 170, 46, 244, 169, 46, 244, + 168, 46, 244, 167, 46, 244, 166, 46, 244, 165, 46, 244, 164, 46, 244, + 163, 46, 244, 162, 46, 244, 161, 46, 244, 160, 46, 244, 159, 46, 244, + 158, 46, 244, 157, 46, 244, 156, 46, 244, 155, 46, 244, 154, 46, 244, + 153, 46, 244, 152, 46, 244, 151, 46, 244, 150, 46, 244, 149, 46, 244, + 148, 46, 244, 147, 46, 244, 146, 46, 244, 145, 46, 244, 144, 46, 244, + 143, 46, 244, 142, 46, 244, 141, 46, 244, 140, 46, 244, 139, 46, 244, + 138, 46, 244, 137, 46, 244, 136, 46, 244, 135, 46, 244, 134, 46, 244, + 133, 46, 244, 132, 46, 244, 131, 46, 244, 130, 46, 244, 129, 46, 244, + 128, 46, 244, 127, 46, 244, 126, 46, 244, 125, 46, 244, 124, 46, 244, + 123, 46, 244, 122, 46, 244, 121, 46, 244, 120, 46, 244, 119, 46, 244, + 118, 46, 244, 117, 46, 244, 116, 46, 244, 115, 46, 244, 114, 46, 244, + 113, 46, 244, 112, 46, 244, 111, 46, 244, 110, 46, 244, 109, 46, 244, + 108, 46, 244, 107, 46, 244, 106, 46, 244, 105, 46, 244, 104, 46, 244, + 103, 46, 244, 102, 46, 244, 101, 46, 244, 100, 46, 244, 99, 46, 244, 98, + 46, 244, 97, 46, 244, 96, 46, 244, 95, 46, 244, 94, 46, 244, 93, 46, 244, + 92, 46, 244, 91, 46, 244, 90, 46, 244, 89, 46, 244, 88, 46, 244, 87, 46, + 244, 86, 46, 244, 85, 46, 244, 84, 46, 244, 83, 46, 244, 82, 46, 244, 81, + 46, 244, 80, 46, 244, 79, 46, 244, 78, 46, 244, 77, 46, 244, 76, 46, 244, + 75, 46, 244, 74, 46, 244, 73, 46, 244, 72, 46, 244, 71, 46, 244, 70, 46, + 244, 69, 46, 244, 68, 46, 244, 67, 46, 244, 66, 46, 244, 65, 46, 244, 64, + 46, 244, 63, 46, 244, 62, 46, 244, 61, 46, 244, 60, 46, 244, 59, 46, 244, + 58, 46, 244, 57, 46, 244, 56, 46, 244, 55, 46, 244, 54, 46, 244, 53, 46, + 244, 52, 46, 244, 51, 46, 244, 50, 46, 244, 49, 46, 244, 48, 46, 244, 47, + 46, 244, 46, 46, 244, 45, 46, 244, 44, 46, 244, 43, 46, 244, 42, 46, 244, + 41, 46, 244, 40, 46, 244, 39, 46, 244, 38, 46, 244, 37, 46, 244, 36, 46, + 244, 35, 46, 244, 34, 46, 244, 33, 46, 244, 32, 46, 244, 31, 46, 244, 30, + 46, 244, 29, 46, 244, 28, 46, 244, 27, 46, 244, 26, 46, 244, 25, 46, 244, + 24, 46, 244, 23, 46, 244, 22, 46, 244, 21, 46, 244, 20, 46, 244, 19, 46, + 244, 18, 46, 244, 17, 46, 244, 16, 46, 244, 15, 46, 244, 14, 46, 244, 13, + 46, 244, 12, 46, 244, 11, 46, 244, 10, 46, 244, 9, 46, 244, 8, 46, 244, + 7, 46, 244, 6, 46, 244, 5, 46, 244, 4, 46, 244, 3, 46, 244, 2, 46, 244, + 1, 46, 244, 0, 46, 243, 255, 46, 243, 254, 46, 243, 253, 46, 243, 252, + 46, 243, 251, 46, 243, 250, 46, 243, 249, 46, 243, 248, 46, 243, 247, 46, + 243, 246, 46, 243, 245, 46, 243, 244, 46, 243, 243, 46, 243, 242, 46, + 243, 241, 46, 243, 240, 46, 243, 239, 46, 243, 238, 46, 243, 237, 46, + 243, 236, 46, 243, 235, 46, 243, 234, 46, 243, 233, 46, 243, 232, 46, + 243, 231, 46, 243, 230, 46, 243, 229, 46, 243, 228, 46, 243, 227, 46, + 243, 226, 46, 243, 225, 46, 243, 224, 46, 243, 223, 46, 243, 222, 46, + 243, 221, 46, 243, 220, 46, 243, 219, 46, 243, 218, 46, 243, 217, 46, + 243, 216, 46, 243, 215, 46, 243, 214, 46, 243, 213, 46, 243, 212, 46, + 243, 211, 46, 243, 210, 46, 243, 209, 46, 243, 208, 46, 243, 207, 46, + 243, 206, 46, 243, 205, 46, 243, 204, 46, 243, 203, 46, 243, 202, 46, + 243, 201, 46, 243, 200, 46, 243, 199, 46, 243, 198, 46, 243, 197, 46, + 243, 196, 46, 243, 195, 46, 243, 194, 46, 243, 193, 46, 243, 192, 46, + 243, 191, 46, 243, 190, 46, 243, 189, 46, 243, 188, 46, 243, 187, 46, + 243, 186, 46, 243, 185, 46, 243, 184, 46, 243, 183, 46, 243, 182, 46, + 243, 181, 46, 243, 180, 46, 243, 179, 46, 243, 178, 46, 243, 177, 46, + 243, 176, 46, 243, 175, 46, 243, 174, 46, 243, 173, 46, 243, 172, 46, + 243, 171, 46, 243, 170, 46, 243, 169, 46, 243, 168, 46, 243, 167, 46, + 243, 166, 46, 243, 165, 46, 243, 164, 46, 243, 163, 46, 243, 162, 46, + 243, 161, 46, 243, 160, 46, 243, 159, 46, 243, 158, 46, 243, 157, 46, + 243, 156, 46, 243, 155, 46, 243, 154, 46, 243, 153, 46, 243, 152, 46, + 243, 151, 46, 243, 150, 46, 243, 149, 46, 243, 148, 46, 243, 147, 46, + 243, 146, 46, 243, 145, 46, 243, 144, 46, 243, 143, 124, 1, 230, 118, + 124, 1, 192, 235, 124, 1, 210, 238, 124, 1, 200, 43, 124, 1, 233, 177, + 124, 1, 222, 154, 124, 1, 172, 124, 1, 250, 122, 124, 1, 238, 129, 124, + 1, 196, 12, 124, 1, 232, 53, 124, 1, 146, 124, 1, 210, 239, 215, 63, 124, + 1, 238, 130, 206, 9, 124, 1, 233, 178, 215, 63, 124, 1, 222, 155, 218, + 170, 124, 1, 207, 224, 206, 9, 124, 1, 199, 51, 124, 1, 202, 83, 237, 71, + 124, 1, 237, 71, 124, 1, 221, 104, 124, 1, 202, 83, 223, 37, 124, 1, 229, + 114, 124, 1, 219, 162, 124, 1, 207, 8, 124, 1, 218, 170, 124, 1, 215, 63, + 124, 1, 223, 37, 124, 1, 206, 9, 124, 1, 218, 171, 215, 63, 124, 1, 215, + 64, 218, 170, 124, 1, 223, 38, 218, 170, 124, 1, 206, 10, 223, 37, 124, + 1, 218, 171, 4, 236, 142, 124, 1, 215, 64, 4, 236, 142, 124, 1, 223, 38, + 4, 236, 142, 124, 1, 223, 38, 4, 185, 223, 120, 23, 58, 124, 1, 206, 10, + 4, 236, 142, 124, 1, 206, 10, 4, 75, 60, 124, 1, 218, 171, 206, 9, 124, + 1, 215, 64, 206, 9, 124, 1, 223, 38, 206, 9, 124, 1, 206, 10, 206, 9, + 124, 1, 218, 171, 215, 64, 206, 9, 124, 1, 215, 64, 218, 171, 206, 9, + 124, 1, 223, 38, 218, 171, 206, 9, 124, 1, 206, 10, 223, 38, 206, 9, 124, + 1, 223, 38, 206, 10, 4, 236, 142, 124, 1, 223, 38, 215, 63, 124, 1, 223, + 38, 215, 64, 206, 9, 124, 1, 206, 10, 200, 43, 124, 1, 206, 10, 200, 44, + 146, 124, 1, 206, 10, 210, 238, 124, 1, 206, 10, 210, 239, 146, 124, 1, + 200, 44, 206, 9, 124, 1, 200, 44, 207, 224, 206, 9, 124, 1, 193, 224, + 124, 1, 193, 97, 124, 1, 193, 225, 146, 124, 1, 206, 10, 215, 63, 124, 1, + 206, 10, 218, 170, 124, 1, 222, 155, 207, 224, 206, 9, 124, 1, 232, 54, + 207, 224, 206, 9, 124, 1, 206, 10, 222, 154, 124, 1, 206, 10, 222, 155, + 146, 124, 1, 65, 124, 1, 202, 83, 210, 252, 124, 1, 211, 184, 124, 1, 74, + 124, 1, 251, 68, 124, 1, 68, 124, 1, 71, 124, 1, 223, 228, 124, 1, 203, + 41, 68, 124, 1, 196, 139, 124, 1, 234, 190, 124, 1, 202, 83, 234, 175, + 124, 1, 206, 136, 68, 124, 1, 202, 83, 234, 190, 124, 1, 180, 68, 124, 1, + 192, 80, 124, 1, 66, 124, 1, 233, 244, 124, 1, 192, 182, 124, 1, 126, + 215, 63, 124, 1, 180, 66, 124, 1, 206, 136, 66, 124, 1, 196, 141, 124, 1, + 202, 83, 66, 124, 1, 211, 86, 124, 1, 210, 252, 124, 1, 211, 21, 124, 1, + 193, 190, 124, 1, 193, 48, 124, 1, 193, 86, 124, 1, 193, 112, 124, 1, + 193, 14, 124, 1, 214, 216, 66, 124, 1, 214, 216, 74, 124, 1, 214, 216, + 68, 124, 1, 214, 216, 65, 124, 1, 210, 2, 251, 134, 124, 1, 210, 2, 251, + 151, 124, 1, 202, 83, 234, 105, 124, 1, 202, 83, 251, 134, 124, 1, 202, + 83, 211, 106, 124, 1, 117, 218, 170, 124, 252, 6, 45, 228, 243, 205, 59, + 124, 252, 6, 216, 89, 228, 243, 205, 59, 124, 252, 6, 50, 228, 243, 205, + 59, 124, 252, 6, 130, 81, 205, 59, 124, 252, 6, 216, 89, 81, 205, 59, + 124, 252, 6, 137, 81, 205, 59, 124, 252, 6, 250, 172, 205, 59, 124, 252, + 6, 250, 172, 219, 217, 205, 59, 124, 252, 6, 250, 172, 199, 188, 124, + 252, 6, 250, 172, 199, 215, 124, 252, 6, 250, 172, 235, 17, 102, 124, + 252, 6, 250, 172, 228, 76, 102, 124, 252, 6, 250, 172, 199, 189, 102, + 124, 252, 6, 137, 252, 48, 124, 252, 6, 137, 198, 172, 252, 48, 124, 252, + 6, 137, 230, 212, 124, 252, 6, 137, 180, 230, 212, 124, 252, 6, 137, 236, + 142, 124, 252, 6, 137, 243, 12, 124, 252, 6, 137, 219, 114, 124, 252, 6, + 137, 193, 138, 124, 252, 6, 137, 195, 135, 124, 252, 6, 130, 252, 48, + 124, 252, 6, 130, 198, 172, 252, 48, 124, 252, 6, 130, 230, 212, 124, + 252, 6, 130, 180, 230, 212, 124, 252, 6, 130, 236, 142, 124, 252, 6, 130, + 243, 12, 124, 252, 6, 130, 219, 114, 124, 252, 6, 130, 193, 138, 124, + 252, 6, 130, 195, 135, 124, 252, 6, 130, 57, 124, 3, 187, 4, 238, 219, + 124, 199, 9, 1, 205, 35, 124, 55, 77, 124, 208, 154, 243, 80, 232, 82, + 201, 64, 203, 28, 232, 147, 1, 211, 4, 203, 28, 232, 147, 239, 30, 211, + 4, 203, 28, 232, 147, 144, 201, 79, 203, 28, 232, 147, 133, 201, 79, 97, + 33, 87, 230, 242, 213, 161, 206, 10, 220, 253, 211, 107, 219, 226, 97, + 33, 87, 213, 161, 206, 10, 220, 253, 211, 107, 219, 226, 97, 33, 87, 197, + 162, 211, 107, 219, 226, 97, 33, 87, 230, 242, 213, 161, 211, 107, 219, + 226, 97, 33, 87, 213, 161, 211, 107, 219, 226, 97, 33, 87, 201, 180, 211, + 107, 219, 226, 97, 33, 87, 217, 96, 209, 5, 211, 107, 219, 226, 97, 33, + 87, 209, 5, 211, 107, 219, 226, 97, 33, 87, 193, 231, 211, 107, 219, 226, + 97, 33, 87, 217, 96, 209, 5, 206, 10, 221, 183, 211, 107, 219, 226, 97, + 33, 87, 209, 5, 206, 10, 221, 183, 211, 107, 219, 226, 97, 33, 87, 193, + 231, 206, 10, 221, 183, 211, 107, 219, 226, 97, 33, 87, 230, 242, 213, + 161, 206, 10, 220, 253, 211, 107, 179, 97, 33, 87, 213, 161, 206, 10, + 220, 253, 211, 107, 179, 97, 33, 87, 197, 162, 211, 107, 179, 97, 33, 87, + 230, 242, 213, 161, 211, 107, 179, 97, 33, 87, 213, 161, 211, 107, 179, + 97, 33, 87, 201, 180, 211, 107, 179, 97, 33, 87, 217, 96, 209, 5, 211, + 107, 179, 97, 33, 87, 209, 5, 211, 107, 179, 97, 33, 87, 193, 231, 211, + 107, 179, 97, 33, 87, 217, 96, 209, 5, 206, 10, 221, 183, 211, 107, 179, + 97, 33, 87, 209, 5, 206, 10, 221, 183, 211, 107, 179, 97, 33, 87, 193, + 231, 206, 10, 221, 183, 211, 107, 179, 97, 33, 87, 197, 162, 206, 10, + 220, 252, 97, 33, 87, 217, 96, 209, 5, 206, 10, 220, 252, 97, 33, 87, + 201, 50, 217, 96, 209, 4, 97, 33, 87, 209, 5, 206, 10, 220, 252, 97, 33, + 87, 209, 5, 201, 49, 97, 33, 87, 193, 231, 206, 10, 220, 252, 97, 33, 87, + 217, 96, 209, 5, 201, 49, 97, 33, 87, 230, 242, 193, 230, 97, 33, 87, + 191, 83, 97, 33, 87, 211, 106, 97, 33, 87, 207, 126, 97, 33, 87, 198, + 157, 97, 33, 87, 248, 85, 97, 33, 87, 196, 156, 97, 33, 87, 209, 67, 97, + 33, 87, 219, 23, 97, 33, 87, 220, 202, 97, 33, 87, 222, 117, 97, 33, 87, + 191, 74, 97, 33, 87, 202, 106, 97, 33, 87, 207, 119, 97, 33, 87, 220, + 255, 211, 107, 219, 226, 97, 33, 198, 80, 207, 139, 87, 215, 164, 97, 33, + 198, 80, 207, 139, 87, 200, 153, 97, 33, 198, 80, 207, 139, 87, 197, 246, + 97, 33, 87, 191, 120, 97, 33, 87, 237, 107, 191, 120, 97, 33, 87, 211, + 27, 97, 33, 87, 209, 69, 97, 33, 87, 209, 70, 4, 81, 106, 97, 33, 87, + 243, 136, 97, 33, 87, 243, 137, 209, 47, 97, 33, 87, 211, 176, 97, 33, + 87, 202, 11, 212, 251, 97, 33, 87, 198, 89, 97, 33, 87, 235, 50, 97, 33, + 250, 171, 81, 211, 111, 97, 33, 87, 238, 165, 211, 111, 97, 33, 87, 220, + 254, 97, 33, 110, 198, 80, 207, 139, 223, 146, 97, 208, 205, 52, 219, + 169, 97, 208, 205, 52, 219, 168, 97, 208, 205, 52, 236, 235, 232, 197, + 97, 208, 205, 52, 220, 254, 97, 208, 205, 52, 206, 145, 97, 161, 221, 2, + 97, 161, 221, 3, 198, 156, 97, 161, 210, 124, 97, 161, 235, 58, 196, 13, + 243, 115, 97, 161, 221, 92, 97, 161, 191, 105, 97, 161, 201, 62, 97, 161, + 201, 63, 206, 10, 211, 165, 97, 161, 210, 12, 97, 161, 210, 13, 214, 98, + 97, 161, 201, 63, 4, 202, 11, 212, 251, 97, 161, 243, 114, 97, 161, 210, + 188, 97, 161, 191, 103, 97, 161, 230, 250, 248, 84, 97, 161, 230, 250, + 198, 156, 97, 161, 230, 250, 215, 162, 97, 161, 230, 250, 200, 152, 97, + 161, 230, 250, 197, 245, 97, 161, 194, 253, 208, 185, 97, 161, 194, 253, + 215, 165, 97, 161, 194, 253, 200, 154, 97, 161, 194, 253, 197, 247, 97, + 161, 194, 253, 221, 87, 208, 185, 97, 161, 194, 253, 221, 87, 215, 165, + 97, 161, 194, 253, 221, 87, 200, 154, 97, 161, 194, 253, 221, 87, 197, + 247, 97, 161, 55, 191, 103, 97, 161, 207, 19, 243, 114, 97, 161, 237, 93, + 97, 161, 221, 209, 97, 161, 243, 136, 97, 161, 209, 69, 97, 161, 202, + 114, 215, 165, 97, 161, 202, 114, 200, 154, 97, 161, 202, 114, 197, 247, + 97, 161, 202, 114, 198, 157, 97, 161, 237, 107, 221, 92, 97, 161, 202, + 114, 221, 87, 200, 154, 97, 161, 202, 114, 221, 91, 97, 161, 202, 114, + 221, 87, 198, 157, 97, 161, 202, 114, 235, 55, 208, 185, 97, 161, 202, + 114, 235, 55, 200, 154, 97, 161, 202, 114, 235, 55, 214, 98, 97, 161, + 202, 114, 235, 55, 221, 86, 97, 161, 202, 73, 97, 161, 202, 74, 206, 10, + 191, 101, 97, 161, 202, 74, 191, 110, 97, 161, 202, 74, 206, 10, 220, + 252, 97, 161, 220, 254, 97, 161, 206, 145, 97, 161, 232, 230, 97, 161, + 221, 61, 97, 161, 191, 8, 97, 161, 201, 91, 97, 161, 201, 92, 206, 10, + 191, 101, 97, 161, 201, 92, 206, 10, 220, 252, 97, 161, 201, 92, 206, 10, + 191, 102, 228, 76, 220, 252, 97, 161, 201, 92, 206, 10, 220, 253, 228, + 76, 191, 101, 97, 161, 201, 92, 191, 111, 97, 161, 201, 92, 191, 112, + 206, 10, 191, 101, 97, 161, 201, 92, 206, 10, 206, 144, 97, 161, 201, 92, + 206, 10, 235, 49, 191, 100, 97, 161, 201, 92, 206, 10, 191, 102, 228, 76, + 209, 68, 97, 161, 209, 49, 97, 161, 201, 92, 214, 98, 97, 161, 201, 41, + 208, 185, 97, 161, 201, 41, 215, 163, 97, 161, 201, 41, 220, 251, 97, + 161, 201, 41, 209, 45, 97, 161, 201, 41, 209, 7, 97, 161, 201, 41, 214, + 98, 97, 161, 201, 41, 221, 89, 97, 161, 201, 41, 221, 91, 97, 161, 201, + 41, 198, 158, 208, 132, 97, 161, 201, 41, 235, 54, 97, 161, 201, 41, 235, + 53, 97, 161, 201, 41, 235, 51, 97, 161, 201, 41, 235, 55, 221, 86, 97, + 161, 201, 41, 235, 52, 221, 86, 97, 161, 201, 41, 230, 197, 4, 202, 171, + 191, 103, 97, 161, 201, 41, 230, 193, 4, 202, 171, 191, 103, 97, 161, + 201, 41, 230, 196, 97, 161, 201, 41, 230, 192, 97, 161, 201, 41, 230, + 193, 4, 55, 191, 103, 97, 161, 201, 41, 230, 194, 97, 161, 201, 41, 230, + 195, 209, 7, 97, 161, 216, 223, 97, 161, 216, 224, 209, 6, 97, 161, 216, + 224, 221, 85, 97, 161, 216, 224, 221, 88, 97, 161, 216, 224, 221, 90, 97, + 161, 201, 41, 197, 174, 97, 161, 201, 41, 197, 173, 97, 161, 201, 41, + 197, 172, 97, 161, 211, 33, 97, 161, 211, 34, 200, 154, 97, 161, 211, 34, + 197, 247, 97, 161, 211, 34, 221, 1, 200, 154, 97, 161, 211, 34, 221, 87, + 200, 154, 97, 161, 211, 34, 221, 87, 214, 98, 97, 161, 201, 41, 221, 0, + 97, 161, 201, 41, 221, 1, 209, 7, 97, 161, 201, 41, 221, 1, 230, 197, 4, + 202, 171, 191, 103, 97, 161, 201, 41, 221, 1, 230, 193, 4, 202, 171, 191, + 103, 97, 161, 201, 41, 221, 1, 230, 196, 97, 161, 201, 41, 221, 1, 230, + 192, 97, 161, 201, 41, 221, 1, 230, 193, 4, 55, 191, 103, 97, 161, 201, + 41, 221, 1, 230, 194, 97, 161, 201, 41, 221, 1, 230, 195, 209, 7, 97, + 161, 201, 41, 221, 1, 197, 175, 97, 161, 220, 216, 97, 161, 211, 175, 97, + 161, 235, 86, 97, 161, 214, 105, 97, 161, 210, 81, 73, 37, 16, 208, 171, + 73, 37, 16, 237, 219, 73, 37, 16, 210, 6, 73, 37, 16, 210, 248, 234, 146, + 73, 37, 16, 210, 248, 236, 240, 73, 37, 16, 195, 172, 234, 146, 73, 37, + 16, 195, 172, 236, 240, 73, 37, 16, 222, 46, 73, 37, 16, 200, 60, 73, 37, + 16, 210, 122, 73, 37, 16, 191, 231, 73, 37, 16, 191, 232, 236, 240, 73, + 37, 16, 221, 5, 73, 37, 16, 251, 63, 234, 146, 73, 37, 16, 233, 212, 234, + 146, 73, 37, 16, 199, 108, 73, 37, 16, 221, 249, 73, 37, 16, 251, 52, 73, + 37, 16, 251, 53, 236, 240, 73, 37, 16, 200, 67, 73, 37, 16, 198, 244, 73, + 37, 16, 211, 118, 251, 14, 73, 37, 16, 230, 240, 251, 14, 73, 37, 16, + 208, 170, 73, 37, 16, 246, 250, 73, 37, 16, 195, 161, 73, 37, 16, 223, + 60, 251, 14, 73, 37, 16, 221, 251, 251, 14, 73, 37, 16, 221, 250, 251, + 14, 73, 37, 16, 205, 106, 73, 37, 16, 210, 112, 73, 37, 16, 201, 89, 251, + 56, 73, 37, 16, 210, 247, 251, 14, 73, 37, 16, 195, 171, 251, 14, 73, 37, + 16, 251, 57, 251, 14, 73, 37, 16, 251, 50, 73, 37, 16, 221, 94, 73, 37, + 16, 207, 15, 73, 37, 16, 209, 185, 251, 14, 73, 37, 16, 198, 142, 73, 37, + 16, 251, 130, 73, 37, 16, 205, 38, 73, 37, 16, 200, 71, 251, 14, 73, 37, + 16, 200, 71, 216, 168, 201, 87, 73, 37, 16, 210, 242, 251, 14, 73, 37, + 16, 199, 27, 73, 37, 16, 219, 204, 73, 37, 16, 235, 40, 73, 37, 16, 197, + 243, 73, 37, 16, 199, 76, 73, 37, 16, 221, 8, 73, 37, 16, 251, 63, 233, + 212, 214, 100, 73, 37, 16, 232, 90, 251, 14, 73, 37, 16, 223, 177, 73, + 37, 16, 197, 210, 251, 14, 73, 37, 16, 222, 49, 197, 209, 73, 37, 16, + 210, 38, 73, 37, 16, 208, 175, 73, 37, 16, 221, 44, 73, 37, 16, 243, 62, + 251, 14, 73, 37, 16, 207, 137, 73, 37, 16, 210, 126, 251, 14, 73, 37, 16, + 210, 123, 251, 14, 73, 37, 16, 228, 26, 73, 37, 16, 214, 227, 73, 37, 16, + 209, 240, 73, 37, 16, 221, 45, 251, 169, 73, 37, 16, 197, 210, 251, 169, + 73, 37, 16, 201, 56, 73, 37, 16, 230, 191, 73, 37, 16, 223, 60, 214, 100, + 73, 37, 16, 211, 118, 214, 100, 73, 37, 16, 210, 248, 214, 100, 73, 37, + 16, 209, 239, 73, 37, 16, 221, 28, 73, 37, 16, 209, 238, 73, 37, 16, 221, + 7, 73, 37, 16, 210, 39, 214, 100, 73, 37, 16, 221, 250, 214, 101, 251, + 95, 73, 37, 16, 221, 251, 214, 101, 251, 95, 73, 37, 16, 191, 229, 73, + 37, 16, 251, 53, 214, 100, 73, 37, 16, 251, 54, 200, 68, 214, 100, 73, + 37, 16, 191, 230, 73, 37, 16, 221, 6, 73, 37, 16, 234, 141, 73, 37, 16, + 246, 251, 73, 37, 16, 216, 59, 223, 59, 73, 37, 16, 195, 172, 214, 100, + 73, 37, 16, 209, 185, 214, 100, 73, 37, 16, 208, 176, 214, 100, 73, 37, + 16, 211, 114, 73, 37, 16, 251, 82, 73, 37, 16, 218, 181, 73, 37, 16, 210, + 123, 214, 100, 73, 37, 16, 210, 126, 214, 100, 73, 37, 16, 233, 251, 210, + 125, 73, 37, 16, 220, 149, 73, 37, 16, 251, 83, 73, 37, 16, 197, 210, + 214, 100, 73, 37, 16, 234, 144, 73, 37, 16, 200, 71, 214, 100, 73, 37, + 16, 200, 61, 73, 37, 16, 243, 62, 214, 100, 73, 37, 16, 234, 55, 73, 37, + 16, 205, 39, 214, 100, 73, 37, 16, 192, 199, 221, 94, 73, 37, 16, 197, + 207, 73, 37, 16, 208, 177, 73, 37, 16, 197, 211, 73, 37, 16, 197, 208, + 73, 37, 16, 208, 174, 73, 37, 16, 197, 206, 73, 37, 16, 208, 173, 73, 37, + 16, 230, 239, 73, 37, 16, 251, 6, 73, 37, 16, 233, 251, 251, 6, 73, 37, + 16, 210, 242, 214, 100, 73, 37, 16, 199, 26, 234, 8, 73, 37, 16, 199, 26, + 233, 211, 73, 37, 16, 199, 28, 251, 58, 73, 37, 16, 199, 20, 222, 105, + 251, 49, 73, 37, 16, 222, 48, 73, 37, 16, 234, 92, 73, 37, 16, 192, 38, + 222, 45, 73, 37, 16, 192, 38, 251, 95, 73, 37, 16, 201, 88, 73, 37, 16, + 221, 95, 251, 95, 73, 37, 16, 236, 241, 251, 14, 73, 37, 16, 221, 9, 251, + 14, 73, 37, 16, 221, 9, 251, 169, 73, 37, 16, 221, 9, 214, 100, 73, 37, + 16, 251, 57, 214, 100, 73, 37, 16, 251, 59, 73, 37, 16, 236, 240, 73, 37, + 16, 197, 223, 73, 37, 16, 199, 66, 73, 37, 16, 221, 32, 73, 37, 16, 219, + 209, 234, 85, 243, 52, 73, 37, 16, 219, 209, 235, 41, 243, 53, 73, 37, + 16, 219, 209, 197, 226, 243, 53, 73, 37, 16, 219, 209, 199, 78, 243, 53, + 73, 37, 16, 219, 209, 223, 172, 243, 52, 73, 37, 16, 230, 240, 214, 101, + 251, 95, 73, 37, 16, 230, 240, 210, 113, 251, 2, 73, 37, 16, 230, 240, + 210, 113, 237, 75, 73, 37, 16, 237, 9, 73, 37, 16, 237, 10, 210, 113, + 251, 3, 222, 45, 73, 37, 16, 237, 10, 210, 113, 251, 3, 251, 95, 73, 37, + 16, 237, 10, 210, 113, 237, 75, 73, 37, 16, 197, 232, 73, 37, 16, 251, 7, + 73, 37, 16, 223, 179, 73, 37, 16, 237, 32, 73, 37, 16, 251, 249, 209, 53, + 251, 8, 73, 37, 16, 251, 249, 251, 5, 73, 37, 16, 251, 249, 251, 8, 73, + 37, 16, 251, 249, 216, 162, 73, 37, 16, 251, 249, 216, 173, 73, 37, 16, + 251, 249, 230, 241, 73, 37, 16, 251, 249, 230, 238, 73, 37, 16, 251, 249, + 209, 53, 230, 241, 73, 37, 16, 217, 47, 208, 183, 228, 24, 73, 37, 16, + 217, 47, 251, 171, 208, 183, 228, 24, 73, 37, 16, 217, 47, 237, 74, 228, + 24, 73, 37, 16, 217, 47, 251, 171, 237, 74, 228, 24, 73, 37, 16, 217, 47, + 197, 218, 228, 24, 73, 37, 16, 217, 47, 197, 233, 73, 37, 16, 217, 47, + 199, 71, 228, 24, 73, 37, 16, 217, 47, 199, 71, 219, 213, 228, 24, 73, + 37, 16, 217, 47, 219, 213, 228, 24, 73, 37, 16, 217, 47, 209, 107, 228, + 24, 73, 37, 16, 223, 68, 199, 101, 228, 25, 73, 37, 16, 251, 54, 199, + 101, 228, 25, 73, 37, 16, 233, 81, 199, 68, 73, 37, 16, 233, 81, 215, + 224, 73, 37, 16, 233, 81, 237, 15, 73, 37, 16, 217, 47, 195, 165, 228, + 24, 73, 37, 16, 217, 47, 208, 182, 228, 24, 73, 37, 16, 217, 47, 209, + 107, 199, 71, 228, 24, 73, 37, 16, 230, 235, 215, 64, 251, 58, 73, 37, + 16, 230, 235, 215, 64, 236, 239, 73, 37, 16, 234, 103, 222, 105, 232, 90, + 195, 3, 73, 37, 16, 223, 178, 73, 37, 16, 223, 176, 73, 37, 16, 232, 90, + 251, 15, 237, 73, 228, 23, 73, 37, 16, 232, 90, 237, 30, 168, 73, 37, 16, + 232, 90, 237, 30, 214, 227, 73, 37, 16, 232, 90, 214, 221, 228, 24, 73, + 37, 16, 232, 90, 237, 30, 237, 46, 73, 37, 16, 232, 90, 202, 107, 237, + 29, 237, 46, 73, 37, 16, 232, 90, 237, 30, 222, 24, 73, 37, 16, 232, 90, + 237, 30, 191, 7, 73, 37, 16, 232, 90, 237, 30, 213, 222, 222, 45, 73, 37, + 16, 232, 90, 237, 30, 213, 222, 251, 95, 73, 37, 16, 232, 90, 217, 100, + 243, 54, 237, 15, 73, 37, 16, 232, 90, 217, 100, 243, 54, 215, 224, 73, + 37, 16, 233, 26, 202, 107, 243, 54, 195, 164, 73, 37, 16, 232, 90, 202, + 107, 243, 54, 200, 72, 73, 37, 16, 232, 90, 214, 103, 73, 37, 16, 243, + 55, 190, 230, 73, 37, 16, 243, 55, 221, 93, 73, 37, 16, 243, 55, 201, + 239, 73, 37, 16, 232, 90, 228, 76, 192, 37, 199, 72, 73, 37, 16, 232, 90, + 234, 104, 251, 84, 73, 37, 16, 192, 37, 197, 219, 73, 37, 16, 237, 23, + 197, 219, 73, 37, 16, 237, 23, 199, 72, 73, 37, 16, 237, 23, 251, 60, + 235, 41, 236, 168, 73, 37, 16, 237, 23, 215, 222, 199, 77, 236, 168, 73, + 37, 16, 237, 23, 237, 6, 233, 224, 236, 168, 73, 37, 16, 237, 23, 197, + 230, 211, 124, 236, 168, 73, 37, 16, 192, 37, 251, 60, 235, 41, 236, 168, + 73, 37, 16, 192, 37, 215, 222, 199, 77, 236, 168, 73, 37, 16, 192, 37, + 237, 6, 233, 224, 236, 168, 73, 37, 16, 192, 37, 197, 230, 211, 124, 236, + 168, 73, 37, 16, 231, 149, 237, 22, 73, 37, 16, 231, 149, 192, 36, 73, + 37, 16, 237, 31, 251, 60, 216, 60, 73, 37, 16, 237, 31, 251, 60, 216, + 204, 73, 37, 16, 237, 31, 236, 240, 73, 37, 16, 237, 31, 199, 18, 73, 37, + 16, 202, 182, 199, 18, 73, 37, 16, 202, 182, 199, 19, 236, 223, 73, 37, + 16, 202, 182, 199, 19, 197, 220, 73, 37, 16, 202, 182, 199, 19, 199, 64, + 73, 37, 16, 202, 182, 250, 230, 73, 37, 16, 202, 182, 250, 231, 236, 223, + 73, 37, 16, 202, 182, 250, 231, 197, 220, 73, 37, 16, 202, 182, 250, 231, + 199, 64, 73, 37, 16, 237, 7, 231, 130, 73, 37, 16, 237, 14, 211, 21, 73, + 37, 16, 201, 74, 73, 37, 16, 250, 255, 168, 73, 37, 16, 250, 255, 195, 3, + 73, 37, 16, 250, 255, 231, 242, 73, 37, 16, 250, 255, 237, 46, 73, 37, + 16, 250, 255, 222, 24, 73, 37, 16, 250, 255, 191, 7, 73, 37, 16, 250, + 255, 213, 221, 73, 37, 16, 221, 250, 214, 101, 216, 172, 73, 37, 16, 221, + 251, 214, 101, 216, 172, 73, 37, 16, 221, 250, 214, 101, 222, 45, 73, 37, + 16, 221, 251, 214, 101, 222, 45, 73, 37, 16, 221, 95, 222, 45, 73, 37, + 16, 230, 240, 214, 101, 222, 45, 37, 16, 202, 171, 249, 85, 37, 16, 55, + 249, 85, 37, 16, 53, 249, 85, 37, 16, 207, 20, 53, 249, 85, 37, 16, 237, + 216, 249, 85, 37, 16, 203, 41, 249, 85, 37, 16, 45, 207, 50, 56, 37, 16, + 50, 207, 50, 56, 37, 16, 207, 50, 236, 140, 37, 16, 238, 6, 205, 42, 37, + 16, 238, 35, 247, 110, 37, 16, 205, 42, 37, 16, 242, 94, 37, 16, 207, 48, + 233, 13, 37, 16, 207, 48, 233, 12, 37, 16, 207, 48, 233, 11, 37, 16, 233, + 36, 37, 16, 233, 37, 60, 37, 16, 248, 41, 77, 37, 16, 247, 152, 37, 16, + 248, 57, 37, 16, 248, 55, 37, 16, 211, 101, 201, 112, 37, 16, 197, 12, + 201, 112, 37, 16, 198, 220, 201, 112, 37, 16, 232, 129, 201, 112, 37, 16, + 232, 226, 201, 112, 37, 16, 202, 136, 201, 112, 37, 16, 202, 134, 232, + 107, 37, 16, 232, 127, 232, 107, 37, 16, 232, 54, 242, 237, 37, 16, 232, + 54, 242, 238, 211, 25, 251, 160, 37, 16, 232, 54, 242, 238, 211, 25, 249, + 68, 37, 16, 247, 196, 242, 237, 37, 16, 233, 178, 242, 237, 37, 16, 233, + 178, 242, 238, 211, 25, 251, 160, 37, 16, 233, 178, 242, 238, 211, 25, + 249, 68, 37, 16, 235, 97, 242, 236, 37, 16, 235, 97, 242, 235, 37, 16, + 215, 131, 216, 230, 207, 31, 37, 16, 55, 203, 127, 37, 16, 55, 232, 208, + 37, 16, 232, 209, 196, 77, 37, 16, 232, 209, 235, 125, 37, 16, 214, 208, + 196, 77, 37, 16, 214, 208, 235, 125, 37, 16, 203, 128, 196, 77, 37, 16, + 203, 128, 235, 125, 37, 16, 208, 25, 163, 203, 127, 37, 16, 208, 25, 163, + 232, 208, 37, 16, 242, 73, 198, 146, 37, 16, 238, 157, 198, 146, 37, 16, + 211, 25, 251, 160, 37, 16, 211, 25, 249, 68, 37, 16, 208, 5, 251, 160, + 37, 16, 208, 5, 249, 68, 37, 16, 215, 134, 207, 31, 37, 16, 193, 87, 207, + 31, 37, 16, 132, 207, 31, 37, 16, 208, 25, 207, 31, 37, 16, 234, 162, + 207, 31, 37, 16, 202, 130, 207, 31, 37, 16, 198, 246, 207, 31, 37, 16, + 202, 120, 207, 31, 37, 16, 91, 228, 143, 197, 30, 207, 31, 37, 16, 192, + 236, 213, 4, 37, 16, 108, 213, 4, 37, 16, 243, 13, 192, 236, 213, 4, 37, + 16, 51, 213, 5, 193, 89, 37, 16, 51, 213, 5, 248, 141, 37, 16, 197, 242, + 213, 5, 133, 193, 89, 37, 16, 197, 242, 213, 5, 133, 248, 141, 37, 16, + 197, 242, 213, 5, 45, 193, 89, 37, 16, 197, 242, 213, 5, 45, 248, 141, + 37, 16, 197, 242, 213, 5, 50, 193, 89, 37, 16, 197, 242, 213, 5, 50, 248, + 141, 37, 16, 197, 242, 213, 5, 144, 193, 89, 37, 16, 197, 242, 213, 5, + 144, 248, 141, 37, 16, 197, 242, 213, 5, 133, 50, 193, 89, 37, 16, 197, + 242, 213, 5, 133, 50, 248, 141, 37, 16, 215, 208, 213, 5, 193, 89, 37, + 16, 215, 208, 213, 5, 248, 141, 37, 16, 197, 239, 213, 5, 144, 193, 89, + 37, 16, 197, 239, 213, 5, 144, 248, 141, 37, 16, 210, 116, 213, 4, 37, + 16, 195, 17, 213, 4, 37, 16, 213, 5, 248, 141, 37, 16, 212, 141, 213, 4, + 37, 16, 242, 205, 213, 5, 193, 89, 37, 16, 242, 205, 213, 5, 248, 141, + 37, 16, 248, 38, 37, 16, 193, 87, 213, 8, 37, 16, 132, 213, 8, 37, 16, + 208, 25, 213, 8, 37, 16, 234, 162, 213, 8, 37, 16, 202, 130, 213, 8, 37, + 16, 198, 246, 213, 8, 37, 16, 202, 120, 213, 8, 37, 16, 91, 228, 143, + 197, 30, 213, 8, 37, 16, 33, 201, 81, 37, 16, 33, 201, 198, 201, 81, 37, 16, 33, 197, 253, 37, 16, 33, 197, 252, 37, 16, 33, 197, 251, 37, 16, - 232, 250, 197, 253, 37, 16, 232, 250, 197, 252, 37, 16, 232, 250, 197, - 251, 37, 16, 33, 250, 160, 236, 140, 37, 16, 33, 232, 216, 37, 16, 33, - 232, 215, 37, 16, 33, 232, 214, 37, 16, 33, 232, 213, 37, 16, 33, 232, - 212, 37, 16, 248, 249, 249, 14, 37, 16, 234, 95, 249, 14, 37, 16, 248, - 249, 198, 178, 37, 16, 234, 95, 198, 178, 37, 16, 248, 249, 202, 71, 37, - 16, 234, 95, 202, 71, 37, 16, 248, 249, 209, 192, 37, 16, 234, 95, 209, - 192, 37, 16, 33, 252, 60, 37, 16, 33, 201, 115, 37, 16, 33, 199, 83, 37, - 16, 33, 201, 116, 37, 16, 33, 217, 60, 37, 16, 33, 217, 59, 37, 16, 33, - 252, 59, 37, 16, 33, 218, 243, 37, 16, 250, 241, 196, 77, 37, 16, 250, - 241, 235, 123, 37, 16, 33, 236, 158, 37, 16, 33, 206, 184, 37, 16, 33, - 232, 195, 37, 16, 33, 202, 67, 37, 16, 33, 248, 227, 37, 16, 33, 55, 198, - 61, 37, 16, 33, 197, 225, 198, 61, 37, 16, 206, 190, 37, 16, 200, 241, - 37, 16, 191, 166, 37, 16, 209, 184, 37, 16, 216, 151, 37, 16, 232, 140, - 37, 16, 238, 229, 37, 16, 237, 132, 37, 16, 230, 228, 213, 7, 202, 97, - 37, 16, 230, 228, 213, 7, 213, 44, 202, 97, 37, 16, 198, 27, 37, 16, 197, - 58, 37, 16, 223, 93, 197, 58, 37, 16, 197, 59, 202, 97, 37, 16, 197, 59, - 196, 77, 37, 16, 211, 43, 201, 27, 37, 16, 211, 43, 201, 24, 37, 16, 211, - 43, 201, 23, 37, 16, 211, 43, 201, 22, 37, 16, 211, 43, 201, 21, 37, 16, - 211, 43, 201, 20, 37, 16, 211, 43, 201, 19, 37, 16, 211, 43, 201, 18, 37, - 16, 211, 43, 201, 17, 37, 16, 211, 43, 201, 26, 37, 16, 211, 43, 201, 25, - 37, 16, 230, 0, 37, 16, 214, 113, 37, 16, 234, 95, 79, 201, 69, 37, 16, - 237, 125, 202, 97, 37, 16, 33, 144, 248, 69, 37, 16, 33, 133, 248, 69, - 37, 16, 33, 230, 14, 37, 16, 33, 202, 57, 209, 111, 37, 16, 210, 54, 77, - 37, 16, 210, 54, 133, 77, 37, 16, 132, 210, 54, 77, 37, 16, 231, 13, 196, - 77, 37, 16, 231, 13, 235, 123, 37, 16, 4, 232, 249, 37, 16, 237, 241, 37, - 16, 237, 242, 251, 174, 37, 16, 217, 23, 37, 16, 219, 10, 37, 16, 248, - 33, 37, 16, 204, 29, 193, 89, 37, 16, 204, 29, 248, 139, 37, 16, 216, 39, - 37, 16, 216, 40, 248, 139, 37, 16, 204, 23, 193, 89, 37, 16, 204, 23, - 248, 139, 37, 16, 232, 70, 193, 89, 37, 16, 232, 70, 248, 139, 37, 16, - 219, 11, 210, 9, 207, 30, 37, 16, 219, 11, 223, 167, 207, 30, 37, 16, - 248, 34, 207, 30, 37, 16, 204, 29, 207, 30, 37, 16, 216, 40, 207, 30, 37, - 16, 204, 23, 207, 30, 37, 16, 199, 97, 210, 7, 238, 186, 208, 192, 210, - 8, 37, 16, 199, 97, 210, 7, 238, 186, 208, 192, 223, 166, 37, 16, 199, - 97, 210, 7, 238, 186, 208, 192, 210, 9, 236, 248, 37, 16, 199, 97, 223, - 165, 238, 186, 208, 192, 210, 8, 37, 16, 199, 97, 223, 165, 238, 186, - 208, 192, 223, 166, 37, 16, 199, 97, 223, 165, 238, 186, 208, 192, 223, - 167, 236, 248, 37, 16, 199, 97, 223, 165, 238, 186, 208, 192, 223, 167, - 236, 247, 37, 16, 199, 97, 223, 165, 238, 186, 208, 192, 223, 167, 236, - 246, 37, 16, 238, 220, 37, 16, 230, 199, 247, 194, 242, 235, 37, 16, 230, - 199, 233, 176, 242, 235, 37, 16, 51, 250, 120, 37, 16, 195, 39, 37, 16, - 209, 69, 37, 16, 242, 224, 37, 16, 205, 95, 37, 16, 242, 229, 37, 16, - 198, 47, 37, 16, 209, 28, 37, 16, 209, 29, 232, 198, 37, 16, 205, 96, - 232, 198, 37, 16, 198, 48, 207, 27, 37, 16, 209, 246, 200, 231, 37, 16, - 221, 148, 247, 194, 242, 235, 37, 16, 221, 148, 234, 95, 79, 209, 175, - 37, 16, 221, 148, 53, 213, 6, 37, 16, 221, 148, 207, 99, 77, 37, 16, 221, - 148, 193, 87, 213, 6, 37, 16, 221, 148, 132, 213, 6, 37, 16, 221, 148, - 208, 23, 213, 7, 201, 81, 235, 123, 37, 16, 221, 148, 208, 23, 213, 7, - 201, 81, 196, 77, 37, 16, 221, 148, 234, 160, 213, 7, 201, 81, 235, 123, - 37, 16, 221, 148, 234, 160, 213, 7, 201, 81, 196, 77, 37, 16, 221, 148, - 232, 207, 56, 37, 16, 202, 11, 37, 16, 221, 31, 35, 195, 23, 213, 10, - 200, 123, 35, 195, 23, 213, 10, 200, 112, 35, 195, 23, 213, 10, 200, 102, - 35, 195, 23, 213, 10, 200, 95, 35, 195, 23, 213, 10, 200, 87, 35, 195, - 23, 213, 10, 200, 81, 35, 195, 23, 213, 10, 200, 80, 35, 195, 23, 213, - 10, 200, 79, 35, 195, 23, 213, 10, 200, 78, 35, 195, 23, 213, 10, 200, - 122, 35, 195, 23, 213, 10, 200, 121, 35, 195, 23, 213, 10, 200, 120, 35, - 195, 23, 213, 10, 200, 119, 35, 195, 23, 213, 10, 200, 118, 35, 195, 23, - 213, 10, 200, 117, 35, 195, 23, 213, 10, 200, 116, 35, 195, 23, 213, 10, - 200, 115, 35, 195, 23, 213, 10, 200, 114, 35, 195, 23, 213, 10, 200, 113, - 35, 195, 23, 213, 10, 200, 111, 35, 195, 23, 213, 10, 200, 110, 35, 195, - 23, 213, 10, 200, 109, 35, 195, 23, 213, 10, 200, 108, 35, 195, 23, 213, - 10, 200, 107, 35, 195, 23, 213, 10, 200, 86, 35, 195, 23, 213, 10, 200, - 85, 35, 195, 23, 213, 10, 200, 84, 35, 195, 23, 213, 10, 200, 83, 35, - 195, 23, 213, 10, 200, 82, 35, 223, 116, 213, 10, 200, 123, 35, 223, 116, - 213, 10, 200, 112, 35, 223, 116, 213, 10, 200, 95, 35, 223, 116, 213, 10, - 200, 87, 35, 223, 116, 213, 10, 200, 80, 35, 223, 116, 213, 10, 200, 79, - 35, 223, 116, 213, 10, 200, 121, 35, 223, 116, 213, 10, 200, 120, 35, - 223, 116, 213, 10, 200, 119, 35, 223, 116, 213, 10, 200, 118, 35, 223, - 116, 213, 10, 200, 115, 35, 223, 116, 213, 10, 200, 114, 35, 223, 116, - 213, 10, 200, 113, 35, 223, 116, 213, 10, 200, 108, 35, 223, 116, 213, - 10, 200, 107, 35, 223, 116, 213, 10, 200, 106, 35, 223, 116, 213, 10, - 200, 105, 35, 223, 116, 213, 10, 200, 104, 35, 223, 116, 213, 10, 200, - 103, 35, 223, 116, 213, 10, 200, 101, 35, 223, 116, 213, 10, 200, 100, - 35, 223, 116, 213, 10, 200, 99, 35, 223, 116, 213, 10, 200, 98, 35, 223, - 116, 213, 10, 200, 97, 35, 223, 116, 213, 10, 200, 96, 35, 223, 116, 213, - 10, 200, 94, 35, 223, 116, 213, 10, 200, 93, 35, 223, 116, 213, 10, 200, - 92, 35, 223, 116, 213, 10, 200, 91, 35, 223, 116, 213, 10, 200, 90, 35, - 223, 116, 213, 10, 200, 89, 35, 223, 116, 213, 10, 200, 88, 35, 223, 116, - 213, 10, 200, 86, 35, 223, 116, 213, 10, 200, 85, 35, 223, 116, 213, 10, - 200, 84, 35, 223, 116, 213, 10, 200, 83, 35, 223, 116, 213, 10, 200, 82, - 33, 35, 37, 197, 221, 33, 35, 37, 199, 65, 33, 35, 37, 210, 22, 35, 37, - 219, 206, 222, 93, 212, 134, 191, 77, 222, 93, 212, 134, 107, 222, 93, - 212, 134, 109, 222, 93, 212, 134, 138, 222, 93, 212, 134, 134, 222, 93, - 212, 134, 149, 222, 93, 212, 134, 169, 222, 93, 212, 134, 175, 222, 93, - 212, 134, 171, 222, 93, 212, 134, 178, 222, 93, 212, 134, 199, 95, 222, - 93, 212, 134, 234, 127, 222, 93, 212, 134, 197, 37, 222, 93, 212, 134, - 198, 251, 222, 93, 212, 134, 232, 122, 222, 93, 212, 134, 233, 19, 222, - 93, 212, 134, 202, 130, 222, 93, 212, 134, 203, 244, 222, 93, 212, 134, - 234, 161, 222, 93, 212, 134, 213, 171, 217, 20, 212, 134, 191, 77, 217, - 20, 212, 134, 107, 217, 20, 212, 134, 109, 217, 20, 212, 134, 138, 217, - 20, 212, 134, 134, 217, 20, 212, 134, 149, 217, 20, 212, 134, 169, 217, - 20, 212, 134, 175, 217, 20, 212, 134, 171, 217, 20, 212, 134, 178, 217, - 20, 212, 134, 199, 95, 217, 20, 212, 134, 234, 127, 217, 20, 212, 134, - 197, 37, 217, 20, 212, 134, 198, 251, 217, 20, 212, 134, 232, 122, 217, - 20, 212, 134, 233, 19, 217, 20, 212, 134, 202, 130, 217, 20, 212, 134, - 203, 244, 217, 20, 212, 134, 234, 161, 217, 20, 212, 134, 213, 171, 215, - 221, 40, 234, 207, 237, 6, 40, 229, 218, 234, 207, 237, 6, 40, 228, 145, - 234, 207, 237, 6, 40, 234, 206, 229, 219, 237, 6, 40, 234, 206, 228, 144, - 237, 6, 40, 234, 207, 199, 67, 40, 247, 21, 199, 67, 40, 232, 80, 243, - 10, 199, 67, 40, 216, 30, 199, 67, 40, 249, 78, 199, 67, 40, 222, 10, - 202, 70, 199, 67, 40, 239, 23, 199, 67, 40, 250, 212, 199, 67, 40, 211, - 62, 199, 67, 40, 248, 45, 211, 14, 199, 67, 40, 237, 127, 211, 57, 236, - 213, 199, 67, 40, 236, 210, 199, 67, 40, 191, 237, 199, 67, 40, 223, 153, - 199, 67, 40, 210, 32, 199, 67, 40, 207, 108, 199, 67, 40, 239, 35, 199, - 67, 40, 229, 6, 249, 146, 199, 67, 40, 193, 171, 199, 67, 40, 232, 169, - 199, 67, 40, 252, 28, 199, 67, 40, 207, 62, 199, 67, 40, 207, 34, 199, - 67, 40, 234, 205, 199, 67, 40, 222, 185, 199, 67, 40, 239, 30, 199, 67, - 40, 234, 93, 199, 67, 40, 235, 59, 199, 67, 40, 246, 244, 199, 67, 40, - 237, 137, 199, 67, 40, 28, 207, 33, 199, 67, 40, 210, 211, 199, 67, 40, - 219, 210, 199, 67, 40, 242, 217, 199, 67, 40, 221, 136, 199, 67, 40, 231, - 189, 199, 67, 40, 201, 39, 199, 67, 40, 208, 140, 199, 67, 40, 232, 79, - 199, 67, 40, 207, 35, 199, 67, 40, 219, 251, 211, 57, 216, 2, 199, 67, - 40, 207, 31, 199, 67, 40, 230, 252, 119, 216, 206, 199, 67, 40, 234, 96, - 199, 67, 40, 201, 56, 199, 67, 40, 230, 202, 199, 67, 40, 234, 86, 199, - 67, 40, 210, 83, 199, 67, 40, 206, 177, 199, 67, 40, 232, 196, 199, 67, - 40, 195, 163, 211, 57, 193, 147, 199, 67, 40, 239, 40, 199, 67, 40, 216, - 227, 199, 67, 40, 233, 250, 199, 67, 40, 196, 88, 199, 67, 40, 236, 249, - 199, 67, 40, 242, 219, 215, 179, 199, 67, 40, 230, 171, 199, 67, 40, 231, - 190, 223, 162, 199, 67, 40, 217, 32, 199, 67, 40, 252, 54, 199, 67, 40, - 234, 112, 199, 67, 40, 235, 127, 199, 67, 40, 193, 145, 199, 67, 40, 202, - 165, 199, 67, 40, 223, 126, 199, 67, 40, 237, 93, 199, 67, 40, 237, 219, - 199, 67, 40, 236, 245, 199, 67, 40, 233, 213, 199, 67, 40, 203, 240, 199, - 67, 40, 201, 60, 199, 67, 40, 230, 16, 199, 67, 40, 242, 66, 199, 67, 40, - 242, 214, 199, 67, 40, 233, 88, 199, 67, 40, 251, 248, 199, 67, 40, 242, - 65, 199, 67, 40, 211, 105, 199, 34, 195, 138, 199, 67, 40, 237, 15, 199, - 67, 40, 220, 113, 199, 67, 40, 232, 131, 238, 244, 206, 145, 196, 91, 17, - 107, 238, 244, 206, 145, 196, 91, 17, 109, 238, 244, 206, 145, 196, 91, - 17, 138, 238, 244, 206, 145, 196, 91, 17, 134, 238, 244, 206, 145, 196, - 91, 17, 149, 238, 244, 206, 145, 196, 91, 17, 169, 238, 244, 206, 145, - 196, 91, 17, 175, 238, 244, 206, 145, 196, 91, 17, 171, 238, 244, 206, - 145, 196, 91, 17, 178, 238, 244, 206, 145, 199, 91, 17, 107, 238, 244, - 206, 145, 199, 91, 17, 109, 238, 244, 206, 145, 199, 91, 17, 138, 238, - 244, 206, 145, 199, 91, 17, 134, 238, 244, 206, 145, 199, 91, 17, 149, - 238, 244, 206, 145, 199, 91, 17, 169, 238, 244, 206, 145, 199, 91, 17, - 175, 238, 244, 206, 145, 199, 91, 17, 171, 238, 244, 206, 145, 199, 91, - 17, 178, 154, 199, 198, 87, 107, 154, 199, 198, 87, 109, 154, 199, 198, - 87, 138, 154, 199, 198, 87, 134, 154, 199, 198, 87, 149, 199, 198, 87, - 107, 199, 198, 87, 149, 13, 28, 6, 65, 13, 28, 6, 250, 120, 13, 28, 6, - 247, 193, 13, 28, 6, 238, 127, 13, 28, 6, 71, 13, 28, 6, 233, 175, 13, - 28, 6, 232, 51, 13, 28, 6, 230, 116, 13, 28, 6, 68, 13, 28, 6, 223, 35, - 13, 28, 6, 222, 152, 13, 28, 6, 172, 13, 28, 6, 218, 168, 13, 28, 6, 215, - 61, 13, 28, 6, 74, 13, 28, 6, 210, 236, 13, 28, 6, 208, 104, 13, 28, 6, - 146, 13, 28, 6, 206, 8, 13, 28, 6, 200, 43, 13, 28, 6, 66, 13, 28, 6, - 196, 12, 13, 28, 6, 193, 224, 13, 28, 6, 192, 235, 13, 28, 6, 192, 159, - 13, 28, 6, 191, 166, 13, 28, 2, 65, 13, 28, 2, 250, 120, 13, 28, 2, 247, - 193, 13, 28, 2, 238, 127, 13, 28, 2, 71, 13, 28, 2, 233, 175, 13, 28, 2, - 232, 51, 13, 28, 2, 230, 116, 13, 28, 2, 68, 13, 28, 2, 223, 35, 13, 28, - 2, 222, 152, 13, 28, 2, 172, 13, 28, 2, 218, 168, 13, 28, 2, 215, 61, 13, - 28, 2, 74, 13, 28, 2, 210, 236, 13, 28, 2, 208, 104, 13, 28, 2, 146, 13, - 28, 2, 206, 8, 13, 28, 2, 200, 43, 13, 28, 2, 66, 13, 28, 2, 196, 12, 13, - 28, 2, 193, 224, 13, 28, 2, 192, 235, 13, 28, 2, 192, 159, 13, 28, 2, - 191, 166, 13, 43, 6, 65, 13, 43, 6, 250, 120, 13, 43, 6, 247, 193, 13, - 43, 6, 238, 127, 13, 43, 6, 71, 13, 43, 6, 233, 175, 13, 43, 6, 232, 51, - 13, 43, 6, 230, 116, 13, 43, 6, 68, 13, 43, 6, 223, 35, 13, 43, 6, 222, - 152, 13, 43, 6, 172, 13, 43, 6, 218, 168, 13, 43, 6, 215, 61, 13, 43, 6, - 74, 13, 43, 6, 210, 236, 13, 43, 6, 208, 104, 13, 43, 6, 146, 13, 43, 6, - 206, 8, 13, 43, 6, 200, 43, 13, 43, 6, 66, 13, 43, 6, 196, 12, 13, 43, 6, - 193, 224, 13, 43, 6, 192, 235, 13, 43, 6, 192, 159, 13, 43, 6, 191, 166, - 13, 43, 2, 65, 13, 43, 2, 250, 120, 13, 43, 2, 247, 193, 13, 43, 2, 238, - 127, 13, 43, 2, 71, 13, 43, 2, 233, 175, 13, 43, 2, 232, 51, 13, 43, 2, - 68, 13, 43, 2, 223, 35, 13, 43, 2, 222, 152, 13, 43, 2, 172, 13, 43, 2, - 218, 168, 13, 43, 2, 215, 61, 13, 43, 2, 74, 13, 43, 2, 210, 236, 13, 43, - 2, 208, 104, 13, 43, 2, 146, 13, 43, 2, 206, 8, 13, 43, 2, 200, 43, 13, - 43, 2, 66, 13, 43, 2, 196, 12, 13, 43, 2, 193, 224, 13, 43, 2, 192, 235, - 13, 43, 2, 192, 159, 13, 43, 2, 191, 166, 13, 28, 43, 6, 65, 13, 28, 43, - 6, 250, 120, 13, 28, 43, 6, 247, 193, 13, 28, 43, 6, 238, 127, 13, 28, - 43, 6, 71, 13, 28, 43, 6, 233, 175, 13, 28, 43, 6, 232, 51, 13, 28, 43, - 6, 230, 116, 13, 28, 43, 6, 68, 13, 28, 43, 6, 223, 35, 13, 28, 43, 6, - 222, 152, 13, 28, 43, 6, 172, 13, 28, 43, 6, 218, 168, 13, 28, 43, 6, - 215, 61, 13, 28, 43, 6, 74, 13, 28, 43, 6, 210, 236, 13, 28, 43, 6, 208, - 104, 13, 28, 43, 6, 146, 13, 28, 43, 6, 206, 8, 13, 28, 43, 6, 200, 43, - 13, 28, 43, 6, 66, 13, 28, 43, 6, 196, 12, 13, 28, 43, 6, 193, 224, 13, - 28, 43, 6, 192, 235, 13, 28, 43, 6, 192, 159, 13, 28, 43, 6, 191, 166, - 13, 28, 43, 2, 65, 13, 28, 43, 2, 250, 120, 13, 28, 43, 2, 247, 193, 13, - 28, 43, 2, 238, 127, 13, 28, 43, 2, 71, 13, 28, 43, 2, 233, 175, 13, 28, - 43, 2, 232, 51, 13, 28, 43, 2, 230, 116, 13, 28, 43, 2, 68, 13, 28, 43, - 2, 223, 35, 13, 28, 43, 2, 222, 152, 13, 28, 43, 2, 172, 13, 28, 43, 2, - 218, 168, 13, 28, 43, 2, 215, 61, 13, 28, 43, 2, 74, 13, 28, 43, 2, 210, - 236, 13, 28, 43, 2, 208, 104, 13, 28, 43, 2, 146, 13, 28, 43, 2, 206, 8, - 13, 28, 43, 2, 200, 43, 13, 28, 43, 2, 66, 13, 28, 43, 2, 196, 12, 13, - 28, 43, 2, 193, 224, 13, 28, 43, 2, 192, 235, 13, 28, 43, 2, 192, 159, - 13, 28, 43, 2, 191, 166, 13, 27, 6, 65, 13, 27, 6, 247, 193, 13, 27, 6, - 238, 127, 13, 27, 6, 232, 51, 13, 27, 6, 223, 35, 13, 27, 6, 222, 152, - 13, 27, 6, 215, 61, 13, 27, 6, 74, 13, 27, 6, 210, 236, 13, 27, 6, 208, - 104, 13, 27, 6, 206, 8, 13, 27, 6, 200, 43, 13, 27, 6, 66, 13, 27, 6, + 232, 252, 197, 253, 37, 16, 232, 252, 197, 252, 37, 16, 232, 252, 197, + 251, 37, 16, 33, 250, 162, 236, 142, 37, 16, 33, 232, 218, 37, 16, 33, + 232, 217, 37, 16, 33, 232, 216, 37, 16, 33, 232, 215, 37, 16, 33, 232, + 214, 37, 16, 248, 251, 249, 16, 37, 16, 234, 97, 249, 16, 37, 16, 248, + 251, 198, 178, 37, 16, 234, 97, 198, 178, 37, 16, 248, 251, 202, 72, 37, + 16, 234, 97, 202, 72, 37, 16, 248, 251, 209, 194, 37, 16, 234, 97, 209, + 194, 37, 16, 33, 252, 62, 37, 16, 33, 201, 116, 37, 16, 33, 199, 83, 37, + 16, 33, 201, 117, 37, 16, 33, 217, 62, 37, 16, 33, 217, 61, 37, 16, 33, + 252, 61, 37, 16, 33, 218, 245, 37, 16, 250, 243, 196, 77, 37, 16, 250, + 243, 235, 125, 37, 16, 33, 236, 160, 37, 16, 33, 206, 185, 37, 16, 33, + 232, 197, 37, 16, 33, 202, 68, 37, 16, 33, 248, 229, 37, 16, 33, 55, 198, + 61, 37, 16, 33, 197, 225, 198, 61, 37, 16, 206, 191, 37, 16, 200, 242, + 37, 16, 191, 166, 37, 16, 209, 186, 37, 16, 216, 153, 37, 16, 232, 142, + 37, 16, 238, 231, 37, 16, 237, 134, 37, 16, 230, 230, 213, 9, 202, 98, + 37, 16, 230, 230, 213, 9, 213, 46, 202, 98, 37, 16, 198, 27, 37, 16, 197, + 58, 37, 16, 223, 95, 197, 58, 37, 16, 197, 59, 202, 98, 37, 16, 197, 59, + 196, 77, 37, 16, 211, 45, 201, 28, 37, 16, 211, 45, 201, 25, 37, 16, 211, + 45, 201, 24, 37, 16, 211, 45, 201, 23, 37, 16, 211, 45, 201, 22, 37, 16, + 211, 45, 201, 21, 37, 16, 211, 45, 201, 20, 37, 16, 211, 45, 201, 19, 37, + 16, 211, 45, 201, 18, 37, 16, 211, 45, 201, 27, 37, 16, 211, 45, 201, 26, + 37, 16, 230, 2, 37, 16, 214, 115, 37, 16, 234, 97, 79, 201, 70, 37, 16, + 237, 127, 202, 98, 37, 16, 33, 144, 248, 71, 37, 16, 33, 133, 248, 71, + 37, 16, 33, 230, 16, 37, 16, 33, 202, 58, 209, 113, 37, 16, 210, 56, 77, + 37, 16, 210, 56, 133, 77, 37, 16, 132, 210, 56, 77, 37, 16, 231, 15, 196, + 77, 37, 16, 231, 15, 235, 125, 37, 16, 4, 232, 251, 37, 16, 237, 243, 37, + 16, 237, 244, 251, 176, 37, 16, 217, 25, 37, 16, 219, 12, 37, 16, 248, + 35, 37, 16, 204, 30, 193, 89, 37, 16, 204, 30, 248, 141, 37, 16, 216, 41, + 37, 16, 216, 42, 248, 141, 37, 16, 204, 24, 193, 89, 37, 16, 204, 24, + 248, 141, 37, 16, 232, 72, 193, 89, 37, 16, 232, 72, 248, 141, 37, 16, + 219, 13, 210, 11, 207, 31, 37, 16, 219, 13, 223, 169, 207, 31, 37, 16, + 248, 36, 207, 31, 37, 16, 204, 30, 207, 31, 37, 16, 216, 42, 207, 31, 37, + 16, 204, 24, 207, 31, 37, 16, 199, 97, 210, 9, 238, 188, 208, 194, 210, + 10, 37, 16, 199, 97, 210, 9, 238, 188, 208, 194, 223, 168, 37, 16, 199, + 97, 210, 9, 238, 188, 208, 194, 210, 11, 236, 250, 37, 16, 199, 97, 223, + 167, 238, 188, 208, 194, 210, 10, 37, 16, 199, 97, 223, 167, 238, 188, + 208, 194, 223, 168, 37, 16, 199, 97, 223, 167, 238, 188, 208, 194, 223, + 169, 236, 250, 37, 16, 199, 97, 223, 167, 238, 188, 208, 194, 223, 169, + 236, 249, 37, 16, 199, 97, 223, 167, 238, 188, 208, 194, 223, 169, 236, + 248, 37, 16, 238, 222, 37, 16, 230, 201, 247, 196, 242, 237, 37, 16, 230, + 201, 233, 178, 242, 237, 37, 16, 51, 250, 122, 37, 16, 195, 39, 37, 16, + 209, 71, 37, 16, 242, 226, 37, 16, 205, 96, 37, 16, 242, 231, 37, 16, + 198, 47, 37, 16, 209, 30, 37, 16, 209, 31, 232, 200, 37, 16, 205, 97, + 232, 200, 37, 16, 198, 48, 207, 28, 37, 16, 209, 248, 200, 232, 37, 16, + 221, 150, 247, 196, 242, 237, 37, 16, 221, 150, 234, 97, 79, 209, 177, + 37, 16, 221, 150, 53, 213, 8, 37, 16, 221, 150, 207, 101, 77, 37, 16, + 221, 150, 193, 87, 213, 8, 37, 16, 221, 150, 132, 213, 8, 37, 16, 221, + 150, 208, 25, 213, 9, 201, 82, 235, 125, 37, 16, 221, 150, 208, 25, 213, + 9, 201, 82, 196, 77, 37, 16, 221, 150, 234, 162, 213, 9, 201, 82, 235, + 125, 37, 16, 221, 150, 234, 162, 213, 9, 201, 82, 196, 77, 37, 16, 221, + 150, 232, 209, 56, 37, 16, 202, 12, 37, 16, 221, 33, 35, 195, 23, 213, + 12, 200, 123, 35, 195, 23, 213, 12, 200, 112, 35, 195, 23, 213, 12, 200, + 102, 35, 195, 23, 213, 12, 200, 95, 35, 195, 23, 213, 12, 200, 87, 35, + 195, 23, 213, 12, 200, 81, 35, 195, 23, 213, 12, 200, 80, 35, 195, 23, + 213, 12, 200, 79, 35, 195, 23, 213, 12, 200, 78, 35, 195, 23, 213, 12, + 200, 122, 35, 195, 23, 213, 12, 200, 121, 35, 195, 23, 213, 12, 200, 120, + 35, 195, 23, 213, 12, 200, 119, 35, 195, 23, 213, 12, 200, 118, 35, 195, + 23, 213, 12, 200, 117, 35, 195, 23, 213, 12, 200, 116, 35, 195, 23, 213, + 12, 200, 115, 35, 195, 23, 213, 12, 200, 114, 35, 195, 23, 213, 12, 200, + 113, 35, 195, 23, 213, 12, 200, 111, 35, 195, 23, 213, 12, 200, 110, 35, + 195, 23, 213, 12, 200, 109, 35, 195, 23, 213, 12, 200, 108, 35, 195, 23, + 213, 12, 200, 107, 35, 195, 23, 213, 12, 200, 86, 35, 195, 23, 213, 12, + 200, 85, 35, 195, 23, 213, 12, 200, 84, 35, 195, 23, 213, 12, 200, 83, + 35, 195, 23, 213, 12, 200, 82, 35, 223, 118, 213, 12, 200, 123, 35, 223, + 118, 213, 12, 200, 112, 35, 223, 118, 213, 12, 200, 95, 35, 223, 118, + 213, 12, 200, 87, 35, 223, 118, 213, 12, 200, 80, 35, 223, 118, 213, 12, + 200, 79, 35, 223, 118, 213, 12, 200, 121, 35, 223, 118, 213, 12, 200, + 120, 35, 223, 118, 213, 12, 200, 119, 35, 223, 118, 213, 12, 200, 118, + 35, 223, 118, 213, 12, 200, 115, 35, 223, 118, 213, 12, 200, 114, 35, + 223, 118, 213, 12, 200, 113, 35, 223, 118, 213, 12, 200, 108, 35, 223, + 118, 213, 12, 200, 107, 35, 223, 118, 213, 12, 200, 106, 35, 223, 118, + 213, 12, 200, 105, 35, 223, 118, 213, 12, 200, 104, 35, 223, 118, 213, + 12, 200, 103, 35, 223, 118, 213, 12, 200, 101, 35, 223, 118, 213, 12, + 200, 100, 35, 223, 118, 213, 12, 200, 99, 35, 223, 118, 213, 12, 200, 98, + 35, 223, 118, 213, 12, 200, 97, 35, 223, 118, 213, 12, 200, 96, 35, 223, + 118, 213, 12, 200, 94, 35, 223, 118, 213, 12, 200, 93, 35, 223, 118, 213, + 12, 200, 92, 35, 223, 118, 213, 12, 200, 91, 35, 223, 118, 213, 12, 200, + 90, 35, 223, 118, 213, 12, 200, 89, 35, 223, 118, 213, 12, 200, 88, 35, + 223, 118, 213, 12, 200, 86, 35, 223, 118, 213, 12, 200, 85, 35, 223, 118, + 213, 12, 200, 84, 35, 223, 118, 213, 12, 200, 83, 35, 223, 118, 213, 12, + 200, 82, 33, 35, 37, 197, 221, 33, 35, 37, 199, 65, 33, 35, 37, 210, 24, + 35, 37, 219, 208, 222, 95, 212, 136, 191, 77, 222, 95, 212, 136, 107, + 222, 95, 212, 136, 109, 222, 95, 212, 136, 138, 222, 95, 212, 136, 134, + 222, 95, 212, 136, 150, 222, 95, 212, 136, 169, 222, 95, 212, 136, 175, + 222, 95, 212, 136, 171, 222, 95, 212, 136, 178, 222, 95, 212, 136, 199, + 95, 222, 95, 212, 136, 234, 129, 222, 95, 212, 136, 197, 37, 222, 95, + 212, 136, 198, 251, 222, 95, 212, 136, 232, 124, 222, 95, 212, 136, 233, + 21, 222, 95, 212, 136, 202, 131, 222, 95, 212, 136, 203, 245, 222, 95, + 212, 136, 234, 163, 222, 95, 212, 136, 213, 173, 217, 22, 212, 136, 191, + 77, 217, 22, 212, 136, 107, 217, 22, 212, 136, 109, 217, 22, 212, 136, + 138, 217, 22, 212, 136, 134, 217, 22, 212, 136, 150, 217, 22, 212, 136, + 169, 217, 22, 212, 136, 175, 217, 22, 212, 136, 171, 217, 22, 212, 136, + 178, 217, 22, 212, 136, 199, 95, 217, 22, 212, 136, 234, 129, 217, 22, + 212, 136, 197, 37, 217, 22, 212, 136, 198, 251, 217, 22, 212, 136, 232, + 124, 217, 22, 212, 136, 233, 21, 217, 22, 212, 136, 202, 131, 217, 22, + 212, 136, 203, 245, 217, 22, 212, 136, 234, 163, 217, 22, 212, 136, 213, + 173, 215, 223, 40, 234, 209, 237, 8, 40, 229, 220, 234, 209, 237, 8, 40, + 228, 147, 234, 209, 237, 8, 40, 234, 208, 229, 221, 237, 8, 40, 234, 208, + 228, 146, 237, 8, 40, 234, 209, 199, 67, 40, 247, 23, 199, 67, 40, 232, + 82, 243, 12, 199, 67, 40, 216, 32, 199, 67, 40, 249, 80, 199, 67, 40, + 222, 12, 202, 71, 199, 67, 40, 239, 25, 199, 67, 40, 250, 214, 199, 67, + 40, 211, 64, 199, 67, 40, 248, 47, 211, 16, 199, 67, 40, 237, 129, 211, + 59, 236, 215, 199, 67, 40, 236, 212, 199, 67, 40, 191, 237, 199, 67, 40, + 223, 155, 199, 67, 40, 210, 34, 199, 67, 40, 207, 110, 199, 67, 40, 239, + 37, 199, 67, 40, 229, 8, 249, 148, 199, 67, 40, 193, 171, 199, 67, 40, + 232, 171, 199, 67, 40, 252, 30, 199, 67, 40, 207, 63, 199, 67, 40, 207, + 35, 199, 67, 40, 234, 207, 199, 67, 40, 222, 187, 199, 67, 40, 239, 32, + 199, 67, 40, 234, 95, 199, 67, 40, 235, 61, 199, 67, 40, 246, 246, 199, + 67, 40, 237, 139, 199, 67, 40, 28, 207, 34, 199, 67, 40, 210, 213, 199, + 67, 40, 219, 212, 199, 67, 40, 242, 219, 199, 67, 40, 221, 138, 199, 67, + 40, 231, 191, 199, 67, 40, 201, 40, 199, 67, 40, 208, 142, 199, 67, 40, + 232, 81, 199, 67, 40, 207, 36, 199, 67, 40, 219, 253, 211, 59, 216, 4, + 199, 67, 40, 207, 32, 199, 67, 40, 230, 254, 119, 216, 208, 199, 67, 40, + 234, 98, 199, 67, 40, 201, 57, 199, 67, 40, 230, 204, 199, 67, 40, 234, + 88, 199, 67, 40, 210, 85, 199, 67, 40, 206, 178, 199, 67, 40, 232, 198, + 199, 67, 40, 195, 163, 211, 59, 193, 147, 199, 67, 40, 239, 42, 199, 67, + 40, 216, 229, 199, 67, 40, 233, 252, 199, 67, 40, 196, 88, 199, 67, 40, + 236, 251, 199, 67, 40, 242, 221, 215, 181, 199, 67, 40, 230, 173, 199, + 67, 40, 231, 192, 223, 164, 199, 67, 40, 217, 34, 199, 67, 40, 252, 56, + 199, 67, 40, 234, 114, 199, 67, 40, 235, 129, 199, 67, 40, 193, 145, 199, + 67, 40, 202, 166, 199, 67, 40, 223, 128, 199, 67, 40, 237, 95, 199, 67, + 40, 237, 221, 199, 67, 40, 236, 247, 199, 67, 40, 233, 215, 199, 67, 40, + 203, 241, 199, 67, 40, 201, 61, 199, 67, 40, 230, 18, 199, 67, 40, 242, + 68, 199, 67, 40, 242, 216, 199, 67, 40, 233, 90, 199, 67, 40, 251, 250, + 199, 67, 40, 242, 67, 199, 67, 40, 211, 107, 199, 34, 195, 138, 199, 67, + 40, 237, 17, 199, 67, 40, 220, 115, 199, 67, 40, 232, 133, 238, 246, 206, + 146, 196, 91, 17, 107, 238, 246, 206, 146, 196, 91, 17, 109, 238, 246, + 206, 146, 196, 91, 17, 138, 238, 246, 206, 146, 196, 91, 17, 134, 238, + 246, 206, 146, 196, 91, 17, 150, 238, 246, 206, 146, 196, 91, 17, 169, + 238, 246, 206, 146, 196, 91, 17, 175, 238, 246, 206, 146, 196, 91, 17, + 171, 238, 246, 206, 146, 196, 91, 17, 178, 238, 246, 206, 146, 199, 91, + 17, 107, 238, 246, 206, 146, 199, 91, 17, 109, 238, 246, 206, 146, 199, + 91, 17, 138, 238, 246, 206, 146, 199, 91, 17, 134, 238, 246, 206, 146, + 199, 91, 17, 150, 238, 246, 206, 146, 199, 91, 17, 169, 238, 246, 206, + 146, 199, 91, 17, 175, 238, 246, 206, 146, 199, 91, 17, 171, 238, 246, + 206, 146, 199, 91, 17, 178, 148, 199, 198, 87, 107, 148, 199, 198, 87, + 109, 148, 199, 198, 87, 138, 148, 199, 198, 87, 134, 148, 199, 198, 87, + 150, 199, 198, 87, 107, 199, 198, 87, 150, 13, 28, 6, 65, 13, 28, 6, 250, + 122, 13, 28, 6, 247, 195, 13, 28, 6, 238, 129, 13, 28, 6, 71, 13, 28, 6, + 233, 177, 13, 28, 6, 232, 53, 13, 28, 6, 230, 118, 13, 28, 6, 68, 13, 28, + 6, 223, 37, 13, 28, 6, 222, 154, 13, 28, 6, 172, 13, 28, 6, 218, 170, 13, + 28, 6, 215, 63, 13, 28, 6, 74, 13, 28, 6, 210, 238, 13, 28, 6, 208, 106, + 13, 28, 6, 146, 13, 28, 6, 206, 9, 13, 28, 6, 200, 43, 13, 28, 6, 66, 13, + 28, 6, 196, 12, 13, 28, 6, 193, 224, 13, 28, 6, 192, 235, 13, 28, 6, 192, + 159, 13, 28, 6, 191, 166, 13, 28, 2, 65, 13, 28, 2, 250, 122, 13, 28, 2, + 247, 195, 13, 28, 2, 238, 129, 13, 28, 2, 71, 13, 28, 2, 233, 177, 13, + 28, 2, 232, 53, 13, 28, 2, 230, 118, 13, 28, 2, 68, 13, 28, 2, 223, 37, + 13, 28, 2, 222, 154, 13, 28, 2, 172, 13, 28, 2, 218, 170, 13, 28, 2, 215, + 63, 13, 28, 2, 74, 13, 28, 2, 210, 238, 13, 28, 2, 208, 106, 13, 28, 2, + 146, 13, 28, 2, 206, 9, 13, 28, 2, 200, 43, 13, 28, 2, 66, 13, 28, 2, + 196, 12, 13, 28, 2, 193, 224, 13, 28, 2, 192, 235, 13, 28, 2, 192, 159, + 13, 28, 2, 191, 166, 13, 43, 6, 65, 13, 43, 6, 250, 122, 13, 43, 6, 247, + 195, 13, 43, 6, 238, 129, 13, 43, 6, 71, 13, 43, 6, 233, 177, 13, 43, 6, + 232, 53, 13, 43, 6, 230, 118, 13, 43, 6, 68, 13, 43, 6, 223, 37, 13, 43, + 6, 222, 154, 13, 43, 6, 172, 13, 43, 6, 218, 170, 13, 43, 6, 215, 63, 13, + 43, 6, 74, 13, 43, 6, 210, 238, 13, 43, 6, 208, 106, 13, 43, 6, 146, 13, + 43, 6, 206, 9, 13, 43, 6, 200, 43, 13, 43, 6, 66, 13, 43, 6, 196, 12, 13, + 43, 6, 193, 224, 13, 43, 6, 192, 235, 13, 43, 6, 192, 159, 13, 43, 6, + 191, 166, 13, 43, 2, 65, 13, 43, 2, 250, 122, 13, 43, 2, 247, 195, 13, + 43, 2, 238, 129, 13, 43, 2, 71, 13, 43, 2, 233, 177, 13, 43, 2, 232, 53, + 13, 43, 2, 68, 13, 43, 2, 223, 37, 13, 43, 2, 222, 154, 13, 43, 2, 172, + 13, 43, 2, 218, 170, 13, 43, 2, 215, 63, 13, 43, 2, 74, 13, 43, 2, 210, + 238, 13, 43, 2, 208, 106, 13, 43, 2, 146, 13, 43, 2, 206, 9, 13, 43, 2, + 200, 43, 13, 43, 2, 66, 13, 43, 2, 196, 12, 13, 43, 2, 193, 224, 13, 43, + 2, 192, 235, 13, 43, 2, 192, 159, 13, 43, 2, 191, 166, 13, 28, 43, 6, 65, + 13, 28, 43, 6, 250, 122, 13, 28, 43, 6, 247, 195, 13, 28, 43, 6, 238, + 129, 13, 28, 43, 6, 71, 13, 28, 43, 6, 233, 177, 13, 28, 43, 6, 232, 53, + 13, 28, 43, 6, 230, 118, 13, 28, 43, 6, 68, 13, 28, 43, 6, 223, 37, 13, + 28, 43, 6, 222, 154, 13, 28, 43, 6, 172, 13, 28, 43, 6, 218, 170, 13, 28, + 43, 6, 215, 63, 13, 28, 43, 6, 74, 13, 28, 43, 6, 210, 238, 13, 28, 43, + 6, 208, 106, 13, 28, 43, 6, 146, 13, 28, 43, 6, 206, 9, 13, 28, 43, 6, + 200, 43, 13, 28, 43, 6, 66, 13, 28, 43, 6, 196, 12, 13, 28, 43, 6, 193, + 224, 13, 28, 43, 6, 192, 235, 13, 28, 43, 6, 192, 159, 13, 28, 43, 6, + 191, 166, 13, 28, 43, 2, 65, 13, 28, 43, 2, 250, 122, 13, 28, 43, 2, 247, + 195, 13, 28, 43, 2, 238, 129, 13, 28, 43, 2, 71, 13, 28, 43, 2, 233, 177, + 13, 28, 43, 2, 232, 53, 13, 28, 43, 2, 230, 118, 13, 28, 43, 2, 68, 13, + 28, 43, 2, 223, 37, 13, 28, 43, 2, 222, 154, 13, 28, 43, 2, 172, 13, 28, + 43, 2, 218, 170, 13, 28, 43, 2, 215, 63, 13, 28, 43, 2, 74, 13, 28, 43, + 2, 210, 238, 13, 28, 43, 2, 208, 106, 13, 28, 43, 2, 146, 13, 28, 43, 2, + 206, 9, 13, 28, 43, 2, 200, 43, 13, 28, 43, 2, 66, 13, 28, 43, 2, 196, + 12, 13, 28, 43, 2, 193, 224, 13, 28, 43, 2, 192, 235, 13, 28, 43, 2, 192, + 159, 13, 28, 43, 2, 191, 166, 13, 27, 6, 65, 13, 27, 6, 247, 195, 13, 27, + 6, 238, 129, 13, 27, 6, 232, 53, 13, 27, 6, 223, 37, 13, 27, 6, 222, 154, + 13, 27, 6, 215, 63, 13, 27, 6, 74, 13, 27, 6, 210, 238, 13, 27, 6, 208, + 106, 13, 27, 6, 206, 9, 13, 27, 6, 200, 43, 13, 27, 6, 66, 13, 27, 6, 196, 12, 13, 27, 6, 193, 224, 13, 27, 6, 192, 235, 13, 27, 6, 192, 159, - 13, 27, 6, 191, 166, 13, 27, 2, 65, 13, 27, 2, 250, 120, 13, 27, 2, 247, - 193, 13, 27, 2, 238, 127, 13, 27, 2, 233, 175, 13, 27, 2, 230, 116, 13, - 27, 2, 68, 13, 27, 2, 223, 35, 13, 27, 2, 222, 152, 13, 27, 2, 172, 13, - 27, 2, 218, 168, 13, 27, 2, 215, 61, 13, 27, 2, 210, 236, 13, 27, 2, 208, - 104, 13, 27, 2, 146, 13, 27, 2, 206, 8, 13, 27, 2, 200, 43, 13, 27, 2, + 13, 27, 6, 191, 166, 13, 27, 2, 65, 13, 27, 2, 250, 122, 13, 27, 2, 247, + 195, 13, 27, 2, 238, 129, 13, 27, 2, 233, 177, 13, 27, 2, 230, 118, 13, + 27, 2, 68, 13, 27, 2, 223, 37, 13, 27, 2, 222, 154, 13, 27, 2, 172, 13, + 27, 2, 218, 170, 13, 27, 2, 215, 63, 13, 27, 2, 210, 238, 13, 27, 2, 208, + 106, 13, 27, 2, 146, 13, 27, 2, 206, 9, 13, 27, 2, 200, 43, 13, 27, 2, 66, 13, 27, 2, 196, 12, 13, 27, 2, 193, 224, 13, 27, 2, 192, 235, 13, 27, 2, 192, 159, 13, 27, 2, 191, 166, 13, 28, 27, 6, 65, 13, 28, 27, 6, 250, - 120, 13, 28, 27, 6, 247, 193, 13, 28, 27, 6, 238, 127, 13, 28, 27, 6, 71, - 13, 28, 27, 6, 233, 175, 13, 28, 27, 6, 232, 51, 13, 28, 27, 6, 230, 116, - 13, 28, 27, 6, 68, 13, 28, 27, 6, 223, 35, 13, 28, 27, 6, 222, 152, 13, - 28, 27, 6, 172, 13, 28, 27, 6, 218, 168, 13, 28, 27, 6, 215, 61, 13, 28, - 27, 6, 74, 13, 28, 27, 6, 210, 236, 13, 28, 27, 6, 208, 104, 13, 28, 27, - 6, 146, 13, 28, 27, 6, 206, 8, 13, 28, 27, 6, 200, 43, 13, 28, 27, 6, 66, + 122, 13, 28, 27, 6, 247, 195, 13, 28, 27, 6, 238, 129, 13, 28, 27, 6, 71, + 13, 28, 27, 6, 233, 177, 13, 28, 27, 6, 232, 53, 13, 28, 27, 6, 230, 118, + 13, 28, 27, 6, 68, 13, 28, 27, 6, 223, 37, 13, 28, 27, 6, 222, 154, 13, + 28, 27, 6, 172, 13, 28, 27, 6, 218, 170, 13, 28, 27, 6, 215, 63, 13, 28, + 27, 6, 74, 13, 28, 27, 6, 210, 238, 13, 28, 27, 6, 208, 106, 13, 28, 27, + 6, 146, 13, 28, 27, 6, 206, 9, 13, 28, 27, 6, 200, 43, 13, 28, 27, 6, 66, 13, 28, 27, 6, 196, 12, 13, 28, 27, 6, 193, 224, 13, 28, 27, 6, 192, 235, 13, 28, 27, 6, 192, 159, 13, 28, 27, 6, 191, 166, 13, 28, 27, 2, 65, 13, - 28, 27, 2, 250, 120, 13, 28, 27, 2, 247, 193, 13, 28, 27, 2, 238, 127, - 13, 28, 27, 2, 71, 13, 28, 27, 2, 233, 175, 13, 28, 27, 2, 232, 51, 13, - 28, 27, 2, 230, 116, 13, 28, 27, 2, 68, 13, 28, 27, 2, 223, 35, 13, 28, - 27, 2, 222, 152, 13, 28, 27, 2, 172, 13, 28, 27, 2, 218, 168, 13, 28, 27, - 2, 215, 61, 13, 28, 27, 2, 74, 13, 28, 27, 2, 210, 236, 13, 28, 27, 2, - 208, 104, 13, 28, 27, 2, 146, 13, 28, 27, 2, 206, 8, 13, 28, 27, 2, 200, + 28, 27, 2, 250, 122, 13, 28, 27, 2, 247, 195, 13, 28, 27, 2, 238, 129, + 13, 28, 27, 2, 71, 13, 28, 27, 2, 233, 177, 13, 28, 27, 2, 232, 53, 13, + 28, 27, 2, 230, 118, 13, 28, 27, 2, 68, 13, 28, 27, 2, 223, 37, 13, 28, + 27, 2, 222, 154, 13, 28, 27, 2, 172, 13, 28, 27, 2, 218, 170, 13, 28, 27, + 2, 215, 63, 13, 28, 27, 2, 74, 13, 28, 27, 2, 210, 238, 13, 28, 27, 2, + 208, 106, 13, 28, 27, 2, 146, 13, 28, 27, 2, 206, 9, 13, 28, 27, 2, 200, 43, 13, 28, 27, 2, 66, 13, 28, 27, 2, 196, 12, 13, 28, 27, 2, 193, 224, 13, 28, 27, 2, 192, 235, 13, 28, 27, 2, 192, 159, 13, 28, 27, 2, 191, - 166, 13, 232, 115, 6, 65, 13, 232, 115, 6, 250, 120, 13, 232, 115, 6, - 238, 127, 13, 232, 115, 6, 71, 13, 232, 115, 6, 233, 175, 13, 232, 115, - 6, 232, 51, 13, 232, 115, 6, 223, 35, 13, 232, 115, 6, 222, 152, 13, 232, - 115, 6, 172, 13, 232, 115, 6, 218, 168, 13, 232, 115, 6, 215, 61, 13, - 232, 115, 6, 74, 13, 232, 115, 6, 210, 236, 13, 232, 115, 6, 208, 104, - 13, 232, 115, 6, 206, 8, 13, 232, 115, 6, 200, 43, 13, 232, 115, 6, 66, - 13, 232, 115, 6, 196, 12, 13, 232, 115, 6, 193, 224, 13, 232, 115, 6, - 192, 235, 13, 232, 115, 6, 192, 159, 13, 232, 115, 2, 65, 13, 232, 115, - 2, 250, 120, 13, 232, 115, 2, 247, 193, 13, 232, 115, 2, 238, 127, 13, - 232, 115, 2, 71, 13, 232, 115, 2, 233, 175, 13, 232, 115, 2, 232, 51, 13, - 232, 115, 2, 230, 116, 13, 232, 115, 2, 68, 13, 232, 115, 2, 223, 35, 13, - 232, 115, 2, 222, 152, 13, 232, 115, 2, 172, 13, 232, 115, 2, 218, 168, - 13, 232, 115, 2, 215, 61, 13, 232, 115, 2, 74, 13, 232, 115, 2, 210, 236, - 13, 232, 115, 2, 208, 104, 13, 232, 115, 2, 146, 13, 232, 115, 2, 206, 8, - 13, 232, 115, 2, 200, 43, 13, 232, 115, 2, 66, 13, 232, 115, 2, 196, 12, - 13, 232, 115, 2, 193, 224, 13, 232, 115, 2, 192, 235, 13, 232, 115, 2, - 192, 159, 13, 232, 115, 2, 191, 166, 13, 235, 129, 6, 65, 13, 235, 129, - 6, 250, 120, 13, 235, 129, 6, 238, 127, 13, 235, 129, 6, 71, 13, 235, - 129, 6, 233, 175, 13, 235, 129, 6, 232, 51, 13, 235, 129, 6, 68, 13, 235, - 129, 6, 223, 35, 13, 235, 129, 6, 222, 152, 13, 235, 129, 6, 172, 13, - 235, 129, 6, 218, 168, 13, 235, 129, 6, 74, 13, 235, 129, 6, 206, 8, 13, - 235, 129, 6, 200, 43, 13, 235, 129, 6, 66, 13, 235, 129, 6, 196, 12, 13, - 235, 129, 6, 193, 224, 13, 235, 129, 6, 192, 235, 13, 235, 129, 6, 192, - 159, 13, 235, 129, 2, 65, 13, 235, 129, 2, 250, 120, 13, 235, 129, 2, - 247, 193, 13, 235, 129, 2, 238, 127, 13, 235, 129, 2, 71, 13, 235, 129, - 2, 233, 175, 13, 235, 129, 2, 232, 51, 13, 235, 129, 2, 230, 116, 13, - 235, 129, 2, 68, 13, 235, 129, 2, 223, 35, 13, 235, 129, 2, 222, 152, 13, - 235, 129, 2, 172, 13, 235, 129, 2, 218, 168, 13, 235, 129, 2, 215, 61, - 13, 235, 129, 2, 74, 13, 235, 129, 2, 210, 236, 13, 235, 129, 2, 208, - 104, 13, 235, 129, 2, 146, 13, 235, 129, 2, 206, 8, 13, 235, 129, 2, 200, - 43, 13, 235, 129, 2, 66, 13, 235, 129, 2, 196, 12, 13, 235, 129, 2, 193, - 224, 13, 235, 129, 2, 192, 235, 13, 235, 129, 2, 192, 159, 13, 235, 129, - 2, 191, 166, 13, 28, 232, 115, 6, 65, 13, 28, 232, 115, 6, 250, 120, 13, - 28, 232, 115, 6, 247, 193, 13, 28, 232, 115, 6, 238, 127, 13, 28, 232, - 115, 6, 71, 13, 28, 232, 115, 6, 233, 175, 13, 28, 232, 115, 6, 232, 51, - 13, 28, 232, 115, 6, 230, 116, 13, 28, 232, 115, 6, 68, 13, 28, 232, 115, - 6, 223, 35, 13, 28, 232, 115, 6, 222, 152, 13, 28, 232, 115, 6, 172, 13, - 28, 232, 115, 6, 218, 168, 13, 28, 232, 115, 6, 215, 61, 13, 28, 232, - 115, 6, 74, 13, 28, 232, 115, 6, 210, 236, 13, 28, 232, 115, 6, 208, 104, - 13, 28, 232, 115, 6, 146, 13, 28, 232, 115, 6, 206, 8, 13, 28, 232, 115, - 6, 200, 43, 13, 28, 232, 115, 6, 66, 13, 28, 232, 115, 6, 196, 12, 13, - 28, 232, 115, 6, 193, 224, 13, 28, 232, 115, 6, 192, 235, 13, 28, 232, - 115, 6, 192, 159, 13, 28, 232, 115, 6, 191, 166, 13, 28, 232, 115, 2, 65, - 13, 28, 232, 115, 2, 250, 120, 13, 28, 232, 115, 2, 247, 193, 13, 28, - 232, 115, 2, 238, 127, 13, 28, 232, 115, 2, 71, 13, 28, 232, 115, 2, 233, - 175, 13, 28, 232, 115, 2, 232, 51, 13, 28, 232, 115, 2, 230, 116, 13, 28, - 232, 115, 2, 68, 13, 28, 232, 115, 2, 223, 35, 13, 28, 232, 115, 2, 222, - 152, 13, 28, 232, 115, 2, 172, 13, 28, 232, 115, 2, 218, 168, 13, 28, - 232, 115, 2, 215, 61, 13, 28, 232, 115, 2, 74, 13, 28, 232, 115, 2, 210, - 236, 13, 28, 232, 115, 2, 208, 104, 13, 28, 232, 115, 2, 146, 13, 28, - 232, 115, 2, 206, 8, 13, 28, 232, 115, 2, 200, 43, 13, 28, 232, 115, 2, - 66, 13, 28, 232, 115, 2, 196, 12, 13, 28, 232, 115, 2, 193, 224, 13, 28, - 232, 115, 2, 192, 235, 13, 28, 232, 115, 2, 192, 159, 13, 28, 232, 115, - 2, 191, 166, 13, 49, 6, 65, 13, 49, 6, 250, 120, 13, 49, 6, 247, 193, 13, - 49, 6, 238, 127, 13, 49, 6, 71, 13, 49, 6, 233, 175, 13, 49, 6, 232, 51, - 13, 49, 6, 230, 116, 13, 49, 6, 68, 13, 49, 6, 223, 35, 13, 49, 6, 222, - 152, 13, 49, 6, 172, 13, 49, 6, 218, 168, 13, 49, 6, 215, 61, 13, 49, 6, - 74, 13, 49, 6, 210, 236, 13, 49, 6, 208, 104, 13, 49, 6, 146, 13, 49, 6, - 206, 8, 13, 49, 6, 200, 43, 13, 49, 6, 66, 13, 49, 6, 196, 12, 13, 49, 6, + 166, 13, 232, 117, 6, 65, 13, 232, 117, 6, 250, 122, 13, 232, 117, 6, + 238, 129, 13, 232, 117, 6, 71, 13, 232, 117, 6, 233, 177, 13, 232, 117, + 6, 232, 53, 13, 232, 117, 6, 223, 37, 13, 232, 117, 6, 222, 154, 13, 232, + 117, 6, 172, 13, 232, 117, 6, 218, 170, 13, 232, 117, 6, 215, 63, 13, + 232, 117, 6, 74, 13, 232, 117, 6, 210, 238, 13, 232, 117, 6, 208, 106, + 13, 232, 117, 6, 206, 9, 13, 232, 117, 6, 200, 43, 13, 232, 117, 6, 66, + 13, 232, 117, 6, 196, 12, 13, 232, 117, 6, 193, 224, 13, 232, 117, 6, + 192, 235, 13, 232, 117, 6, 192, 159, 13, 232, 117, 2, 65, 13, 232, 117, + 2, 250, 122, 13, 232, 117, 2, 247, 195, 13, 232, 117, 2, 238, 129, 13, + 232, 117, 2, 71, 13, 232, 117, 2, 233, 177, 13, 232, 117, 2, 232, 53, 13, + 232, 117, 2, 230, 118, 13, 232, 117, 2, 68, 13, 232, 117, 2, 223, 37, 13, + 232, 117, 2, 222, 154, 13, 232, 117, 2, 172, 13, 232, 117, 2, 218, 170, + 13, 232, 117, 2, 215, 63, 13, 232, 117, 2, 74, 13, 232, 117, 2, 210, 238, + 13, 232, 117, 2, 208, 106, 13, 232, 117, 2, 146, 13, 232, 117, 2, 206, 9, + 13, 232, 117, 2, 200, 43, 13, 232, 117, 2, 66, 13, 232, 117, 2, 196, 12, + 13, 232, 117, 2, 193, 224, 13, 232, 117, 2, 192, 235, 13, 232, 117, 2, + 192, 159, 13, 232, 117, 2, 191, 166, 13, 235, 131, 6, 65, 13, 235, 131, + 6, 250, 122, 13, 235, 131, 6, 238, 129, 13, 235, 131, 6, 71, 13, 235, + 131, 6, 233, 177, 13, 235, 131, 6, 232, 53, 13, 235, 131, 6, 68, 13, 235, + 131, 6, 223, 37, 13, 235, 131, 6, 222, 154, 13, 235, 131, 6, 172, 13, + 235, 131, 6, 218, 170, 13, 235, 131, 6, 74, 13, 235, 131, 6, 206, 9, 13, + 235, 131, 6, 200, 43, 13, 235, 131, 6, 66, 13, 235, 131, 6, 196, 12, 13, + 235, 131, 6, 193, 224, 13, 235, 131, 6, 192, 235, 13, 235, 131, 6, 192, + 159, 13, 235, 131, 2, 65, 13, 235, 131, 2, 250, 122, 13, 235, 131, 2, + 247, 195, 13, 235, 131, 2, 238, 129, 13, 235, 131, 2, 71, 13, 235, 131, + 2, 233, 177, 13, 235, 131, 2, 232, 53, 13, 235, 131, 2, 230, 118, 13, + 235, 131, 2, 68, 13, 235, 131, 2, 223, 37, 13, 235, 131, 2, 222, 154, 13, + 235, 131, 2, 172, 13, 235, 131, 2, 218, 170, 13, 235, 131, 2, 215, 63, + 13, 235, 131, 2, 74, 13, 235, 131, 2, 210, 238, 13, 235, 131, 2, 208, + 106, 13, 235, 131, 2, 146, 13, 235, 131, 2, 206, 9, 13, 235, 131, 2, 200, + 43, 13, 235, 131, 2, 66, 13, 235, 131, 2, 196, 12, 13, 235, 131, 2, 193, + 224, 13, 235, 131, 2, 192, 235, 13, 235, 131, 2, 192, 159, 13, 235, 131, + 2, 191, 166, 13, 28, 232, 117, 6, 65, 13, 28, 232, 117, 6, 250, 122, 13, + 28, 232, 117, 6, 247, 195, 13, 28, 232, 117, 6, 238, 129, 13, 28, 232, + 117, 6, 71, 13, 28, 232, 117, 6, 233, 177, 13, 28, 232, 117, 6, 232, 53, + 13, 28, 232, 117, 6, 230, 118, 13, 28, 232, 117, 6, 68, 13, 28, 232, 117, + 6, 223, 37, 13, 28, 232, 117, 6, 222, 154, 13, 28, 232, 117, 6, 172, 13, + 28, 232, 117, 6, 218, 170, 13, 28, 232, 117, 6, 215, 63, 13, 28, 232, + 117, 6, 74, 13, 28, 232, 117, 6, 210, 238, 13, 28, 232, 117, 6, 208, 106, + 13, 28, 232, 117, 6, 146, 13, 28, 232, 117, 6, 206, 9, 13, 28, 232, 117, + 6, 200, 43, 13, 28, 232, 117, 6, 66, 13, 28, 232, 117, 6, 196, 12, 13, + 28, 232, 117, 6, 193, 224, 13, 28, 232, 117, 6, 192, 235, 13, 28, 232, + 117, 6, 192, 159, 13, 28, 232, 117, 6, 191, 166, 13, 28, 232, 117, 2, 65, + 13, 28, 232, 117, 2, 250, 122, 13, 28, 232, 117, 2, 247, 195, 13, 28, + 232, 117, 2, 238, 129, 13, 28, 232, 117, 2, 71, 13, 28, 232, 117, 2, 233, + 177, 13, 28, 232, 117, 2, 232, 53, 13, 28, 232, 117, 2, 230, 118, 13, 28, + 232, 117, 2, 68, 13, 28, 232, 117, 2, 223, 37, 13, 28, 232, 117, 2, 222, + 154, 13, 28, 232, 117, 2, 172, 13, 28, 232, 117, 2, 218, 170, 13, 28, + 232, 117, 2, 215, 63, 13, 28, 232, 117, 2, 74, 13, 28, 232, 117, 2, 210, + 238, 13, 28, 232, 117, 2, 208, 106, 13, 28, 232, 117, 2, 146, 13, 28, + 232, 117, 2, 206, 9, 13, 28, 232, 117, 2, 200, 43, 13, 28, 232, 117, 2, + 66, 13, 28, 232, 117, 2, 196, 12, 13, 28, 232, 117, 2, 193, 224, 13, 28, + 232, 117, 2, 192, 235, 13, 28, 232, 117, 2, 192, 159, 13, 28, 232, 117, + 2, 191, 166, 13, 49, 6, 65, 13, 49, 6, 250, 122, 13, 49, 6, 247, 195, 13, + 49, 6, 238, 129, 13, 49, 6, 71, 13, 49, 6, 233, 177, 13, 49, 6, 232, 53, + 13, 49, 6, 230, 118, 13, 49, 6, 68, 13, 49, 6, 223, 37, 13, 49, 6, 222, + 154, 13, 49, 6, 172, 13, 49, 6, 218, 170, 13, 49, 6, 215, 63, 13, 49, 6, + 74, 13, 49, 6, 210, 238, 13, 49, 6, 208, 106, 13, 49, 6, 146, 13, 49, 6, + 206, 9, 13, 49, 6, 200, 43, 13, 49, 6, 66, 13, 49, 6, 196, 12, 13, 49, 6, 193, 224, 13, 49, 6, 192, 235, 13, 49, 6, 192, 159, 13, 49, 6, 191, 166, - 13, 49, 2, 65, 13, 49, 2, 250, 120, 13, 49, 2, 247, 193, 13, 49, 2, 238, - 127, 13, 49, 2, 71, 13, 49, 2, 233, 175, 13, 49, 2, 232, 51, 13, 49, 2, - 230, 116, 13, 49, 2, 68, 13, 49, 2, 223, 35, 13, 49, 2, 222, 152, 13, 49, - 2, 172, 13, 49, 2, 218, 168, 13, 49, 2, 215, 61, 13, 49, 2, 74, 13, 49, - 2, 210, 236, 13, 49, 2, 208, 104, 13, 49, 2, 146, 13, 49, 2, 206, 8, 13, + 13, 49, 2, 65, 13, 49, 2, 250, 122, 13, 49, 2, 247, 195, 13, 49, 2, 238, + 129, 13, 49, 2, 71, 13, 49, 2, 233, 177, 13, 49, 2, 232, 53, 13, 49, 2, + 230, 118, 13, 49, 2, 68, 13, 49, 2, 223, 37, 13, 49, 2, 222, 154, 13, 49, + 2, 172, 13, 49, 2, 218, 170, 13, 49, 2, 215, 63, 13, 49, 2, 74, 13, 49, + 2, 210, 238, 13, 49, 2, 208, 106, 13, 49, 2, 146, 13, 49, 2, 206, 9, 13, 49, 2, 200, 43, 13, 49, 2, 66, 13, 49, 2, 196, 12, 13, 49, 2, 193, 224, 13, 49, 2, 192, 235, 13, 49, 2, 192, 159, 13, 49, 2, 191, 166, 13, 49, - 28, 6, 65, 13, 49, 28, 6, 250, 120, 13, 49, 28, 6, 247, 193, 13, 49, 28, - 6, 238, 127, 13, 49, 28, 6, 71, 13, 49, 28, 6, 233, 175, 13, 49, 28, 6, - 232, 51, 13, 49, 28, 6, 230, 116, 13, 49, 28, 6, 68, 13, 49, 28, 6, 223, - 35, 13, 49, 28, 6, 222, 152, 13, 49, 28, 6, 172, 13, 49, 28, 6, 218, 168, - 13, 49, 28, 6, 215, 61, 13, 49, 28, 6, 74, 13, 49, 28, 6, 210, 236, 13, - 49, 28, 6, 208, 104, 13, 49, 28, 6, 146, 13, 49, 28, 6, 206, 8, 13, 49, + 28, 6, 65, 13, 49, 28, 6, 250, 122, 13, 49, 28, 6, 247, 195, 13, 49, 28, + 6, 238, 129, 13, 49, 28, 6, 71, 13, 49, 28, 6, 233, 177, 13, 49, 28, 6, + 232, 53, 13, 49, 28, 6, 230, 118, 13, 49, 28, 6, 68, 13, 49, 28, 6, 223, + 37, 13, 49, 28, 6, 222, 154, 13, 49, 28, 6, 172, 13, 49, 28, 6, 218, 170, + 13, 49, 28, 6, 215, 63, 13, 49, 28, 6, 74, 13, 49, 28, 6, 210, 238, 13, + 49, 28, 6, 208, 106, 13, 49, 28, 6, 146, 13, 49, 28, 6, 206, 9, 13, 49, 28, 6, 200, 43, 13, 49, 28, 6, 66, 13, 49, 28, 6, 196, 12, 13, 49, 28, 6, 193, 224, 13, 49, 28, 6, 192, 235, 13, 49, 28, 6, 192, 159, 13, 49, 28, - 6, 191, 166, 13, 49, 28, 2, 65, 13, 49, 28, 2, 250, 120, 13, 49, 28, 2, - 247, 193, 13, 49, 28, 2, 238, 127, 13, 49, 28, 2, 71, 13, 49, 28, 2, 233, - 175, 13, 49, 28, 2, 232, 51, 13, 49, 28, 2, 230, 116, 13, 49, 28, 2, 68, - 13, 49, 28, 2, 223, 35, 13, 49, 28, 2, 222, 152, 13, 49, 28, 2, 172, 13, - 49, 28, 2, 218, 168, 13, 49, 28, 2, 215, 61, 13, 49, 28, 2, 74, 13, 49, - 28, 2, 210, 236, 13, 49, 28, 2, 208, 104, 13, 49, 28, 2, 146, 13, 49, 28, - 2, 206, 8, 13, 49, 28, 2, 200, 43, 13, 49, 28, 2, 66, 13, 49, 28, 2, 196, + 6, 191, 166, 13, 49, 28, 2, 65, 13, 49, 28, 2, 250, 122, 13, 49, 28, 2, + 247, 195, 13, 49, 28, 2, 238, 129, 13, 49, 28, 2, 71, 13, 49, 28, 2, 233, + 177, 13, 49, 28, 2, 232, 53, 13, 49, 28, 2, 230, 118, 13, 49, 28, 2, 68, + 13, 49, 28, 2, 223, 37, 13, 49, 28, 2, 222, 154, 13, 49, 28, 2, 172, 13, + 49, 28, 2, 218, 170, 13, 49, 28, 2, 215, 63, 13, 49, 28, 2, 74, 13, 49, + 28, 2, 210, 238, 13, 49, 28, 2, 208, 106, 13, 49, 28, 2, 146, 13, 49, 28, + 2, 206, 9, 13, 49, 28, 2, 200, 43, 13, 49, 28, 2, 66, 13, 49, 28, 2, 196, 12, 13, 49, 28, 2, 193, 224, 13, 49, 28, 2, 192, 235, 13, 49, 28, 2, 192, - 159, 13, 49, 28, 2, 191, 166, 13, 49, 43, 6, 65, 13, 49, 43, 6, 250, 120, - 13, 49, 43, 6, 247, 193, 13, 49, 43, 6, 238, 127, 13, 49, 43, 6, 71, 13, - 49, 43, 6, 233, 175, 13, 49, 43, 6, 232, 51, 13, 49, 43, 6, 230, 116, 13, - 49, 43, 6, 68, 13, 49, 43, 6, 223, 35, 13, 49, 43, 6, 222, 152, 13, 49, - 43, 6, 172, 13, 49, 43, 6, 218, 168, 13, 49, 43, 6, 215, 61, 13, 49, 43, - 6, 74, 13, 49, 43, 6, 210, 236, 13, 49, 43, 6, 208, 104, 13, 49, 43, 6, - 146, 13, 49, 43, 6, 206, 8, 13, 49, 43, 6, 200, 43, 13, 49, 43, 6, 66, + 159, 13, 49, 28, 2, 191, 166, 13, 49, 43, 6, 65, 13, 49, 43, 6, 250, 122, + 13, 49, 43, 6, 247, 195, 13, 49, 43, 6, 238, 129, 13, 49, 43, 6, 71, 13, + 49, 43, 6, 233, 177, 13, 49, 43, 6, 232, 53, 13, 49, 43, 6, 230, 118, 13, + 49, 43, 6, 68, 13, 49, 43, 6, 223, 37, 13, 49, 43, 6, 222, 154, 13, 49, + 43, 6, 172, 13, 49, 43, 6, 218, 170, 13, 49, 43, 6, 215, 63, 13, 49, 43, + 6, 74, 13, 49, 43, 6, 210, 238, 13, 49, 43, 6, 208, 106, 13, 49, 43, 6, + 146, 13, 49, 43, 6, 206, 9, 13, 49, 43, 6, 200, 43, 13, 49, 43, 6, 66, 13, 49, 43, 6, 196, 12, 13, 49, 43, 6, 193, 224, 13, 49, 43, 6, 192, 235, 13, 49, 43, 6, 192, 159, 13, 49, 43, 6, 191, 166, 13, 49, 43, 2, 65, 13, - 49, 43, 2, 250, 120, 13, 49, 43, 2, 247, 193, 13, 49, 43, 2, 238, 127, - 13, 49, 43, 2, 71, 13, 49, 43, 2, 233, 175, 13, 49, 43, 2, 232, 51, 13, - 49, 43, 2, 230, 116, 13, 49, 43, 2, 68, 13, 49, 43, 2, 223, 35, 13, 49, - 43, 2, 222, 152, 13, 49, 43, 2, 172, 13, 49, 43, 2, 218, 168, 13, 49, 43, - 2, 215, 61, 13, 49, 43, 2, 74, 13, 49, 43, 2, 210, 236, 13, 49, 43, 2, - 208, 104, 13, 49, 43, 2, 146, 13, 49, 43, 2, 206, 8, 13, 49, 43, 2, 200, + 49, 43, 2, 250, 122, 13, 49, 43, 2, 247, 195, 13, 49, 43, 2, 238, 129, + 13, 49, 43, 2, 71, 13, 49, 43, 2, 233, 177, 13, 49, 43, 2, 232, 53, 13, + 49, 43, 2, 230, 118, 13, 49, 43, 2, 68, 13, 49, 43, 2, 223, 37, 13, 49, + 43, 2, 222, 154, 13, 49, 43, 2, 172, 13, 49, 43, 2, 218, 170, 13, 49, 43, + 2, 215, 63, 13, 49, 43, 2, 74, 13, 49, 43, 2, 210, 238, 13, 49, 43, 2, + 208, 106, 13, 49, 43, 2, 146, 13, 49, 43, 2, 206, 9, 13, 49, 43, 2, 200, 43, 13, 49, 43, 2, 66, 13, 49, 43, 2, 196, 12, 13, 49, 43, 2, 193, 224, 13, 49, 43, 2, 192, 235, 13, 49, 43, 2, 192, 159, 13, 49, 43, 2, 191, - 166, 13, 49, 28, 43, 6, 65, 13, 49, 28, 43, 6, 250, 120, 13, 49, 28, 43, - 6, 247, 193, 13, 49, 28, 43, 6, 238, 127, 13, 49, 28, 43, 6, 71, 13, 49, - 28, 43, 6, 233, 175, 13, 49, 28, 43, 6, 232, 51, 13, 49, 28, 43, 6, 230, - 116, 13, 49, 28, 43, 6, 68, 13, 49, 28, 43, 6, 223, 35, 13, 49, 28, 43, - 6, 222, 152, 13, 49, 28, 43, 6, 172, 13, 49, 28, 43, 6, 218, 168, 13, 49, - 28, 43, 6, 215, 61, 13, 49, 28, 43, 6, 74, 13, 49, 28, 43, 6, 210, 236, - 13, 49, 28, 43, 6, 208, 104, 13, 49, 28, 43, 6, 146, 13, 49, 28, 43, 6, - 206, 8, 13, 49, 28, 43, 6, 200, 43, 13, 49, 28, 43, 6, 66, 13, 49, 28, + 166, 13, 49, 28, 43, 6, 65, 13, 49, 28, 43, 6, 250, 122, 13, 49, 28, 43, + 6, 247, 195, 13, 49, 28, 43, 6, 238, 129, 13, 49, 28, 43, 6, 71, 13, 49, + 28, 43, 6, 233, 177, 13, 49, 28, 43, 6, 232, 53, 13, 49, 28, 43, 6, 230, + 118, 13, 49, 28, 43, 6, 68, 13, 49, 28, 43, 6, 223, 37, 13, 49, 28, 43, + 6, 222, 154, 13, 49, 28, 43, 6, 172, 13, 49, 28, 43, 6, 218, 170, 13, 49, + 28, 43, 6, 215, 63, 13, 49, 28, 43, 6, 74, 13, 49, 28, 43, 6, 210, 238, + 13, 49, 28, 43, 6, 208, 106, 13, 49, 28, 43, 6, 146, 13, 49, 28, 43, 6, + 206, 9, 13, 49, 28, 43, 6, 200, 43, 13, 49, 28, 43, 6, 66, 13, 49, 28, 43, 6, 196, 12, 13, 49, 28, 43, 6, 193, 224, 13, 49, 28, 43, 6, 192, 235, 13, 49, 28, 43, 6, 192, 159, 13, 49, 28, 43, 6, 191, 166, 13, 49, 28, 43, - 2, 65, 13, 49, 28, 43, 2, 250, 120, 13, 49, 28, 43, 2, 247, 193, 13, 49, - 28, 43, 2, 238, 127, 13, 49, 28, 43, 2, 71, 13, 49, 28, 43, 2, 233, 175, - 13, 49, 28, 43, 2, 232, 51, 13, 49, 28, 43, 2, 230, 116, 13, 49, 28, 43, - 2, 68, 13, 49, 28, 43, 2, 223, 35, 13, 49, 28, 43, 2, 222, 152, 13, 49, - 28, 43, 2, 172, 13, 49, 28, 43, 2, 218, 168, 13, 49, 28, 43, 2, 215, 61, - 13, 49, 28, 43, 2, 74, 13, 49, 28, 43, 2, 210, 236, 13, 49, 28, 43, 2, - 208, 104, 13, 49, 28, 43, 2, 146, 13, 49, 28, 43, 2, 206, 8, 13, 49, 28, + 2, 65, 13, 49, 28, 43, 2, 250, 122, 13, 49, 28, 43, 2, 247, 195, 13, 49, + 28, 43, 2, 238, 129, 13, 49, 28, 43, 2, 71, 13, 49, 28, 43, 2, 233, 177, + 13, 49, 28, 43, 2, 232, 53, 13, 49, 28, 43, 2, 230, 118, 13, 49, 28, 43, + 2, 68, 13, 49, 28, 43, 2, 223, 37, 13, 49, 28, 43, 2, 222, 154, 13, 49, + 28, 43, 2, 172, 13, 49, 28, 43, 2, 218, 170, 13, 49, 28, 43, 2, 215, 63, + 13, 49, 28, 43, 2, 74, 13, 49, 28, 43, 2, 210, 238, 13, 49, 28, 43, 2, + 208, 106, 13, 49, 28, 43, 2, 146, 13, 49, 28, 43, 2, 206, 9, 13, 49, 28, 43, 2, 200, 43, 13, 49, 28, 43, 2, 66, 13, 49, 28, 43, 2, 196, 12, 13, 49, 28, 43, 2, 193, 224, 13, 49, 28, 43, 2, 192, 235, 13, 49, 28, 43, 2, - 192, 159, 13, 49, 28, 43, 2, 191, 166, 13, 215, 217, 6, 65, 13, 215, 217, - 6, 250, 120, 13, 215, 217, 6, 247, 193, 13, 215, 217, 6, 238, 127, 13, - 215, 217, 6, 71, 13, 215, 217, 6, 233, 175, 13, 215, 217, 6, 232, 51, 13, - 215, 217, 6, 230, 116, 13, 215, 217, 6, 68, 13, 215, 217, 6, 223, 35, 13, - 215, 217, 6, 222, 152, 13, 215, 217, 6, 172, 13, 215, 217, 6, 218, 168, - 13, 215, 217, 6, 215, 61, 13, 215, 217, 6, 74, 13, 215, 217, 6, 210, 236, - 13, 215, 217, 6, 208, 104, 13, 215, 217, 6, 146, 13, 215, 217, 6, 206, 8, - 13, 215, 217, 6, 200, 43, 13, 215, 217, 6, 66, 13, 215, 217, 6, 196, 12, - 13, 215, 217, 6, 193, 224, 13, 215, 217, 6, 192, 235, 13, 215, 217, 6, - 192, 159, 13, 215, 217, 6, 191, 166, 13, 215, 217, 2, 65, 13, 215, 217, - 2, 250, 120, 13, 215, 217, 2, 247, 193, 13, 215, 217, 2, 238, 127, 13, - 215, 217, 2, 71, 13, 215, 217, 2, 233, 175, 13, 215, 217, 2, 232, 51, 13, - 215, 217, 2, 230, 116, 13, 215, 217, 2, 68, 13, 215, 217, 2, 223, 35, 13, - 215, 217, 2, 222, 152, 13, 215, 217, 2, 172, 13, 215, 217, 2, 218, 168, - 13, 215, 217, 2, 215, 61, 13, 215, 217, 2, 74, 13, 215, 217, 2, 210, 236, - 13, 215, 217, 2, 208, 104, 13, 215, 217, 2, 146, 13, 215, 217, 2, 206, 8, - 13, 215, 217, 2, 200, 43, 13, 215, 217, 2, 66, 13, 215, 217, 2, 196, 12, - 13, 215, 217, 2, 193, 224, 13, 215, 217, 2, 192, 235, 13, 215, 217, 2, - 192, 159, 13, 215, 217, 2, 191, 166, 13, 43, 2, 236, 139, 68, 13, 43, 2, - 236, 139, 223, 35, 13, 28, 6, 251, 160, 13, 28, 6, 248, 212, 13, 28, 6, - 231, 211, 13, 28, 6, 237, 106, 13, 28, 6, 234, 47, 13, 28, 6, 191, 76, - 13, 28, 6, 233, 253, 13, 28, 6, 199, 15, 13, 28, 6, 223, 83, 13, 28, 6, - 222, 72, 13, 28, 6, 220, 31, 13, 28, 6, 215, 155, 13, 28, 6, 212, 178, - 13, 28, 6, 192, 207, 13, 28, 6, 211, 107, 13, 28, 6, 209, 185, 13, 28, 6, - 207, 3, 13, 28, 6, 199, 16, 113, 13, 28, 6, 202, 196, 13, 28, 6, 199, - 166, 13, 28, 6, 196, 70, 13, 28, 6, 209, 211, 13, 28, 6, 243, 95, 13, 28, - 6, 208, 176, 13, 28, 6, 211, 110, 13, 28, 214, 245, 13, 28, 2, 251, 160, - 13, 28, 2, 248, 212, 13, 28, 2, 231, 211, 13, 28, 2, 237, 106, 13, 28, 2, - 234, 47, 13, 28, 2, 191, 76, 13, 28, 2, 233, 253, 13, 28, 2, 199, 15, 13, - 28, 2, 223, 83, 13, 28, 2, 222, 72, 13, 28, 2, 220, 31, 13, 28, 2, 215, - 155, 13, 28, 2, 212, 178, 13, 28, 2, 192, 207, 13, 28, 2, 211, 107, 13, - 28, 2, 209, 185, 13, 28, 2, 207, 3, 13, 28, 2, 53, 202, 196, 13, 28, 2, - 202, 196, 13, 28, 2, 199, 166, 13, 28, 2, 196, 70, 13, 28, 2, 209, 211, - 13, 28, 2, 243, 95, 13, 28, 2, 208, 176, 13, 28, 2, 211, 110, 13, 28, - 210, 105, 237, 16, 13, 28, 234, 48, 113, 13, 28, 199, 16, 113, 13, 28, - 222, 73, 113, 13, 28, 209, 212, 113, 13, 28, 207, 4, 113, 13, 28, 209, - 186, 113, 13, 43, 6, 251, 160, 13, 43, 6, 248, 212, 13, 43, 6, 231, 211, - 13, 43, 6, 237, 106, 13, 43, 6, 234, 47, 13, 43, 6, 191, 76, 13, 43, 6, - 233, 253, 13, 43, 6, 199, 15, 13, 43, 6, 223, 83, 13, 43, 6, 222, 72, 13, - 43, 6, 220, 31, 13, 43, 6, 215, 155, 13, 43, 6, 212, 178, 13, 43, 6, 192, - 207, 13, 43, 6, 211, 107, 13, 43, 6, 209, 185, 13, 43, 6, 207, 3, 13, 43, - 6, 199, 16, 113, 13, 43, 6, 202, 196, 13, 43, 6, 199, 166, 13, 43, 6, - 196, 70, 13, 43, 6, 209, 211, 13, 43, 6, 243, 95, 13, 43, 6, 208, 176, - 13, 43, 6, 211, 110, 13, 43, 214, 245, 13, 43, 2, 251, 160, 13, 43, 2, - 248, 212, 13, 43, 2, 231, 211, 13, 43, 2, 237, 106, 13, 43, 2, 234, 47, - 13, 43, 2, 191, 76, 13, 43, 2, 233, 253, 13, 43, 2, 199, 15, 13, 43, 2, - 223, 83, 13, 43, 2, 222, 72, 13, 43, 2, 220, 31, 13, 43, 2, 215, 155, 13, - 43, 2, 212, 178, 13, 43, 2, 192, 207, 13, 43, 2, 211, 107, 13, 43, 2, - 209, 185, 13, 43, 2, 207, 3, 13, 43, 2, 53, 202, 196, 13, 43, 2, 202, - 196, 13, 43, 2, 199, 166, 13, 43, 2, 196, 70, 13, 43, 2, 209, 211, 13, - 43, 2, 243, 95, 13, 43, 2, 208, 176, 13, 43, 2, 211, 110, 13, 43, 210, - 105, 237, 16, 13, 43, 234, 48, 113, 13, 43, 199, 16, 113, 13, 43, 222, - 73, 113, 13, 43, 209, 212, 113, 13, 43, 207, 4, 113, 13, 43, 209, 186, - 113, 13, 28, 43, 6, 251, 160, 13, 28, 43, 6, 248, 212, 13, 28, 43, 6, - 231, 211, 13, 28, 43, 6, 237, 106, 13, 28, 43, 6, 234, 47, 13, 28, 43, 6, - 191, 76, 13, 28, 43, 6, 233, 253, 13, 28, 43, 6, 199, 15, 13, 28, 43, 6, - 223, 83, 13, 28, 43, 6, 222, 72, 13, 28, 43, 6, 220, 31, 13, 28, 43, 6, - 215, 155, 13, 28, 43, 6, 212, 178, 13, 28, 43, 6, 192, 207, 13, 28, 43, - 6, 211, 107, 13, 28, 43, 6, 209, 185, 13, 28, 43, 6, 207, 3, 13, 28, 43, - 6, 199, 16, 113, 13, 28, 43, 6, 202, 196, 13, 28, 43, 6, 199, 166, 13, - 28, 43, 6, 196, 70, 13, 28, 43, 6, 209, 211, 13, 28, 43, 6, 243, 95, 13, - 28, 43, 6, 208, 176, 13, 28, 43, 6, 211, 110, 13, 28, 43, 214, 245, 13, - 28, 43, 2, 251, 160, 13, 28, 43, 2, 248, 212, 13, 28, 43, 2, 231, 211, - 13, 28, 43, 2, 237, 106, 13, 28, 43, 2, 234, 47, 13, 28, 43, 2, 191, 76, - 13, 28, 43, 2, 233, 253, 13, 28, 43, 2, 199, 15, 13, 28, 43, 2, 223, 83, - 13, 28, 43, 2, 222, 72, 13, 28, 43, 2, 220, 31, 13, 28, 43, 2, 215, 155, - 13, 28, 43, 2, 212, 178, 13, 28, 43, 2, 192, 207, 13, 28, 43, 2, 211, - 107, 13, 28, 43, 2, 209, 185, 13, 28, 43, 2, 207, 3, 13, 28, 43, 2, 53, - 202, 196, 13, 28, 43, 2, 202, 196, 13, 28, 43, 2, 199, 166, 13, 28, 43, - 2, 196, 70, 13, 28, 43, 2, 209, 211, 13, 28, 43, 2, 243, 95, 13, 28, 43, - 2, 208, 176, 13, 28, 43, 2, 211, 110, 13, 28, 43, 210, 105, 237, 16, 13, - 28, 43, 234, 48, 113, 13, 28, 43, 199, 16, 113, 13, 28, 43, 222, 73, 113, - 13, 28, 43, 209, 212, 113, 13, 28, 43, 207, 4, 113, 13, 28, 43, 209, 186, - 113, 13, 49, 28, 6, 251, 160, 13, 49, 28, 6, 248, 212, 13, 49, 28, 6, - 231, 211, 13, 49, 28, 6, 237, 106, 13, 49, 28, 6, 234, 47, 13, 49, 28, 6, - 191, 76, 13, 49, 28, 6, 233, 253, 13, 49, 28, 6, 199, 15, 13, 49, 28, 6, - 223, 83, 13, 49, 28, 6, 222, 72, 13, 49, 28, 6, 220, 31, 13, 49, 28, 6, - 215, 155, 13, 49, 28, 6, 212, 178, 13, 49, 28, 6, 192, 207, 13, 49, 28, - 6, 211, 107, 13, 49, 28, 6, 209, 185, 13, 49, 28, 6, 207, 3, 13, 49, 28, - 6, 199, 16, 113, 13, 49, 28, 6, 202, 196, 13, 49, 28, 6, 199, 166, 13, - 49, 28, 6, 196, 70, 13, 49, 28, 6, 209, 211, 13, 49, 28, 6, 243, 95, 13, - 49, 28, 6, 208, 176, 13, 49, 28, 6, 211, 110, 13, 49, 28, 214, 245, 13, - 49, 28, 2, 251, 160, 13, 49, 28, 2, 248, 212, 13, 49, 28, 2, 231, 211, - 13, 49, 28, 2, 237, 106, 13, 49, 28, 2, 234, 47, 13, 49, 28, 2, 191, 76, - 13, 49, 28, 2, 233, 253, 13, 49, 28, 2, 199, 15, 13, 49, 28, 2, 223, 83, - 13, 49, 28, 2, 222, 72, 13, 49, 28, 2, 220, 31, 13, 49, 28, 2, 215, 155, - 13, 49, 28, 2, 212, 178, 13, 49, 28, 2, 192, 207, 13, 49, 28, 2, 211, - 107, 13, 49, 28, 2, 209, 185, 13, 49, 28, 2, 207, 3, 13, 49, 28, 2, 53, - 202, 196, 13, 49, 28, 2, 202, 196, 13, 49, 28, 2, 199, 166, 13, 49, 28, - 2, 196, 70, 13, 49, 28, 2, 209, 211, 13, 49, 28, 2, 243, 95, 13, 49, 28, - 2, 208, 176, 13, 49, 28, 2, 211, 110, 13, 49, 28, 210, 105, 237, 16, 13, - 49, 28, 234, 48, 113, 13, 49, 28, 199, 16, 113, 13, 49, 28, 222, 73, 113, - 13, 49, 28, 209, 212, 113, 13, 49, 28, 207, 4, 113, 13, 49, 28, 209, 186, - 113, 13, 49, 28, 43, 6, 251, 160, 13, 49, 28, 43, 6, 248, 212, 13, 49, - 28, 43, 6, 231, 211, 13, 49, 28, 43, 6, 237, 106, 13, 49, 28, 43, 6, 234, - 47, 13, 49, 28, 43, 6, 191, 76, 13, 49, 28, 43, 6, 233, 253, 13, 49, 28, - 43, 6, 199, 15, 13, 49, 28, 43, 6, 223, 83, 13, 49, 28, 43, 6, 222, 72, - 13, 49, 28, 43, 6, 220, 31, 13, 49, 28, 43, 6, 215, 155, 13, 49, 28, 43, - 6, 212, 178, 13, 49, 28, 43, 6, 192, 207, 13, 49, 28, 43, 6, 211, 107, - 13, 49, 28, 43, 6, 209, 185, 13, 49, 28, 43, 6, 207, 3, 13, 49, 28, 43, - 6, 199, 16, 113, 13, 49, 28, 43, 6, 202, 196, 13, 49, 28, 43, 6, 199, - 166, 13, 49, 28, 43, 6, 196, 70, 13, 49, 28, 43, 6, 209, 211, 13, 49, 28, - 43, 6, 243, 95, 13, 49, 28, 43, 6, 208, 176, 13, 49, 28, 43, 6, 211, 110, - 13, 49, 28, 43, 214, 245, 13, 49, 28, 43, 2, 251, 160, 13, 49, 28, 43, 2, - 248, 212, 13, 49, 28, 43, 2, 231, 211, 13, 49, 28, 43, 2, 237, 106, 13, - 49, 28, 43, 2, 234, 47, 13, 49, 28, 43, 2, 191, 76, 13, 49, 28, 43, 2, - 233, 253, 13, 49, 28, 43, 2, 199, 15, 13, 49, 28, 43, 2, 223, 83, 13, 49, - 28, 43, 2, 222, 72, 13, 49, 28, 43, 2, 220, 31, 13, 49, 28, 43, 2, 215, - 155, 13, 49, 28, 43, 2, 212, 178, 13, 49, 28, 43, 2, 192, 207, 13, 49, - 28, 43, 2, 211, 107, 13, 49, 28, 43, 2, 209, 185, 13, 49, 28, 43, 2, 207, - 3, 13, 49, 28, 43, 2, 53, 202, 196, 13, 49, 28, 43, 2, 202, 196, 13, 49, + 192, 159, 13, 49, 28, 43, 2, 191, 166, 13, 215, 219, 6, 65, 13, 215, 219, + 6, 250, 122, 13, 215, 219, 6, 247, 195, 13, 215, 219, 6, 238, 129, 13, + 215, 219, 6, 71, 13, 215, 219, 6, 233, 177, 13, 215, 219, 6, 232, 53, 13, + 215, 219, 6, 230, 118, 13, 215, 219, 6, 68, 13, 215, 219, 6, 223, 37, 13, + 215, 219, 6, 222, 154, 13, 215, 219, 6, 172, 13, 215, 219, 6, 218, 170, + 13, 215, 219, 6, 215, 63, 13, 215, 219, 6, 74, 13, 215, 219, 6, 210, 238, + 13, 215, 219, 6, 208, 106, 13, 215, 219, 6, 146, 13, 215, 219, 6, 206, 9, + 13, 215, 219, 6, 200, 43, 13, 215, 219, 6, 66, 13, 215, 219, 6, 196, 12, + 13, 215, 219, 6, 193, 224, 13, 215, 219, 6, 192, 235, 13, 215, 219, 6, + 192, 159, 13, 215, 219, 6, 191, 166, 13, 215, 219, 2, 65, 13, 215, 219, + 2, 250, 122, 13, 215, 219, 2, 247, 195, 13, 215, 219, 2, 238, 129, 13, + 215, 219, 2, 71, 13, 215, 219, 2, 233, 177, 13, 215, 219, 2, 232, 53, 13, + 215, 219, 2, 230, 118, 13, 215, 219, 2, 68, 13, 215, 219, 2, 223, 37, 13, + 215, 219, 2, 222, 154, 13, 215, 219, 2, 172, 13, 215, 219, 2, 218, 170, + 13, 215, 219, 2, 215, 63, 13, 215, 219, 2, 74, 13, 215, 219, 2, 210, 238, + 13, 215, 219, 2, 208, 106, 13, 215, 219, 2, 146, 13, 215, 219, 2, 206, 9, + 13, 215, 219, 2, 200, 43, 13, 215, 219, 2, 66, 13, 215, 219, 2, 196, 12, + 13, 215, 219, 2, 193, 224, 13, 215, 219, 2, 192, 235, 13, 215, 219, 2, + 192, 159, 13, 215, 219, 2, 191, 166, 13, 43, 2, 236, 141, 68, 13, 43, 2, + 236, 141, 223, 37, 13, 28, 6, 251, 162, 13, 28, 6, 248, 214, 13, 28, 6, + 231, 213, 13, 28, 6, 237, 108, 13, 28, 6, 234, 49, 13, 28, 6, 191, 76, + 13, 28, 6, 233, 255, 13, 28, 6, 199, 15, 13, 28, 6, 223, 85, 13, 28, 6, + 222, 74, 13, 28, 6, 220, 33, 13, 28, 6, 215, 157, 13, 28, 6, 212, 180, + 13, 28, 6, 192, 207, 13, 28, 6, 211, 109, 13, 28, 6, 209, 187, 13, 28, 6, + 207, 4, 13, 28, 6, 199, 16, 113, 13, 28, 6, 202, 197, 13, 28, 6, 199, + 166, 13, 28, 6, 196, 70, 13, 28, 6, 209, 213, 13, 28, 6, 243, 97, 13, 28, + 6, 208, 178, 13, 28, 6, 211, 112, 13, 28, 214, 247, 13, 28, 2, 251, 162, + 13, 28, 2, 248, 214, 13, 28, 2, 231, 213, 13, 28, 2, 237, 108, 13, 28, 2, + 234, 49, 13, 28, 2, 191, 76, 13, 28, 2, 233, 255, 13, 28, 2, 199, 15, 13, + 28, 2, 223, 85, 13, 28, 2, 222, 74, 13, 28, 2, 220, 33, 13, 28, 2, 215, + 157, 13, 28, 2, 212, 180, 13, 28, 2, 192, 207, 13, 28, 2, 211, 109, 13, + 28, 2, 209, 187, 13, 28, 2, 207, 4, 13, 28, 2, 53, 202, 197, 13, 28, 2, + 202, 197, 13, 28, 2, 199, 166, 13, 28, 2, 196, 70, 13, 28, 2, 209, 213, + 13, 28, 2, 243, 97, 13, 28, 2, 208, 178, 13, 28, 2, 211, 112, 13, 28, + 210, 107, 237, 18, 13, 28, 234, 50, 113, 13, 28, 199, 16, 113, 13, 28, + 222, 75, 113, 13, 28, 209, 214, 113, 13, 28, 207, 5, 113, 13, 28, 209, + 188, 113, 13, 43, 6, 251, 162, 13, 43, 6, 248, 214, 13, 43, 6, 231, 213, + 13, 43, 6, 237, 108, 13, 43, 6, 234, 49, 13, 43, 6, 191, 76, 13, 43, 6, + 233, 255, 13, 43, 6, 199, 15, 13, 43, 6, 223, 85, 13, 43, 6, 222, 74, 13, + 43, 6, 220, 33, 13, 43, 6, 215, 157, 13, 43, 6, 212, 180, 13, 43, 6, 192, + 207, 13, 43, 6, 211, 109, 13, 43, 6, 209, 187, 13, 43, 6, 207, 4, 13, 43, + 6, 199, 16, 113, 13, 43, 6, 202, 197, 13, 43, 6, 199, 166, 13, 43, 6, + 196, 70, 13, 43, 6, 209, 213, 13, 43, 6, 243, 97, 13, 43, 6, 208, 178, + 13, 43, 6, 211, 112, 13, 43, 214, 247, 13, 43, 2, 251, 162, 13, 43, 2, + 248, 214, 13, 43, 2, 231, 213, 13, 43, 2, 237, 108, 13, 43, 2, 234, 49, + 13, 43, 2, 191, 76, 13, 43, 2, 233, 255, 13, 43, 2, 199, 15, 13, 43, 2, + 223, 85, 13, 43, 2, 222, 74, 13, 43, 2, 220, 33, 13, 43, 2, 215, 157, 13, + 43, 2, 212, 180, 13, 43, 2, 192, 207, 13, 43, 2, 211, 109, 13, 43, 2, + 209, 187, 13, 43, 2, 207, 4, 13, 43, 2, 53, 202, 197, 13, 43, 2, 202, + 197, 13, 43, 2, 199, 166, 13, 43, 2, 196, 70, 13, 43, 2, 209, 213, 13, + 43, 2, 243, 97, 13, 43, 2, 208, 178, 13, 43, 2, 211, 112, 13, 43, 210, + 107, 237, 18, 13, 43, 234, 50, 113, 13, 43, 199, 16, 113, 13, 43, 222, + 75, 113, 13, 43, 209, 214, 113, 13, 43, 207, 5, 113, 13, 43, 209, 188, + 113, 13, 28, 43, 6, 251, 162, 13, 28, 43, 6, 248, 214, 13, 28, 43, 6, + 231, 213, 13, 28, 43, 6, 237, 108, 13, 28, 43, 6, 234, 49, 13, 28, 43, 6, + 191, 76, 13, 28, 43, 6, 233, 255, 13, 28, 43, 6, 199, 15, 13, 28, 43, 6, + 223, 85, 13, 28, 43, 6, 222, 74, 13, 28, 43, 6, 220, 33, 13, 28, 43, 6, + 215, 157, 13, 28, 43, 6, 212, 180, 13, 28, 43, 6, 192, 207, 13, 28, 43, + 6, 211, 109, 13, 28, 43, 6, 209, 187, 13, 28, 43, 6, 207, 4, 13, 28, 43, + 6, 199, 16, 113, 13, 28, 43, 6, 202, 197, 13, 28, 43, 6, 199, 166, 13, + 28, 43, 6, 196, 70, 13, 28, 43, 6, 209, 213, 13, 28, 43, 6, 243, 97, 13, + 28, 43, 6, 208, 178, 13, 28, 43, 6, 211, 112, 13, 28, 43, 214, 247, 13, + 28, 43, 2, 251, 162, 13, 28, 43, 2, 248, 214, 13, 28, 43, 2, 231, 213, + 13, 28, 43, 2, 237, 108, 13, 28, 43, 2, 234, 49, 13, 28, 43, 2, 191, 76, + 13, 28, 43, 2, 233, 255, 13, 28, 43, 2, 199, 15, 13, 28, 43, 2, 223, 85, + 13, 28, 43, 2, 222, 74, 13, 28, 43, 2, 220, 33, 13, 28, 43, 2, 215, 157, + 13, 28, 43, 2, 212, 180, 13, 28, 43, 2, 192, 207, 13, 28, 43, 2, 211, + 109, 13, 28, 43, 2, 209, 187, 13, 28, 43, 2, 207, 4, 13, 28, 43, 2, 53, + 202, 197, 13, 28, 43, 2, 202, 197, 13, 28, 43, 2, 199, 166, 13, 28, 43, + 2, 196, 70, 13, 28, 43, 2, 209, 213, 13, 28, 43, 2, 243, 97, 13, 28, 43, + 2, 208, 178, 13, 28, 43, 2, 211, 112, 13, 28, 43, 210, 107, 237, 18, 13, + 28, 43, 234, 50, 113, 13, 28, 43, 199, 16, 113, 13, 28, 43, 222, 75, 113, + 13, 28, 43, 209, 214, 113, 13, 28, 43, 207, 5, 113, 13, 28, 43, 209, 188, + 113, 13, 49, 28, 6, 251, 162, 13, 49, 28, 6, 248, 214, 13, 49, 28, 6, + 231, 213, 13, 49, 28, 6, 237, 108, 13, 49, 28, 6, 234, 49, 13, 49, 28, 6, + 191, 76, 13, 49, 28, 6, 233, 255, 13, 49, 28, 6, 199, 15, 13, 49, 28, 6, + 223, 85, 13, 49, 28, 6, 222, 74, 13, 49, 28, 6, 220, 33, 13, 49, 28, 6, + 215, 157, 13, 49, 28, 6, 212, 180, 13, 49, 28, 6, 192, 207, 13, 49, 28, + 6, 211, 109, 13, 49, 28, 6, 209, 187, 13, 49, 28, 6, 207, 4, 13, 49, 28, + 6, 199, 16, 113, 13, 49, 28, 6, 202, 197, 13, 49, 28, 6, 199, 166, 13, + 49, 28, 6, 196, 70, 13, 49, 28, 6, 209, 213, 13, 49, 28, 6, 243, 97, 13, + 49, 28, 6, 208, 178, 13, 49, 28, 6, 211, 112, 13, 49, 28, 214, 247, 13, + 49, 28, 2, 251, 162, 13, 49, 28, 2, 248, 214, 13, 49, 28, 2, 231, 213, + 13, 49, 28, 2, 237, 108, 13, 49, 28, 2, 234, 49, 13, 49, 28, 2, 191, 76, + 13, 49, 28, 2, 233, 255, 13, 49, 28, 2, 199, 15, 13, 49, 28, 2, 223, 85, + 13, 49, 28, 2, 222, 74, 13, 49, 28, 2, 220, 33, 13, 49, 28, 2, 215, 157, + 13, 49, 28, 2, 212, 180, 13, 49, 28, 2, 192, 207, 13, 49, 28, 2, 211, + 109, 13, 49, 28, 2, 209, 187, 13, 49, 28, 2, 207, 4, 13, 49, 28, 2, 53, + 202, 197, 13, 49, 28, 2, 202, 197, 13, 49, 28, 2, 199, 166, 13, 49, 28, + 2, 196, 70, 13, 49, 28, 2, 209, 213, 13, 49, 28, 2, 243, 97, 13, 49, 28, + 2, 208, 178, 13, 49, 28, 2, 211, 112, 13, 49, 28, 210, 107, 237, 18, 13, + 49, 28, 234, 50, 113, 13, 49, 28, 199, 16, 113, 13, 49, 28, 222, 75, 113, + 13, 49, 28, 209, 214, 113, 13, 49, 28, 207, 5, 113, 13, 49, 28, 209, 188, + 113, 13, 49, 28, 43, 6, 251, 162, 13, 49, 28, 43, 6, 248, 214, 13, 49, + 28, 43, 6, 231, 213, 13, 49, 28, 43, 6, 237, 108, 13, 49, 28, 43, 6, 234, + 49, 13, 49, 28, 43, 6, 191, 76, 13, 49, 28, 43, 6, 233, 255, 13, 49, 28, + 43, 6, 199, 15, 13, 49, 28, 43, 6, 223, 85, 13, 49, 28, 43, 6, 222, 74, + 13, 49, 28, 43, 6, 220, 33, 13, 49, 28, 43, 6, 215, 157, 13, 49, 28, 43, + 6, 212, 180, 13, 49, 28, 43, 6, 192, 207, 13, 49, 28, 43, 6, 211, 109, + 13, 49, 28, 43, 6, 209, 187, 13, 49, 28, 43, 6, 207, 4, 13, 49, 28, 43, + 6, 199, 16, 113, 13, 49, 28, 43, 6, 202, 197, 13, 49, 28, 43, 6, 199, + 166, 13, 49, 28, 43, 6, 196, 70, 13, 49, 28, 43, 6, 209, 213, 13, 49, 28, + 43, 6, 243, 97, 13, 49, 28, 43, 6, 208, 178, 13, 49, 28, 43, 6, 211, 112, + 13, 49, 28, 43, 214, 247, 13, 49, 28, 43, 2, 251, 162, 13, 49, 28, 43, 2, + 248, 214, 13, 49, 28, 43, 2, 231, 213, 13, 49, 28, 43, 2, 237, 108, 13, + 49, 28, 43, 2, 234, 49, 13, 49, 28, 43, 2, 191, 76, 13, 49, 28, 43, 2, + 233, 255, 13, 49, 28, 43, 2, 199, 15, 13, 49, 28, 43, 2, 223, 85, 13, 49, + 28, 43, 2, 222, 74, 13, 49, 28, 43, 2, 220, 33, 13, 49, 28, 43, 2, 215, + 157, 13, 49, 28, 43, 2, 212, 180, 13, 49, 28, 43, 2, 192, 207, 13, 49, + 28, 43, 2, 211, 109, 13, 49, 28, 43, 2, 209, 187, 13, 49, 28, 43, 2, 207, + 4, 13, 49, 28, 43, 2, 53, 202, 197, 13, 49, 28, 43, 2, 202, 197, 13, 49, 28, 43, 2, 199, 166, 13, 49, 28, 43, 2, 196, 70, 13, 49, 28, 43, 2, 209, - 211, 13, 49, 28, 43, 2, 243, 95, 13, 49, 28, 43, 2, 208, 176, 13, 49, 28, - 43, 2, 211, 110, 13, 49, 28, 43, 210, 105, 237, 16, 13, 49, 28, 43, 234, - 48, 113, 13, 49, 28, 43, 199, 16, 113, 13, 49, 28, 43, 222, 73, 113, 13, - 49, 28, 43, 209, 212, 113, 13, 49, 28, 43, 207, 4, 113, 13, 49, 28, 43, - 209, 186, 113, 13, 28, 6, 237, 10, 13, 28, 2, 237, 10, 13, 28, 17, 191, + 213, 13, 49, 28, 43, 2, 243, 97, 13, 49, 28, 43, 2, 208, 178, 13, 49, 28, + 43, 2, 211, 112, 13, 49, 28, 43, 210, 107, 237, 18, 13, 49, 28, 43, 234, + 50, 113, 13, 49, 28, 43, 199, 16, 113, 13, 49, 28, 43, 222, 75, 113, 13, + 49, 28, 43, 209, 214, 113, 13, 49, 28, 43, 207, 5, 113, 13, 49, 28, 43, + 209, 188, 113, 13, 28, 6, 237, 12, 13, 28, 2, 237, 12, 13, 28, 17, 191, 77, 13, 28, 17, 107, 13, 28, 17, 109, 13, 28, 17, 138, 13, 28, 17, 134, - 13, 28, 17, 149, 13, 28, 17, 169, 13, 28, 17, 175, 13, 28, 17, 171, 13, - 28, 17, 178, 13, 235, 129, 17, 191, 77, 13, 235, 129, 17, 107, 13, 235, - 129, 17, 109, 13, 235, 129, 17, 138, 13, 235, 129, 17, 134, 13, 235, 129, - 17, 149, 13, 235, 129, 17, 169, 13, 235, 129, 17, 175, 13, 235, 129, 17, - 171, 13, 235, 129, 17, 178, 13, 49, 17, 191, 77, 13, 49, 17, 107, 13, 49, - 17, 109, 13, 49, 17, 138, 13, 49, 17, 134, 13, 49, 17, 149, 13, 49, 17, + 13, 28, 17, 150, 13, 28, 17, 169, 13, 28, 17, 175, 13, 28, 17, 171, 13, + 28, 17, 178, 13, 235, 131, 17, 191, 77, 13, 235, 131, 17, 107, 13, 235, + 131, 17, 109, 13, 235, 131, 17, 138, 13, 235, 131, 17, 134, 13, 235, 131, + 17, 150, 13, 235, 131, 17, 169, 13, 235, 131, 17, 175, 13, 235, 131, 17, + 171, 13, 235, 131, 17, 178, 13, 49, 17, 191, 77, 13, 49, 17, 107, 13, 49, + 17, 109, 13, 49, 17, 138, 13, 49, 17, 134, 13, 49, 17, 150, 13, 49, 17, 169, 13, 49, 17, 175, 13, 49, 17, 171, 13, 49, 17, 178, 13, 49, 28, 17, 191, 77, 13, 49, 28, 17, 107, 13, 49, 28, 17, 109, 13, 49, 28, 17, 138, - 13, 49, 28, 17, 134, 13, 49, 28, 17, 149, 13, 49, 28, 17, 169, 13, 49, - 28, 17, 175, 13, 49, 28, 17, 171, 13, 49, 28, 17, 178, 13, 215, 217, 17, - 191, 77, 13, 215, 217, 17, 107, 13, 215, 217, 17, 109, 13, 215, 217, 17, - 138, 13, 215, 217, 17, 134, 13, 215, 217, 17, 149, 13, 215, 217, 17, 169, - 13, 215, 217, 17, 175, 13, 215, 217, 17, 171, 13, 215, 217, 17, 178, 24, - 151, 223, 148, 24, 230, 50, 223, 148, 24, 230, 46, 223, 148, 24, 230, 35, - 223, 148, 24, 230, 39, 223, 148, 24, 230, 52, 223, 148, 24, 151, 141, - 248, 223, 24, 230, 50, 141, 248, 223, 24, 151, 176, 196, 105, 141, 248, - 223, 24, 151, 141, 207, 147, 221, 70, 24, 151, 141, 238, 177, 24, 151, - 141, 229, 124, 24, 151, 141, 229, 125, 218, 241, 24, 230, 50, 141, 229, - 126, 24, 151, 141, 216, 84, 24, 230, 50, 141, 216, 84, 24, 151, 141, 82, - 248, 223, 24, 151, 141, 82, 207, 147, 221, 69, 24, 151, 141, 82, 229, - 124, 24, 151, 141, 133, 82, 229, 124, 24, 151, 141, 229, 125, 82, 196, - 77, 24, 151, 141, 82, 239, 46, 24, 151, 141, 82, 239, 47, 141, 248, 223, - 24, 151, 141, 82, 239, 47, 82, 248, 223, 24, 151, 141, 82, 239, 47, 238, - 177, 24, 151, 141, 82, 239, 47, 229, 124, 24, 151, 141, 82, 238, 213, 24, - 230, 50, 141, 82, 238, 213, 24, 151, 82, 248, 224, 139, 223, 148, 24, - 151, 141, 248, 224, 139, 216, 84, 24, 151, 141, 82, 198, 212, 24, 230, - 50, 141, 82, 198, 212, 24, 151, 141, 82, 201, 53, 176, 248, 223, 24, 151, - 141, 82, 248, 224, 176, 201, 52, 24, 151, 141, 82, 176, 248, 223, 24, - 151, 141, 82, 229, 125, 201, 199, 176, 202, 207, 24, 151, 141, 133, 82, - 229, 125, 176, 202, 207, 24, 151, 141, 133, 82, 229, 125, 176, 239, 46, - 24, 151, 141, 229, 125, 82, 133, 176, 202, 207, 24, 151, 141, 82, 133, - 201, 199, 176, 232, 132, 24, 151, 141, 82, 176, 238, 177, 24, 151, 141, - 82, 176, 243, 9, 24, 151, 141, 82, 176, 228, 249, 24, 151, 141, 82, 176, - 229, 124, 24, 151, 176, 248, 210, 141, 82, 201, 52, 24, 151, 141, 82, - 239, 47, 176, 202, 207, 24, 151, 141, 82, 239, 47, 176, 202, 208, 239, - 46, 24, 151, 141, 82, 239, 47, 176, 202, 208, 248, 223, 24, 151, 82, 176, - 228, 250, 141, 196, 77, 24, 151, 141, 176, 228, 250, 82, 196, 77, 24, - 151, 141, 82, 239, 47, 229, 125, 176, 202, 207, 24, 151, 141, 82, 238, - 214, 176, 202, 207, 24, 151, 141, 82, 239, 47, 176, 232, 132, 24, 151, - 141, 82, 239, 47, 238, 178, 176, 232, 132, 24, 151, 82, 176, 238, 178, - 141, 196, 77, 24, 151, 141, 176, 238, 178, 82, 196, 77, 24, 151, 82, 176, - 47, 141, 196, 77, 24, 151, 82, 176, 47, 141, 229, 124, 24, 151, 141, 176, - 251, 114, 211, 15, 82, 196, 77, 24, 151, 141, 176, 251, 114, 223, 163, - 82, 196, 77, 24, 151, 141, 176, 47, 82, 196, 77, 24, 151, 141, 82, 176, - 239, 47, 229, 124, 24, 151, 141, 82, 176, 251, 114, 211, 14, 24, 151, - 141, 82, 176, 251, 113, 24, 151, 82, 176, 251, 114, 211, 15, 141, 196, - 77, 24, 151, 82, 176, 251, 114, 211, 15, 141, 238, 213, 24, 151, 82, 176, - 251, 114, 141, 196, 77, 24, 151, 141, 176, 228, 250, 82, 229, 124, 24, - 230, 41, 232, 128, 232, 247, 24, 230, 41, 232, 128, 232, 248, 248, 223, - 24, 230, 41, 232, 128, 232, 248, 229, 124, 24, 230, 41, 232, 128, 232, - 248, 239, 46, 24, 230, 41, 232, 128, 232, 248, 239, 47, 201, 209, 24, - 230, 48, 232, 128, 232, 248, 239, 46, 24, 151, 232, 128, 232, 248, 239, - 47, 248, 223, 24, 230, 39, 232, 128, 232, 248, 239, 46, 24, 230, 41, 232, - 226, 232, 248, 201, 198, 24, 230, 41, 229, 213, 232, 226, 232, 248, 201, - 198, 24, 230, 41, 232, 226, 232, 248, 201, 199, 232, 128, 248, 223, 24, - 230, 41, 229, 213, 232, 226, 232, 248, 201, 199, 232, 128, 248, 223, 24, - 230, 41, 232, 226, 232, 248, 201, 199, 248, 223, 24, 230, 41, 229, 213, - 232, 226, 232, 248, 201, 199, 248, 223, 24, 230, 41, 232, 226, 232, 248, - 201, 199, 176, 232, 132, 24, 230, 46, 232, 226, 232, 248, 201, 198, 24, - 230, 46, 232, 226, 232, 248, 201, 199, 211, 76, 24, 230, 39, 232, 226, - 232, 248, 201, 199, 211, 76, 24, 230, 35, 232, 226, 232, 248, 201, 198, - 24, 230, 41, 232, 226, 232, 248, 201, 199, 229, 124, 24, 230, 41, 232, - 226, 232, 248, 201, 199, 229, 125, 176, 202, 207, 24, 230, 41, 232, 226, - 232, 248, 201, 199, 229, 125, 213, 44, 198, 212, 24, 230, 40, 24, 230, - 41, 248, 210, 210, 183, 233, 95, 24, 230, 41, 229, 212, 24, 230, 41, 176, - 202, 207, 24, 230, 41, 229, 213, 176, 202, 207, 24, 230, 41, 176, 248, - 223, 24, 230, 41, 176, 232, 132, 24, 230, 41, 201, 210, 141, 176, 202, - 207, 24, 230, 41, 201, 210, 247, 21, 24, 230, 41, 201, 210, 247, 22, 176, - 202, 207, 24, 230, 41, 201, 210, 247, 22, 176, 202, 208, 248, 223, 24, - 230, 41, 201, 210, 219, 82, 24, 230, 47, 24, 230, 48, 176, 202, 207, 24, - 230, 48, 213, 44, 198, 212, 24, 230, 48, 176, 232, 132, 24, 230, 37, 238, - 173, 24, 230, 36, 24, 230, 46, 211, 76, 24, 230, 45, 24, 230, 46, 211, - 77, 176, 202, 207, 24, 230, 46, 176, 202, 207, 24, 230, 46, 211, 77, 213, - 44, 198, 212, 24, 230, 46, 213, 44, 198, 212, 24, 230, 46, 211, 77, 176, - 232, 132, 24, 230, 46, 176, 232, 132, 24, 230, 44, 211, 76, 24, 230, 43, - 24, 230, 49, 24, 230, 34, 24, 230, 35, 176, 202, 207, 24, 230, 35, 213, - 44, 198, 212, 24, 230, 35, 176, 232, 132, 24, 230, 39, 211, 76, 24, 230, - 39, 211, 77, 176, 232, 132, 24, 230, 38, 24, 230, 39, 202, 70, 24, 230, - 39, 211, 77, 176, 202, 207, 24, 230, 39, 176, 202, 207, 24, 230, 39, 211, - 77, 213, 44, 198, 212, 24, 230, 39, 213, 44, 198, 212, 24, 230, 39, 176, - 202, 208, 198, 35, 223, 148, 24, 230, 39, 176, 248, 210, 82, 206, 188, - 24, 230, 51, 24, 151, 141, 82, 206, 188, 24, 230, 50, 141, 82, 206, 188, - 24, 230, 39, 141, 82, 206, 188, 24, 230, 52, 141, 82, 206, 188, 24, 230, - 39, 219, 82, 24, 151, 141, 82, 206, 189, 248, 223, 24, 151, 141, 82, 206, - 189, 239, 46, 24, 230, 39, 141, 82, 206, 189, 239, 46, 24, 151, 219, 83, - 235, 123, 24, 151, 219, 83, 144, 206, 183, 201, 52, 24, 151, 219, 83, - 144, 206, 183, 238, 162, 24, 151, 219, 83, 144, 211, 26, 243, 9, 24, 151, - 219, 83, 196, 77, 24, 151, 176, 196, 105, 219, 83, 196, 77, 24, 230, 50, - 219, 83, 196, 77, 24, 230, 35, 219, 83, 196, 77, 24, 230, 52, 219, 83, - 196, 77, 24, 151, 219, 83, 207, 147, 221, 70, 24, 151, 219, 83, 248, 223, - 24, 151, 219, 83, 198, 36, 198, 212, 24, 151, 219, 83, 198, 212, 24, 230, - 39, 219, 83, 198, 212, 24, 151, 219, 83, 141, 198, 212, 24, 230, 39, 219, - 83, 141, 198, 212, 24, 230, 52, 219, 83, 141, 176, 141, 176, 211, 14, 24, - 230, 52, 219, 83, 141, 176, 141, 198, 212, 24, 151, 219, 83, 223, 148, - 24, 230, 50, 219, 83, 223, 148, 24, 230, 39, 219, 83, 223, 148, 24, 230, - 52, 219, 83, 223, 148, 24, 151, 141, 82, 219, 82, 24, 230, 50, 141, 82, - 219, 82, 24, 230, 39, 141, 82, 219, 82, 24, 230, 39, 206, 188, 24, 230, - 52, 141, 82, 219, 82, 24, 151, 141, 82, 238, 218, 219, 82, 24, 230, 50, - 141, 82, 238, 218, 219, 82, 24, 151, 206, 189, 235, 123, 24, 230, 39, - 206, 189, 144, 141, 176, 228, 251, 216, 84, 24, 230, 52, 206, 189, 144, - 82, 176, 141, 238, 217, 24, 151, 206, 189, 196, 77, 24, 151, 206, 189, - 207, 147, 221, 70, 24, 151, 206, 189, 219, 82, 24, 230, 50, 206, 189, - 219, 82, 24, 230, 35, 206, 189, 219, 82, 24, 230, 52, 206, 189, 219, 82, - 24, 151, 206, 189, 216, 84, 24, 151, 206, 189, 82, 239, 46, 24, 151, 206, - 189, 82, 207, 147, 221, 69, 24, 151, 206, 189, 223, 148, 24, 151, 206, - 189, 198, 212, 24, 230, 37, 206, 189, 198, 212, 24, 151, 141, 206, 189, - 219, 82, 24, 230, 50, 141, 206, 189, 219, 82, 24, 230, 44, 141, 206, 189, - 219, 83, 211, 104, 24, 230, 37, 141, 206, 189, 219, 83, 211, 14, 24, 230, - 37, 141, 206, 189, 219, 83, 223, 162, 24, 230, 37, 141, 206, 189, 219, - 83, 196, 104, 24, 230, 46, 141, 206, 189, 219, 82, 24, 230, 39, 141, 206, - 189, 219, 82, 24, 230, 52, 141, 206, 189, 219, 83, 211, 14, 24, 230, 52, - 141, 206, 189, 219, 82, 24, 151, 82, 235, 123, 24, 230, 39, 216, 84, 24, - 151, 82, 196, 77, 24, 230, 50, 82, 196, 77, 24, 151, 82, 207, 147, 221, - 70, 24, 151, 82, 133, 176, 202, 207, 24, 230, 37, 82, 198, 212, 24, 151, - 82, 176, 219, 82, 24, 151, 82, 219, 82, 24, 151, 82, 206, 189, 219, 82, - 24, 230, 50, 82, 206, 189, 219, 82, 24, 230, 44, 82, 206, 189, 219, 83, - 211, 104, 24, 230, 46, 82, 206, 189, 219, 82, 24, 230, 39, 82, 206, 189, - 219, 82, 24, 230, 52, 82, 206, 189, 219, 83, 211, 14, 24, 230, 52, 82, - 206, 189, 219, 83, 223, 162, 24, 230, 52, 82, 206, 189, 219, 82, 24, 230, - 50, 82, 206, 189, 219, 83, 248, 223, 24, 230, 48, 82, 206, 189, 219, 83, - 239, 46, 24, 230, 48, 82, 206, 189, 219, 83, 239, 47, 202, 207, 24, 230, - 37, 82, 206, 189, 219, 83, 239, 47, 211, 14, 24, 230, 37, 82, 206, 189, - 219, 83, 239, 47, 223, 162, 24, 230, 37, 82, 206, 189, 219, 83, 239, 46, - 24, 230, 39, 141, 229, 124, 24, 151, 141, 176, 202, 207, 24, 230, 39, - 141, 176, 202, 207, 24, 151, 141, 176, 202, 208, 176, 237, 38, 24, 151, - 141, 176, 202, 208, 176, 239, 46, 24, 151, 141, 176, 202, 208, 176, 248, - 223, 24, 151, 141, 176, 202, 208, 141, 248, 223, 24, 151, 141, 176, 202, - 208, 248, 80, 248, 223, 24, 151, 141, 176, 202, 208, 141, 229, 126, 24, - 151, 141, 176, 232, 133, 141, 201, 52, 24, 151, 141, 176, 232, 133, 141, - 248, 223, 24, 151, 141, 176, 102, 24, 151, 141, 176, 238, 173, 24, 151, - 141, 176, 238, 165, 176, 223, 117, 24, 230, 48, 141, 176, 238, 165, 176, - 223, 117, 24, 151, 141, 176, 238, 165, 176, 196, 104, 24, 151, 141, 176, - 243, 10, 24, 230, 46, 141, 198, 212, 24, 230, 46, 141, 176, 211, 76, 24, - 230, 39, 141, 176, 211, 76, 24, 230, 39, 141, 176, 220, 12, 24, 230, 39, - 141, 198, 212, 24, 230, 39, 141, 176, 202, 70, 24, 230, 52, 141, 176, - 211, 14, 24, 230, 52, 141, 176, 223, 162, 24, 230, 52, 141, 198, 212, 24, - 151, 198, 212, 24, 151, 176, 229, 212, 24, 151, 176, 202, 208, 237, 38, - 24, 151, 176, 202, 208, 239, 46, 24, 151, 176, 202, 208, 248, 223, 24, - 151, 176, 232, 132, 24, 151, 176, 248, 210, 141, 216, 84, 24, 151, 176, - 248, 210, 82, 206, 188, 24, 151, 176, 248, 210, 206, 189, 219, 82, 24, - 151, 176, 196, 105, 105, 232, 247, 24, 151, 176, 139, 105, 232, 247, 24, - 151, 176, 196, 105, 115, 232, 247, 24, 151, 176, 196, 105, 232, 128, 232, - 247, 24, 151, 176, 139, 232, 128, 207, 147, 221, 69, 24, 230, 42, 24, - 151, 229, 212, 24, 198, 37, 202, 169, 24, 198, 37, 215, 128, 24, 198, 37, - 248, 209, 24, 230, 215, 202, 169, 24, 230, 215, 215, 128, 24, 230, 215, - 248, 209, 24, 201, 33, 202, 169, 24, 201, 33, 215, 128, 24, 201, 33, 248, - 209, 24, 248, 18, 202, 169, 24, 248, 18, 215, 128, 24, 248, 18, 248, 209, - 24, 206, 60, 202, 169, 24, 206, 60, 215, 128, 24, 206, 60, 248, 209, 24, - 200, 171, 200, 76, 24, 200, 171, 248, 209, 24, 201, 186, 220, 13, 202, - 169, 24, 201, 186, 2, 202, 169, 24, 201, 186, 220, 13, 215, 128, 24, 201, - 186, 2, 215, 128, 24, 201, 186, 204, 6, 24, 232, 197, 220, 13, 202, 169, - 24, 232, 197, 2, 202, 169, 24, 232, 197, 220, 13, 215, 128, 24, 232, 197, - 2, 215, 128, 24, 232, 197, 204, 6, 24, 201, 186, 232, 197, 251, 154, 24, - 215, 172, 133, 144, 220, 12, 24, 215, 172, 133, 144, 202, 70, 24, 215, - 172, 133, 204, 6, 24, 215, 172, 144, 204, 6, 24, 215, 172, 133, 144, 251, - 155, 220, 12, 24, 215, 172, 133, 144, 251, 155, 202, 70, 24, 215, 172, - 202, 208, 119, 202, 208, 205, 84, 24, 215, 171, 232, 253, 239, 35, 24, - 215, 173, 232, 253, 239, 35, 24, 215, 171, 202, 170, 201, 53, 202, 70, - 24, 215, 171, 202, 170, 201, 53, 216, 212, 24, 215, 171, 202, 170, 201, - 53, 220, 12, 24, 215, 171, 202, 170, 201, 53, 220, 10, 24, 215, 171, 202, - 170, 193, 4, 232, 200, 24, 215, 171, 55, 201, 52, 24, 215, 171, 55, 193, - 4, 232, 200, 24, 215, 171, 55, 251, 154, 24, 215, 171, 55, 251, 155, 193, - 4, 232, 200, 24, 215, 171, 238, 217, 24, 215, 171, 197, 225, 201, 53, - 215, 175, 24, 215, 171, 197, 225, 193, 4, 232, 200, 24, 215, 171, 197, - 225, 251, 154, 24, 215, 171, 197, 225, 251, 155, 193, 4, 232, 200, 24, - 215, 171, 248, 228, 202, 70, 24, 215, 171, 248, 228, 216, 212, 24, 215, - 171, 248, 228, 220, 12, 24, 215, 171, 239, 2, 202, 70, 24, 215, 171, 239, - 2, 216, 212, 24, 215, 171, 239, 2, 220, 12, 24, 215, 171, 239, 2, 206, - 120, 24, 215, 171, 243, 126, 202, 70, 24, 215, 171, 243, 126, 216, 212, - 24, 215, 171, 243, 126, 220, 12, 24, 215, 171, 111, 202, 70, 24, 215, - 171, 111, 216, 212, 24, 215, 171, 111, 220, 12, 24, 215, 171, 191, 21, - 202, 70, 24, 215, 171, 191, 21, 216, 212, 24, 215, 171, 191, 21, 220, 12, - 24, 215, 171, 210, 57, 202, 70, 24, 215, 171, 210, 57, 216, 212, 24, 215, - 171, 210, 57, 220, 12, 24, 198, 3, 206, 118, 202, 169, 24, 198, 3, 206, - 118, 235, 133, 24, 198, 3, 206, 118, 251, 154, 24, 198, 3, 206, 119, 202, - 169, 24, 198, 3, 206, 119, 235, 133, 24, 198, 3, 206, 119, 251, 154, 24, - 198, 3, 203, 144, 24, 198, 3, 250, 251, 201, 218, 202, 169, 24, 198, 3, - 250, 251, 201, 218, 235, 133, 24, 198, 3, 250, 251, 201, 218, 197, 224, - 24, 215, 174, 250, 139, 202, 70, 24, 215, 174, 250, 139, 216, 212, 24, - 215, 174, 250, 139, 220, 12, 24, 215, 174, 250, 139, 220, 10, 24, 215, - 174, 198, 31, 202, 70, 24, 215, 174, 198, 31, 216, 212, 24, 215, 174, - 198, 31, 220, 12, 24, 215, 174, 198, 31, 220, 10, 24, 215, 174, 248, 210, - 250, 139, 202, 70, 24, 215, 174, 248, 210, 250, 139, 216, 212, 24, 215, - 174, 248, 210, 250, 139, 220, 12, 24, 215, 174, 248, 210, 250, 139, 220, - 10, 24, 215, 174, 248, 210, 198, 31, 202, 70, 24, 215, 174, 248, 210, - 198, 31, 216, 212, 24, 215, 174, 248, 210, 198, 31, 220, 12, 24, 215, - 174, 248, 210, 198, 31, 220, 10, 24, 215, 173, 202, 170, 201, 53, 202, - 70, 24, 215, 173, 202, 170, 201, 53, 216, 212, 24, 215, 173, 202, 170, - 201, 53, 220, 12, 24, 215, 173, 202, 170, 201, 53, 220, 10, 24, 215, 173, - 202, 170, 193, 4, 232, 200, 24, 215, 173, 55, 201, 52, 24, 215, 173, 55, - 193, 4, 232, 200, 24, 215, 173, 55, 251, 154, 24, 215, 173, 55, 251, 155, - 193, 4, 232, 200, 24, 215, 173, 238, 217, 24, 215, 173, 197, 225, 201, - 53, 215, 175, 24, 215, 173, 197, 225, 193, 4, 232, 200, 24, 215, 173, - 197, 225, 251, 155, 215, 175, 24, 215, 173, 197, 225, 251, 155, 193, 4, - 232, 200, 24, 215, 173, 248, 227, 24, 215, 173, 239, 2, 202, 70, 24, 215, - 173, 239, 2, 216, 212, 24, 215, 173, 239, 2, 220, 12, 24, 215, 173, 243, - 125, 24, 215, 173, 111, 202, 70, 24, 215, 173, 111, 216, 212, 24, 215, - 173, 111, 220, 12, 24, 215, 173, 191, 21, 202, 70, 24, 215, 173, 191, 21, - 216, 212, 24, 215, 173, 191, 21, 220, 12, 24, 215, 173, 210, 57, 202, 70, - 24, 215, 173, 210, 57, 216, 212, 24, 215, 173, 210, 57, 220, 12, 24, 198, - 4, 206, 119, 202, 169, 24, 198, 4, 206, 119, 235, 133, 24, 198, 4, 206, - 119, 251, 154, 24, 198, 4, 206, 118, 202, 169, 24, 198, 4, 206, 118, 235, - 133, 24, 198, 4, 206, 118, 251, 154, 24, 198, 4, 203, 144, 24, 215, 171, - 238, 165, 208, 23, 202, 70, 24, 215, 171, 238, 165, 208, 23, 216, 212, - 24, 215, 171, 238, 165, 208, 23, 220, 12, 24, 215, 171, 238, 165, 208, - 23, 220, 10, 24, 215, 171, 238, 165, 230, 67, 202, 70, 24, 215, 171, 238, - 165, 230, 67, 216, 212, 24, 215, 171, 238, 165, 230, 67, 220, 12, 24, - 215, 171, 238, 165, 230, 67, 220, 10, 24, 215, 171, 238, 165, 198, 218, - 243, 11, 202, 70, 24, 215, 171, 238, 165, 198, 218, 243, 11, 216, 212, - 24, 215, 171, 228, 143, 202, 70, 24, 215, 171, 228, 143, 216, 212, 24, - 215, 171, 228, 143, 220, 12, 24, 215, 171, 219, 5, 202, 70, 24, 215, 171, - 219, 5, 216, 212, 24, 215, 171, 219, 5, 220, 12, 24, 215, 171, 219, 5, 2, - 235, 133, 24, 215, 171, 193, 139, 238, 165, 55, 202, 70, 24, 215, 171, - 193, 139, 238, 165, 55, 216, 212, 24, 215, 171, 193, 139, 238, 165, 55, - 220, 12, 24, 215, 171, 193, 139, 238, 165, 197, 225, 202, 70, 24, 215, - 171, 193, 139, 238, 165, 197, 225, 216, 212, 24, 215, 171, 193, 139, 238, - 165, 197, 225, 220, 12, 24, 215, 171, 238, 165, 199, 25, 201, 52, 24, - 215, 171, 238, 163, 238, 218, 202, 70, 24, 215, 171, 238, 163, 238, 218, - 216, 212, 24, 206, 118, 202, 169, 24, 206, 118, 235, 133, 24, 206, 118, - 251, 156, 24, 215, 171, 203, 144, 24, 215, 171, 238, 165, 229, 116, 232, - 97, 193, 167, 24, 215, 171, 228, 143, 229, 116, 232, 97, 193, 167, 24, - 215, 171, 219, 5, 229, 116, 232, 97, 193, 167, 24, 215, 171, 193, 139, - 229, 116, 232, 97, 193, 167, 24, 206, 118, 202, 170, 229, 116, 232, 97, - 193, 167, 24, 206, 118, 55, 229, 116, 232, 97, 193, 167, 24, 206, 118, - 251, 155, 229, 116, 232, 97, 193, 167, 24, 215, 171, 238, 165, 229, 116, - 243, 104, 24, 215, 171, 228, 143, 229, 116, 243, 104, 24, 215, 171, 219, - 5, 229, 116, 243, 104, 24, 215, 171, 193, 139, 229, 116, 243, 104, 24, - 206, 118, 202, 170, 229, 116, 243, 104, 24, 206, 118, 55, 229, 116, 243, - 104, 24, 206, 118, 251, 155, 229, 116, 243, 104, 24, 215, 171, 193, 139, - 237, 39, 210, 86, 202, 70, 24, 215, 171, 193, 139, 237, 39, 210, 86, 216, - 212, 24, 215, 171, 193, 139, 237, 39, 210, 86, 220, 12, 24, 215, 173, - 238, 165, 229, 116, 247, 31, 202, 70, 24, 215, 173, 238, 165, 229, 116, - 247, 31, 220, 12, 24, 215, 173, 228, 143, 229, 116, 247, 31, 2, 235, 133, - 24, 215, 173, 228, 143, 229, 116, 247, 31, 220, 13, 235, 133, 24, 215, - 173, 228, 143, 229, 116, 247, 31, 2, 197, 224, 24, 215, 173, 228, 143, - 229, 116, 247, 31, 220, 13, 197, 224, 24, 215, 173, 219, 5, 229, 116, - 247, 31, 2, 202, 169, 24, 215, 173, 219, 5, 229, 116, 247, 31, 220, 13, - 202, 169, 24, 215, 173, 219, 5, 229, 116, 247, 31, 2, 235, 133, 24, 215, - 173, 219, 5, 229, 116, 247, 31, 220, 13, 235, 133, 24, 215, 173, 193, - 139, 229, 116, 247, 31, 202, 70, 24, 215, 173, 193, 139, 229, 116, 247, - 31, 220, 12, 24, 206, 119, 202, 170, 229, 116, 247, 30, 24, 206, 119, 55, - 229, 116, 247, 30, 24, 206, 119, 251, 155, 229, 116, 247, 30, 24, 215, - 173, 238, 165, 229, 116, 232, 194, 202, 70, 24, 215, 173, 238, 165, 229, - 116, 232, 194, 220, 12, 24, 215, 173, 228, 143, 229, 116, 232, 194, 2, - 235, 133, 24, 215, 173, 228, 143, 229, 116, 232, 194, 220, 13, 235, 133, - 24, 215, 173, 228, 143, 229, 116, 232, 194, 197, 225, 2, 197, 224, 24, - 215, 173, 228, 143, 229, 116, 232, 194, 197, 225, 220, 13, 197, 224, 24, - 215, 173, 219, 5, 229, 116, 232, 194, 2, 202, 169, 24, 215, 173, 219, 5, - 229, 116, 232, 194, 220, 13, 202, 169, 24, 215, 173, 219, 5, 229, 116, - 232, 194, 2, 235, 133, 24, 215, 173, 219, 5, 229, 116, 232, 194, 220, 13, - 235, 133, 24, 215, 173, 193, 139, 229, 116, 232, 194, 202, 70, 24, 215, - 173, 193, 139, 229, 116, 232, 194, 220, 12, 24, 206, 119, 202, 170, 229, - 116, 232, 193, 24, 206, 119, 55, 229, 116, 232, 193, 24, 206, 119, 251, - 155, 229, 116, 232, 193, 24, 215, 173, 238, 165, 202, 70, 24, 215, 173, - 238, 165, 216, 212, 24, 215, 173, 238, 165, 220, 12, 24, 215, 173, 238, - 165, 220, 10, 24, 215, 173, 238, 165, 242, 78, 24, 215, 173, 228, 143, - 202, 70, 24, 215, 173, 219, 5, 202, 70, 24, 215, 173, 193, 139, 202, 58, - 24, 215, 173, 193, 139, 202, 70, 24, 215, 173, 193, 139, 220, 12, 24, - 206, 119, 202, 169, 24, 206, 119, 235, 133, 24, 206, 119, 251, 154, 24, - 215, 173, 203, 145, 210, 118, 24, 215, 171, 250, 251, 243, 11, 2, 202, - 169, 24, 215, 171, 250, 251, 243, 11, 216, 213, 202, 169, 24, 215, 171, - 250, 251, 243, 11, 2, 235, 133, 24, 215, 171, 250, 251, 243, 11, 216, - 213, 235, 133, 24, 215, 173, 250, 251, 243, 11, 229, 116, 193, 168, 2, - 202, 169, 24, 215, 173, 250, 251, 243, 11, 229, 116, 193, 168, 216, 213, - 202, 169, 24, 215, 173, 250, 251, 243, 11, 229, 116, 193, 168, 220, 13, - 202, 169, 24, 215, 173, 250, 251, 243, 11, 229, 116, 193, 168, 2, 235, - 133, 24, 215, 173, 250, 251, 243, 11, 229, 116, 193, 168, 216, 213, 235, - 133, 24, 215, 173, 250, 251, 243, 11, 229, 116, 193, 168, 220, 13, 235, - 133, 24, 215, 171, 193, 4, 243, 11, 232, 97, 202, 169, 24, 215, 171, 193, - 4, 243, 11, 232, 97, 235, 133, 24, 215, 173, 193, 4, 243, 11, 229, 116, - 193, 168, 202, 169, 24, 215, 173, 193, 4, 243, 11, 229, 116, 193, 168, - 235, 133, 24, 215, 171, 232, 253, 243, 8, 202, 169, 24, 215, 171, 232, - 253, 243, 8, 235, 133, 24, 215, 173, 232, 253, 243, 8, 229, 116, 193, - 168, 202, 169, 24, 215, 173, 232, 253, 243, 8, 229, 116, 193, 168, 235, - 133, 24, 235, 40, 250, 236, 202, 70, 24, 235, 40, 250, 236, 220, 12, 24, - 235, 40, 233, 73, 24, 235, 40, 202, 75, 24, 235, 40, 199, 88, 24, 235, - 40, 207, 63, 24, 235, 40, 202, 176, 24, 235, 40, 202, 177, 251, 154, 24, - 235, 40, 233, 225, 211, 27, 198, 146, 24, 235, 40, 230, 226, 24, 229, - 235, 24, 229, 236, 206, 193, 24, 229, 236, 215, 171, 201, 52, 24, 229, - 236, 215, 171, 198, 149, 24, 229, 236, 215, 173, 201, 52, 24, 229, 236, - 215, 171, 238, 164, 24, 229, 236, 215, 173, 238, 164, 24, 229, 236, 215, - 176, 243, 10, 24, 233, 104, 236, 233, 209, 25, 213, 14, 232, 133, 198, - 147, 24, 233, 104, 236, 233, 209, 25, 213, 14, 133, 211, 57, 235, 123, - 24, 233, 104, 236, 233, 209, 25, 213, 14, 133, 211, 57, 144, 198, 147, - 24, 233, 191, 201, 53, 196, 77, 24, 233, 191, 201, 53, 214, 81, 24, 233, - 191, 201, 53, 235, 123, 24, 235, 107, 233, 191, 214, 82, 235, 123, 24, - 235, 107, 233, 191, 144, 214, 81, 24, 235, 107, 233, 191, 133, 214, 81, - 24, 235, 107, 233, 191, 214, 82, 196, 77, 24, 232, 151, 214, 81, 24, 232, - 151, 239, 35, 24, 232, 151, 193, 7, 24, 233, 186, 211, 76, 24, 233, 186, - 201, 185, 24, 233, 186, 242, 218, 24, 233, 194, 248, 130, 202, 169, 24, - 233, 194, 248, 130, 215, 128, 24, 233, 186, 132, 211, 76, 24, 233, 186, - 193, 78, 211, 76, 24, 233, 186, 132, 242, 218, 24, 233, 186, 193, 76, - 215, 175, 24, 233, 194, 193, 58, 24, 233, 187, 196, 77, 24, 233, 187, - 235, 123, 24, 233, 187, 232, 180, 24, 233, 189, 201, 52, 24, 233, 189, - 201, 53, 235, 133, 24, 233, 189, 201, 53, 251, 154, 24, 233, 190, 201, - 52, 24, 233, 190, 201, 53, 235, 133, 24, 233, 190, 201, 53, 251, 154, 24, - 233, 189, 238, 162, 24, 233, 190, 238, 162, 24, 233, 189, 243, 5, 24, - 243, 121, 208, 155, 24, 243, 121, 214, 81, 24, 243, 121, 200, 218, 24, - 199, 89, 243, 121, 229, 135, 24, 199, 89, 243, 121, 216, 84, 24, 199, 89, - 243, 121, 218, 241, 24, 234, 209, 24, 213, 14, 214, 81, 24, 213, 14, 239, - 35, 24, 213, 14, 193, 5, 24, 213, 14, 193, 73, 24, 251, 226, 248, 116, - 211, 14, 24, 251, 226, 200, 217, 223, 162, 24, 251, 226, 248, 118, 2, - 206, 117, 24, 251, 226, 200, 219, 2, 206, 117, 24, 248, 39, 223, 134, 24, - 248, 39, 233, 214, 24, 215, 180, 242, 219, 214, 81, 24, 215, 180, 242, - 219, 232, 132, 24, 215, 180, 242, 219, 239, 35, 24, 215, 180, 202, 65, - 24, 215, 180, 202, 66, 193, 7, 24, 215, 180, 202, 66, 211, 76, 24, 215, - 180, 232, 93, 24, 215, 180, 232, 94, 193, 7, 24, 215, 180, 232, 94, 211, - 76, 24, 215, 180, 211, 77, 243, 10, 24, 215, 180, 211, 77, 232, 132, 24, - 215, 180, 211, 77, 193, 7, 24, 215, 180, 211, 77, 211, 7, 24, 215, 180, - 211, 77, 211, 8, 193, 7, 24, 215, 180, 211, 77, 211, 8, 192, 88, 24, 215, - 180, 211, 77, 207, 92, 24, 215, 180, 211, 77, 207, 93, 193, 7, 24, 215, - 180, 211, 77, 207, 93, 192, 88, 24, 215, 180, 221, 122, 24, 215, 180, - 221, 123, 232, 132, 24, 215, 180, 221, 123, 193, 7, 24, 215, 180, 199, - 88, 24, 215, 180, 199, 89, 232, 132, 24, 215, 180, 199, 89, 200, 218, 24, - 219, 97, 208, 219, 198, 87, 24, 219, 99, 110, 139, 196, 74, 24, 219, 99, - 116, 139, 218, 236, 24, 215, 180, 239, 0, 24, 215, 180, 193, 6, 202, 169, - 24, 215, 180, 193, 6, 235, 133, 24, 198, 62, 201, 74, 211, 15, 233, 75, - 24, 198, 62, 219, 142, 219, 96, 24, 198, 62, 198, 136, 248, 210, 219, 96, - 24, 198, 62, 198, 136, 198, 35, 223, 118, 215, 179, 24, 198, 62, 223, - 118, 215, 180, 207, 63, 24, 198, 62, 215, 170, 251, 251, 243, 122, 24, - 198, 62, 247, 22, 201, 74, 211, 14, 24, 198, 62, 247, 22, 223, 118, 215, - 179, 24, 199, 117, 24, 199, 118, 215, 175, 24, 199, 118, 211, 105, 198, - 61, 24, 199, 118, 211, 105, 198, 62, 215, 175, 24, 199, 118, 211, 105, - 219, 96, 24, 199, 118, 211, 105, 219, 97, 215, 175, 24, 199, 118, 248, - 146, 219, 96, 24, 215, 171, 223, 14, 24, 215, 173, 223, 14, 24, 214, 112, - 24, 230, 78, 24, 233, 217, 24, 203, 22, 229, 123, 201, 219, 24, 203, 22, - 229, 123, 209, 23, 24, 193, 165, 203, 22, 229, 123, 215, 178, 24, 232, - 192, 203, 22, 229, 123, 215, 178, 24, 203, 22, 198, 148, 232, 98, 193, - 172, 24, 198, 43, 201, 53, 201, 37, 24, 198, 43, 238, 163, 248, 227, 24, - 198, 44, 197, 16, 24, 116, 248, 105, 198, 148, 232, 98, 229, 123, 222, - 195, 24, 219, 124, 242, 79, 24, 219, 124, 219, 197, 24, 219, 124, 219, - 196, 24, 219, 124, 219, 195, 24, 219, 124, 219, 194, 24, 219, 124, 219, - 193, 24, 219, 124, 219, 192, 24, 219, 124, 219, 191, 24, 232, 252, 24, - 219, 37, 201, 247, 24, 219, 38, 201, 247, 24, 219, 40, 229, 208, 24, 219, - 40, 193, 74, 24, 219, 40, 237, 92, 24, 219, 40, 229, 236, 214, 112, 24, - 219, 40, 198, 45, 24, 219, 40, 219, 123, 237, 9, 24, 242, 74, 24, 232, - 80, 201, 63, 24, 204, 25, 24, 242, 83, 24, 210, 113, 24, 233, 6, 215, - 244, 24, 233, 6, 215, 243, 24, 233, 6, 215, 242, 24, 233, 6, 215, 241, - 24, 233, 6, 215, 240, 24, 206, 121, 215, 244, 24, 206, 121, 215, 243, 24, - 206, 121, 215, 242, 24, 206, 121, 215, 241, 24, 206, 121, 215, 240, 24, - 206, 121, 215, 239, 24, 206, 121, 215, 238, 24, 206, 121, 215, 237, 24, - 206, 121, 215, 251, 24, 206, 121, 215, 250, 24, 206, 121, 215, 249, 24, - 206, 121, 215, 248, 24, 206, 121, 215, 247, 24, 206, 121, 215, 246, 24, - 206, 121, 215, 245, 8, 2, 1, 233, 37, 237, 3, 4, 197, 228, 8, 2, 1, 207, - 18, 27, 232, 51, 8, 1, 2, 6, 153, 232, 51, 8, 2, 1, 207, 18, 222, 152, 8, - 1, 2, 6, 220, 143, 4, 248, 231, 8, 2, 1, 219, 163, 4, 207, 24, 102, 8, 2, - 1, 153, 192, 160, 4, 248, 231, 8, 2, 1, 207, 18, 234, 88, 8, 2, 1, 153, - 207, 222, 4, 179, 219, 213, 23, 207, 24, 102, 8, 2, 1, 200, 44, 4, 228, - 251, 23, 207, 24, 102, 8, 1, 207, 24, 242, 232, 4, 207, 24, 102, 8, 2, 1, - 234, 13, 4, 55, 164, 8, 2, 1, 234, 13, 4, 55, 249, 88, 23, 238, 175, 8, - 2, 1, 153, 200, 44, 4, 238, 175, 8, 1, 223, 93, 231, 11, 201, 64, 4, 238, - 175, 8, 1, 201, 36, 247, 194, 4, 238, 175, 8, 1, 2, 6, 153, 222, 152, 8, - 2, 1, 220, 143, 4, 232, 233, 8, 2, 1, 237, 70, 237, 3, 4, 210, 192, 102, - 8, 2, 1, 220, 143, 4, 248, 232, 23, 210, 192, 102, 8, 2, 1, 234, 89, 4, - 210, 192, 102, 8, 2, 1, 153, 207, 222, 4, 210, 192, 102, 8, 2, 1, 207, - 222, 4, 232, 234, 23, 210, 192, 102, 8, 2, 1, 199, 79, 237, 3, 4, 210, - 192, 102, 8, 2, 1, 233, 179, 4, 210, 192, 102, 8, 2, 1, 237, 70, 237, 3, - 4, 207, 24, 102, 8, 2, 1, 228, 74, 4, 201, 28, 23, 207, 24, 102, 8, 2, 1, - 187, 4, 207, 24, 102, 8, 2, 1, 199, 79, 237, 3, 4, 207, 24, 102, 8, 2, 1, - 247, 194, 4, 207, 24, 102, 8, 2, 1, 206, 9, 4, 238, 175, 8, 2, 1, 238, - 128, 4, 216, 86, 45, 102, 8, 2, 1, 220, 143, 4, 216, 86, 45, 102, 8, 2, - 1, 215, 62, 4, 216, 86, 45, 102, 8, 2, 1, 207, 222, 4, 216, 86, 45, 102, - 8, 2, 1, 206, 9, 4, 216, 86, 45, 102, 8, 2, 1, 200, 44, 4, 216, 86, 45, - 102, 33, 135, 1, 250, 122, 33, 135, 1, 247, 252, 33, 135, 1, 195, 151, - 33, 135, 1, 231, 18, 33, 135, 1, 236, 169, 33, 135, 1, 192, 49, 33, 135, - 1, 191, 55, 33, 135, 1, 191, 82, 33, 135, 1, 223, 39, 33, 135, 1, 89, - 223, 39, 33, 135, 1, 68, 33, 135, 1, 236, 190, 33, 135, 1, 222, 94, 33, - 135, 1, 219, 75, 33, 135, 1, 215, 66, 33, 135, 1, 214, 210, 33, 135, 1, - 211, 89, 33, 135, 1, 209, 55, 33, 135, 1, 206, 179, 33, 135, 1, 202, 77, - 33, 135, 1, 197, 44, 33, 135, 1, 196, 124, 33, 135, 1, 232, 101, 33, 135, - 1, 229, 188, 33, 135, 1, 203, 8, 33, 135, 1, 197, 146, 33, 135, 1, 243, - 54, 33, 135, 1, 203, 165, 33, 135, 1, 192, 58, 33, 135, 1, 192, 60, 33, - 135, 1, 192, 93, 33, 135, 1, 191, 225, 33, 135, 1, 2, 191, 190, 33, 135, - 1, 192, 12, 33, 135, 1, 223, 82, 2, 191, 190, 33, 135, 1, 248, 175, 191, - 190, 33, 135, 1, 223, 82, 248, 175, 191, 190, 33, 135, 1, 232, 228, 52, - 1, 38, 2, 65, 52, 1, 38, 2, 249, 17, 52, 1, 38, 2, 195, 153, 52, 1, 38, - 2, 231, 77, 52, 1, 38, 2, 237, 146, 52, 1, 38, 2, 223, 226, 52, 1, 38, 2, - 191, 62, 52, 1, 38, 2, 191, 87, 52, 1, 38, 2, 68, 52, 1, 38, 2, 155, 52, - 1, 38, 2, 234, 140, 52, 1, 38, 2, 234, 114, 52, 1, 38, 2, 74, 52, 1, 38, - 2, 210, 63, 52, 1, 38, 2, 234, 34, 52, 1, 38, 2, 234, 22, 52, 1, 38, 2, - 199, 145, 52, 1, 38, 2, 66, 52, 1, 38, 2, 234, 181, 52, 1, 38, 2, 140, - 52, 1, 38, 2, 197, 161, 52, 1, 38, 2, 243, 127, 52, 1, 38, 2, 203, 165, - 52, 1, 38, 2, 192, 58, 52, 1, 38, 2, 71, 52, 1, 38, 2, 191, 225, 52, 1, - 38, 2, 235, 17, 52, 1, 38, 2, 205, 86, 52, 1, 38, 2, 247, 203, 68, 52, 1, - 38, 2, 223, 10, 52, 1, 38, 2, 249, 82, 74, 52, 1, 38, 2, 201, 53, 66, 52, - 1, 38, 2, 210, 179, 38, 200, 230, 2, 1, 65, 38, 200, 230, 2, 1, 249, 17, - 38, 200, 230, 2, 1, 195, 153, 38, 200, 230, 2, 1, 231, 77, 38, 200, 230, - 2, 1, 237, 146, 38, 200, 230, 2, 1, 223, 226, 38, 200, 230, 2, 1, 191, - 62, 38, 200, 230, 2, 1, 191, 87, 38, 200, 230, 2, 1, 68, 38, 200, 230, 2, - 1, 155, 38, 200, 230, 2, 1, 234, 140, 38, 200, 230, 2, 1, 74, 38, 200, - 230, 2, 1, 210, 63, 38, 200, 230, 2, 1, 234, 22, 38, 200, 230, 2, 1, 66, - 38, 200, 230, 2, 1, 234, 181, 38, 200, 230, 2, 1, 140, 38, 200, 230, 2, - 1, 197, 161, 38, 200, 230, 2, 1, 243, 127, 38, 200, 230, 2, 1, 203, 165, - 38, 200, 230, 2, 1, 230, 17, 56, 38, 200, 230, 2, 1, 192, 58, 38, 200, - 230, 2, 1, 231, 78, 4, 196, 69, 38, 200, 230, 2, 1, 247, 203, 68, 38, - 200, 230, 2, 1, 235, 32, 38, 200, 230, 2, 1, 235, 28, 52, 1, 38, 2, 234, - 23, 4, 237, 87, 52, 1, 38, 2, 192, 59, 4, 249, 147, 192, 62, 52, 1, 38, - 2, 201, 53, 126, 4, 106, 33, 38, 2, 1, 247, 203, 68, 212, 80, 208, 162, - 90, 1, 174, 212, 80, 208, 162, 90, 1, 197, 168, 212, 80, 208, 162, 90, 1, - 212, 199, 212, 80, 208, 162, 90, 1, 190, 190, 212, 80, 208, 162, 90, 1, - 140, 212, 80, 208, 162, 90, 1, 180, 212, 80, 208, 162, 90, 1, 192, 220, - 212, 80, 208, 162, 90, 1, 213, 111, 212, 80, 208, 162, 90, 1, 247, 160, - 212, 80, 208, 162, 90, 1, 173, 212, 80, 208, 162, 90, 1, 188, 212, 80, - 208, 162, 90, 1, 191, 123, 212, 80, 208, 162, 90, 1, 214, 166, 212, 80, - 208, 162, 90, 1, 212, 186, 212, 80, 208, 162, 90, 1, 155, 212, 80, 208, - 162, 90, 1, 238, 32, 212, 80, 208, 162, 90, 1, 212, 101, 212, 80, 208, - 162, 90, 1, 212, 244, 212, 80, 208, 162, 90, 1, 195, 188, 212, 80, 208, - 162, 90, 1, 212, 180, 212, 80, 208, 162, 90, 1, 197, 8, 212, 80, 208, - 162, 90, 1, 233, 109, 212, 80, 208, 162, 90, 1, 165, 212, 80, 208, 162, - 90, 1, 208, 96, 212, 80, 208, 162, 90, 1, 170, 212, 80, 208, 162, 90, 1, - 212, 246, 212, 80, 208, 162, 90, 1, 168, 212, 80, 208, 162, 90, 1, 192, - 175, 212, 80, 208, 162, 90, 1, 212, 248, 212, 80, 208, 162, 90, 1, 236, - 186, 212, 80, 208, 162, 90, 1, 212, 247, 212, 80, 208, 162, 90, 1, 230, - 81, 212, 80, 208, 162, 90, 1, 216, 19, 212, 80, 208, 162, 90, 1, 209, - 110, 212, 80, 208, 162, 90, 1, 231, 240, 212, 80, 208, 162, 90, 1, 206, - 109, 212, 80, 208, 162, 90, 1, 65, 212, 80, 208, 162, 90, 1, 252, 206, - 212, 80, 208, 162, 90, 1, 68, 212, 80, 208, 162, 90, 1, 66, 212, 80, 208, - 162, 90, 1, 74, 212, 80, 208, 162, 90, 1, 211, 87, 212, 80, 208, 162, 90, - 1, 71, 212, 80, 208, 162, 90, 1, 234, 188, 212, 80, 208, 162, 90, 1, 193, - 224, 212, 80, 208, 162, 90, 198, 70, 212, 80, 208, 162, 90, 198, 66, 212, - 80, 208, 162, 90, 198, 67, 212, 80, 208, 162, 90, 198, 64, 212, 80, 208, - 162, 90, 198, 65, 212, 80, 208, 162, 90, 198, 68, 212, 80, 208, 162, 90, - 198, 69, 212, 80, 208, 162, 90, 3, 40, 209, 250, 212, 80, 208, 162, 90, - 3, 40, 199, 3, 212, 80, 208, 162, 90, 3, 40, 219, 39, 212, 80, 208, 162, - 90, 3, 40, 251, 101, 212, 80, 208, 162, 90, 3, 40, 223, 94, 212, 80, 208, - 162, 90, 3, 192, 183, 192, 182, 212, 80, 208, 162, 90, 5, 219, 190, 212, - 80, 208, 162, 90, 17, 191, 77, 212, 80, 208, 162, 90, 17, 107, 212, 80, - 208, 162, 90, 17, 109, 212, 80, 208, 162, 90, 17, 138, 212, 80, 208, 162, - 90, 17, 134, 212, 80, 208, 162, 90, 17, 149, 212, 80, 208, 162, 90, 17, - 169, 212, 80, 208, 162, 90, 17, 175, 212, 80, 208, 162, 90, 17, 171, 212, - 80, 208, 162, 90, 17, 178, 212, 80, 208, 162, 90, 219, 28, 212, 96, 212, - 80, 208, 162, 90, 47, 247, 160, 198, 38, 1, 168, 198, 38, 1, 249, 153, - 198, 38, 1, 190, 190, 198, 38, 1, 238, 32, 198, 38, 1, 155, 198, 38, 1, - 231, 240, 198, 38, 1, 174, 198, 38, 1, 180, 198, 38, 1, 214, 68, 198, 38, - 1, 188, 198, 38, 1, 247, 1, 198, 38, 1, 170, 198, 38, 1, 193, 190, 198, - 38, 1, 223, 32, 198, 38, 1, 140, 198, 38, 1, 165, 198, 38, 1, 173, 198, - 38, 1, 68, 198, 38, 1, 248, 38, 68, 198, 38, 1, 223, 49, 198, 38, 1, 248, - 38, 223, 49, 198, 38, 1, 66, 198, 38, 1, 71, 198, 38, 1, 248, 38, 71, - 198, 38, 1, 234, 65, 198, 38, 1, 248, 38, 234, 65, 198, 38, 1, 74, 198, - 38, 1, 252, 25, 198, 38, 1, 248, 38, 252, 25, 198, 38, 1, 65, 198, 38, 3, - 206, 180, 198, 79, 193, 163, 1, 252, 206, 193, 163, 1, 65, 193, 163, 1, - 249, 153, 193, 163, 1, 247, 160, 193, 163, 1, 238, 32, 193, 163, 1, 231, - 240, 193, 163, 1, 170, 193, 163, 1, 209, 228, 193, 163, 1, 173, 193, 163, - 1, 180, 193, 163, 1, 168, 193, 163, 1, 190, 190, 193, 163, 1, 199, 49, - 193, 163, 1, 233, 109, 193, 163, 1, 188, 193, 163, 1, 203, 165, 193, 163, - 1, 223, 32, 193, 163, 1, 191, 123, 193, 163, 1, 193, 190, 193, 163, 1, - 195, 188, 193, 163, 1, 155, 193, 163, 1, 74, 193, 163, 1, 250, 163, 193, - 163, 1, 165, 193, 163, 1, 174, 193, 163, 1, 221, 215, 193, 163, 1, 140, - 193, 163, 1, 71, 193, 163, 1, 68, 193, 163, 1, 214, 68, 193, 163, 1, 66, - 193, 163, 1, 219, 66, 193, 163, 1, 197, 168, 193, 163, 1, 198, 26, 193, - 163, 1, 211, 94, 193, 163, 1, 252, 165, 193, 163, 1, 251, 122, 193, 163, - 1, 223, 136, 193, 163, 1, 211, 104, 193, 163, 1, 234, 103, 193, 163, 1, - 252, 166, 193, 163, 1, 212, 101, 193, 163, 1, 196, 147, 193, 163, 1, 192, - 24, 193, 163, 163, 197, 67, 193, 163, 163, 197, 66, 193, 163, 163, 221, - 54, 193, 163, 163, 221, 53, 193, 163, 17, 191, 77, 193, 163, 17, 107, - 193, 163, 17, 109, 193, 163, 17, 138, 193, 163, 17, 134, 193, 163, 17, - 149, 193, 163, 17, 169, 193, 163, 17, 175, 193, 163, 17, 171, 193, 163, - 17, 178, 193, 163, 213, 232, 56, 214, 243, 215, 120, 1, 74, 214, 243, - 215, 120, 1, 211, 78, 214, 243, 215, 120, 1, 211, 120, 214, 243, 215, - 120, 1, 210, 242, 214, 243, 215, 120, 1, 211, 94, 214, 243, 215, 120, 1, - 65, 214, 243, 215, 120, 1, 251, 218, 214, 243, 215, 120, 1, 252, 155, - 214, 243, 215, 120, 1, 251, 69, 214, 243, 215, 120, 1, 251, 245, 214, - 243, 215, 120, 1, 68, 214, 243, 215, 120, 1, 223, 68, 214, 243, 215, 120, - 1, 228, 18, 214, 243, 215, 120, 1, 223, 53, 214, 243, 215, 120, 1, 223, - 200, 214, 243, 215, 120, 1, 66, 214, 243, 215, 120, 1, 196, 160, 214, - 243, 215, 120, 1, 196, 158, 214, 243, 215, 120, 1, 196, 128, 214, 243, - 215, 120, 1, 196, 62, 214, 243, 215, 120, 1, 71, 214, 243, 215, 120, 1, - 234, 85, 214, 243, 215, 120, 1, 234, 180, 214, 243, 215, 120, 1, 234, - 114, 214, 243, 215, 120, 1, 234, 103, 214, 243, 215, 120, 1, 233, 245, - 214, 243, 215, 120, 1, 234, 122, 214, 243, 215, 120, 3, 211, 127, 214, - 243, 215, 120, 3, 215, 138, 214, 243, 215, 120, 3, 198, 28, 214, 243, - 215, 120, 3, 223, 193, 214, 243, 215, 120, 3, 200, 161, 214, 243, 215, - 120, 17, 191, 77, 214, 243, 215, 120, 17, 107, 214, 243, 215, 120, 17, - 109, 214, 243, 215, 120, 17, 138, 214, 243, 215, 120, 17, 134, 214, 243, - 215, 120, 17, 149, 214, 243, 215, 120, 17, 169, 214, 243, 215, 120, 17, - 175, 214, 243, 215, 120, 17, 171, 214, 243, 215, 120, 17, 178, 36, 5, - 229, 166, 36, 5, 229, 160, 36, 5, 229, 162, 36, 5, 229, 165, 36, 5, 229, - 163, 36, 5, 229, 164, 36, 5, 229, 161, 36, 5, 230, 147, 229, 170, 36, 5, - 229, 167, 36, 5, 229, 168, 36, 5, 229, 169, 36, 5, 230, 147, 215, 76, 36, - 5, 230, 147, 215, 77, 36, 5, 230, 147, 207, 236, 36, 5, 230, 147, 207, - 237, 36, 5, 230, 147, 207, 238, 36, 5, 230, 147, 247, 207, 36, 5, 230, - 147, 247, 208, 36, 5, 230, 147, 220, 172, 36, 5, 230, 147, 220, 173, 36, - 5, 230, 147, 220, 174, 36, 5, 230, 147, 230, 131, 36, 5, 230, 147, 230, - 132, 36, 5, 230, 147, 230, 133, 36, 5, 230, 147, 232, 58, 36, 5, 230, - 147, 232, 59, 36, 5, 230, 147, 208, 118, 36, 5, 230, 147, 208, 119, 85, - 84, 5, 218, 167, 221, 166, 85, 84, 5, 218, 163, 155, 85, 84, 5, 218, 161, - 220, 232, 85, 84, 5, 218, 37, 222, 13, 85, 84, 5, 218, 7, 222, 22, 85, - 84, 5, 218, 26, 221, 41, 85, 84, 5, 218, 54, 221, 67, 85, 84, 5, 217, - 179, 220, 219, 85, 84, 5, 218, 158, 193, 86, 85, 84, 5, 218, 156, 193, - 190, 85, 84, 5, 218, 154, 193, 0, 85, 84, 5, 217, 232, 193, 114, 85, 84, - 5, 217, 240, 193, 125, 85, 84, 5, 217, 244, 193, 29, 85, 84, 5, 218, 57, - 193, 48, 85, 84, 5, 217, 164, 192, 252, 85, 84, 5, 217, 215, 193, 112, - 85, 84, 5, 218, 41, 192, 240, 85, 84, 5, 218, 53, 192, 242, 85, 84, 5, - 217, 219, 192, 241, 85, 84, 5, 218, 152, 216, 44, 85, 84, 5, 218, 150, - 217, 90, 85, 84, 5, 218, 148, 215, 122, 85, 84, 5, 218, 43, 216, 186, 85, - 84, 5, 218, 8, 215, 231, 85, 84, 5, 217, 204, 215, 148, 85, 84, 5, 217, - 169, 215, 142, 85, 84, 5, 218, 146, 248, 188, 85, 84, 5, 218, 143, 249, - 153, 85, 84, 5, 218, 141, 248, 10, 85, 84, 5, 217, 208, 249, 1, 85, 84, - 5, 218, 5, 249, 17, 85, 84, 5, 217, 255, 248, 97, 85, 84, 5, 217, 220, - 248, 111, 85, 84, 5, 218, 131, 68, 85, 84, 5, 218, 129, 65, 85, 84, 5, - 218, 127, 66, 85, 84, 5, 217, 195, 234, 188, 85, 84, 5, 218, 2, 71, 85, - 84, 5, 217, 193, 211, 87, 85, 84, 5, 217, 211, 74, 85, 84, 5, 217, 221, - 234, 166, 85, 84, 5, 217, 227, 223, 162, 85, 84, 5, 217, 223, 223, 162, - 85, 84, 5, 217, 163, 251, 132, 85, 84, 5, 217, 180, 234, 103, 85, 84, 5, - 218, 116, 202, 222, 85, 84, 5, 218, 114, 188, 85, 84, 5, 218, 112, 201, - 4, 85, 84, 5, 217, 196, 205, 50, 85, 84, 5, 217, 242, 205, 68, 85, 84, 5, - 217, 222, 202, 16, 85, 84, 5, 218, 23, 202, 46, 85, 84, 5, 217, 162, 202, - 215, 85, 84, 5, 218, 102, 219, 146, 85, 84, 5, 218, 100, 173, 85, 84, 5, - 218, 98, 218, 225, 85, 84, 5, 218, 18, 219, 228, 85, 84, 5, 218, 29, 219, - 238, 85, 84, 5, 218, 48, 219, 8, 85, 84, 5, 217, 205, 219, 43, 85, 84, 5, - 217, 248, 179, 219, 238, 85, 84, 5, 218, 124, 237, 44, 85, 84, 5, 218, - 121, 238, 32, 85, 84, 5, 218, 118, 235, 89, 85, 84, 5, 218, 13, 237, 131, - 85, 84, 5, 217, 178, 236, 146, 85, 84, 5, 217, 177, 236, 174, 85, 84, 5, - 218, 110, 198, 193, 85, 84, 5, 218, 107, 190, 190, 85, 84, 5, 218, 105, - 197, 94, 85, 84, 5, 218, 11, 199, 121, 85, 84, 5, 218, 47, 199, 145, 85, - 84, 5, 217, 254, 198, 59, 85, 84, 5, 218, 33, 159, 85, 84, 5, 218, 96, - 222, 244, 85, 84, 5, 218, 93, 223, 32, 85, 84, 5, 218, 91, 222, 182, 85, - 84, 5, 217, 201, 223, 8, 85, 84, 5, 217, 245, 223, 10, 85, 84, 5, 217, - 198, 222, 191, 85, 84, 5, 218, 39, 222, 201, 85, 84, 5, 217, 183, 179, - 222, 201, 85, 84, 5, 218, 89, 192, 33, 85, 84, 5, 218, 86, 170, 85, 84, - 5, 218, 84, 191, 225, 85, 84, 5, 217, 249, 192, 77, 85, 84, 5, 218, 22, - 192, 80, 85, 84, 5, 217, 217, 191, 246, 85, 84, 5, 217, 237, 192, 12, 85, - 84, 5, 218, 80, 233, 23, 85, 84, 5, 218, 78, 233, 109, 85, 84, 5, 218, - 76, 232, 86, 85, 84, 5, 218, 24, 233, 52, 85, 84, 5, 218, 27, 233, 59, - 85, 84, 5, 217, 225, 232, 162, 85, 84, 5, 218, 14, 232, 175, 85, 84, 5, - 217, 161, 232, 85, 85, 84, 5, 218, 1, 233, 80, 85, 84, 5, 218, 74, 213, - 179, 85, 84, 5, 218, 72, 214, 226, 85, 84, 5, 218, 70, 212, 130, 85, 84, - 5, 217, 241, 214, 102, 85, 84, 5, 217, 189, 213, 31, 85, 84, 5, 217, 182, - 229, 158, 85, 84, 5, 218, 65, 140, 85, 84, 5, 217, 172, 228, 159, 85, 84, - 5, 218, 68, 229, 215, 85, 84, 5, 218, 6, 229, 245, 85, 84, 5, 218, 63, - 228, 252, 85, 84, 5, 217, 218, 229, 23, 85, 84, 5, 218, 19, 229, 214, 85, - 84, 5, 217, 230, 228, 245, 85, 84, 5, 218, 49, 229, 128, 85, 84, 5, 217, - 228, 230, 56, 85, 84, 5, 218, 15, 228, 142, 85, 84, 5, 218, 50, 229, 198, - 85, 84, 5, 217, 165, 228, 255, 85, 84, 5, 218, 56, 228, 155, 85, 84, 5, - 218, 12, 214, 33, 85, 84, 5, 218, 61, 214, 47, 85, 84, 5, 218, 20, 214, - 30, 85, 84, 5, 217, 243, 214, 41, 85, 84, 5, 217, 212, 214, 42, 85, 84, - 5, 217, 202, 214, 31, 85, 84, 5, 217, 238, 214, 32, 85, 84, 5, 217, 199, - 214, 46, 85, 84, 5, 217, 231, 214, 29, 85, 84, 5, 218, 16, 179, 214, 42, - 85, 84, 5, 217, 252, 179, 214, 31, 85, 84, 5, 217, 175, 179, 214, 32, 85, - 84, 5, 217, 203, 231, 53, 85, 84, 5, 217, 247, 231, 240, 85, 84, 5, 217, - 190, 230, 179, 85, 84, 5, 217, 168, 231, 157, 85, 84, 5, 217, 192, 230, - 165, 85, 84, 5, 217, 191, 230, 175, 85, 84, 5, 217, 174, 214, 52, 85, 84, - 5, 218, 45, 213, 245, 85, 84, 5, 217, 181, 213, 234, 85, 84, 5, 218, 34, - 209, 185, 85, 84, 5, 218, 3, 168, 85, 84, 5, 218, 52, 208, 165, 85, 84, - 5, 218, 21, 210, 49, 85, 84, 5, 218, 51, 210, 63, 85, 84, 5, 218, 0, 209, - 37, 85, 84, 5, 218, 36, 209, 73, 85, 84, 5, 217, 213, 216, 252, 85, 84, - 5, 218, 40, 217, 11, 85, 84, 5, 217, 236, 216, 246, 85, 84, 5, 218, 55, - 217, 3, 85, 84, 5, 217, 170, 217, 3, 85, 84, 5, 218, 30, 217, 4, 85, 84, - 5, 217, 186, 216, 247, 85, 84, 5, 217, 184, 216, 248, 85, 84, 5, 217, - 171, 216, 240, 85, 84, 5, 217, 197, 179, 217, 4, 85, 84, 5, 217, 253, - 179, 216, 247, 85, 84, 5, 217, 216, 179, 216, 248, 85, 84, 5, 217, 226, - 221, 13, 85, 84, 5, 218, 10, 221, 21, 85, 84, 5, 218, 28, 221, 9, 85, 84, - 5, 218, 59, 221, 16, 85, 84, 5, 217, 250, 221, 17, 85, 84, 5, 217, 246, - 221, 11, 85, 84, 5, 217, 200, 221, 12, 85, 84, 5, 217, 234, 231, 174, 85, - 84, 5, 218, 46, 231, 182, 85, 84, 5, 217, 210, 231, 169, 85, 84, 5, 218, - 9, 231, 178, 85, 84, 5, 217, 251, 231, 179, 85, 84, 5, 218, 31, 231, 170, - 85, 84, 5, 218, 32, 231, 172, 85, 84, 5, 217, 187, 165, 85, 84, 5, 217, - 235, 214, 147, 85, 84, 5, 217, 229, 214, 162, 85, 84, 5, 217, 233, 214, - 129, 85, 84, 5, 217, 167, 214, 153, 85, 84, 5, 217, 239, 214, 154, 85, - 84, 5, 218, 35, 214, 134, 85, 84, 5, 218, 38, 214, 138, 85, 84, 5, 217, - 206, 213, 157, 85, 84, 5, 217, 166, 213, 127, 85, 84, 5, 217, 209, 213, - 148, 85, 84, 5, 217, 224, 213, 131, 85, 84, 5, 217, 176, 195, 69, 85, 84, - 5, 217, 173, 195, 188, 85, 84, 5, 217, 207, 193, 249, 85, 84, 5, 217, - 185, 195, 148, 85, 84, 5, 218, 17, 195, 153, 85, 84, 5, 217, 214, 195, 8, - 85, 84, 5, 218, 25, 195, 24, 85, 84, 5, 217, 194, 212, 74, 85, 84, 5, - 218, 44, 212, 94, 85, 84, 5, 217, 188, 212, 56, 85, 84, 5, 218, 4, 212, - 86, 85, 84, 5, 218, 42, 212, 63, 85, 84, 17, 107, 85, 84, 17, 109, 85, - 84, 17, 138, 85, 84, 17, 134, 85, 84, 17, 149, 85, 84, 17, 169, 85, 84, - 17, 175, 85, 84, 17, 171, 85, 84, 17, 178, 85, 84, 33, 31, 199, 119, 85, - 84, 33, 31, 199, 90, 85, 84, 33, 31, 228, 138, 85, 84, 33, 31, 198, 228, - 85, 84, 33, 31, 199, 96, 198, 228, 85, 84, 33, 31, 228, 141, 198, 228, - 85, 84, 33, 31, 216, 47, 252, 33, 6, 1, 251, 180, 252, 33, 6, 1, 238, 29, - 252, 33, 6, 1, 220, 123, 252, 33, 6, 1, 216, 60, 252, 33, 6, 1, 249, 153, - 252, 33, 6, 1, 202, 164, 252, 33, 6, 1, 210, 63, 252, 33, 6, 1, 248, 196, - 252, 33, 6, 1, 165, 252, 33, 6, 1, 71, 252, 33, 6, 1, 233, 109, 252, 33, - 6, 1, 68, 252, 33, 6, 1, 74, 252, 33, 6, 1, 237, 68, 252, 33, 6, 1, 192, - 34, 252, 33, 6, 1, 193, 133, 252, 33, 6, 1, 212, 130, 252, 33, 6, 1, 222, - 106, 252, 33, 6, 1, 170, 252, 33, 6, 1, 66, 252, 33, 6, 1, 222, 235, 252, - 33, 6, 1, 243, 95, 252, 33, 6, 1, 140, 252, 33, 6, 1, 208, 94, 252, 33, - 6, 1, 231, 240, 252, 33, 6, 1, 212, 101, 252, 33, 6, 1, 197, 94, 252, 33, - 6, 1, 213, 224, 252, 33, 6, 1, 195, 188, 252, 33, 6, 1, 221, 215, 252, - 33, 6, 1, 231, 179, 252, 33, 6, 1, 191, 108, 252, 33, 6, 1, 221, 12, 252, - 33, 6, 1, 203, 165, 252, 33, 2, 1, 251, 180, 252, 33, 2, 1, 238, 29, 252, - 33, 2, 1, 220, 123, 252, 33, 2, 1, 216, 60, 252, 33, 2, 1, 249, 153, 252, - 33, 2, 1, 202, 164, 252, 33, 2, 1, 210, 63, 252, 33, 2, 1, 248, 196, 252, - 33, 2, 1, 165, 252, 33, 2, 1, 71, 252, 33, 2, 1, 233, 109, 252, 33, 2, 1, - 68, 252, 33, 2, 1, 74, 252, 33, 2, 1, 237, 68, 252, 33, 2, 1, 192, 34, - 252, 33, 2, 1, 193, 133, 252, 33, 2, 1, 212, 130, 252, 33, 2, 1, 222, - 106, 252, 33, 2, 1, 170, 252, 33, 2, 1, 66, 252, 33, 2, 1, 222, 235, 252, - 33, 2, 1, 243, 95, 252, 33, 2, 1, 140, 252, 33, 2, 1, 208, 94, 252, 33, - 2, 1, 231, 240, 252, 33, 2, 1, 212, 101, 252, 33, 2, 1, 197, 94, 252, 33, - 2, 1, 213, 224, 252, 33, 2, 1, 195, 188, 252, 33, 2, 1, 221, 215, 252, - 33, 2, 1, 231, 179, 252, 33, 2, 1, 191, 108, 252, 33, 2, 1, 221, 12, 252, - 33, 2, 1, 203, 165, 252, 33, 251, 181, 219, 190, 252, 33, 18, 219, 190, - 252, 33, 231, 153, 77, 252, 33, 230, 57, 252, 33, 120, 215, 252, 252, 33, - 231, 154, 120, 215, 252, 252, 33, 212, 141, 252, 33, 214, 213, 77, 252, - 33, 17, 191, 77, 252, 33, 17, 107, 252, 33, 17, 109, 252, 33, 17, 138, - 252, 33, 17, 134, 252, 33, 17, 149, 252, 33, 17, 169, 252, 33, 17, 175, - 252, 33, 17, 171, 252, 33, 17, 178, 252, 33, 89, 233, 216, 77, 252, 33, - 89, 208, 13, 77, 223, 146, 143, 31, 107, 223, 146, 143, 31, 109, 223, - 146, 143, 31, 138, 223, 146, 143, 31, 134, 223, 146, 143, 31, 149, 223, - 146, 143, 31, 169, 223, 146, 143, 31, 175, 223, 146, 143, 31, 171, 223, - 146, 143, 31, 178, 223, 146, 143, 31, 199, 95, 223, 146, 143, 31, 197, - 32, 223, 146, 143, 31, 198, 249, 223, 146, 143, 31, 232, 135, 223, 146, - 143, 31, 233, 15, 223, 146, 143, 31, 202, 120, 223, 146, 143, 31, 203, - 241, 223, 146, 143, 31, 234, 153, 223, 146, 143, 31, 213, 169, 223, 146, - 143, 31, 91, 228, 140, 223, 146, 143, 31, 105, 228, 140, 223, 146, 143, - 31, 115, 228, 140, 223, 146, 143, 31, 232, 128, 228, 140, 223, 146, 143, - 31, 232, 226, 228, 140, 223, 146, 143, 31, 202, 136, 228, 140, 223, 146, - 143, 31, 203, 247, 228, 140, 223, 146, 143, 31, 234, 164, 228, 140, 223, - 146, 143, 31, 213, 175, 228, 140, 223, 146, 143, 31, 91, 189, 223, 146, - 143, 31, 105, 189, 223, 146, 143, 31, 115, 189, 223, 146, 143, 31, 232, - 128, 189, 223, 146, 143, 31, 232, 226, 189, 223, 146, 143, 31, 202, 136, - 189, 223, 146, 143, 31, 203, 247, 189, 223, 146, 143, 31, 234, 164, 189, - 223, 146, 143, 31, 213, 175, 189, 223, 146, 143, 31, 199, 96, 189, 223, - 146, 143, 31, 197, 33, 189, 223, 146, 143, 31, 198, 250, 189, 223, 146, - 143, 31, 232, 136, 189, 223, 146, 143, 31, 233, 16, 189, 223, 146, 143, - 31, 202, 121, 189, 223, 146, 143, 31, 203, 242, 189, 223, 146, 143, 31, - 234, 154, 189, 223, 146, 143, 31, 213, 170, 189, 223, 146, 143, 31, 220, - 41, 223, 146, 143, 31, 220, 40, 223, 146, 143, 220, 42, 77, 223, 146, - 143, 31, 222, 60, 223, 146, 143, 31, 222, 59, 223, 146, 143, 31, 208, - 227, 107, 223, 146, 143, 31, 208, 227, 109, 223, 146, 143, 31, 208, 227, - 138, 223, 146, 143, 31, 208, 227, 134, 223, 146, 143, 31, 208, 227, 149, - 223, 146, 143, 31, 208, 227, 169, 223, 146, 143, 31, 208, 227, 175, 223, - 146, 143, 31, 208, 227, 171, 223, 146, 143, 31, 208, 227, 178, 223, 146, - 143, 209, 106, 223, 146, 143, 232, 118, 91, 208, 22, 223, 146, 143, 232, - 118, 91, 230, 70, 223, 146, 143, 232, 118, 115, 208, 20, 223, 146, 143, - 206, 36, 77, 223, 146, 143, 31, 251, 157, 107, 223, 146, 143, 31, 251, - 157, 109, 223, 146, 143, 31, 251, 157, 199, 96, 189, 223, 146, 143, 251, - 157, 220, 42, 77, 211, 21, 143, 31, 107, 211, 21, 143, 31, 109, 211, 21, - 143, 31, 138, 211, 21, 143, 31, 134, 211, 21, 143, 31, 149, 211, 21, 143, - 31, 169, 211, 21, 143, 31, 175, 211, 21, 143, 31, 171, 211, 21, 143, 31, - 178, 211, 21, 143, 31, 199, 95, 211, 21, 143, 31, 197, 32, 211, 21, 143, - 31, 198, 249, 211, 21, 143, 31, 232, 135, 211, 21, 143, 31, 233, 15, 211, - 21, 143, 31, 202, 120, 211, 21, 143, 31, 203, 241, 211, 21, 143, 31, 234, - 153, 211, 21, 143, 31, 213, 169, 211, 21, 143, 31, 91, 228, 140, 211, 21, - 143, 31, 105, 228, 140, 211, 21, 143, 31, 115, 228, 140, 211, 21, 143, - 31, 232, 128, 228, 140, 211, 21, 143, 31, 232, 226, 228, 140, 211, 21, - 143, 31, 202, 136, 228, 140, 211, 21, 143, 31, 203, 247, 228, 140, 211, - 21, 143, 31, 234, 164, 228, 140, 211, 21, 143, 31, 213, 175, 228, 140, - 211, 21, 143, 31, 91, 189, 211, 21, 143, 31, 105, 189, 211, 21, 143, 31, - 115, 189, 211, 21, 143, 31, 232, 128, 189, 211, 21, 143, 31, 232, 226, - 189, 211, 21, 143, 31, 202, 136, 189, 211, 21, 143, 31, 203, 247, 189, - 211, 21, 143, 31, 234, 164, 189, 211, 21, 143, 31, 213, 175, 189, 211, - 21, 143, 31, 199, 96, 189, 211, 21, 143, 31, 197, 33, 189, 211, 21, 143, - 31, 198, 250, 189, 211, 21, 143, 31, 232, 136, 189, 211, 21, 143, 31, - 233, 16, 189, 211, 21, 143, 31, 202, 121, 189, 211, 21, 143, 31, 203, - 242, 189, 211, 21, 143, 31, 234, 154, 189, 211, 21, 143, 31, 213, 170, - 189, 211, 21, 143, 217, 49, 211, 21, 143, 251, 157, 31, 109, 211, 21, - 143, 251, 157, 31, 138, 211, 21, 143, 251, 157, 31, 134, 211, 21, 143, - 251, 157, 31, 149, 211, 21, 143, 251, 157, 31, 169, 211, 21, 143, 251, - 157, 31, 175, 211, 21, 143, 251, 157, 31, 171, 211, 21, 143, 251, 157, - 31, 178, 211, 21, 143, 251, 157, 31, 199, 95, 211, 21, 143, 251, 157, 31, - 232, 128, 228, 140, 211, 21, 143, 251, 157, 31, 202, 136, 228, 140, 211, - 21, 143, 251, 157, 31, 105, 189, 211, 21, 143, 251, 157, 31, 199, 96, - 189, 211, 21, 143, 232, 118, 91, 230, 70, 211, 21, 143, 232, 118, 91, - 202, 124, 9, 13, 251, 192, 9, 13, 248, 245, 9, 13, 223, 6, 9, 13, 238, 3, - 9, 13, 193, 133, 9, 13, 191, 113, 9, 13, 230, 81, 9, 13, 199, 219, 9, 13, - 192, 75, 9, 13, 222, 106, 9, 13, 220, 35, 9, 13, 216, 208, 9, 13, 213, - 24, 9, 13, 205, 46, 9, 13, 251, 230, 9, 13, 233, 46, 9, 13, 205, 192, 9, - 13, 208, 89, 9, 13, 207, 71, 9, 13, 203, 109, 9, 13, 199, 114, 9, 13, - 199, 29, 9, 13, 221, 210, 9, 13, 199, 41, 9, 13, 238, 26, 9, 13, 191, - 116, 9, 13, 231, 86, 9, 13, 236, 139, 248, 245, 9, 13, 236, 139, 213, 24, - 9, 13, 236, 139, 233, 46, 9, 13, 236, 139, 208, 89, 9, 13, 89, 248, 245, - 9, 13, 89, 223, 6, 9, 13, 89, 229, 210, 9, 13, 89, 230, 81, 9, 13, 89, - 192, 75, 9, 13, 89, 222, 106, 9, 13, 89, 220, 35, 9, 13, 89, 216, 208, 9, - 13, 89, 213, 24, 9, 13, 89, 205, 46, 9, 13, 89, 251, 230, 9, 13, 89, 233, - 46, 9, 13, 89, 205, 192, 9, 13, 89, 208, 89, 9, 13, 89, 203, 109, 9, 13, - 89, 199, 114, 9, 13, 89, 199, 29, 9, 13, 89, 221, 210, 9, 13, 89, 238, - 26, 9, 13, 89, 231, 86, 9, 13, 199, 214, 223, 6, 9, 13, 199, 214, 230, - 81, 9, 13, 199, 214, 192, 75, 9, 13, 199, 214, 220, 35, 9, 13, 199, 214, - 213, 24, 9, 13, 199, 214, 205, 46, 9, 13, 199, 214, 251, 230, 9, 13, 199, - 214, 205, 192, 9, 13, 199, 214, 208, 89, 9, 13, 199, 214, 203, 109, 9, - 13, 199, 214, 221, 210, 9, 13, 199, 214, 238, 26, 9, 13, 199, 214, 231, - 86, 9, 13, 199, 214, 236, 139, 213, 24, 9, 13, 199, 214, 236, 139, 208, - 89, 9, 13, 201, 36, 248, 245, 9, 13, 201, 36, 223, 6, 9, 13, 201, 36, - 229, 210, 9, 13, 201, 36, 230, 81, 9, 13, 201, 36, 199, 219, 9, 13, 201, - 36, 192, 75, 9, 13, 201, 36, 222, 106, 9, 13, 201, 36, 216, 208, 9, 13, - 201, 36, 213, 24, 9, 13, 201, 36, 205, 46, 9, 13, 201, 36, 251, 230, 9, - 13, 201, 36, 233, 46, 9, 13, 201, 36, 205, 192, 9, 13, 201, 36, 208, 89, - 9, 13, 201, 36, 203, 109, 9, 13, 201, 36, 199, 114, 9, 13, 201, 36, 199, - 29, 9, 13, 201, 36, 221, 210, 9, 13, 201, 36, 238, 26, 9, 13, 201, 36, - 191, 116, 9, 13, 201, 36, 231, 86, 9, 13, 201, 36, 236, 139, 248, 245, 9, - 13, 201, 36, 236, 139, 233, 46, 9, 13, 219, 3, 251, 192, 9, 13, 219, 3, - 248, 245, 9, 13, 219, 3, 223, 6, 9, 13, 219, 3, 238, 3, 9, 13, 219, 3, - 229, 210, 9, 13, 219, 3, 193, 133, 9, 13, 219, 3, 191, 113, 9, 13, 219, - 3, 230, 81, 9, 13, 219, 3, 199, 219, 9, 13, 219, 3, 192, 75, 9, 13, 219, - 3, 220, 35, 9, 13, 219, 3, 216, 208, 9, 13, 219, 3, 213, 24, 9, 13, 219, - 3, 205, 46, 9, 13, 219, 3, 251, 230, 9, 13, 219, 3, 233, 46, 9, 13, 219, - 3, 205, 192, 9, 13, 219, 3, 208, 89, 9, 13, 219, 3, 207, 71, 9, 13, 219, - 3, 203, 109, 9, 13, 219, 3, 199, 114, 9, 13, 219, 3, 199, 29, 9, 13, 219, - 3, 221, 210, 9, 13, 219, 3, 199, 41, 9, 13, 219, 3, 238, 26, 9, 13, 219, - 3, 191, 116, 9, 13, 219, 3, 231, 86, 9, 13, 235, 129, 248, 245, 9, 13, - 235, 129, 223, 6, 9, 13, 235, 129, 238, 3, 9, 13, 235, 129, 193, 133, 9, - 13, 235, 129, 191, 113, 9, 13, 235, 129, 230, 81, 9, 13, 235, 129, 199, - 219, 9, 13, 235, 129, 192, 75, 9, 13, 235, 129, 220, 35, 9, 13, 235, 129, - 216, 208, 9, 13, 235, 129, 213, 24, 9, 13, 235, 129, 205, 46, 9, 13, 235, - 129, 251, 230, 9, 13, 235, 129, 233, 46, 9, 13, 235, 129, 205, 192, 9, - 13, 235, 129, 208, 89, 9, 13, 235, 129, 207, 71, 9, 13, 235, 129, 203, - 109, 9, 13, 235, 129, 199, 114, 9, 13, 235, 129, 199, 29, 9, 13, 235, - 129, 221, 210, 9, 13, 235, 129, 199, 41, 9, 13, 235, 129, 238, 26, 9, 13, - 235, 129, 191, 116, 9, 13, 235, 129, 231, 86, 9, 13, 211, 67, 92, 4, 182, - 4, 199, 168, 9, 13, 211, 67, 182, 4, 238, 3, 217, 114, 123, 234, 204, - 193, 66, 217, 114, 123, 202, 2, 193, 66, 217, 114, 123, 193, 105, 193, - 66, 217, 114, 123, 186, 193, 66, 217, 114, 123, 207, 87, 235, 111, 217, - 114, 123, 230, 201, 235, 111, 217, 114, 123, 63, 235, 111, 217, 114, 123, - 91, 79, 243, 140, 217, 114, 123, 105, 79, 243, 140, 217, 114, 123, 115, - 79, 243, 140, 217, 114, 123, 232, 128, 79, 243, 140, 217, 114, 123, 232, - 226, 79, 243, 140, 217, 114, 123, 202, 136, 79, 243, 140, 217, 114, 123, - 203, 247, 79, 243, 140, 217, 114, 123, 234, 164, 79, 243, 140, 217, 114, - 123, 213, 175, 79, 243, 140, 217, 114, 123, 91, 79, 249, 102, 217, 114, - 123, 105, 79, 249, 102, 217, 114, 123, 115, 79, 249, 102, 217, 114, 123, - 232, 128, 79, 249, 102, 217, 114, 123, 232, 226, 79, 249, 102, 217, 114, - 123, 202, 136, 79, 249, 102, 217, 114, 123, 203, 247, 79, 249, 102, 217, - 114, 123, 234, 164, 79, 249, 102, 217, 114, 123, 213, 175, 79, 249, 102, - 217, 114, 123, 91, 79, 243, 7, 217, 114, 123, 105, 79, 243, 7, 217, 114, - 123, 115, 79, 243, 7, 217, 114, 123, 232, 128, 79, 243, 7, 217, 114, 123, - 232, 226, 79, 243, 7, 217, 114, 123, 202, 136, 79, 243, 7, 217, 114, 123, - 203, 247, 79, 243, 7, 217, 114, 123, 234, 164, 79, 243, 7, 217, 114, 123, - 213, 175, 79, 243, 7, 217, 114, 123, 209, 85, 217, 114, 123, 211, 53, - 217, 114, 123, 249, 103, 217, 114, 123, 243, 49, 217, 114, 123, 201, 196, - 217, 114, 123, 200, 200, 217, 114, 123, 250, 149, 217, 114, 123, 193, 56, - 217, 114, 123, 222, 194, 217, 114, 123, 249, 146, 236, 151, 123, 228, - 241, 249, 146, 236, 151, 123, 228, 239, 236, 151, 123, 228, 238, 236, - 151, 123, 228, 237, 236, 151, 123, 228, 236, 236, 151, 123, 228, 235, - 236, 151, 123, 228, 234, 236, 151, 123, 228, 233, 236, 151, 123, 228, - 232, 236, 151, 123, 228, 231, 236, 151, 123, 228, 230, 236, 151, 123, - 228, 229, 236, 151, 123, 228, 228, 236, 151, 123, 228, 227, 236, 151, - 123, 228, 226, 236, 151, 123, 228, 225, 236, 151, 123, 228, 224, 236, - 151, 123, 228, 223, 236, 151, 123, 228, 222, 236, 151, 123, 228, 221, - 236, 151, 123, 228, 220, 236, 151, 123, 228, 219, 236, 151, 123, 228, - 218, 236, 151, 123, 228, 217, 236, 151, 123, 228, 216, 236, 151, 123, - 228, 215, 236, 151, 123, 228, 214, 236, 151, 123, 228, 213, 236, 151, - 123, 228, 212, 236, 151, 123, 228, 211, 236, 151, 123, 228, 210, 236, - 151, 123, 228, 209, 236, 151, 123, 228, 208, 236, 151, 123, 228, 207, - 236, 151, 123, 228, 206, 236, 151, 123, 228, 205, 236, 151, 123, 228, - 204, 236, 151, 123, 228, 203, 236, 151, 123, 228, 202, 236, 151, 123, - 228, 201, 236, 151, 123, 228, 200, 236, 151, 123, 228, 199, 236, 151, - 123, 228, 198, 236, 151, 123, 228, 197, 236, 151, 123, 228, 196, 236, - 151, 123, 228, 195, 236, 151, 123, 228, 194, 236, 151, 123, 228, 193, - 236, 151, 123, 228, 192, 236, 151, 123, 228, 191, 236, 151, 123, 81, 249, - 146, 236, 151, 123, 195, 134, 236, 151, 123, 195, 133, 236, 151, 123, - 195, 132, 236, 151, 123, 195, 131, 236, 151, 123, 195, 130, 236, 151, - 123, 195, 129, 236, 151, 123, 195, 128, 236, 151, 123, 195, 127, 236, - 151, 123, 195, 126, 236, 151, 123, 195, 125, 236, 151, 123, 195, 124, - 236, 151, 123, 195, 123, 236, 151, 123, 195, 122, 236, 151, 123, 195, - 121, 236, 151, 123, 195, 120, 236, 151, 123, 195, 119, 236, 151, 123, - 195, 118, 236, 151, 123, 195, 117, 236, 151, 123, 195, 116, 236, 151, - 123, 195, 115, 236, 151, 123, 195, 114, 236, 151, 123, 195, 113, 236, - 151, 123, 195, 112, 236, 151, 123, 195, 111, 236, 151, 123, 195, 110, - 236, 151, 123, 195, 109, 236, 151, 123, 195, 108, 236, 151, 123, 195, - 107, 236, 151, 123, 195, 106, 236, 151, 123, 195, 105, 236, 151, 123, - 195, 104, 236, 151, 123, 195, 103, 236, 151, 123, 195, 102, 236, 151, - 123, 195, 101, 236, 151, 123, 195, 100, 236, 151, 123, 195, 99, 236, 151, - 123, 195, 98, 236, 151, 123, 195, 97, 236, 151, 123, 195, 96, 236, 151, - 123, 195, 95, 236, 151, 123, 195, 94, 236, 151, 123, 195, 93, 236, 151, - 123, 195, 92, 236, 151, 123, 195, 91, 236, 151, 123, 195, 90, 236, 151, - 123, 195, 89, 236, 151, 123, 195, 88, 236, 151, 123, 195, 87, 236, 151, - 123, 195, 86, 209, 95, 247, 101, 249, 146, 209, 95, 247, 101, 252, 53, - 79, 201, 244, 209, 95, 247, 101, 105, 79, 201, 244, 209, 95, 247, 101, - 115, 79, 201, 244, 209, 95, 247, 101, 232, 128, 79, 201, 244, 209, 95, - 247, 101, 232, 226, 79, 201, 244, 209, 95, 247, 101, 202, 136, 79, 201, - 244, 209, 95, 247, 101, 203, 247, 79, 201, 244, 209, 95, 247, 101, 234, - 164, 79, 201, 244, 209, 95, 247, 101, 213, 175, 79, 201, 244, 209, 95, - 247, 101, 199, 96, 79, 201, 244, 209, 95, 247, 101, 223, 30, 79, 201, - 244, 209, 95, 247, 101, 221, 77, 79, 201, 244, 209, 95, 247, 101, 208, - 15, 79, 201, 244, 209, 95, 247, 101, 221, 139, 79, 201, 244, 209, 95, - 247, 101, 252, 53, 79, 229, 221, 209, 95, 247, 101, 105, 79, 229, 221, - 209, 95, 247, 101, 115, 79, 229, 221, 209, 95, 247, 101, 232, 128, 79, - 229, 221, 209, 95, 247, 101, 232, 226, 79, 229, 221, 209, 95, 247, 101, - 202, 136, 79, 229, 221, 209, 95, 247, 101, 203, 247, 79, 229, 221, 209, - 95, 247, 101, 234, 164, 79, 229, 221, 209, 95, 247, 101, 213, 175, 79, - 229, 221, 209, 95, 247, 101, 199, 96, 79, 229, 221, 209, 95, 247, 101, - 223, 30, 79, 229, 221, 209, 95, 247, 101, 221, 77, 79, 229, 221, 209, 95, - 247, 101, 208, 15, 79, 229, 221, 209, 95, 247, 101, 221, 139, 79, 229, - 221, 209, 95, 247, 101, 207, 87, 222, 194, 209, 95, 247, 101, 252, 53, - 79, 237, 31, 209, 95, 247, 101, 105, 79, 237, 31, 209, 95, 247, 101, 115, - 79, 237, 31, 209, 95, 247, 101, 232, 128, 79, 237, 31, 209, 95, 247, 101, - 232, 226, 79, 237, 31, 209, 95, 247, 101, 202, 136, 79, 237, 31, 209, 95, - 247, 101, 203, 247, 79, 237, 31, 209, 95, 247, 101, 234, 164, 79, 237, - 31, 209, 95, 247, 101, 213, 175, 79, 237, 31, 209, 95, 247, 101, 199, 96, - 79, 237, 31, 209, 95, 247, 101, 223, 30, 79, 237, 31, 209, 95, 247, 101, - 221, 77, 79, 237, 31, 209, 95, 247, 101, 208, 15, 79, 237, 31, 209, 95, - 247, 101, 221, 139, 79, 237, 31, 209, 95, 247, 101, 62, 222, 194, 209, - 95, 247, 101, 252, 53, 79, 242, 204, 209, 95, 247, 101, 105, 79, 242, - 204, 209, 95, 247, 101, 115, 79, 242, 204, 209, 95, 247, 101, 232, 128, - 79, 242, 204, 209, 95, 247, 101, 232, 226, 79, 242, 204, 209, 95, 247, - 101, 202, 136, 79, 242, 204, 209, 95, 247, 101, 203, 247, 79, 242, 204, - 209, 95, 247, 101, 234, 164, 79, 242, 204, 209, 95, 247, 101, 213, 175, - 79, 242, 204, 209, 95, 247, 101, 199, 96, 79, 242, 204, 209, 95, 247, - 101, 223, 30, 79, 242, 204, 209, 95, 247, 101, 221, 77, 79, 242, 204, - 209, 95, 247, 101, 208, 15, 79, 242, 204, 209, 95, 247, 101, 221, 139, - 79, 242, 204, 209, 95, 247, 101, 63, 222, 194, 209, 95, 247, 101, 232, - 160, 209, 95, 247, 101, 197, 200, 209, 95, 247, 101, 197, 189, 209, 95, - 247, 101, 197, 186, 209, 95, 247, 101, 197, 185, 209, 95, 247, 101, 197, - 184, 209, 95, 247, 101, 197, 183, 209, 95, 247, 101, 197, 182, 209, 95, - 247, 101, 197, 181, 209, 95, 247, 101, 197, 180, 209, 95, 247, 101, 197, - 199, 209, 95, 247, 101, 197, 198, 209, 95, 247, 101, 197, 197, 209, 95, - 247, 101, 197, 196, 209, 95, 247, 101, 197, 195, 209, 95, 247, 101, 197, - 194, 209, 95, 247, 101, 197, 193, 209, 95, 247, 101, 197, 192, 209, 95, - 247, 101, 197, 191, 209, 95, 247, 101, 197, 190, 209, 95, 247, 101, 197, - 188, 209, 95, 247, 101, 197, 187, 17, 191, 78, 232, 80, 201, 63, 17, 191, - 78, 242, 74, 17, 91, 242, 74, 17, 105, 242, 74, 17, 115, 242, 74, 17, - 232, 128, 242, 74, 17, 232, 226, 242, 74, 17, 202, 136, 242, 74, 17, 203, - 247, 242, 74, 17, 234, 164, 242, 74, 17, 213, 175, 242, 74, 236, 241, 47, - 49, 17, 191, 77, 236, 241, 214, 106, 47, 49, 17, 191, 77, 47, 191, 78, 4, - 202, 97, 47, 251, 85, 57, 47, 236, 155, 3, 4, 211, 4, 249, 141, 127, 8, - 6, 1, 65, 127, 8, 6, 1, 250, 120, 127, 8, 6, 1, 247, 193, 127, 8, 6, 1, - 238, 127, 127, 8, 6, 1, 71, 127, 8, 6, 1, 233, 175, 127, 8, 6, 1, 232, - 51, 127, 8, 6, 1, 230, 116, 127, 8, 6, 1, 68, 127, 8, 6, 1, 223, 35, 127, - 8, 6, 1, 222, 152, 127, 8, 6, 1, 172, 127, 8, 6, 1, 218, 168, 127, 8, 6, - 1, 215, 61, 127, 8, 6, 1, 74, 127, 8, 6, 1, 210, 236, 127, 8, 6, 1, 208, - 104, 127, 8, 6, 1, 146, 127, 8, 6, 1, 206, 8, 127, 8, 6, 1, 200, 43, 127, + 13, 49, 28, 17, 134, 13, 49, 28, 17, 150, 13, 49, 28, 17, 169, 13, 49, + 28, 17, 175, 13, 49, 28, 17, 171, 13, 49, 28, 17, 178, 13, 215, 219, 17, + 191, 77, 13, 215, 219, 17, 107, 13, 215, 219, 17, 109, 13, 215, 219, 17, + 138, 13, 215, 219, 17, 134, 13, 215, 219, 17, 150, 13, 215, 219, 17, 169, + 13, 215, 219, 17, 175, 13, 215, 219, 17, 171, 13, 215, 219, 17, 178, 24, + 152, 223, 150, 24, 230, 52, 223, 150, 24, 230, 48, 223, 150, 24, 230, 37, + 223, 150, 24, 230, 41, 223, 150, 24, 230, 54, 223, 150, 24, 152, 141, + 248, 225, 24, 230, 52, 141, 248, 225, 24, 152, 176, 196, 105, 141, 248, + 225, 24, 152, 141, 207, 149, 221, 72, 24, 152, 141, 238, 179, 24, 152, + 141, 229, 126, 24, 152, 141, 229, 127, 218, 243, 24, 230, 52, 141, 229, + 128, 24, 152, 141, 216, 86, 24, 230, 52, 141, 216, 86, 24, 152, 141, 82, + 248, 225, 24, 152, 141, 82, 207, 149, 221, 71, 24, 152, 141, 82, 229, + 126, 24, 152, 141, 133, 82, 229, 126, 24, 152, 141, 229, 127, 82, 196, + 77, 24, 152, 141, 82, 239, 48, 24, 152, 141, 82, 239, 49, 141, 248, 225, + 24, 152, 141, 82, 239, 49, 82, 248, 225, 24, 152, 141, 82, 239, 49, 238, + 179, 24, 152, 141, 82, 239, 49, 229, 126, 24, 152, 141, 82, 238, 215, 24, + 230, 52, 141, 82, 238, 215, 24, 152, 82, 248, 226, 139, 223, 150, 24, + 152, 141, 248, 226, 139, 216, 86, 24, 152, 141, 82, 198, 212, 24, 230, + 52, 141, 82, 198, 212, 24, 152, 141, 82, 201, 54, 176, 248, 225, 24, 152, + 141, 82, 248, 226, 176, 201, 53, 24, 152, 141, 82, 176, 248, 225, 24, + 152, 141, 82, 229, 127, 201, 200, 176, 202, 208, 24, 152, 141, 133, 82, + 229, 127, 176, 202, 208, 24, 152, 141, 133, 82, 229, 127, 176, 239, 48, + 24, 152, 141, 229, 127, 82, 133, 176, 202, 208, 24, 152, 141, 82, 133, + 201, 200, 176, 232, 134, 24, 152, 141, 82, 176, 238, 179, 24, 152, 141, + 82, 176, 243, 11, 24, 152, 141, 82, 176, 228, 251, 24, 152, 141, 82, 176, + 229, 126, 24, 152, 176, 248, 212, 141, 82, 201, 53, 24, 152, 141, 82, + 239, 49, 176, 202, 208, 24, 152, 141, 82, 239, 49, 176, 202, 209, 239, + 48, 24, 152, 141, 82, 239, 49, 176, 202, 209, 248, 225, 24, 152, 82, 176, + 228, 252, 141, 196, 77, 24, 152, 141, 176, 228, 252, 82, 196, 77, 24, + 152, 141, 82, 239, 49, 229, 127, 176, 202, 208, 24, 152, 141, 82, 238, + 216, 176, 202, 208, 24, 152, 141, 82, 239, 49, 176, 232, 134, 24, 152, + 141, 82, 239, 49, 238, 180, 176, 232, 134, 24, 152, 82, 176, 238, 180, + 141, 196, 77, 24, 152, 141, 176, 238, 180, 82, 196, 77, 24, 152, 82, 176, + 47, 141, 196, 77, 24, 152, 82, 176, 47, 141, 229, 126, 24, 152, 141, 176, + 251, 116, 211, 17, 82, 196, 77, 24, 152, 141, 176, 251, 116, 223, 165, + 82, 196, 77, 24, 152, 141, 176, 47, 82, 196, 77, 24, 152, 141, 82, 176, + 239, 49, 229, 126, 24, 152, 141, 82, 176, 251, 116, 211, 16, 24, 152, + 141, 82, 176, 251, 115, 24, 152, 82, 176, 251, 116, 211, 17, 141, 196, + 77, 24, 152, 82, 176, 251, 116, 211, 17, 141, 238, 215, 24, 152, 82, 176, + 251, 116, 141, 196, 77, 24, 152, 141, 176, 228, 252, 82, 229, 126, 24, + 230, 43, 232, 130, 232, 249, 24, 230, 43, 232, 130, 232, 250, 248, 225, + 24, 230, 43, 232, 130, 232, 250, 229, 126, 24, 230, 43, 232, 130, 232, + 250, 239, 48, 24, 230, 43, 232, 130, 232, 250, 239, 49, 201, 210, 24, + 230, 50, 232, 130, 232, 250, 239, 48, 24, 152, 232, 130, 232, 250, 239, + 49, 248, 225, 24, 230, 41, 232, 130, 232, 250, 239, 48, 24, 230, 43, 232, + 228, 232, 250, 201, 199, 24, 230, 43, 229, 215, 232, 228, 232, 250, 201, + 199, 24, 230, 43, 232, 228, 232, 250, 201, 200, 232, 130, 248, 225, 24, + 230, 43, 229, 215, 232, 228, 232, 250, 201, 200, 232, 130, 248, 225, 24, + 230, 43, 232, 228, 232, 250, 201, 200, 248, 225, 24, 230, 43, 229, 215, + 232, 228, 232, 250, 201, 200, 248, 225, 24, 230, 43, 232, 228, 232, 250, + 201, 200, 176, 232, 134, 24, 230, 48, 232, 228, 232, 250, 201, 199, 24, + 230, 48, 232, 228, 232, 250, 201, 200, 211, 78, 24, 230, 41, 232, 228, + 232, 250, 201, 200, 211, 78, 24, 230, 37, 232, 228, 232, 250, 201, 199, + 24, 230, 43, 232, 228, 232, 250, 201, 200, 229, 126, 24, 230, 43, 232, + 228, 232, 250, 201, 200, 229, 127, 176, 202, 208, 24, 230, 43, 232, 228, + 232, 250, 201, 200, 229, 127, 213, 46, 198, 212, 24, 230, 42, 24, 230, + 43, 248, 212, 210, 185, 233, 97, 24, 230, 43, 229, 214, 24, 230, 43, 176, + 202, 208, 24, 230, 43, 229, 215, 176, 202, 208, 24, 230, 43, 176, 248, + 225, 24, 230, 43, 176, 232, 134, 24, 230, 43, 201, 211, 141, 176, 202, + 208, 24, 230, 43, 201, 211, 247, 23, 24, 230, 43, 201, 211, 247, 24, 176, + 202, 208, 24, 230, 43, 201, 211, 247, 24, 176, 202, 209, 248, 225, 24, + 230, 43, 201, 211, 219, 84, 24, 230, 49, 24, 230, 50, 176, 202, 208, 24, + 230, 50, 213, 46, 198, 212, 24, 230, 50, 176, 232, 134, 24, 230, 39, 238, + 175, 24, 230, 38, 24, 230, 48, 211, 78, 24, 230, 47, 24, 230, 48, 211, + 79, 176, 202, 208, 24, 230, 48, 176, 202, 208, 24, 230, 48, 211, 79, 213, + 46, 198, 212, 24, 230, 48, 213, 46, 198, 212, 24, 230, 48, 211, 79, 176, + 232, 134, 24, 230, 48, 176, 232, 134, 24, 230, 46, 211, 78, 24, 230, 45, + 24, 230, 51, 24, 230, 36, 24, 230, 37, 176, 202, 208, 24, 230, 37, 213, + 46, 198, 212, 24, 230, 37, 176, 232, 134, 24, 230, 41, 211, 78, 24, 230, + 41, 211, 79, 176, 232, 134, 24, 230, 40, 24, 230, 41, 202, 71, 24, 230, + 41, 211, 79, 176, 202, 208, 24, 230, 41, 176, 202, 208, 24, 230, 41, 211, + 79, 213, 46, 198, 212, 24, 230, 41, 213, 46, 198, 212, 24, 230, 41, 176, + 202, 209, 198, 35, 223, 150, 24, 230, 41, 176, 248, 212, 82, 206, 189, + 24, 230, 53, 24, 152, 141, 82, 206, 189, 24, 230, 52, 141, 82, 206, 189, + 24, 230, 41, 141, 82, 206, 189, 24, 230, 54, 141, 82, 206, 189, 24, 230, + 41, 219, 84, 24, 152, 141, 82, 206, 190, 248, 225, 24, 152, 141, 82, 206, + 190, 239, 48, 24, 230, 41, 141, 82, 206, 190, 239, 48, 24, 152, 219, 85, + 235, 125, 24, 152, 219, 85, 144, 206, 184, 201, 53, 24, 152, 219, 85, + 144, 206, 184, 238, 164, 24, 152, 219, 85, 144, 211, 28, 243, 11, 24, + 152, 219, 85, 196, 77, 24, 152, 176, 196, 105, 219, 85, 196, 77, 24, 230, + 52, 219, 85, 196, 77, 24, 230, 37, 219, 85, 196, 77, 24, 230, 54, 219, + 85, 196, 77, 24, 152, 219, 85, 207, 149, 221, 72, 24, 152, 219, 85, 248, + 225, 24, 152, 219, 85, 198, 36, 198, 212, 24, 152, 219, 85, 198, 212, 24, + 230, 41, 219, 85, 198, 212, 24, 152, 219, 85, 141, 198, 212, 24, 230, 41, + 219, 85, 141, 198, 212, 24, 230, 54, 219, 85, 141, 176, 141, 176, 211, + 16, 24, 230, 54, 219, 85, 141, 176, 141, 198, 212, 24, 152, 219, 85, 223, + 150, 24, 230, 52, 219, 85, 223, 150, 24, 230, 41, 219, 85, 223, 150, 24, + 230, 54, 219, 85, 223, 150, 24, 152, 141, 82, 219, 84, 24, 230, 52, 141, + 82, 219, 84, 24, 230, 41, 141, 82, 219, 84, 24, 230, 41, 206, 189, 24, + 230, 54, 141, 82, 219, 84, 24, 152, 141, 82, 238, 220, 219, 84, 24, 230, + 52, 141, 82, 238, 220, 219, 84, 24, 152, 206, 190, 235, 125, 24, 230, 41, + 206, 190, 144, 141, 176, 228, 253, 216, 86, 24, 230, 54, 206, 190, 144, + 82, 176, 141, 238, 219, 24, 152, 206, 190, 196, 77, 24, 152, 206, 190, + 207, 149, 221, 72, 24, 152, 206, 190, 219, 84, 24, 230, 52, 206, 190, + 219, 84, 24, 230, 37, 206, 190, 219, 84, 24, 230, 54, 206, 190, 219, 84, + 24, 152, 206, 190, 216, 86, 24, 152, 206, 190, 82, 239, 48, 24, 152, 206, + 190, 82, 207, 149, 221, 71, 24, 152, 206, 190, 223, 150, 24, 152, 206, + 190, 198, 212, 24, 230, 39, 206, 190, 198, 212, 24, 152, 141, 206, 190, + 219, 84, 24, 230, 52, 141, 206, 190, 219, 84, 24, 230, 46, 141, 206, 190, + 219, 85, 211, 106, 24, 230, 39, 141, 206, 190, 219, 85, 211, 16, 24, 230, + 39, 141, 206, 190, 219, 85, 223, 164, 24, 230, 39, 141, 206, 190, 219, + 85, 196, 104, 24, 230, 48, 141, 206, 190, 219, 84, 24, 230, 41, 141, 206, + 190, 219, 84, 24, 230, 54, 141, 206, 190, 219, 85, 211, 16, 24, 230, 54, + 141, 206, 190, 219, 84, 24, 152, 82, 235, 125, 24, 230, 41, 216, 86, 24, + 152, 82, 196, 77, 24, 230, 52, 82, 196, 77, 24, 152, 82, 207, 149, 221, + 72, 24, 152, 82, 133, 176, 202, 208, 24, 230, 39, 82, 198, 212, 24, 152, + 82, 176, 219, 84, 24, 152, 82, 219, 84, 24, 152, 82, 206, 190, 219, 84, + 24, 230, 52, 82, 206, 190, 219, 84, 24, 230, 46, 82, 206, 190, 219, 85, + 211, 106, 24, 230, 48, 82, 206, 190, 219, 84, 24, 230, 41, 82, 206, 190, + 219, 84, 24, 230, 54, 82, 206, 190, 219, 85, 211, 16, 24, 230, 54, 82, + 206, 190, 219, 85, 223, 164, 24, 230, 54, 82, 206, 190, 219, 84, 24, 230, + 52, 82, 206, 190, 219, 85, 248, 225, 24, 230, 50, 82, 206, 190, 219, 85, + 239, 48, 24, 230, 50, 82, 206, 190, 219, 85, 239, 49, 202, 208, 24, 230, + 39, 82, 206, 190, 219, 85, 239, 49, 211, 16, 24, 230, 39, 82, 206, 190, + 219, 85, 239, 49, 223, 164, 24, 230, 39, 82, 206, 190, 219, 85, 239, 48, + 24, 230, 41, 141, 229, 126, 24, 152, 141, 176, 202, 208, 24, 230, 41, + 141, 176, 202, 208, 24, 152, 141, 176, 202, 209, 176, 237, 40, 24, 152, + 141, 176, 202, 209, 176, 239, 48, 24, 152, 141, 176, 202, 209, 176, 248, + 225, 24, 152, 141, 176, 202, 209, 141, 248, 225, 24, 152, 141, 176, 202, + 209, 248, 82, 248, 225, 24, 152, 141, 176, 202, 209, 141, 229, 128, 24, + 152, 141, 176, 232, 135, 141, 201, 53, 24, 152, 141, 176, 232, 135, 141, + 248, 225, 24, 152, 141, 176, 102, 24, 152, 141, 176, 238, 175, 24, 152, + 141, 176, 238, 167, 176, 223, 119, 24, 230, 50, 141, 176, 238, 167, 176, + 223, 119, 24, 152, 141, 176, 238, 167, 176, 196, 104, 24, 152, 141, 176, + 243, 12, 24, 230, 48, 141, 198, 212, 24, 230, 48, 141, 176, 211, 78, 24, + 230, 41, 141, 176, 211, 78, 24, 230, 41, 141, 176, 220, 14, 24, 230, 41, + 141, 198, 212, 24, 230, 41, 141, 176, 202, 71, 24, 230, 54, 141, 176, + 211, 16, 24, 230, 54, 141, 176, 223, 164, 24, 230, 54, 141, 198, 212, 24, + 152, 198, 212, 24, 152, 176, 229, 214, 24, 152, 176, 202, 209, 237, 40, + 24, 152, 176, 202, 209, 239, 48, 24, 152, 176, 202, 209, 248, 225, 24, + 152, 176, 232, 134, 24, 152, 176, 248, 212, 141, 216, 86, 24, 152, 176, + 248, 212, 82, 206, 189, 24, 152, 176, 248, 212, 206, 190, 219, 84, 24, + 152, 176, 196, 105, 105, 232, 249, 24, 152, 176, 139, 105, 232, 249, 24, + 152, 176, 196, 105, 115, 232, 249, 24, 152, 176, 196, 105, 232, 130, 232, + 249, 24, 152, 176, 139, 232, 130, 207, 149, 221, 71, 24, 230, 44, 24, + 152, 229, 214, 24, 198, 37, 202, 170, 24, 198, 37, 215, 130, 24, 198, 37, + 248, 211, 24, 230, 217, 202, 170, 24, 230, 217, 215, 130, 24, 230, 217, + 248, 211, 24, 201, 34, 202, 170, 24, 201, 34, 215, 130, 24, 201, 34, 248, + 211, 24, 248, 20, 202, 170, 24, 248, 20, 215, 130, 24, 248, 20, 248, 211, + 24, 206, 61, 202, 170, 24, 206, 61, 215, 130, 24, 206, 61, 248, 211, 24, + 200, 171, 200, 76, 24, 200, 171, 248, 211, 24, 201, 187, 220, 15, 202, + 170, 24, 201, 187, 2, 202, 170, 24, 201, 187, 220, 15, 215, 130, 24, 201, + 187, 2, 215, 130, 24, 201, 187, 204, 7, 24, 232, 199, 220, 15, 202, 170, + 24, 232, 199, 2, 202, 170, 24, 232, 199, 220, 15, 215, 130, 24, 232, 199, + 2, 215, 130, 24, 232, 199, 204, 7, 24, 201, 187, 232, 199, 251, 156, 24, + 215, 174, 133, 144, 220, 14, 24, 215, 174, 133, 144, 202, 71, 24, 215, + 174, 133, 204, 7, 24, 215, 174, 144, 204, 7, 24, 215, 174, 133, 144, 251, + 157, 220, 14, 24, 215, 174, 133, 144, 251, 157, 202, 71, 24, 215, 174, + 202, 209, 119, 202, 209, 205, 85, 24, 215, 173, 232, 255, 239, 37, 24, + 215, 175, 232, 255, 239, 37, 24, 215, 173, 202, 171, 201, 54, 202, 71, + 24, 215, 173, 202, 171, 201, 54, 216, 214, 24, 215, 173, 202, 171, 201, + 54, 220, 14, 24, 215, 173, 202, 171, 201, 54, 220, 12, 24, 215, 173, 202, + 171, 193, 4, 232, 202, 24, 215, 173, 55, 201, 53, 24, 215, 173, 55, 193, + 4, 232, 202, 24, 215, 173, 55, 251, 156, 24, 215, 173, 55, 251, 157, 193, + 4, 232, 202, 24, 215, 173, 238, 219, 24, 215, 173, 197, 225, 201, 54, + 215, 177, 24, 215, 173, 197, 225, 193, 4, 232, 202, 24, 215, 173, 197, + 225, 251, 156, 24, 215, 173, 197, 225, 251, 157, 193, 4, 232, 202, 24, + 215, 173, 248, 230, 202, 71, 24, 215, 173, 248, 230, 216, 214, 24, 215, + 173, 248, 230, 220, 14, 24, 215, 173, 239, 4, 202, 71, 24, 215, 173, 239, + 4, 216, 214, 24, 215, 173, 239, 4, 220, 14, 24, 215, 173, 239, 4, 206, + 121, 24, 215, 173, 243, 128, 202, 71, 24, 215, 173, 243, 128, 216, 214, + 24, 215, 173, 243, 128, 220, 14, 24, 215, 173, 111, 202, 71, 24, 215, + 173, 111, 216, 214, 24, 215, 173, 111, 220, 14, 24, 215, 173, 191, 21, + 202, 71, 24, 215, 173, 191, 21, 216, 214, 24, 215, 173, 191, 21, 220, 14, + 24, 215, 173, 210, 59, 202, 71, 24, 215, 173, 210, 59, 216, 214, 24, 215, + 173, 210, 59, 220, 14, 24, 198, 3, 206, 119, 202, 170, 24, 198, 3, 206, + 119, 235, 135, 24, 198, 3, 206, 119, 251, 156, 24, 198, 3, 206, 120, 202, + 170, 24, 198, 3, 206, 120, 235, 135, 24, 198, 3, 206, 120, 251, 156, 24, + 198, 3, 203, 145, 24, 198, 3, 250, 253, 201, 219, 202, 170, 24, 198, 3, + 250, 253, 201, 219, 235, 135, 24, 198, 3, 250, 253, 201, 219, 197, 224, + 24, 215, 176, 250, 141, 202, 71, 24, 215, 176, 250, 141, 216, 214, 24, + 215, 176, 250, 141, 220, 14, 24, 215, 176, 250, 141, 220, 12, 24, 215, + 176, 198, 31, 202, 71, 24, 215, 176, 198, 31, 216, 214, 24, 215, 176, + 198, 31, 220, 14, 24, 215, 176, 198, 31, 220, 12, 24, 215, 176, 248, 212, + 250, 141, 202, 71, 24, 215, 176, 248, 212, 250, 141, 216, 214, 24, 215, + 176, 248, 212, 250, 141, 220, 14, 24, 215, 176, 248, 212, 250, 141, 220, + 12, 24, 215, 176, 248, 212, 198, 31, 202, 71, 24, 215, 176, 248, 212, + 198, 31, 216, 214, 24, 215, 176, 248, 212, 198, 31, 220, 14, 24, 215, + 176, 248, 212, 198, 31, 220, 12, 24, 215, 175, 202, 171, 201, 54, 202, + 71, 24, 215, 175, 202, 171, 201, 54, 216, 214, 24, 215, 175, 202, 171, + 201, 54, 220, 14, 24, 215, 175, 202, 171, 201, 54, 220, 12, 24, 215, 175, + 202, 171, 193, 4, 232, 202, 24, 215, 175, 55, 201, 53, 24, 215, 175, 55, + 193, 4, 232, 202, 24, 215, 175, 55, 251, 156, 24, 215, 175, 55, 251, 157, + 193, 4, 232, 202, 24, 215, 175, 238, 219, 24, 215, 175, 197, 225, 201, + 54, 215, 177, 24, 215, 175, 197, 225, 193, 4, 232, 202, 24, 215, 175, + 197, 225, 251, 157, 215, 177, 24, 215, 175, 197, 225, 251, 157, 193, 4, + 232, 202, 24, 215, 175, 248, 229, 24, 215, 175, 239, 4, 202, 71, 24, 215, + 175, 239, 4, 216, 214, 24, 215, 175, 239, 4, 220, 14, 24, 215, 175, 243, + 127, 24, 215, 175, 111, 202, 71, 24, 215, 175, 111, 216, 214, 24, 215, + 175, 111, 220, 14, 24, 215, 175, 191, 21, 202, 71, 24, 215, 175, 191, 21, + 216, 214, 24, 215, 175, 191, 21, 220, 14, 24, 215, 175, 210, 59, 202, 71, + 24, 215, 175, 210, 59, 216, 214, 24, 215, 175, 210, 59, 220, 14, 24, 198, + 4, 206, 120, 202, 170, 24, 198, 4, 206, 120, 235, 135, 24, 198, 4, 206, + 120, 251, 156, 24, 198, 4, 206, 119, 202, 170, 24, 198, 4, 206, 119, 235, + 135, 24, 198, 4, 206, 119, 251, 156, 24, 198, 4, 203, 145, 24, 215, 173, + 238, 167, 208, 25, 202, 71, 24, 215, 173, 238, 167, 208, 25, 216, 214, + 24, 215, 173, 238, 167, 208, 25, 220, 14, 24, 215, 173, 238, 167, 208, + 25, 220, 12, 24, 215, 173, 238, 167, 230, 69, 202, 71, 24, 215, 173, 238, + 167, 230, 69, 216, 214, 24, 215, 173, 238, 167, 230, 69, 220, 14, 24, + 215, 173, 238, 167, 230, 69, 220, 12, 24, 215, 173, 238, 167, 198, 218, + 243, 13, 202, 71, 24, 215, 173, 238, 167, 198, 218, 243, 13, 216, 214, + 24, 215, 173, 228, 145, 202, 71, 24, 215, 173, 228, 145, 216, 214, 24, + 215, 173, 228, 145, 220, 14, 24, 215, 173, 219, 7, 202, 71, 24, 215, 173, + 219, 7, 216, 214, 24, 215, 173, 219, 7, 220, 14, 24, 215, 173, 219, 7, 2, + 235, 135, 24, 215, 173, 193, 139, 238, 167, 55, 202, 71, 24, 215, 173, + 193, 139, 238, 167, 55, 216, 214, 24, 215, 173, 193, 139, 238, 167, 55, + 220, 14, 24, 215, 173, 193, 139, 238, 167, 197, 225, 202, 71, 24, 215, + 173, 193, 139, 238, 167, 197, 225, 216, 214, 24, 215, 173, 193, 139, 238, + 167, 197, 225, 220, 14, 24, 215, 173, 238, 167, 199, 25, 201, 53, 24, + 215, 173, 238, 165, 238, 220, 202, 71, 24, 215, 173, 238, 165, 238, 220, + 216, 214, 24, 206, 119, 202, 170, 24, 206, 119, 235, 135, 24, 206, 119, + 251, 158, 24, 215, 173, 203, 145, 24, 215, 173, 238, 167, 229, 118, 232, + 99, 193, 167, 24, 215, 173, 228, 145, 229, 118, 232, 99, 193, 167, 24, + 215, 173, 219, 7, 229, 118, 232, 99, 193, 167, 24, 215, 173, 193, 139, + 229, 118, 232, 99, 193, 167, 24, 206, 119, 202, 171, 229, 118, 232, 99, + 193, 167, 24, 206, 119, 55, 229, 118, 232, 99, 193, 167, 24, 206, 119, + 251, 157, 229, 118, 232, 99, 193, 167, 24, 215, 173, 238, 167, 229, 118, + 243, 106, 24, 215, 173, 228, 145, 229, 118, 243, 106, 24, 215, 173, 219, + 7, 229, 118, 243, 106, 24, 215, 173, 193, 139, 229, 118, 243, 106, 24, + 206, 119, 202, 171, 229, 118, 243, 106, 24, 206, 119, 55, 229, 118, 243, + 106, 24, 206, 119, 251, 157, 229, 118, 243, 106, 24, 215, 173, 193, 139, + 237, 41, 210, 88, 202, 71, 24, 215, 173, 193, 139, 237, 41, 210, 88, 216, + 214, 24, 215, 173, 193, 139, 237, 41, 210, 88, 220, 14, 24, 215, 175, + 238, 167, 229, 118, 247, 33, 202, 71, 24, 215, 175, 238, 167, 229, 118, + 247, 33, 220, 14, 24, 215, 175, 228, 145, 229, 118, 247, 33, 2, 235, 135, + 24, 215, 175, 228, 145, 229, 118, 247, 33, 220, 15, 235, 135, 24, 215, + 175, 228, 145, 229, 118, 247, 33, 2, 197, 224, 24, 215, 175, 228, 145, + 229, 118, 247, 33, 220, 15, 197, 224, 24, 215, 175, 219, 7, 229, 118, + 247, 33, 2, 202, 170, 24, 215, 175, 219, 7, 229, 118, 247, 33, 220, 15, + 202, 170, 24, 215, 175, 219, 7, 229, 118, 247, 33, 2, 235, 135, 24, 215, + 175, 219, 7, 229, 118, 247, 33, 220, 15, 235, 135, 24, 215, 175, 193, + 139, 229, 118, 247, 33, 202, 71, 24, 215, 175, 193, 139, 229, 118, 247, + 33, 220, 14, 24, 206, 120, 202, 171, 229, 118, 247, 32, 24, 206, 120, 55, + 229, 118, 247, 32, 24, 206, 120, 251, 157, 229, 118, 247, 32, 24, 215, + 175, 238, 167, 229, 118, 232, 196, 202, 71, 24, 215, 175, 238, 167, 229, + 118, 232, 196, 220, 14, 24, 215, 175, 228, 145, 229, 118, 232, 196, 2, + 235, 135, 24, 215, 175, 228, 145, 229, 118, 232, 196, 220, 15, 235, 135, + 24, 215, 175, 228, 145, 229, 118, 232, 196, 197, 225, 2, 197, 224, 24, + 215, 175, 228, 145, 229, 118, 232, 196, 197, 225, 220, 15, 197, 224, 24, + 215, 175, 219, 7, 229, 118, 232, 196, 2, 202, 170, 24, 215, 175, 219, 7, + 229, 118, 232, 196, 220, 15, 202, 170, 24, 215, 175, 219, 7, 229, 118, + 232, 196, 2, 235, 135, 24, 215, 175, 219, 7, 229, 118, 232, 196, 220, 15, + 235, 135, 24, 215, 175, 193, 139, 229, 118, 232, 196, 202, 71, 24, 215, + 175, 193, 139, 229, 118, 232, 196, 220, 14, 24, 206, 120, 202, 171, 229, + 118, 232, 195, 24, 206, 120, 55, 229, 118, 232, 195, 24, 206, 120, 251, + 157, 229, 118, 232, 195, 24, 215, 175, 238, 167, 202, 71, 24, 215, 175, + 238, 167, 216, 214, 24, 215, 175, 238, 167, 220, 14, 24, 215, 175, 238, + 167, 220, 12, 24, 215, 175, 238, 167, 242, 80, 24, 215, 175, 228, 145, + 202, 71, 24, 215, 175, 219, 7, 202, 71, 24, 215, 175, 193, 139, 202, 59, + 24, 215, 175, 193, 139, 202, 71, 24, 215, 175, 193, 139, 220, 14, 24, + 206, 120, 202, 170, 24, 206, 120, 235, 135, 24, 206, 120, 251, 156, 24, + 215, 175, 203, 146, 210, 120, 24, 215, 173, 250, 253, 243, 13, 2, 202, + 170, 24, 215, 173, 250, 253, 243, 13, 216, 215, 202, 170, 24, 215, 173, + 250, 253, 243, 13, 2, 235, 135, 24, 215, 173, 250, 253, 243, 13, 216, + 215, 235, 135, 24, 215, 175, 250, 253, 243, 13, 229, 118, 193, 168, 2, + 202, 170, 24, 215, 175, 250, 253, 243, 13, 229, 118, 193, 168, 216, 215, + 202, 170, 24, 215, 175, 250, 253, 243, 13, 229, 118, 193, 168, 220, 15, + 202, 170, 24, 215, 175, 250, 253, 243, 13, 229, 118, 193, 168, 2, 235, + 135, 24, 215, 175, 250, 253, 243, 13, 229, 118, 193, 168, 216, 215, 235, + 135, 24, 215, 175, 250, 253, 243, 13, 229, 118, 193, 168, 220, 15, 235, + 135, 24, 215, 173, 193, 4, 243, 13, 232, 99, 202, 170, 24, 215, 173, 193, + 4, 243, 13, 232, 99, 235, 135, 24, 215, 175, 193, 4, 243, 13, 229, 118, + 193, 168, 202, 170, 24, 215, 175, 193, 4, 243, 13, 229, 118, 193, 168, + 235, 135, 24, 215, 173, 232, 255, 243, 10, 202, 170, 24, 215, 173, 232, + 255, 243, 10, 235, 135, 24, 215, 175, 232, 255, 243, 10, 229, 118, 193, + 168, 202, 170, 24, 215, 175, 232, 255, 243, 10, 229, 118, 193, 168, 235, + 135, 24, 235, 42, 250, 238, 202, 71, 24, 235, 42, 250, 238, 220, 14, 24, + 235, 42, 233, 75, 24, 235, 42, 202, 76, 24, 235, 42, 199, 88, 24, 235, + 42, 207, 64, 24, 235, 42, 202, 177, 24, 235, 42, 202, 178, 251, 156, 24, + 235, 42, 233, 227, 211, 29, 198, 146, 24, 235, 42, 230, 228, 24, 229, + 237, 24, 229, 238, 206, 194, 24, 229, 238, 215, 173, 201, 53, 24, 229, + 238, 215, 173, 198, 149, 24, 229, 238, 215, 175, 201, 53, 24, 229, 238, + 215, 173, 238, 166, 24, 229, 238, 215, 175, 238, 166, 24, 229, 238, 215, + 178, 243, 12, 24, 233, 106, 236, 235, 209, 27, 213, 16, 232, 135, 198, + 147, 24, 233, 106, 236, 235, 209, 27, 213, 16, 133, 211, 59, 235, 125, + 24, 233, 106, 236, 235, 209, 27, 213, 16, 133, 211, 59, 144, 198, 147, + 24, 233, 193, 201, 54, 196, 77, 24, 233, 193, 201, 54, 214, 83, 24, 233, + 193, 201, 54, 235, 125, 24, 235, 109, 233, 193, 214, 84, 235, 125, 24, + 235, 109, 233, 193, 144, 214, 83, 24, 235, 109, 233, 193, 133, 214, 83, + 24, 235, 109, 233, 193, 214, 84, 196, 77, 24, 232, 153, 214, 83, 24, 232, + 153, 239, 37, 24, 232, 153, 193, 7, 24, 233, 188, 211, 78, 24, 233, 188, + 201, 186, 24, 233, 188, 242, 220, 24, 233, 196, 248, 132, 202, 170, 24, + 233, 196, 248, 132, 215, 130, 24, 233, 188, 132, 211, 78, 24, 233, 188, + 193, 78, 211, 78, 24, 233, 188, 132, 242, 220, 24, 233, 188, 193, 76, + 215, 177, 24, 233, 196, 193, 58, 24, 233, 189, 196, 77, 24, 233, 189, + 235, 125, 24, 233, 189, 232, 182, 24, 233, 191, 201, 53, 24, 233, 191, + 201, 54, 235, 135, 24, 233, 191, 201, 54, 251, 156, 24, 233, 192, 201, + 53, 24, 233, 192, 201, 54, 235, 135, 24, 233, 192, 201, 54, 251, 156, 24, + 233, 191, 238, 164, 24, 233, 192, 238, 164, 24, 233, 191, 243, 7, 24, + 243, 123, 208, 157, 24, 243, 123, 214, 83, 24, 243, 123, 200, 218, 24, + 199, 89, 243, 123, 229, 137, 24, 199, 89, 243, 123, 216, 86, 24, 199, 89, + 243, 123, 218, 243, 24, 234, 211, 24, 213, 16, 214, 83, 24, 213, 16, 239, + 37, 24, 213, 16, 193, 5, 24, 213, 16, 193, 73, 24, 251, 228, 248, 118, + 211, 16, 24, 251, 228, 200, 217, 223, 164, 24, 251, 228, 248, 120, 2, + 206, 118, 24, 251, 228, 200, 219, 2, 206, 118, 24, 248, 41, 223, 136, 24, + 248, 41, 233, 216, 24, 215, 182, 242, 221, 214, 83, 24, 215, 182, 242, + 221, 232, 134, 24, 215, 182, 242, 221, 239, 37, 24, 215, 182, 202, 66, + 24, 215, 182, 202, 67, 193, 7, 24, 215, 182, 202, 67, 211, 78, 24, 215, + 182, 232, 95, 24, 215, 182, 232, 96, 193, 7, 24, 215, 182, 232, 96, 211, + 78, 24, 215, 182, 211, 79, 243, 12, 24, 215, 182, 211, 79, 232, 134, 24, + 215, 182, 211, 79, 193, 7, 24, 215, 182, 211, 79, 211, 9, 24, 215, 182, + 211, 79, 211, 10, 193, 7, 24, 215, 182, 211, 79, 211, 10, 192, 88, 24, + 215, 182, 211, 79, 207, 94, 24, 215, 182, 211, 79, 207, 95, 193, 7, 24, + 215, 182, 211, 79, 207, 95, 192, 88, 24, 215, 182, 221, 124, 24, 215, + 182, 221, 125, 232, 134, 24, 215, 182, 221, 125, 193, 7, 24, 215, 182, + 199, 88, 24, 215, 182, 199, 89, 232, 134, 24, 215, 182, 199, 89, 200, + 218, 24, 219, 99, 208, 221, 198, 87, 24, 219, 101, 110, 139, 196, 74, 24, + 219, 101, 116, 139, 218, 238, 24, 215, 182, 239, 2, 24, 215, 182, 193, 6, + 202, 170, 24, 215, 182, 193, 6, 235, 135, 24, 198, 62, 201, 75, 211, 17, + 233, 77, 24, 198, 62, 219, 144, 219, 98, 24, 198, 62, 198, 136, 248, 212, + 219, 98, 24, 198, 62, 198, 136, 198, 35, 223, 120, 215, 181, 24, 198, 62, + 223, 120, 215, 182, 207, 64, 24, 198, 62, 215, 172, 251, 253, 243, 124, + 24, 198, 62, 247, 24, 201, 75, 211, 16, 24, 198, 62, 247, 24, 223, 120, + 215, 181, 24, 199, 117, 24, 199, 118, 215, 177, 24, 199, 118, 211, 107, + 198, 61, 24, 199, 118, 211, 107, 198, 62, 215, 177, 24, 199, 118, 211, + 107, 219, 98, 24, 199, 118, 211, 107, 219, 99, 215, 177, 24, 199, 118, + 248, 148, 219, 98, 24, 215, 173, 223, 16, 24, 215, 175, 223, 16, 24, 214, + 114, 24, 230, 80, 24, 233, 219, 24, 203, 23, 229, 125, 201, 220, 24, 203, + 23, 229, 125, 209, 25, 24, 193, 165, 203, 23, 229, 125, 215, 180, 24, + 232, 194, 203, 23, 229, 125, 215, 180, 24, 203, 23, 198, 148, 232, 100, + 193, 172, 24, 198, 43, 201, 54, 201, 38, 24, 198, 43, 238, 165, 248, 229, + 24, 198, 44, 197, 16, 24, 116, 248, 107, 198, 148, 232, 100, 229, 125, + 222, 197, 24, 219, 126, 242, 81, 24, 219, 126, 219, 199, 24, 219, 126, + 219, 198, 24, 219, 126, 219, 197, 24, 219, 126, 219, 196, 24, 219, 126, + 219, 195, 24, 219, 126, 219, 194, 24, 219, 126, 219, 193, 24, 232, 254, + 24, 219, 39, 201, 248, 24, 219, 40, 201, 248, 24, 219, 42, 229, 210, 24, + 219, 42, 193, 74, 24, 219, 42, 237, 94, 24, 219, 42, 229, 238, 214, 114, + 24, 219, 42, 198, 45, 24, 219, 42, 219, 125, 237, 11, 24, 242, 76, 24, + 232, 82, 201, 64, 24, 204, 26, 24, 242, 85, 24, 210, 115, 24, 233, 8, + 215, 246, 24, 233, 8, 215, 245, 24, 233, 8, 215, 244, 24, 233, 8, 215, + 243, 24, 233, 8, 215, 242, 24, 206, 122, 215, 246, 24, 206, 122, 215, + 245, 24, 206, 122, 215, 244, 24, 206, 122, 215, 243, 24, 206, 122, 215, + 242, 24, 206, 122, 215, 241, 24, 206, 122, 215, 240, 24, 206, 122, 215, + 239, 24, 206, 122, 215, 253, 24, 206, 122, 215, 252, 24, 206, 122, 215, + 251, 24, 206, 122, 215, 250, 24, 206, 122, 215, 249, 24, 206, 122, 215, + 248, 24, 206, 122, 215, 247, 8, 2, 1, 233, 39, 237, 5, 4, 197, 228, 8, 2, + 1, 207, 19, 27, 232, 53, 8, 1, 2, 6, 154, 232, 53, 8, 2, 1, 207, 19, 222, + 154, 8, 1, 2, 6, 220, 145, 4, 248, 233, 8, 2, 1, 219, 165, 4, 207, 25, + 102, 8, 2, 1, 154, 192, 160, 4, 248, 233, 8, 2, 1, 207, 19, 234, 90, 8, + 2, 1, 154, 207, 224, 4, 180, 219, 215, 23, 207, 25, 102, 8, 2, 1, 200, + 44, 4, 228, 253, 23, 207, 25, 102, 8, 1, 207, 25, 242, 234, 4, 207, 25, + 102, 8, 2, 1, 234, 15, 4, 55, 164, 8, 2, 1, 234, 15, 4, 55, 249, 90, 23, + 238, 177, 8, 2, 1, 154, 200, 44, 4, 238, 177, 8, 1, 223, 95, 231, 13, + 201, 65, 4, 238, 177, 8, 1, 201, 37, 247, 196, 4, 238, 177, 8, 1, 2, 6, + 154, 222, 154, 8, 2, 1, 220, 145, 4, 232, 235, 8, 2, 1, 237, 72, 237, 5, + 4, 210, 194, 102, 8, 2, 1, 220, 145, 4, 248, 234, 23, 210, 194, 102, 8, + 2, 1, 234, 91, 4, 210, 194, 102, 8, 2, 1, 154, 207, 224, 4, 210, 194, + 102, 8, 2, 1, 207, 224, 4, 232, 236, 23, 210, 194, 102, 8, 2, 1, 199, 79, + 237, 5, 4, 210, 194, 102, 8, 2, 1, 233, 181, 4, 210, 194, 102, 8, 2, 1, + 237, 72, 237, 5, 4, 207, 25, 102, 8, 2, 1, 228, 76, 4, 201, 29, 23, 207, + 25, 102, 8, 2, 1, 187, 4, 207, 25, 102, 8, 2, 1, 199, 79, 237, 5, 4, 207, + 25, 102, 8, 2, 1, 247, 196, 4, 207, 25, 102, 8, 2, 1, 206, 10, 4, 238, + 177, 8, 2, 1, 238, 130, 4, 216, 88, 45, 102, 8, 2, 1, 220, 145, 4, 216, + 88, 45, 102, 8, 2, 1, 215, 64, 4, 216, 88, 45, 102, 8, 2, 1, 207, 224, 4, + 216, 88, 45, 102, 8, 2, 1, 206, 10, 4, 216, 88, 45, 102, 8, 2, 1, 200, + 44, 4, 216, 88, 45, 102, 33, 135, 1, 250, 124, 33, 135, 1, 247, 254, 33, + 135, 1, 195, 151, 33, 135, 1, 231, 20, 33, 135, 1, 236, 171, 33, 135, 1, + 192, 49, 33, 135, 1, 191, 55, 33, 135, 1, 191, 82, 33, 135, 1, 223, 41, + 33, 135, 1, 89, 223, 41, 33, 135, 1, 68, 33, 135, 1, 236, 192, 33, 135, + 1, 222, 96, 33, 135, 1, 219, 77, 33, 135, 1, 215, 68, 33, 135, 1, 214, + 212, 33, 135, 1, 211, 91, 33, 135, 1, 209, 57, 33, 135, 1, 206, 180, 33, + 135, 1, 202, 78, 33, 135, 1, 197, 44, 33, 135, 1, 196, 124, 33, 135, 1, + 232, 103, 33, 135, 1, 229, 190, 33, 135, 1, 203, 9, 33, 135, 1, 197, 146, + 33, 135, 1, 243, 56, 33, 135, 1, 203, 166, 33, 135, 1, 192, 58, 33, 135, + 1, 192, 60, 33, 135, 1, 192, 93, 33, 135, 1, 191, 225, 33, 135, 1, 2, + 191, 190, 33, 135, 1, 192, 12, 33, 135, 1, 223, 84, 2, 191, 190, 33, 135, + 1, 248, 177, 191, 190, 33, 135, 1, 223, 84, 248, 177, 191, 190, 33, 135, + 1, 232, 230, 52, 1, 38, 2, 65, 52, 1, 38, 2, 249, 19, 52, 1, 38, 2, 195, + 153, 52, 1, 38, 2, 231, 79, 52, 1, 38, 2, 237, 148, 52, 1, 38, 2, 223, + 228, 52, 1, 38, 2, 191, 62, 52, 1, 38, 2, 191, 87, 52, 1, 38, 2, 68, 52, + 1, 38, 2, 155, 52, 1, 38, 2, 234, 142, 52, 1, 38, 2, 234, 116, 52, 1, 38, + 2, 74, 52, 1, 38, 2, 210, 65, 52, 1, 38, 2, 234, 36, 52, 1, 38, 2, 234, + 24, 52, 1, 38, 2, 199, 145, 52, 1, 38, 2, 66, 52, 1, 38, 2, 234, 183, 52, + 1, 38, 2, 140, 52, 1, 38, 2, 197, 161, 52, 1, 38, 2, 243, 129, 52, 1, 38, + 2, 203, 166, 52, 1, 38, 2, 192, 58, 52, 1, 38, 2, 71, 52, 1, 38, 2, 191, + 225, 52, 1, 38, 2, 235, 19, 52, 1, 38, 2, 205, 87, 52, 1, 38, 2, 247, + 205, 68, 52, 1, 38, 2, 223, 12, 52, 1, 38, 2, 249, 84, 74, 52, 1, 38, 2, + 201, 54, 66, 52, 1, 38, 2, 210, 181, 38, 200, 231, 2, 1, 65, 38, 200, + 231, 2, 1, 249, 19, 38, 200, 231, 2, 1, 195, 153, 38, 200, 231, 2, 1, + 231, 79, 38, 200, 231, 2, 1, 237, 148, 38, 200, 231, 2, 1, 223, 228, 38, + 200, 231, 2, 1, 191, 62, 38, 200, 231, 2, 1, 191, 87, 38, 200, 231, 2, 1, + 68, 38, 200, 231, 2, 1, 155, 38, 200, 231, 2, 1, 234, 142, 38, 200, 231, + 2, 1, 74, 38, 200, 231, 2, 1, 210, 65, 38, 200, 231, 2, 1, 234, 24, 38, + 200, 231, 2, 1, 66, 38, 200, 231, 2, 1, 234, 183, 38, 200, 231, 2, 1, + 140, 38, 200, 231, 2, 1, 197, 161, 38, 200, 231, 2, 1, 243, 129, 38, 200, + 231, 2, 1, 203, 166, 38, 200, 231, 2, 1, 230, 19, 56, 38, 200, 231, 2, 1, + 192, 58, 38, 200, 231, 2, 1, 231, 80, 4, 196, 69, 38, 200, 231, 2, 1, + 247, 205, 68, 38, 200, 231, 2, 1, 235, 34, 38, 200, 231, 2, 1, 235, 30, + 52, 1, 38, 2, 234, 25, 4, 237, 89, 52, 1, 38, 2, 192, 59, 4, 249, 149, + 192, 62, 52, 1, 38, 2, 201, 54, 126, 4, 106, 33, 38, 2, 1, 247, 205, 68, + 212, 82, 208, 164, 90, 1, 174, 212, 82, 208, 164, 90, 1, 197, 168, 212, + 82, 208, 164, 90, 1, 212, 201, 212, 82, 208, 164, 90, 1, 190, 190, 212, + 82, 208, 164, 90, 1, 140, 212, 82, 208, 164, 90, 1, 181, 212, 82, 208, + 164, 90, 1, 192, 220, 212, 82, 208, 164, 90, 1, 213, 113, 212, 82, 208, + 164, 90, 1, 247, 162, 212, 82, 208, 164, 90, 1, 173, 212, 82, 208, 164, + 90, 1, 188, 212, 82, 208, 164, 90, 1, 191, 123, 212, 82, 208, 164, 90, 1, + 214, 168, 212, 82, 208, 164, 90, 1, 212, 188, 212, 82, 208, 164, 90, 1, + 155, 212, 82, 208, 164, 90, 1, 238, 34, 212, 82, 208, 164, 90, 1, 212, + 103, 212, 82, 208, 164, 90, 1, 212, 246, 212, 82, 208, 164, 90, 1, 195, + 188, 212, 82, 208, 164, 90, 1, 212, 182, 212, 82, 208, 164, 90, 1, 197, + 8, 212, 82, 208, 164, 90, 1, 233, 111, 212, 82, 208, 164, 90, 1, 165, + 212, 82, 208, 164, 90, 1, 208, 98, 212, 82, 208, 164, 90, 1, 170, 212, + 82, 208, 164, 90, 1, 212, 248, 212, 82, 208, 164, 90, 1, 168, 212, 82, + 208, 164, 90, 1, 192, 175, 212, 82, 208, 164, 90, 1, 212, 250, 212, 82, + 208, 164, 90, 1, 236, 188, 212, 82, 208, 164, 90, 1, 212, 249, 212, 82, + 208, 164, 90, 1, 230, 83, 212, 82, 208, 164, 90, 1, 216, 21, 212, 82, + 208, 164, 90, 1, 209, 112, 212, 82, 208, 164, 90, 1, 231, 242, 212, 82, + 208, 164, 90, 1, 206, 110, 212, 82, 208, 164, 90, 1, 65, 212, 82, 208, + 164, 90, 1, 252, 208, 212, 82, 208, 164, 90, 1, 68, 212, 82, 208, 164, + 90, 1, 66, 212, 82, 208, 164, 90, 1, 74, 212, 82, 208, 164, 90, 1, 211, + 89, 212, 82, 208, 164, 90, 1, 71, 212, 82, 208, 164, 90, 1, 234, 190, + 212, 82, 208, 164, 90, 1, 193, 224, 212, 82, 208, 164, 90, 198, 70, 212, + 82, 208, 164, 90, 198, 66, 212, 82, 208, 164, 90, 198, 67, 212, 82, 208, + 164, 90, 198, 64, 212, 82, 208, 164, 90, 198, 65, 212, 82, 208, 164, 90, + 198, 68, 212, 82, 208, 164, 90, 198, 69, 212, 82, 208, 164, 90, 3, 40, + 209, 252, 212, 82, 208, 164, 90, 3, 40, 199, 3, 212, 82, 208, 164, 90, 3, + 40, 219, 41, 212, 82, 208, 164, 90, 3, 40, 251, 103, 212, 82, 208, 164, + 90, 3, 40, 223, 96, 212, 82, 208, 164, 90, 3, 192, 183, 192, 182, 212, + 82, 208, 164, 90, 5, 219, 192, 212, 82, 208, 164, 90, 17, 191, 77, 212, + 82, 208, 164, 90, 17, 107, 212, 82, 208, 164, 90, 17, 109, 212, 82, 208, + 164, 90, 17, 138, 212, 82, 208, 164, 90, 17, 134, 212, 82, 208, 164, 90, + 17, 150, 212, 82, 208, 164, 90, 17, 169, 212, 82, 208, 164, 90, 17, 175, + 212, 82, 208, 164, 90, 17, 171, 212, 82, 208, 164, 90, 17, 178, 212, 82, + 208, 164, 90, 219, 30, 212, 98, 212, 82, 208, 164, 90, 47, 247, 162, 198, + 38, 1, 168, 198, 38, 1, 249, 155, 198, 38, 1, 190, 190, 198, 38, 1, 238, + 34, 198, 38, 1, 155, 198, 38, 1, 231, 242, 198, 38, 1, 174, 198, 38, 1, + 181, 198, 38, 1, 214, 70, 198, 38, 1, 188, 198, 38, 1, 247, 3, 198, 38, + 1, 170, 198, 38, 1, 193, 190, 198, 38, 1, 223, 34, 198, 38, 1, 140, 198, + 38, 1, 165, 198, 38, 1, 173, 198, 38, 1, 68, 198, 38, 1, 248, 40, 68, + 198, 38, 1, 223, 51, 198, 38, 1, 248, 40, 223, 51, 198, 38, 1, 66, 198, + 38, 1, 71, 198, 38, 1, 248, 40, 71, 198, 38, 1, 234, 67, 198, 38, 1, 248, + 40, 234, 67, 198, 38, 1, 74, 198, 38, 1, 252, 27, 198, 38, 1, 248, 40, + 252, 27, 198, 38, 1, 65, 198, 38, 3, 206, 181, 198, 79, 193, 163, 1, 252, + 208, 193, 163, 1, 65, 193, 163, 1, 249, 155, 193, 163, 1, 247, 162, 193, + 163, 1, 238, 34, 193, 163, 1, 231, 242, 193, 163, 1, 170, 193, 163, 1, + 209, 230, 193, 163, 1, 173, 193, 163, 1, 181, 193, 163, 1, 168, 193, 163, + 1, 190, 190, 193, 163, 1, 199, 49, 193, 163, 1, 233, 111, 193, 163, 1, + 188, 193, 163, 1, 203, 166, 193, 163, 1, 223, 34, 193, 163, 1, 191, 123, + 193, 163, 1, 193, 190, 193, 163, 1, 195, 188, 193, 163, 1, 155, 193, 163, + 1, 74, 193, 163, 1, 250, 165, 193, 163, 1, 165, 193, 163, 1, 174, 193, + 163, 1, 221, 217, 193, 163, 1, 140, 193, 163, 1, 71, 193, 163, 1, 68, + 193, 163, 1, 214, 70, 193, 163, 1, 66, 193, 163, 1, 219, 68, 193, 163, 1, + 197, 168, 193, 163, 1, 198, 26, 193, 163, 1, 211, 96, 193, 163, 1, 252, + 167, 193, 163, 1, 251, 124, 193, 163, 1, 223, 138, 193, 163, 1, 211, 106, + 193, 163, 1, 234, 105, 193, 163, 1, 252, 168, 193, 163, 1, 212, 103, 193, + 163, 1, 196, 147, 193, 163, 1, 192, 24, 193, 163, 163, 197, 67, 193, 163, + 163, 197, 66, 193, 163, 163, 221, 56, 193, 163, 163, 221, 55, 193, 163, + 17, 191, 77, 193, 163, 17, 107, 193, 163, 17, 109, 193, 163, 17, 138, + 193, 163, 17, 134, 193, 163, 17, 150, 193, 163, 17, 169, 193, 163, 17, + 175, 193, 163, 17, 171, 193, 163, 17, 178, 193, 163, 213, 234, 56, 214, + 245, 215, 122, 1, 74, 214, 245, 215, 122, 1, 211, 80, 214, 245, 215, 122, + 1, 211, 122, 214, 245, 215, 122, 1, 210, 244, 214, 245, 215, 122, 1, 211, + 96, 214, 245, 215, 122, 1, 65, 214, 245, 215, 122, 1, 251, 220, 214, 245, + 215, 122, 1, 252, 157, 214, 245, 215, 122, 1, 251, 71, 214, 245, 215, + 122, 1, 251, 247, 214, 245, 215, 122, 1, 68, 214, 245, 215, 122, 1, 223, + 70, 214, 245, 215, 122, 1, 228, 20, 214, 245, 215, 122, 1, 223, 55, 214, + 245, 215, 122, 1, 223, 202, 214, 245, 215, 122, 1, 66, 214, 245, 215, + 122, 1, 196, 160, 214, 245, 215, 122, 1, 196, 158, 214, 245, 215, 122, 1, + 196, 128, 214, 245, 215, 122, 1, 196, 62, 214, 245, 215, 122, 1, 71, 214, + 245, 215, 122, 1, 234, 87, 214, 245, 215, 122, 1, 234, 182, 214, 245, + 215, 122, 1, 234, 116, 214, 245, 215, 122, 1, 234, 105, 214, 245, 215, + 122, 1, 233, 247, 214, 245, 215, 122, 1, 234, 124, 214, 245, 215, 122, 3, + 211, 129, 214, 245, 215, 122, 3, 215, 140, 214, 245, 215, 122, 3, 198, + 28, 214, 245, 215, 122, 3, 223, 195, 214, 245, 215, 122, 3, 200, 161, + 214, 245, 215, 122, 17, 191, 77, 214, 245, 215, 122, 17, 107, 214, 245, + 215, 122, 17, 109, 214, 245, 215, 122, 17, 138, 214, 245, 215, 122, 17, + 134, 214, 245, 215, 122, 17, 150, 214, 245, 215, 122, 17, 169, 214, 245, + 215, 122, 17, 175, 214, 245, 215, 122, 17, 171, 214, 245, 215, 122, 17, + 178, 36, 5, 229, 168, 36, 5, 229, 162, 36, 5, 229, 164, 36, 5, 229, 167, + 36, 5, 229, 165, 36, 5, 229, 166, 36, 5, 229, 163, 36, 5, 230, 149, 229, + 172, 36, 5, 229, 169, 36, 5, 229, 170, 36, 5, 229, 171, 36, 5, 230, 149, + 215, 78, 36, 5, 230, 149, 215, 79, 36, 5, 230, 149, 207, 238, 36, 5, 230, + 149, 207, 239, 36, 5, 230, 149, 207, 240, 36, 5, 230, 149, 247, 209, 36, + 5, 230, 149, 247, 210, 36, 5, 230, 149, 220, 174, 36, 5, 230, 149, 220, + 175, 36, 5, 230, 149, 220, 176, 36, 5, 230, 149, 230, 133, 36, 5, 230, + 149, 230, 134, 36, 5, 230, 149, 230, 135, 36, 5, 230, 149, 232, 60, 36, + 5, 230, 149, 232, 61, 36, 5, 230, 149, 208, 120, 36, 5, 230, 149, 208, + 121, 85, 84, 5, 218, 169, 221, 168, 85, 84, 5, 218, 165, 155, 85, 84, 5, + 218, 163, 220, 234, 85, 84, 5, 218, 39, 222, 15, 85, 84, 5, 218, 9, 222, + 24, 85, 84, 5, 218, 28, 221, 43, 85, 84, 5, 218, 56, 221, 69, 85, 84, 5, + 217, 181, 220, 221, 85, 84, 5, 218, 160, 193, 86, 85, 84, 5, 218, 158, + 193, 190, 85, 84, 5, 218, 156, 193, 0, 85, 84, 5, 217, 234, 193, 114, 85, + 84, 5, 217, 242, 193, 125, 85, 84, 5, 217, 246, 193, 29, 85, 84, 5, 218, + 59, 193, 48, 85, 84, 5, 217, 166, 192, 252, 85, 84, 5, 217, 217, 193, + 112, 85, 84, 5, 218, 43, 192, 240, 85, 84, 5, 218, 55, 192, 242, 85, 84, + 5, 217, 221, 192, 241, 85, 84, 5, 218, 154, 216, 46, 85, 84, 5, 218, 152, + 217, 92, 85, 84, 5, 218, 150, 215, 124, 85, 84, 5, 218, 45, 216, 188, 85, + 84, 5, 218, 10, 215, 233, 85, 84, 5, 217, 206, 215, 150, 85, 84, 5, 217, + 171, 215, 144, 85, 84, 5, 218, 148, 248, 190, 85, 84, 5, 218, 145, 249, + 155, 85, 84, 5, 218, 143, 248, 12, 85, 84, 5, 217, 210, 249, 3, 85, 84, + 5, 218, 7, 249, 19, 85, 84, 5, 218, 1, 248, 99, 85, 84, 5, 217, 222, 248, + 113, 85, 84, 5, 218, 133, 68, 85, 84, 5, 218, 131, 65, 85, 84, 5, 218, + 129, 66, 85, 84, 5, 217, 197, 234, 190, 85, 84, 5, 218, 4, 71, 85, 84, 5, + 217, 195, 211, 89, 85, 84, 5, 217, 213, 74, 85, 84, 5, 217, 223, 234, + 168, 85, 84, 5, 217, 229, 223, 164, 85, 84, 5, 217, 225, 223, 164, 85, + 84, 5, 217, 165, 251, 134, 85, 84, 5, 217, 182, 234, 105, 85, 84, 5, 218, + 118, 202, 223, 85, 84, 5, 218, 116, 188, 85, 84, 5, 218, 114, 201, 5, 85, + 84, 5, 217, 198, 205, 51, 85, 84, 5, 217, 244, 205, 69, 85, 84, 5, 217, + 224, 202, 17, 85, 84, 5, 218, 25, 202, 47, 85, 84, 5, 217, 164, 202, 216, + 85, 84, 5, 218, 104, 219, 148, 85, 84, 5, 218, 102, 173, 85, 84, 5, 218, + 100, 218, 227, 85, 84, 5, 218, 20, 219, 230, 85, 84, 5, 218, 31, 219, + 240, 85, 84, 5, 218, 50, 219, 10, 85, 84, 5, 217, 207, 219, 45, 85, 84, + 5, 217, 250, 180, 219, 240, 85, 84, 5, 218, 126, 237, 46, 85, 84, 5, 218, + 123, 238, 34, 85, 84, 5, 218, 120, 235, 91, 85, 84, 5, 218, 15, 237, 133, + 85, 84, 5, 217, 180, 236, 148, 85, 84, 5, 217, 179, 236, 176, 85, 84, 5, + 218, 112, 198, 193, 85, 84, 5, 218, 109, 190, 190, 85, 84, 5, 218, 107, + 197, 94, 85, 84, 5, 218, 13, 199, 121, 85, 84, 5, 218, 49, 199, 145, 85, + 84, 5, 218, 0, 198, 59, 85, 84, 5, 218, 35, 159, 85, 84, 5, 218, 98, 222, + 246, 85, 84, 5, 218, 95, 223, 34, 85, 84, 5, 218, 93, 222, 184, 85, 84, + 5, 217, 203, 223, 10, 85, 84, 5, 217, 247, 223, 12, 85, 84, 5, 217, 200, + 222, 193, 85, 84, 5, 218, 41, 222, 203, 85, 84, 5, 217, 185, 180, 222, + 203, 85, 84, 5, 218, 91, 192, 33, 85, 84, 5, 218, 88, 170, 85, 84, 5, + 218, 86, 191, 225, 85, 84, 5, 217, 251, 192, 77, 85, 84, 5, 218, 24, 192, + 80, 85, 84, 5, 217, 219, 191, 246, 85, 84, 5, 217, 239, 192, 12, 85, 84, + 5, 218, 82, 233, 25, 85, 84, 5, 218, 80, 233, 111, 85, 84, 5, 218, 78, + 232, 88, 85, 84, 5, 218, 26, 233, 54, 85, 84, 5, 218, 29, 233, 61, 85, + 84, 5, 217, 227, 232, 164, 85, 84, 5, 218, 16, 232, 177, 85, 84, 5, 217, + 163, 232, 87, 85, 84, 5, 218, 3, 233, 82, 85, 84, 5, 218, 76, 213, 181, + 85, 84, 5, 218, 74, 214, 228, 85, 84, 5, 218, 72, 212, 132, 85, 84, 5, + 217, 243, 214, 104, 85, 84, 5, 217, 191, 213, 33, 85, 84, 5, 217, 184, + 229, 160, 85, 84, 5, 218, 67, 140, 85, 84, 5, 217, 174, 228, 161, 85, 84, + 5, 218, 70, 229, 217, 85, 84, 5, 218, 8, 229, 247, 85, 84, 5, 218, 65, + 228, 254, 85, 84, 5, 217, 220, 229, 25, 85, 84, 5, 218, 21, 229, 216, 85, + 84, 5, 217, 232, 228, 247, 85, 84, 5, 218, 51, 229, 130, 85, 84, 5, 217, + 230, 230, 58, 85, 84, 5, 218, 17, 228, 144, 85, 84, 5, 218, 52, 229, 200, + 85, 84, 5, 217, 167, 229, 1, 85, 84, 5, 218, 58, 228, 157, 85, 84, 5, + 218, 14, 214, 35, 85, 84, 5, 218, 63, 214, 49, 85, 84, 5, 218, 22, 214, + 32, 85, 84, 5, 217, 245, 214, 43, 85, 84, 5, 217, 214, 214, 44, 85, 84, + 5, 217, 204, 214, 33, 85, 84, 5, 217, 240, 214, 34, 85, 84, 5, 217, 201, + 214, 48, 85, 84, 5, 217, 233, 214, 31, 85, 84, 5, 218, 18, 180, 214, 44, + 85, 84, 5, 217, 254, 180, 214, 33, 85, 84, 5, 217, 177, 180, 214, 34, 85, + 84, 5, 217, 205, 231, 55, 85, 84, 5, 217, 249, 231, 242, 85, 84, 5, 217, + 192, 230, 181, 85, 84, 5, 217, 170, 231, 159, 85, 84, 5, 217, 194, 230, + 167, 85, 84, 5, 217, 193, 230, 177, 85, 84, 5, 217, 176, 214, 54, 85, 84, + 5, 218, 47, 213, 247, 85, 84, 5, 217, 183, 213, 236, 85, 84, 5, 218, 36, + 209, 187, 85, 84, 5, 218, 5, 168, 85, 84, 5, 218, 54, 208, 167, 85, 84, + 5, 218, 23, 210, 51, 85, 84, 5, 218, 53, 210, 65, 85, 84, 5, 218, 2, 209, + 39, 85, 84, 5, 218, 38, 209, 75, 85, 84, 5, 217, 215, 216, 254, 85, 84, + 5, 218, 42, 217, 13, 85, 84, 5, 217, 238, 216, 248, 85, 84, 5, 218, 57, + 217, 5, 85, 84, 5, 217, 172, 217, 5, 85, 84, 5, 218, 32, 217, 6, 85, 84, + 5, 217, 188, 216, 249, 85, 84, 5, 217, 186, 216, 250, 85, 84, 5, 217, + 173, 216, 242, 85, 84, 5, 217, 199, 180, 217, 6, 85, 84, 5, 217, 255, + 180, 216, 249, 85, 84, 5, 217, 218, 180, 216, 250, 85, 84, 5, 217, 228, + 221, 15, 85, 84, 5, 218, 12, 221, 23, 85, 84, 5, 218, 30, 221, 11, 85, + 84, 5, 218, 61, 221, 18, 85, 84, 5, 217, 252, 221, 19, 85, 84, 5, 217, + 248, 221, 13, 85, 84, 5, 217, 202, 221, 14, 85, 84, 5, 217, 236, 231, + 176, 85, 84, 5, 218, 48, 231, 184, 85, 84, 5, 217, 212, 231, 171, 85, 84, + 5, 218, 11, 231, 180, 85, 84, 5, 217, 253, 231, 181, 85, 84, 5, 218, 33, + 231, 172, 85, 84, 5, 218, 34, 231, 174, 85, 84, 5, 217, 189, 165, 85, 84, + 5, 217, 237, 214, 149, 85, 84, 5, 217, 231, 214, 164, 85, 84, 5, 217, + 235, 214, 131, 85, 84, 5, 217, 169, 214, 155, 85, 84, 5, 217, 241, 214, + 156, 85, 84, 5, 218, 37, 214, 136, 85, 84, 5, 218, 40, 214, 140, 85, 84, + 5, 217, 208, 213, 159, 85, 84, 5, 217, 168, 213, 129, 85, 84, 5, 217, + 211, 213, 150, 85, 84, 5, 217, 226, 213, 133, 85, 84, 5, 217, 178, 195, + 69, 85, 84, 5, 217, 175, 195, 188, 85, 84, 5, 217, 209, 193, 249, 85, 84, + 5, 217, 187, 195, 148, 85, 84, 5, 218, 19, 195, 153, 85, 84, 5, 217, 216, + 195, 8, 85, 84, 5, 218, 27, 195, 24, 85, 84, 5, 217, 196, 212, 76, 85, + 84, 5, 218, 46, 212, 96, 85, 84, 5, 217, 190, 212, 58, 85, 84, 5, 218, 6, + 212, 88, 85, 84, 5, 218, 44, 212, 65, 85, 84, 17, 107, 85, 84, 17, 109, + 85, 84, 17, 138, 85, 84, 17, 134, 85, 84, 17, 150, 85, 84, 17, 169, 85, + 84, 17, 175, 85, 84, 17, 171, 85, 84, 17, 178, 85, 84, 33, 31, 199, 119, + 85, 84, 33, 31, 199, 90, 85, 84, 33, 31, 228, 140, 85, 84, 33, 31, 198, + 228, 85, 84, 33, 31, 199, 96, 198, 228, 85, 84, 33, 31, 228, 143, 198, + 228, 85, 84, 33, 31, 216, 49, 252, 35, 6, 1, 251, 182, 252, 35, 6, 1, + 238, 31, 252, 35, 6, 1, 220, 125, 252, 35, 6, 1, 216, 62, 252, 35, 6, 1, + 249, 155, 252, 35, 6, 1, 202, 165, 252, 35, 6, 1, 210, 65, 252, 35, 6, 1, + 248, 198, 252, 35, 6, 1, 165, 252, 35, 6, 1, 71, 252, 35, 6, 1, 233, 111, + 252, 35, 6, 1, 68, 252, 35, 6, 1, 74, 252, 35, 6, 1, 237, 70, 252, 35, 6, + 1, 192, 34, 252, 35, 6, 1, 193, 133, 252, 35, 6, 1, 212, 132, 252, 35, 6, + 1, 222, 108, 252, 35, 6, 1, 170, 252, 35, 6, 1, 66, 252, 35, 6, 1, 222, + 237, 252, 35, 6, 1, 243, 97, 252, 35, 6, 1, 140, 252, 35, 6, 1, 208, 96, + 252, 35, 6, 1, 231, 242, 252, 35, 6, 1, 212, 103, 252, 35, 6, 1, 197, 94, + 252, 35, 6, 1, 213, 226, 252, 35, 6, 1, 195, 188, 252, 35, 6, 1, 221, + 217, 252, 35, 6, 1, 231, 181, 252, 35, 6, 1, 191, 108, 252, 35, 6, 1, + 221, 14, 252, 35, 6, 1, 203, 166, 252, 35, 2, 1, 251, 182, 252, 35, 2, 1, + 238, 31, 252, 35, 2, 1, 220, 125, 252, 35, 2, 1, 216, 62, 252, 35, 2, 1, + 249, 155, 252, 35, 2, 1, 202, 165, 252, 35, 2, 1, 210, 65, 252, 35, 2, 1, + 248, 198, 252, 35, 2, 1, 165, 252, 35, 2, 1, 71, 252, 35, 2, 1, 233, 111, + 252, 35, 2, 1, 68, 252, 35, 2, 1, 74, 252, 35, 2, 1, 237, 70, 252, 35, 2, + 1, 192, 34, 252, 35, 2, 1, 193, 133, 252, 35, 2, 1, 212, 132, 252, 35, 2, + 1, 222, 108, 252, 35, 2, 1, 170, 252, 35, 2, 1, 66, 252, 35, 2, 1, 222, + 237, 252, 35, 2, 1, 243, 97, 252, 35, 2, 1, 140, 252, 35, 2, 1, 208, 96, + 252, 35, 2, 1, 231, 242, 252, 35, 2, 1, 212, 103, 252, 35, 2, 1, 197, 94, + 252, 35, 2, 1, 213, 226, 252, 35, 2, 1, 195, 188, 252, 35, 2, 1, 221, + 217, 252, 35, 2, 1, 231, 181, 252, 35, 2, 1, 191, 108, 252, 35, 2, 1, + 221, 14, 252, 35, 2, 1, 203, 166, 252, 35, 251, 183, 219, 192, 252, 35, + 18, 219, 192, 252, 35, 231, 155, 77, 252, 35, 230, 59, 252, 35, 120, 215, + 254, 252, 35, 231, 156, 120, 215, 254, 252, 35, 212, 143, 252, 35, 214, + 215, 77, 252, 35, 17, 191, 77, 252, 35, 17, 107, 252, 35, 17, 109, 252, + 35, 17, 138, 252, 35, 17, 134, 252, 35, 17, 150, 252, 35, 17, 169, 252, + 35, 17, 175, 252, 35, 17, 171, 252, 35, 17, 178, 252, 35, 89, 233, 218, + 77, 252, 35, 89, 208, 15, 77, 223, 148, 143, 31, 107, 223, 148, 143, 31, + 109, 223, 148, 143, 31, 138, 223, 148, 143, 31, 134, 223, 148, 143, 31, + 150, 223, 148, 143, 31, 169, 223, 148, 143, 31, 175, 223, 148, 143, 31, + 171, 223, 148, 143, 31, 178, 223, 148, 143, 31, 199, 95, 223, 148, 143, + 31, 197, 32, 223, 148, 143, 31, 198, 249, 223, 148, 143, 31, 232, 137, + 223, 148, 143, 31, 233, 17, 223, 148, 143, 31, 202, 121, 223, 148, 143, + 31, 203, 242, 223, 148, 143, 31, 234, 155, 223, 148, 143, 31, 213, 171, + 223, 148, 143, 31, 91, 228, 142, 223, 148, 143, 31, 105, 228, 142, 223, + 148, 143, 31, 115, 228, 142, 223, 148, 143, 31, 232, 130, 228, 142, 223, + 148, 143, 31, 232, 228, 228, 142, 223, 148, 143, 31, 202, 137, 228, 142, + 223, 148, 143, 31, 203, 248, 228, 142, 223, 148, 143, 31, 234, 166, 228, + 142, 223, 148, 143, 31, 213, 177, 228, 142, 223, 148, 143, 31, 91, 189, + 223, 148, 143, 31, 105, 189, 223, 148, 143, 31, 115, 189, 223, 148, 143, + 31, 232, 130, 189, 223, 148, 143, 31, 232, 228, 189, 223, 148, 143, 31, + 202, 137, 189, 223, 148, 143, 31, 203, 248, 189, 223, 148, 143, 31, 234, + 166, 189, 223, 148, 143, 31, 213, 177, 189, 223, 148, 143, 31, 199, 96, + 189, 223, 148, 143, 31, 197, 33, 189, 223, 148, 143, 31, 198, 250, 189, + 223, 148, 143, 31, 232, 138, 189, 223, 148, 143, 31, 233, 18, 189, 223, + 148, 143, 31, 202, 122, 189, 223, 148, 143, 31, 203, 243, 189, 223, 148, + 143, 31, 234, 156, 189, 223, 148, 143, 31, 213, 172, 189, 223, 148, 143, + 31, 220, 43, 223, 148, 143, 31, 220, 42, 223, 148, 143, 220, 44, 77, 223, + 148, 143, 31, 222, 62, 223, 148, 143, 31, 222, 61, 223, 148, 143, 31, + 208, 229, 107, 223, 148, 143, 31, 208, 229, 109, 223, 148, 143, 31, 208, + 229, 138, 223, 148, 143, 31, 208, 229, 134, 223, 148, 143, 31, 208, 229, + 150, 223, 148, 143, 31, 208, 229, 169, 223, 148, 143, 31, 208, 229, 175, + 223, 148, 143, 31, 208, 229, 171, 223, 148, 143, 31, 208, 229, 178, 223, + 148, 143, 209, 108, 223, 148, 143, 232, 120, 91, 208, 24, 223, 148, 143, + 232, 120, 91, 230, 72, 223, 148, 143, 232, 120, 115, 208, 22, 223, 148, + 143, 206, 37, 77, 223, 148, 143, 31, 251, 159, 107, 223, 148, 143, 31, + 251, 159, 109, 223, 148, 143, 31, 251, 159, 199, 96, 189, 223, 148, 143, + 251, 159, 220, 44, 77, 211, 23, 143, 31, 107, 211, 23, 143, 31, 109, 211, + 23, 143, 31, 138, 211, 23, 143, 31, 134, 211, 23, 143, 31, 150, 211, 23, + 143, 31, 169, 211, 23, 143, 31, 175, 211, 23, 143, 31, 171, 211, 23, 143, + 31, 178, 211, 23, 143, 31, 199, 95, 211, 23, 143, 31, 197, 32, 211, 23, + 143, 31, 198, 249, 211, 23, 143, 31, 232, 137, 211, 23, 143, 31, 233, 17, + 211, 23, 143, 31, 202, 121, 211, 23, 143, 31, 203, 242, 211, 23, 143, 31, + 234, 155, 211, 23, 143, 31, 213, 171, 211, 23, 143, 31, 91, 228, 142, + 211, 23, 143, 31, 105, 228, 142, 211, 23, 143, 31, 115, 228, 142, 211, + 23, 143, 31, 232, 130, 228, 142, 211, 23, 143, 31, 232, 228, 228, 142, + 211, 23, 143, 31, 202, 137, 228, 142, 211, 23, 143, 31, 203, 248, 228, + 142, 211, 23, 143, 31, 234, 166, 228, 142, 211, 23, 143, 31, 213, 177, + 228, 142, 211, 23, 143, 31, 91, 189, 211, 23, 143, 31, 105, 189, 211, 23, + 143, 31, 115, 189, 211, 23, 143, 31, 232, 130, 189, 211, 23, 143, 31, + 232, 228, 189, 211, 23, 143, 31, 202, 137, 189, 211, 23, 143, 31, 203, + 248, 189, 211, 23, 143, 31, 234, 166, 189, 211, 23, 143, 31, 213, 177, + 189, 211, 23, 143, 31, 199, 96, 189, 211, 23, 143, 31, 197, 33, 189, 211, + 23, 143, 31, 198, 250, 189, 211, 23, 143, 31, 232, 138, 189, 211, 23, + 143, 31, 233, 18, 189, 211, 23, 143, 31, 202, 122, 189, 211, 23, 143, 31, + 203, 243, 189, 211, 23, 143, 31, 234, 156, 189, 211, 23, 143, 31, 213, + 172, 189, 211, 23, 143, 217, 51, 211, 23, 143, 251, 159, 31, 109, 211, + 23, 143, 251, 159, 31, 138, 211, 23, 143, 251, 159, 31, 134, 211, 23, + 143, 251, 159, 31, 150, 211, 23, 143, 251, 159, 31, 169, 211, 23, 143, + 251, 159, 31, 175, 211, 23, 143, 251, 159, 31, 171, 211, 23, 143, 251, + 159, 31, 178, 211, 23, 143, 251, 159, 31, 199, 95, 211, 23, 143, 251, + 159, 31, 232, 130, 228, 142, 211, 23, 143, 251, 159, 31, 202, 137, 228, + 142, 211, 23, 143, 251, 159, 31, 105, 189, 211, 23, 143, 251, 159, 31, + 199, 96, 189, 211, 23, 143, 232, 120, 91, 230, 72, 211, 23, 143, 232, + 120, 91, 202, 125, 9, 13, 251, 194, 9, 13, 248, 247, 9, 13, 223, 8, 9, + 13, 238, 5, 9, 13, 193, 133, 9, 13, 191, 113, 9, 13, 230, 83, 9, 13, 199, + 219, 9, 13, 192, 75, 9, 13, 222, 108, 9, 13, 220, 37, 9, 13, 216, 210, 9, + 13, 213, 26, 9, 13, 205, 47, 9, 13, 251, 232, 9, 13, 233, 48, 9, 13, 205, + 193, 9, 13, 208, 91, 9, 13, 207, 72, 9, 13, 203, 110, 9, 13, 199, 114, 9, + 13, 199, 29, 9, 13, 221, 212, 9, 13, 199, 41, 9, 13, 238, 28, 9, 13, 191, + 116, 9, 13, 231, 88, 9, 13, 236, 141, 248, 247, 9, 13, 236, 141, 213, 26, + 9, 13, 236, 141, 233, 48, 9, 13, 236, 141, 208, 91, 9, 13, 89, 248, 247, + 9, 13, 89, 223, 8, 9, 13, 89, 229, 212, 9, 13, 89, 230, 83, 9, 13, 89, + 192, 75, 9, 13, 89, 222, 108, 9, 13, 89, 220, 37, 9, 13, 89, 216, 210, 9, + 13, 89, 213, 26, 9, 13, 89, 205, 47, 9, 13, 89, 251, 232, 9, 13, 89, 233, + 48, 9, 13, 89, 205, 193, 9, 13, 89, 208, 91, 9, 13, 89, 203, 110, 9, 13, + 89, 199, 114, 9, 13, 89, 199, 29, 9, 13, 89, 221, 212, 9, 13, 89, 238, + 28, 9, 13, 89, 231, 88, 9, 13, 199, 214, 223, 8, 9, 13, 199, 214, 230, + 83, 9, 13, 199, 214, 192, 75, 9, 13, 199, 214, 220, 37, 9, 13, 199, 214, + 213, 26, 9, 13, 199, 214, 205, 47, 9, 13, 199, 214, 251, 232, 9, 13, 199, + 214, 205, 193, 9, 13, 199, 214, 208, 91, 9, 13, 199, 214, 203, 110, 9, + 13, 199, 214, 221, 212, 9, 13, 199, 214, 238, 28, 9, 13, 199, 214, 231, + 88, 9, 13, 199, 214, 236, 141, 213, 26, 9, 13, 199, 214, 236, 141, 208, + 91, 9, 13, 201, 37, 248, 247, 9, 13, 201, 37, 223, 8, 9, 13, 201, 37, + 229, 212, 9, 13, 201, 37, 230, 83, 9, 13, 201, 37, 199, 219, 9, 13, 201, + 37, 192, 75, 9, 13, 201, 37, 222, 108, 9, 13, 201, 37, 216, 210, 9, 13, + 201, 37, 213, 26, 9, 13, 201, 37, 205, 47, 9, 13, 201, 37, 251, 232, 9, + 13, 201, 37, 233, 48, 9, 13, 201, 37, 205, 193, 9, 13, 201, 37, 208, 91, + 9, 13, 201, 37, 203, 110, 9, 13, 201, 37, 199, 114, 9, 13, 201, 37, 199, + 29, 9, 13, 201, 37, 221, 212, 9, 13, 201, 37, 238, 28, 9, 13, 201, 37, + 191, 116, 9, 13, 201, 37, 231, 88, 9, 13, 201, 37, 236, 141, 248, 247, 9, + 13, 201, 37, 236, 141, 233, 48, 9, 13, 219, 5, 251, 194, 9, 13, 219, 5, + 248, 247, 9, 13, 219, 5, 223, 8, 9, 13, 219, 5, 238, 5, 9, 13, 219, 5, + 229, 212, 9, 13, 219, 5, 193, 133, 9, 13, 219, 5, 191, 113, 9, 13, 219, + 5, 230, 83, 9, 13, 219, 5, 199, 219, 9, 13, 219, 5, 192, 75, 9, 13, 219, + 5, 220, 37, 9, 13, 219, 5, 216, 210, 9, 13, 219, 5, 213, 26, 9, 13, 219, + 5, 205, 47, 9, 13, 219, 5, 251, 232, 9, 13, 219, 5, 233, 48, 9, 13, 219, + 5, 205, 193, 9, 13, 219, 5, 208, 91, 9, 13, 219, 5, 207, 72, 9, 13, 219, + 5, 203, 110, 9, 13, 219, 5, 199, 114, 9, 13, 219, 5, 199, 29, 9, 13, 219, + 5, 221, 212, 9, 13, 219, 5, 199, 41, 9, 13, 219, 5, 238, 28, 9, 13, 219, + 5, 191, 116, 9, 13, 219, 5, 231, 88, 9, 13, 235, 131, 248, 247, 9, 13, + 235, 131, 223, 8, 9, 13, 235, 131, 238, 5, 9, 13, 235, 131, 193, 133, 9, + 13, 235, 131, 191, 113, 9, 13, 235, 131, 230, 83, 9, 13, 235, 131, 199, + 219, 9, 13, 235, 131, 192, 75, 9, 13, 235, 131, 220, 37, 9, 13, 235, 131, + 216, 210, 9, 13, 235, 131, 213, 26, 9, 13, 235, 131, 205, 47, 9, 13, 235, + 131, 251, 232, 9, 13, 235, 131, 233, 48, 9, 13, 235, 131, 205, 193, 9, + 13, 235, 131, 208, 91, 9, 13, 235, 131, 207, 72, 9, 13, 235, 131, 203, + 110, 9, 13, 235, 131, 199, 114, 9, 13, 235, 131, 199, 29, 9, 13, 235, + 131, 221, 212, 9, 13, 235, 131, 199, 41, 9, 13, 235, 131, 238, 28, 9, 13, + 235, 131, 191, 116, 9, 13, 235, 131, 231, 88, 9, 13, 211, 69, 92, 4, 183, + 4, 199, 168, 9, 13, 211, 69, 183, 4, 238, 5, 217, 116, 123, 234, 206, + 193, 66, 217, 116, 123, 202, 3, 193, 66, 217, 116, 123, 193, 105, 193, + 66, 217, 116, 123, 186, 193, 66, 217, 116, 123, 207, 89, 235, 113, 217, + 116, 123, 230, 203, 235, 113, 217, 116, 123, 63, 235, 113, 217, 116, 123, + 91, 79, 243, 142, 217, 116, 123, 105, 79, 243, 142, 217, 116, 123, 115, + 79, 243, 142, 217, 116, 123, 232, 130, 79, 243, 142, 217, 116, 123, 232, + 228, 79, 243, 142, 217, 116, 123, 202, 137, 79, 243, 142, 217, 116, 123, + 203, 248, 79, 243, 142, 217, 116, 123, 234, 166, 79, 243, 142, 217, 116, + 123, 213, 177, 79, 243, 142, 217, 116, 123, 91, 79, 249, 104, 217, 116, + 123, 105, 79, 249, 104, 217, 116, 123, 115, 79, 249, 104, 217, 116, 123, + 232, 130, 79, 249, 104, 217, 116, 123, 232, 228, 79, 249, 104, 217, 116, + 123, 202, 137, 79, 249, 104, 217, 116, 123, 203, 248, 79, 249, 104, 217, + 116, 123, 234, 166, 79, 249, 104, 217, 116, 123, 213, 177, 79, 249, 104, + 217, 116, 123, 91, 79, 243, 9, 217, 116, 123, 105, 79, 243, 9, 217, 116, + 123, 115, 79, 243, 9, 217, 116, 123, 232, 130, 79, 243, 9, 217, 116, 123, + 232, 228, 79, 243, 9, 217, 116, 123, 202, 137, 79, 243, 9, 217, 116, 123, + 203, 248, 79, 243, 9, 217, 116, 123, 234, 166, 79, 243, 9, 217, 116, 123, + 213, 177, 79, 243, 9, 217, 116, 123, 209, 87, 217, 116, 123, 211, 55, + 217, 116, 123, 249, 105, 217, 116, 123, 243, 51, 217, 116, 123, 201, 197, + 217, 116, 123, 200, 200, 217, 116, 123, 250, 151, 217, 116, 123, 193, 56, + 217, 116, 123, 222, 196, 217, 116, 123, 249, 148, 236, 153, 123, 228, + 243, 249, 148, 236, 153, 123, 228, 241, 236, 153, 123, 228, 240, 236, + 153, 123, 228, 239, 236, 153, 123, 228, 238, 236, 153, 123, 228, 237, + 236, 153, 123, 228, 236, 236, 153, 123, 228, 235, 236, 153, 123, 228, + 234, 236, 153, 123, 228, 233, 236, 153, 123, 228, 232, 236, 153, 123, + 228, 231, 236, 153, 123, 228, 230, 236, 153, 123, 228, 229, 236, 153, + 123, 228, 228, 236, 153, 123, 228, 227, 236, 153, 123, 228, 226, 236, + 153, 123, 228, 225, 236, 153, 123, 228, 224, 236, 153, 123, 228, 223, + 236, 153, 123, 228, 222, 236, 153, 123, 228, 221, 236, 153, 123, 228, + 220, 236, 153, 123, 228, 219, 236, 153, 123, 228, 218, 236, 153, 123, + 228, 217, 236, 153, 123, 228, 216, 236, 153, 123, 228, 215, 236, 153, + 123, 228, 214, 236, 153, 123, 228, 213, 236, 153, 123, 228, 212, 236, + 153, 123, 228, 211, 236, 153, 123, 228, 210, 236, 153, 123, 228, 209, + 236, 153, 123, 228, 208, 236, 153, 123, 228, 207, 236, 153, 123, 228, + 206, 236, 153, 123, 228, 205, 236, 153, 123, 228, 204, 236, 153, 123, + 228, 203, 236, 153, 123, 228, 202, 236, 153, 123, 228, 201, 236, 153, + 123, 228, 200, 236, 153, 123, 228, 199, 236, 153, 123, 228, 198, 236, + 153, 123, 228, 197, 236, 153, 123, 228, 196, 236, 153, 123, 228, 195, + 236, 153, 123, 228, 194, 236, 153, 123, 228, 193, 236, 153, 123, 81, 249, + 148, 236, 153, 123, 195, 134, 236, 153, 123, 195, 133, 236, 153, 123, + 195, 132, 236, 153, 123, 195, 131, 236, 153, 123, 195, 130, 236, 153, + 123, 195, 129, 236, 153, 123, 195, 128, 236, 153, 123, 195, 127, 236, + 153, 123, 195, 126, 236, 153, 123, 195, 125, 236, 153, 123, 195, 124, + 236, 153, 123, 195, 123, 236, 153, 123, 195, 122, 236, 153, 123, 195, + 121, 236, 153, 123, 195, 120, 236, 153, 123, 195, 119, 236, 153, 123, + 195, 118, 236, 153, 123, 195, 117, 236, 153, 123, 195, 116, 236, 153, + 123, 195, 115, 236, 153, 123, 195, 114, 236, 153, 123, 195, 113, 236, + 153, 123, 195, 112, 236, 153, 123, 195, 111, 236, 153, 123, 195, 110, + 236, 153, 123, 195, 109, 236, 153, 123, 195, 108, 236, 153, 123, 195, + 107, 236, 153, 123, 195, 106, 236, 153, 123, 195, 105, 236, 153, 123, + 195, 104, 236, 153, 123, 195, 103, 236, 153, 123, 195, 102, 236, 153, + 123, 195, 101, 236, 153, 123, 195, 100, 236, 153, 123, 195, 99, 236, 153, + 123, 195, 98, 236, 153, 123, 195, 97, 236, 153, 123, 195, 96, 236, 153, + 123, 195, 95, 236, 153, 123, 195, 94, 236, 153, 123, 195, 93, 236, 153, + 123, 195, 92, 236, 153, 123, 195, 91, 236, 153, 123, 195, 90, 236, 153, + 123, 195, 89, 236, 153, 123, 195, 88, 236, 153, 123, 195, 87, 236, 153, + 123, 195, 86, 209, 97, 247, 103, 249, 148, 209, 97, 247, 103, 252, 55, + 79, 201, 245, 209, 97, 247, 103, 105, 79, 201, 245, 209, 97, 247, 103, + 115, 79, 201, 245, 209, 97, 247, 103, 232, 130, 79, 201, 245, 209, 97, + 247, 103, 232, 228, 79, 201, 245, 209, 97, 247, 103, 202, 137, 79, 201, + 245, 209, 97, 247, 103, 203, 248, 79, 201, 245, 209, 97, 247, 103, 234, + 166, 79, 201, 245, 209, 97, 247, 103, 213, 177, 79, 201, 245, 209, 97, + 247, 103, 199, 96, 79, 201, 245, 209, 97, 247, 103, 223, 32, 79, 201, + 245, 209, 97, 247, 103, 221, 79, 79, 201, 245, 209, 97, 247, 103, 208, + 17, 79, 201, 245, 209, 97, 247, 103, 221, 141, 79, 201, 245, 209, 97, + 247, 103, 252, 55, 79, 229, 223, 209, 97, 247, 103, 105, 79, 229, 223, + 209, 97, 247, 103, 115, 79, 229, 223, 209, 97, 247, 103, 232, 130, 79, + 229, 223, 209, 97, 247, 103, 232, 228, 79, 229, 223, 209, 97, 247, 103, + 202, 137, 79, 229, 223, 209, 97, 247, 103, 203, 248, 79, 229, 223, 209, + 97, 247, 103, 234, 166, 79, 229, 223, 209, 97, 247, 103, 213, 177, 79, + 229, 223, 209, 97, 247, 103, 199, 96, 79, 229, 223, 209, 97, 247, 103, + 223, 32, 79, 229, 223, 209, 97, 247, 103, 221, 79, 79, 229, 223, 209, 97, + 247, 103, 208, 17, 79, 229, 223, 209, 97, 247, 103, 221, 141, 79, 229, + 223, 209, 97, 247, 103, 207, 89, 222, 196, 209, 97, 247, 103, 252, 55, + 79, 237, 33, 209, 97, 247, 103, 105, 79, 237, 33, 209, 97, 247, 103, 115, + 79, 237, 33, 209, 97, 247, 103, 232, 130, 79, 237, 33, 209, 97, 247, 103, + 232, 228, 79, 237, 33, 209, 97, 247, 103, 202, 137, 79, 237, 33, 209, 97, + 247, 103, 203, 248, 79, 237, 33, 209, 97, 247, 103, 234, 166, 79, 237, + 33, 209, 97, 247, 103, 213, 177, 79, 237, 33, 209, 97, 247, 103, 199, 96, + 79, 237, 33, 209, 97, 247, 103, 223, 32, 79, 237, 33, 209, 97, 247, 103, + 221, 79, 79, 237, 33, 209, 97, 247, 103, 208, 17, 79, 237, 33, 209, 97, + 247, 103, 221, 141, 79, 237, 33, 209, 97, 247, 103, 62, 222, 196, 209, + 97, 247, 103, 252, 55, 79, 242, 206, 209, 97, 247, 103, 105, 79, 242, + 206, 209, 97, 247, 103, 115, 79, 242, 206, 209, 97, 247, 103, 232, 130, + 79, 242, 206, 209, 97, 247, 103, 232, 228, 79, 242, 206, 209, 97, 247, + 103, 202, 137, 79, 242, 206, 209, 97, 247, 103, 203, 248, 79, 242, 206, + 209, 97, 247, 103, 234, 166, 79, 242, 206, 209, 97, 247, 103, 213, 177, + 79, 242, 206, 209, 97, 247, 103, 199, 96, 79, 242, 206, 209, 97, 247, + 103, 223, 32, 79, 242, 206, 209, 97, 247, 103, 221, 79, 79, 242, 206, + 209, 97, 247, 103, 208, 17, 79, 242, 206, 209, 97, 247, 103, 221, 141, + 79, 242, 206, 209, 97, 247, 103, 63, 222, 196, 209, 97, 247, 103, 232, + 162, 209, 97, 247, 103, 197, 200, 209, 97, 247, 103, 197, 189, 209, 97, + 247, 103, 197, 186, 209, 97, 247, 103, 197, 185, 209, 97, 247, 103, 197, + 184, 209, 97, 247, 103, 197, 183, 209, 97, 247, 103, 197, 182, 209, 97, + 247, 103, 197, 181, 209, 97, 247, 103, 197, 180, 209, 97, 247, 103, 197, + 199, 209, 97, 247, 103, 197, 198, 209, 97, 247, 103, 197, 197, 209, 97, + 247, 103, 197, 196, 209, 97, 247, 103, 197, 195, 209, 97, 247, 103, 197, + 194, 209, 97, 247, 103, 197, 193, 209, 97, 247, 103, 197, 192, 209, 97, + 247, 103, 197, 191, 209, 97, 247, 103, 197, 190, 209, 97, 247, 103, 197, + 188, 209, 97, 247, 103, 197, 187, 17, 191, 78, 232, 82, 201, 64, 17, 191, + 78, 242, 76, 17, 91, 242, 76, 17, 105, 242, 76, 17, 115, 242, 76, 17, + 232, 130, 242, 76, 17, 232, 228, 242, 76, 17, 202, 137, 242, 76, 17, 203, + 248, 242, 76, 17, 234, 166, 242, 76, 17, 213, 177, 242, 76, 236, 243, 47, + 49, 17, 191, 77, 236, 243, 214, 108, 47, 49, 17, 191, 77, 47, 191, 78, 4, + 202, 98, 47, 251, 87, 57, 47, 236, 157, 3, 4, 211, 6, 249, 143, 127, 8, + 6, 1, 65, 127, 8, 6, 1, 250, 122, 127, 8, 6, 1, 247, 195, 127, 8, 6, 1, + 238, 129, 127, 8, 6, 1, 71, 127, 8, 6, 1, 233, 177, 127, 8, 6, 1, 232, + 53, 127, 8, 6, 1, 230, 118, 127, 8, 6, 1, 68, 127, 8, 6, 1, 223, 37, 127, + 8, 6, 1, 222, 154, 127, 8, 6, 1, 172, 127, 8, 6, 1, 218, 170, 127, 8, 6, + 1, 215, 63, 127, 8, 6, 1, 74, 127, 8, 6, 1, 210, 238, 127, 8, 6, 1, 208, + 106, 127, 8, 6, 1, 146, 127, 8, 6, 1, 206, 9, 127, 8, 6, 1, 200, 43, 127, 8, 6, 1, 66, 127, 8, 6, 1, 196, 12, 127, 8, 6, 1, 193, 224, 127, 8, 6, 1, 192, 235, 127, 8, 6, 1, 192, 159, 127, 8, 6, 1, 191, 166, 198, 42, 203, - 103, 248, 52, 8, 6, 1, 206, 8, 47, 43, 8, 6, 1, 247, 193, 47, 43, 8, 6, - 1, 146, 47, 247, 43, 47, 192, 237, 239, 7, 113, 112, 8, 6, 1, 65, 112, 8, - 6, 1, 250, 120, 112, 8, 6, 1, 247, 193, 112, 8, 6, 1, 238, 127, 112, 8, - 6, 1, 71, 112, 8, 6, 1, 233, 175, 112, 8, 6, 1, 232, 51, 112, 8, 6, 1, - 230, 116, 112, 8, 6, 1, 68, 112, 8, 6, 1, 223, 35, 112, 8, 6, 1, 222, - 152, 112, 8, 6, 1, 172, 112, 8, 6, 1, 218, 168, 112, 8, 6, 1, 215, 61, - 112, 8, 6, 1, 74, 112, 8, 6, 1, 210, 236, 112, 8, 6, 1, 208, 104, 112, 8, - 6, 1, 146, 112, 8, 6, 1, 206, 8, 112, 8, 6, 1, 200, 43, 112, 8, 6, 1, 66, + 104, 248, 54, 8, 6, 1, 206, 9, 47, 43, 8, 6, 1, 247, 195, 47, 43, 8, 6, + 1, 146, 47, 247, 45, 47, 192, 237, 239, 9, 113, 112, 8, 6, 1, 65, 112, 8, + 6, 1, 250, 122, 112, 8, 6, 1, 247, 195, 112, 8, 6, 1, 238, 129, 112, 8, + 6, 1, 71, 112, 8, 6, 1, 233, 177, 112, 8, 6, 1, 232, 53, 112, 8, 6, 1, + 230, 118, 112, 8, 6, 1, 68, 112, 8, 6, 1, 223, 37, 112, 8, 6, 1, 222, + 154, 112, 8, 6, 1, 172, 112, 8, 6, 1, 218, 170, 112, 8, 6, 1, 215, 63, + 112, 8, 6, 1, 74, 112, 8, 6, 1, 210, 238, 112, 8, 6, 1, 208, 106, 112, 8, + 6, 1, 146, 112, 8, 6, 1, 206, 9, 112, 8, 6, 1, 200, 43, 112, 8, 6, 1, 66, 112, 8, 6, 1, 196, 12, 112, 8, 6, 1, 193, 224, 112, 8, 6, 1, 192, 235, - 112, 8, 6, 1, 192, 159, 112, 8, 6, 1, 191, 166, 112, 228, 126, 112, 215, - 87, 112, 205, 70, 112, 201, 178, 112, 208, 248, 112, 193, 126, 214, 106, - 47, 8, 6, 1, 65, 214, 106, 47, 8, 6, 1, 250, 120, 214, 106, 47, 8, 6, 1, - 247, 193, 214, 106, 47, 8, 6, 1, 238, 127, 214, 106, 47, 8, 6, 1, 71, - 214, 106, 47, 8, 6, 1, 233, 175, 214, 106, 47, 8, 6, 1, 232, 51, 214, - 106, 47, 8, 6, 1, 230, 116, 214, 106, 47, 8, 6, 1, 68, 214, 106, 47, 8, - 6, 1, 223, 35, 214, 106, 47, 8, 6, 1, 222, 152, 214, 106, 47, 8, 6, 1, - 172, 214, 106, 47, 8, 6, 1, 218, 168, 214, 106, 47, 8, 6, 1, 215, 61, - 214, 106, 47, 8, 6, 1, 74, 214, 106, 47, 8, 6, 1, 210, 236, 214, 106, 47, - 8, 6, 1, 208, 104, 214, 106, 47, 8, 6, 1, 146, 214, 106, 47, 8, 6, 1, - 206, 8, 214, 106, 47, 8, 6, 1, 200, 43, 214, 106, 47, 8, 6, 1, 66, 214, - 106, 47, 8, 6, 1, 196, 12, 214, 106, 47, 8, 6, 1, 193, 224, 214, 106, 47, - 8, 6, 1, 192, 235, 214, 106, 47, 8, 6, 1, 192, 159, 214, 106, 47, 8, 6, - 1, 191, 166, 207, 147, 216, 239, 56, 207, 147, 216, 235, 56, 207, 147, - 215, 164, 56, 47, 247, 66, 47, 247, 194, 4, 211, 4, 249, 141, 47, 228, - 145, 233, 12, 214, 106, 112, 8, 6, 1, 65, 214, 106, 112, 8, 6, 1, 250, - 120, 214, 106, 112, 8, 6, 1, 247, 193, 214, 106, 112, 8, 6, 1, 238, 127, - 214, 106, 112, 8, 6, 1, 71, 214, 106, 112, 8, 6, 1, 233, 175, 214, 106, - 112, 8, 6, 1, 232, 51, 214, 106, 112, 8, 6, 1, 230, 116, 214, 106, 112, - 8, 6, 1, 68, 214, 106, 112, 8, 6, 1, 223, 35, 214, 106, 112, 8, 6, 1, - 222, 152, 214, 106, 112, 8, 6, 1, 172, 214, 106, 112, 8, 6, 1, 218, 168, - 214, 106, 112, 8, 6, 1, 215, 61, 214, 106, 112, 8, 6, 1, 74, 214, 106, - 112, 8, 6, 1, 210, 236, 214, 106, 112, 8, 6, 1, 208, 104, 214, 106, 112, - 8, 6, 1, 146, 214, 106, 112, 8, 6, 1, 206, 8, 214, 106, 112, 8, 6, 1, - 200, 43, 214, 106, 112, 8, 6, 1, 66, 214, 106, 112, 8, 6, 1, 196, 12, - 214, 106, 112, 8, 6, 1, 193, 224, 214, 106, 112, 8, 6, 1, 192, 235, 214, - 106, 112, 8, 6, 1, 192, 159, 214, 106, 112, 8, 6, 1, 191, 166, 238, 214, - 214, 106, 112, 8, 6, 1, 210, 236, 214, 106, 112, 228, 28, 214, 106, 112, - 168, 214, 106, 112, 188, 214, 106, 112, 252, 155, 214, 106, 112, 193, - 126, 51, 236, 194, 112, 242, 247, 112, 239, 14, 112, 232, 108, 112, 228, - 19, 112, 214, 79, 112, 214, 70, 112, 211, 125, 112, 202, 9, 112, 133, 4, - 233, 216, 77, 112, 194, 252, 112, 115, 238, 127, 112, 205, 57, 205, 76, - 112, 105, 222, 152, 112, 232, 128, 222, 152, 112, 234, 164, 222, 152, - 112, 232, 226, 209, 62, 107, 112, 203, 247, 209, 62, 107, 112, 197, 21, - 209, 62, 109, 112, 202, 121, 210, 236, 112, 91, 228, 141, 197, 33, 210, - 236, 112, 8, 2, 1, 238, 127, 112, 229, 248, 112, 229, 247, 112, 229, 150, - 112, 218, 252, 112, 202, 241, 112, 196, 140, 112, 195, 21, 217, 36, 193, - 21, 113, 207, 79, 223, 145, 16, 1, 65, 207, 79, 223, 145, 16, 1, 250, - 120, 207, 79, 223, 145, 16, 1, 247, 193, 207, 79, 223, 145, 16, 1, 238, - 127, 207, 79, 223, 145, 16, 1, 71, 207, 79, 223, 145, 16, 1, 233, 175, - 207, 79, 223, 145, 16, 1, 232, 51, 207, 79, 223, 145, 16, 1, 230, 116, - 207, 79, 223, 145, 16, 1, 68, 207, 79, 223, 145, 16, 1, 223, 35, 207, 79, - 223, 145, 16, 1, 222, 152, 207, 79, 223, 145, 16, 1, 172, 207, 79, 223, - 145, 16, 1, 218, 168, 207, 79, 223, 145, 16, 1, 215, 61, 207, 79, 223, - 145, 16, 1, 74, 207, 79, 223, 145, 16, 1, 210, 236, 207, 79, 223, 145, - 16, 1, 208, 104, 207, 79, 223, 145, 16, 1, 146, 207, 79, 223, 145, 16, 1, - 206, 8, 207, 79, 223, 145, 16, 1, 200, 43, 207, 79, 223, 145, 16, 1, 66, - 207, 79, 223, 145, 16, 1, 196, 12, 207, 79, 223, 145, 16, 1, 193, 224, - 207, 79, 223, 145, 16, 1, 192, 235, 207, 79, 223, 145, 16, 1, 192, 159, - 207, 79, 223, 145, 16, 1, 191, 166, 51, 229, 120, 229, 9, 112, 72, 221, - 49, 112, 72, 188, 112, 12, 196, 95, 225, 217, 112, 12, 196, 95, 225, 221, - 112, 12, 196, 95, 225, 229, 112, 72, 237, 146, 112, 12, 196, 95, 225, - 236, 112, 12, 196, 95, 225, 223, 112, 12, 196, 95, 225, 195, 112, 12, - 196, 95, 225, 222, 112, 12, 196, 95, 225, 235, 112, 12, 196, 95, 225, - 209, 112, 12, 196, 95, 225, 202, 112, 12, 196, 95, 225, 211, 112, 12, - 196, 95, 225, 232, 112, 12, 196, 95, 225, 218, 112, 12, 196, 95, 225, - 234, 112, 12, 196, 95, 225, 210, 112, 12, 196, 95, 225, 233, 112, 12, - 196, 95, 225, 196, 112, 12, 196, 95, 225, 201, 112, 12, 196, 95, 225, - 194, 112, 12, 196, 95, 225, 224, 112, 12, 196, 95, 225, 226, 112, 12, - 196, 95, 225, 204, 112, 12, 196, 95, 225, 215, 112, 12, 196, 95, 225, - 213, 112, 12, 196, 95, 225, 239, 112, 12, 196, 95, 225, 238, 112, 12, - 196, 95, 225, 192, 112, 12, 196, 95, 225, 219, 112, 12, 196, 95, 225, - 237, 112, 12, 196, 95, 225, 228, 112, 12, 196, 95, 225, 214, 112, 12, - 196, 95, 225, 193, 112, 12, 196, 95, 225, 216, 112, 12, 196, 95, 225, - 198, 112, 12, 196, 95, 225, 197, 112, 12, 196, 95, 225, 227, 112, 12, - 196, 95, 225, 205, 112, 12, 196, 95, 225, 207, 112, 12, 196, 95, 225, - 208, 112, 12, 196, 95, 225, 200, 112, 12, 196, 95, 225, 231, 112, 12, - 196, 95, 225, 225, 112, 12, 196, 95, 225, 191, 198, 42, 203, 103, 248, - 52, 12, 196, 95, 225, 206, 198, 42, 203, 103, 248, 52, 12, 196, 95, 225, - 238, 198, 42, 203, 103, 248, 52, 12, 196, 95, 225, 236, 198, 42, 203, - 103, 248, 52, 12, 196, 95, 225, 220, 198, 42, 203, 103, 248, 52, 12, 196, - 95, 225, 203, 198, 42, 203, 103, 248, 52, 12, 196, 95, 225, 216, 198, 42, - 203, 103, 248, 52, 12, 196, 95, 225, 199, 198, 42, 203, 103, 248, 52, 12, - 196, 95, 225, 230, 198, 42, 203, 103, 248, 52, 12, 196, 95, 225, 212, 47, - 228, 14, 252, 27, 47, 228, 14, 252, 58, 206, 113, 16, 40, 232, 86, 206, - 113, 16, 40, 218, 225, 206, 113, 16, 40, 203, 23, 206, 113, 16, 40, 192, - 207, 206, 113, 16, 40, 203, 2, 206, 113, 16, 40, 247, 148, 238, 139, 232, - 173, 242, 219, 196, 117, 213, 191, 4, 201, 99, 200, 193, 139, 215, 183, - 200, 192, 242, 251, 250, 183, 235, 61, 200, 191, 139, 247, 253, 207, 148, - 248, 29, 250, 183, 213, 190, 193, 144, 193, 138, 195, 14, 216, 52, 193, - 128, 234, 208, 231, 12, 233, 232, 234, 208, 231, 12, 251, 140, 234, 208, - 231, 12, 250, 202, 231, 12, 4, 216, 177, 214, 80, 215, 206, 113, 193, - 130, 238, 228, 215, 206, 113, 232, 238, 208, 23, 215, 206, 113, 193, 130, - 231, 49, 215, 206, 113, 232, 80, 215, 206, 113, 193, 159, 231, 49, 215, - 206, 113, 220, 6, 208, 23, 215, 206, 113, 193, 159, 238, 228, 215, 206, - 113, 238, 228, 215, 205, 214, 80, 215, 206, 4, 233, 103, 232, 238, 208, - 23, 215, 206, 4, 233, 103, 220, 6, 208, 23, 215, 206, 4, 233, 103, 232, - 80, 215, 206, 4, 233, 103, 200, 199, 4, 233, 103, 231, 8, 201, 102, 203, - 45, 201, 102, 199, 21, 62, 235, 97, 63, 200, 198, 63, 200, 199, 4, 2, - 242, 210, 63, 200, 199, 248, 242, 242, 210, 63, 200, 199, 248, 242, 242, - 211, 4, 207, 149, 242, 211, 4, 207, 149, 242, 211, 4, 202, 52, 242, 211, - 4, 219, 129, 242, 211, 4, 198, 46, 232, 174, 193, 67, 248, 116, 233, 103, - 228, 181, 236, 162, 199, 227, 247, 228, 243, 103, 205, 48, 233, 226, 197, - 254, 237, 139, 197, 254, 210, 183, 197, 254, 247, 153, 228, 181, 210, 15, - 197, 78, 243, 107, 248, 119, 206, 126, 229, 149, 200, 196, 248, 119, 234, - 212, 79, 217, 103, 234, 212, 79, 206, 245, 229, 193, 232, 128, 219, 234, - 242, 209, 217, 69, 219, 233, 233, 84, 219, 233, 219, 234, 232, 181, 223, - 163, 193, 66, 215, 98, 198, 83, 250, 162, 230, 218, 216, 196, 193, 142, - 199, 187, 219, 201, 249, 98, 209, 133, 207, 87, 251, 46, 230, 201, 251, - 46, 210, 55, 210, 59, 243, 108, 201, 42, 230, 63, 202, 89, 79, 209, 112, - 216, 225, 211, 105, 248, 98, 209, 9, 219, 212, 206, 246, 238, 234, 206, - 246, 249, 111, 239, 17, 206, 245, 238, 167, 23, 206, 245, 201, 83, 248, - 66, 201, 243, 248, 43, 232, 106, 232, 102, 206, 152, 200, 142, 209, 12, - 237, 235, 211, 153, 200, 165, 232, 103, 203, 13, 232, 237, 247, 147, 4, - 200, 134, 237, 80, 202, 32, 228, 27, 238, 232, 203, 121, 228, 26, 228, - 27, 238, 232, 235, 126, 239, 16, 243, 66, 164, 247, 118, 219, 24, 238, - 158, 228, 254, 209, 14, 203, 29, 248, 222, 248, 62, 209, 15, 79, 232, - 161, 239, 15, 232, 150, 23, 221, 78, 199, 133, 193, 51, 230, 31, 205, - 176, 248, 79, 23, 238, 181, 193, 63, 231, 16, 242, 94, 231, 16, 197, 204, - 235, 104, 248, 253, 215, 140, 242, 226, 248, 253, 215, 139, 249, 149, - 248, 78, 232, 150, 23, 221, 79, 4, 209, 97, 248, 79, 4, 209, 30, 239, 3, - 209, 32, 206, 247, 193, 11, 208, 222, 248, 157, 247, 146, 223, 29, 243, - 56, 197, 254, 233, 67, 243, 55, 232, 240, 232, 241, 201, 241, 249, 109, - 210, 102, 209, 31, 239, 54, 249, 111, 199, 191, 197, 254, 238, 214, 232, - 211, 209, 134, 237, 136, 223, 19, 236, 154, 247, 90, 201, 41, 193, 67, - 243, 82, 215, 206, 195, 54, 247, 8, 205, 90, 205, 120, 230, 225, 247, - 111, 229, 224, 4, 198, 136, 211, 105, 199, 34, 219, 224, 248, 72, 79, - 232, 185, 216, 54, 216, 219, 207, 58, 206, 247, 37, 221, 221, 4, 223, 28, - 201, 11, 216, 89, 219, 168, 202, 86, 239, 22, 221, 72, 249, 13, 250, 213, - 37, 213, 1, 249, 13, 237, 86, 37, 213, 1, 233, 0, 232, 112, 252, 31, 198, - 180, 247, 91, 228, 183, 233, 33, 193, 93, 206, 139, 242, 97, 232, 232, - 209, 53, 23, 232, 236, 216, 89, 215, 169, 247, 132, 243, 14, 229, 231, - 250, 224, 210, 188, 198, 54, 230, 9, 243, 0, 199, 87, 198, 181, 242, 242, - 248, 107, 210, 6, 250, 222, 195, 65, 231, 214, 236, 234, 229, 117, 202, - 79, 217, 148, 248, 170, 231, 215, 237, 24, 248, 65, 232, 187, 209, 95, - 247, 99, 37, 213, 6, 215, 129, 37, 213, 1, 205, 104, 230, 162, 37, 221, - 220, 197, 179, 195, 42, 37, 205, 82, 206, 42, 203, 60, 4, 205, 123, 199, - 92, 207, 170, 23, 249, 111, 202, 109, 23, 202, 109, 248, 91, 249, 68, 23, - 228, 247, 243, 109, 232, 217, 202, 51, 206, 43, 200, 170, 201, 202, 216, - 219, 197, 205, 228, 184, 207, 171, 251, 141, 232, 158, 206, 56, 232, 158, - 200, 137, 193, 110, 219, 134, 230, 249, 207, 172, 215, 191, 207, 172, - 247, 102, 238, 225, 249, 65, 23, 249, 111, 195, 13, 233, 22, 229, 12, - 201, 75, 23, 249, 111, 228, 27, 229, 12, 201, 75, 23, 208, 157, 199, 234, - 199, 92, 210, 207, 23, 249, 111, 202, 53, 247, 107, 215, 184, 247, 130, - 249, 16, 4, 196, 117, 247, 255, 239, 36, 228, 173, 247, 253, 242, 250, - 237, 90, 228, 173, 247, 254, 242, 240, 247, 254, 237, 82, 237, 83, 223, - 60, 214, 208, 210, 109, 201, 113, 228, 173, 247, 254, 228, 173, 4, 231, - 198, 211, 144, 247, 254, 223, 19, 209, 20, 211, 143, 233, 231, 209, 20, - 211, 143, 228, 182, 249, 92, 250, 151, 199, 102, 217, 148, 228, 178, 218, - 242, 228, 178, 239, 20, 201, 57, 205, 89, 237, 94, 201, 57, 233, 92, 223, - 40, 220, 18, 223, 19, 247, 80, 233, 231, 247, 80, 63, 210, 28, 62, 210, - 28, 193, 136, 63, 232, 217, 193, 136, 62, 232, 217, 206, 125, 62, 206, - 125, 220, 117, 249, 132, 207, 170, 23, 202, 244, 248, 70, 23, 57, 251, - 136, 234, 109, 52, 232, 227, 196, 253, 234, 109, 52, 232, 227, 196, 250, - 234, 109, 52, 232, 227, 196, 248, 234, 109, 52, 232, 227, 196, 246, 234, - 109, 52, 232, 227, 196, 244, 207, 130, 215, 181, 210, 247, 193, 144, 248, - 3, 238, 239, 198, 173, 219, 185, 207, 174, 247, 78, 235, 111, 238, 223, - 193, 96, 202, 60, 202, 58, 228, 183, 207, 142, 230, 255, 203, 107, 215, - 225, 206, 129, 243, 93, 236, 162, 209, 147, 248, 109, 234, 131, 211, 156, - 201, 218, 203, 102, 248, 2, 251, 89, 228, 253, 220, 108, 248, 251, 232, - 236, 197, 204, 232, 236, 248, 117, 197, 55, 230, 7, 243, 94, 249, 149, - 243, 94, 232, 96, 249, 149, 243, 94, 248, 160, 210, 30, 221, 61, 209, 36, - 235, 101, 247, 134, 249, 137, 247, 134, 236, 153, 215, 182, 233, 103, - 238, 240, 233, 103, 198, 174, 233, 103, 207, 175, 233, 103, 247, 79, 233, - 103, 235, 112, 233, 103, 201, 200, 193, 96, 228, 184, 233, 103, 215, 226, - 233, 103, 236, 163, 233, 103, 209, 148, 233, 103, 232, 100, 233, 103, - 230, 59, 233, 103, 193, 38, 233, 103, 249, 10, 233, 103, 210, 162, 233, - 103, 209, 148, 213, 13, 210, 76, 208, 208, 243, 77, 233, 185, 233, 193, - 234, 211, 213, 13, 215, 179, 198, 61, 63, 133, 209, 58, 249, 144, 223, - 148, 63, 144, 209, 58, 249, 144, 223, 148, 63, 45, 209, 58, 249, 144, - 223, 148, 63, 50, 209, 58, 249, 144, 223, 148, 232, 230, 230, 54, 56, - 193, 136, 230, 54, 56, 211, 126, 230, 54, 56, 198, 211, 133, 56, 198, - 211, 144, 56, 242, 241, 230, 29, 56, 211, 77, 230, 29, 56, 238, 208, 193, - 34, 230, 9, 233, 188, 214, 111, 200, 41, 223, 9, 235, 106, 221, 142, 248, - 173, 193, 34, 242, 212, 208, 137, 230, 33, 209, 10, 217, 78, 203, 52, - 250, 178, 203, 52, 229, 134, 203, 52, 193, 34, 205, 139, 193, 34, 248, - 90, 232, 156, 247, 220, 223, 163, 202, 187, 247, 219, 223, 163, 202, 187, - 248, 60, 231, 28, 217, 90, 193, 35, 233, 81, 217, 91, 23, 193, 36, 229, - 6, 230, 28, 105, 216, 187, 229, 6, 230, 28, 105, 193, 33, 229, 6, 230, - 28, 209, 50, 211, 142, 193, 36, 4, 247, 239, 234, 209, 248, 30, 4, 195, - 144, 209, 251, 4, 248, 121, 230, 78, 217, 91, 4, 230, 176, 209, 186, 217, - 73, 217, 91, 4, 197, 63, 211, 118, 217, 90, 211, 118, 193, 35, 249, 148, - 239, 37, 193, 19, 208, 213, 223, 19, 211, 137, 223, 19, 230, 254, 231, - 61, 249, 149, 251, 120, 233, 198, 251, 182, 251, 183, 215, 215, 223, 168, - 202, 103, 223, 137, 237, 79, 209, 250, 230, 170, 237, 240, 219, 95, 214, - 235, 209, 48, 233, 104, 217, 33, 230, 77, 249, 86, 209, 52, 200, 62, 209, - 140, 221, 123, 77, 218, 242, 219, 175, 206, 188, 231, 155, 201, 65, 221, - 122, 248, 71, 238, 243, 4, 229, 223, 193, 117, 249, 6, 229, 223, 248, 22, - 229, 223, 105, 229, 221, 201, 239, 229, 223, 230, 186, 229, 223, 229, - 224, 4, 57, 248, 115, 229, 223, 230, 201, 229, 223, 192, 73, 229, 223, - 208, 138, 229, 223, 229, 224, 4, 206, 247, 207, 12, 229, 221, 229, 224, - 237, 136, 237, 33, 203, 135, 4, 42, 75, 223, 117, 234, 135, 156, 247, - 251, 251, 119, 113, 248, 99, 202, 92, 113, 242, 85, 113, 201, 212, 200, - 144, 113, 235, 97, 237, 216, 113, 209, 141, 79, 209, 37, 232, 199, 248, - 185, 236, 195, 113, 201, 230, 249, 109, 198, 231, 249, 109, 63, 232, 186, - 228, 141, 209, 56, 113, 215, 230, 249, 130, 238, 170, 233, 218, 88, 236, - 155, 56, 238, 230, 247, 100, 249, 91, 4, 192, 71, 56, 249, 91, 4, 236, - 155, 56, 249, 91, 4, 233, 234, 56, 249, 91, 4, 209, 8, 56, 215, 230, 4, - 193, 60, 243, 137, 4, 196, 66, 197, 250, 23, 192, 71, 56, 205, 60, 209, - 249, 239, 59, 248, 28, 216, 41, 232, 191, 236, 220, 211, 60, 236, 226, - 235, 55, 233, 7, 232, 171, 211, 77, 233, 7, 232, 171, 210, 205, 4, 238, - 175, 210, 205, 233, 96, 196, 77, 247, 140, 199, 130, 247, 140, 247, 101, - 223, 148, 243, 137, 4, 196, 66, 197, 249, 243, 137, 4, 235, 119, 197, - 249, 249, 88, 243, 136, 242, 225, 208, 133, 206, 115, 208, 133, 210, 134, - 201, 53, 206, 50, 197, 238, 206, 50, 248, 95, 199, 232, 219, 229, 213, 4, - 213, 5, 4, 237, 135, 238, 242, 242, 219, 248, 96, 211, 77, 248, 96, 230, - 201, 248, 96, 248, 115, 248, 96, 211, 55, 248, 96, 248, 93, 214, 228, - 249, 134, 205, 73, 216, 188, 199, 107, 207, 101, 210, 203, 233, 64, 217, - 148, 205, 119, 251, 86, 208, 158, 252, 39, 218, 244, 243, 119, 216, 201, - 211, 13, 198, 2, 223, 159, 198, 2, 210, 212, 235, 8, 113, 223, 156, 234, - 67, 234, 68, 4, 235, 119, 64, 58, 242, 219, 217, 109, 4, 218, 235, 232, - 217, 242, 219, 217, 109, 4, 207, 147, 232, 217, 211, 77, 217, 109, 4, - 207, 147, 232, 217, 211, 77, 217, 109, 4, 218, 235, 232, 217, 209, 17, - 209, 18, 228, 187, 214, 75, 216, 4, 209, 194, 216, 4, 209, 195, 4, 96, - 64, 250, 183, 219, 224, 195, 68, 216, 3, 216, 4, 209, 195, 211, 145, 213, - 44, 216, 4, 209, 193, 251, 87, 4, 249, 76, 247, 132, 247, 133, 4, 232, - 208, 195, 65, 247, 132, 199, 104, 207, 165, 195, 64, 233, 0, 208, 193, - 209, 27, 201, 77, 208, 236, 249, 15, 197, 17, 96, 250, 231, 242, 221, 96, - 23, 118, 211, 77, 243, 11, 250, 231, 242, 221, 96, 23, 118, 211, 77, 243, - 11, 250, 232, 4, 47, 91, 210, 255, 242, 221, 235, 119, 23, 196, 66, 211, - 77, 243, 11, 250, 231, 251, 85, 235, 119, 23, 196, 66, 211, 77, 243, 11, - 250, 231, 130, 248, 26, 113, 137, 248, 26, 113, 201, 235, 4, 247, 125, - 106, 201, 234, 201, 235, 4, 91, 202, 5, 193, 138, 201, 235, 4, 115, 202, - 5, 193, 137, 249, 58, 234, 135, 209, 87, 219, 219, 217, 121, 231, 16, - 206, 203, 217, 121, 231, 16, 219, 35, 4, 223, 129, 210, 34, 242, 219, - 219, 35, 4, 221, 222, 221, 222, 219, 34, 211, 77, 219, 34, 248, 235, 248, - 236, 4, 247, 125, 106, 248, 94, 219, 103, 113, 207, 166, 247, 213, 249, - 147, 4, 118, 64, 58, 234, 95, 4, 118, 64, 58, 211, 105, 4, 233, 216, 87, - 4, 45, 50, 64, 58, 202, 15, 4, 96, 64, 58, 198, 54, 4, 196, 66, 64, 58, - 213, 44, 91, 196, 105, 234, 162, 113, 221, 219, 199, 95, 223, 123, 16, - 40, 8, 6, 219, 174, 223, 123, 16, 40, 8, 2, 219, 174, 223, 123, 16, 40, - 212, 135, 223, 123, 16, 40, 200, 76, 223, 123, 16, 40, 8, 219, 174, 232, - 243, 234, 135, 198, 49, 193, 9, 230, 61, 212, 118, 23, 248, 101, 229, 13, - 209, 118, 216, 88, 199, 105, 238, 197, 249, 111, 202, 136, 209, 60, 201, - 103, 4, 82, 236, 140, 223, 19, 16, 40, 248, 248, 197, 236, 234, 111, 62, - 51, 247, 213, 63, 51, 247, 213, 220, 13, 207, 87, 243, 10, 220, 13, 248, - 115, 243, 10, 220, 13, 211, 55, 237, 32, 220, 13, 248, 115, 237, 32, 2, - 211, 55, 237, 32, 2, 248, 115, 237, 32, 196, 76, 207, 87, 197, 241, 235, - 122, 207, 87, 197, 241, 196, 76, 2, 207, 87, 197, 241, 235, 122, 2, 207, - 87, 197, 241, 110, 50, 203, 151, 63, 243, 10, 116, 50, 203, 151, 63, 243, - 10, 47, 238, 218, 209, 41, 238, 218, 209, 42, 4, 230, 67, 60, 238, 218, - 209, 41, 213, 8, 45, 204, 28, 4, 115, 236, 138, 213, 8, 50, 204, 28, 4, - 115, 236, 138, 16, 40, 217, 50, 246, 242, 63, 8, 238, 217, 88, 8, 238, - 217, 247, 26, 238, 217, 211, 114, 113, 235, 125, 79, 210, 60, 222, 125, - 215, 197, 200, 70, 216, 183, 4, 213, 175, 248, 46, 248, 67, 79, 228, 90, - 242, 223, 233, 104, 91, 211, 162, 242, 223, 233, 104, 105, 211, 162, 242, - 223, 233, 104, 115, 211, 162, 242, 223, 233, 104, 232, 128, 211, 162, - 242, 223, 233, 104, 232, 226, 211, 162, 242, 223, 233, 104, 202, 136, - 211, 162, 242, 223, 233, 104, 203, 247, 211, 162, 242, 223, 233, 104, - 234, 164, 211, 162, 242, 223, 233, 104, 213, 175, 211, 162, 242, 223, - 233, 104, 199, 96, 211, 162, 242, 223, 233, 104, 234, 128, 211, 162, 242, - 223, 233, 104, 197, 38, 211, 162, 242, 223, 233, 104, 211, 97, 242, 223, - 233, 104, 197, 11, 242, 223, 233, 104, 198, 217, 242, 223, 233, 104, 232, - 124, 242, 223, 233, 104, 232, 223, 242, 223, 233, 104, 202, 132, 242, - 223, 233, 104, 203, 246, 242, 223, 233, 104, 234, 163, 242, 223, 233, - 104, 213, 173, 242, 223, 233, 104, 199, 94, 242, 223, 233, 104, 234, 126, - 242, 223, 233, 104, 197, 36, 50, 201, 234, 50, 201, 235, 4, 91, 202, 5, - 193, 138, 50, 201, 235, 4, 115, 202, 5, 193, 137, 247, 246, 247, 247, 4, - 202, 5, 193, 137, 206, 186, 248, 235, 248, 96, 247, 123, 217, 75, 242, - 222, 62, 202, 104, 23, 238, 215, 213, 44, 209, 124, 229, 5, 217, 91, 223, - 163, 247, 222, 200, 212, 219, 165, 202, 90, 211, 57, 201, 191, 237, 221, - 200, 194, 201, 221, 201, 222, 193, 118, 222, 183, 217, 91, 237, 239, 45, - 230, 54, 199, 107, 207, 101, 199, 107, 207, 102, 4, 210, 204, 50, 230, - 54, 199, 107, 207, 101, 63, 198, 34, 199, 106, 62, 198, 34, 199, 106, - 199, 107, 211, 105, 198, 54, 79, 216, 0, 242, 245, 216, 4, 209, 194, 249, - 147, 79, 234, 67, 201, 109, 234, 67, 234, 68, 4, 219, 129, 232, 178, 234, - 67, 210, 35, 139, 201, 109, 234, 67, 219, 102, 210, 133, 62, 208, 133, - 110, 45, 210, 33, 110, 45, 249, 105, 210, 34, 110, 45, 232, 130, 210, 34, - 110, 45, 210, 197, 110, 45, 238, 233, 45, 193, 3, 230, 53, 153, 211, 126, - 230, 54, 56, 207, 147, 230, 54, 4, 232, 248, 201, 211, 207, 18, 207, 147, - 230, 54, 4, 232, 248, 201, 211, 207, 18, 198, 211, 133, 56, 207, 18, 198, - 211, 144, 56, 207, 18, 195, 67, 230, 53, 207, 18, 230, 54, 4, 82, 232, - 253, 233, 204, 207, 147, 230, 54, 4, 210, 107, 248, 210, 82, 23, 206, - 189, 232, 247, 63, 144, 209, 58, 45, 230, 54, 223, 148, 202, 206, 63, 45, - 209, 58, 223, 148, 202, 206, 63, 50, 209, 58, 223, 148, 202, 206, 62, 45, - 209, 58, 223, 148, 202, 206, 62, 50, 209, 58, 223, 148, 62, 45, 209, 58, - 249, 144, 223, 148, 62, 50, 209, 58, 249, 144, 223, 148, 202, 206, 63, - 133, 209, 58, 223, 148, 202, 206, 63, 144, 209, 58, 223, 148, 202, 206, - 62, 133, 209, 58, 223, 148, 202, 206, 62, 144, 209, 58, 223, 148, 62, - 133, 209, 58, 249, 144, 223, 148, 62, 144, 209, 58, 249, 144, 223, 148, - 62, 229, 223, 237, 78, 239, 59, 221, 221, 23, 215, 181, 115, 214, 84, - 239, 58, 208, 209, 209, 71, 247, 142, 62, 230, 17, 203, 103, 232, 191, - 236, 220, 63, 230, 17, 203, 103, 232, 191, 236, 220, 202, 32, 203, 103, - 232, 191, 236, 220, 199, 182, 247, 84, 193, 55, 221, 220, 91, 247, 214, - 215, 181, 105, 247, 214, 215, 181, 115, 247, 214, 215, 181, 198, 24, 39, - 209, 249, 239, 59, 230, 17, 236, 220, 205, 76, 208, 210, 228, 20, 233, - 64, 228, 20, 211, 60, 236, 227, 228, 20, 236, 168, 4, 199, 53, 236, 168, - 4, 199, 54, 23, 209, 177, 236, 168, 4, 209, 177, 232, 114, 4, 209, 177, - 232, 114, 4, 198, 150, 232, 114, 4, 251, 133, 192, 235, 62, 232, 171, - 232, 171, 211, 77, 232, 171, 247, 101, 141, 236, 204, 247, 101, 233, 7, - 248, 62, 233, 7, 247, 155, 234, 105, 213, 6, 234, 105, 213, 7, 210, 204, - 234, 105, 213, 7, 210, 210, 213, 6, 213, 7, 210, 204, 213, 7, 210, 210, - 234, 105, 236, 167, 234, 105, 210, 204, 234, 105, 210, 202, 236, 167, - 210, 204, 210, 202, 193, 148, 201, 218, 213, 7, 210, 210, 201, 218, 247, - 141, 210, 210, 237, 78, 193, 65, 216, 38, 217, 22, 211, 2, 242, 221, 50, - 23, 45, 204, 28, 250, 231, 247, 125, 192, 235, 223, 154, 232, 163, 202, - 116, 113, 237, 134, 232, 163, 202, 116, 113, 239, 60, 39, 221, 222, 206, - 140, 214, 75, 210, 205, 4, 47, 199, 53, 201, 67, 243, 136, 238, 15, 221, - 78, 219, 96, 201, 233, 229, 236, 223, 163, 202, 187, 115, 207, 120, 58, - 115, 207, 120, 60, 115, 207, 120, 219, 224, 115, 207, 120, 183, 45, 201, - 230, 248, 8, 50, 201, 230, 248, 8, 105, 201, 230, 248, 7, 115, 201, 230, - 248, 7, 45, 198, 231, 248, 8, 50, 198, 231, 248, 8, 45, 251, 119, 248, 8, - 50, 251, 119, 248, 8, 215, 210, 248, 8, 219, 130, 215, 210, 248, 8, 219, - 130, 215, 209, 249, 107, 111, 4, 249, 106, 249, 107, 27, 192, 235, 249, - 107, 111, 4, 27, 192, 235, 249, 107, 28, 27, 192, 235, 249, 107, 111, 4, - 28, 27, 192, 235, 156, 243, 126, 77, 249, 107, 111, 4, 28, 243, 125, 193, - 18, 217, 71, 215, 186, 232, 81, 198, 85, 198, 30, 201, 92, 79, 219, 144, - 202, 188, 79, 223, 20, 215, 167, 230, 196, 233, 103, 230, 196, 233, 104, - 4, 202, 64, 233, 185, 233, 104, 4, 199, 126, 79, 222, 185, 202, 64, 233, - 104, 4, 211, 77, 215, 179, 202, 64, 233, 104, 4, 211, 77, 215, 180, 23, - 202, 64, 233, 185, 202, 64, 233, 104, 4, 211, 77, 215, 180, 23, 242, 87, - 200, 143, 202, 64, 233, 104, 4, 211, 77, 215, 180, 23, 198, 171, 233, - 185, 202, 64, 233, 104, 4, 230, 66, 202, 64, 233, 104, 4, 228, 186, 193, - 57, 233, 103, 202, 64, 233, 104, 4, 202, 64, 233, 185, 233, 104, 205, - 109, 237, 114, 232, 161, 207, 61, 233, 103, 202, 64, 233, 104, 4, 229, - 222, 233, 185, 202, 64, 233, 104, 4, 200, 194, 202, 63, 233, 103, 214, - 82, 233, 103, 233, 206, 233, 103, 196, 111, 233, 103, 233, 104, 4, 242, - 87, 200, 143, 210, 26, 233, 103, 239, 51, 233, 103, 239, 52, 233, 103, - 221, 121, 233, 103, 233, 104, 198, 214, 42, 221, 122, 221, 121, 233, 104, - 4, 202, 64, 233, 185, 221, 121, 233, 104, 4, 242, 219, 233, 185, 233, - 104, 4, 201, 12, 198, 61, 233, 104, 4, 201, 12, 198, 62, 23, 193, 57, - 233, 193, 233, 104, 4, 201, 12, 198, 62, 23, 198, 171, 233, 185, 236, - 228, 233, 103, 193, 16, 233, 103, 251, 111, 233, 103, 209, 6, 233, 103, - 238, 199, 233, 103, 209, 253, 233, 103, 233, 104, 4, 219, 7, 79, 197, - 217, 236, 228, 247, 218, 207, 61, 233, 103, 232, 92, 233, 104, 4, 211, - 77, 215, 179, 251, 109, 233, 103, 233, 57, 233, 103, 193, 119, 233, 103, - 202, 91, 233, 103, 198, 130, 233, 103, 230, 197, 233, 103, 218, 245, 238, - 199, 233, 103, 233, 104, 4, 211, 77, 215, 179, 228, 130, 233, 103, 233, - 104, 4, 211, 77, 215, 180, 23, 242, 87, 200, 143, 233, 104, 205, 78, 223, - 163, 233, 58, 250, 190, 233, 103, 232, 183, 233, 103, 202, 92, 233, 103, - 236, 195, 233, 103, 233, 104, 193, 51, 215, 179, 233, 104, 4, 216, 216, - 217, 35, 230, 196, 247, 79, 233, 104, 4, 202, 64, 233, 185, 247, 79, 233, - 104, 4, 199, 126, 79, 222, 185, 202, 64, 247, 79, 233, 104, 4, 211, 77, - 215, 179, 202, 64, 247, 79, 233, 104, 4, 229, 222, 233, 185, 247, 79, - 233, 104, 4, 193, 1, 202, 65, 221, 121, 247, 79, 233, 104, 4, 242, 219, - 233, 185, 209, 6, 247, 79, 233, 103, 238, 199, 247, 79, 233, 103, 193, - 119, 247, 79, 233, 103, 202, 84, 232, 92, 233, 103, 202, 84, 202, 64, - 233, 103, 196, 72, 233, 103, 233, 104, 4, 206, 138, 233, 185, 233, 104, - 4, 213, 44, 230, 244, 231, 132, 233, 104, 4, 211, 126, 231, 132, 209, - 251, 248, 68, 237, 129, 205, 49, 215, 225, 229, 226, 215, 225, 201, 236, - 215, 225, 230, 20, 209, 251, 207, 145, 91, 230, 53, 209, 251, 207, 145, - 248, 80, 230, 29, 223, 163, 247, 28, 209, 251, 232, 91, 209, 251, 4, 209, - 6, 233, 103, 209, 251, 4, 232, 172, 230, 28, 186, 193, 105, 209, 58, 219, - 233, 202, 2, 193, 105, 209, 58, 219, 233, 186, 234, 204, 209, 58, 219, - 233, 202, 2, 234, 204, 209, 58, 219, 233, 153, 186, 193, 105, 209, 58, - 219, 233, 153, 202, 2, 193, 105, 209, 58, 219, 233, 153, 186, 234, 204, - 209, 58, 219, 233, 153, 202, 2, 234, 204, 209, 58, 219, 233, 186, 193, - 105, 209, 58, 195, 48, 219, 233, 202, 2, 193, 105, 209, 58, 195, 48, 219, - 233, 186, 234, 204, 209, 58, 195, 48, 219, 233, 202, 2, 234, 204, 209, - 58, 195, 48, 219, 233, 88, 186, 193, 105, 209, 58, 195, 48, 219, 233, 88, - 202, 2, 193, 105, 209, 58, 195, 48, 219, 233, 88, 186, 234, 204, 209, 58, - 195, 48, 219, 233, 88, 202, 2, 234, 204, 209, 58, 195, 48, 219, 233, 186, - 193, 105, 209, 58, 248, 4, 202, 2, 193, 105, 209, 58, 248, 4, 186, 234, - 204, 209, 58, 248, 4, 202, 2, 234, 204, 209, 58, 248, 4, 88, 186, 193, - 105, 209, 58, 248, 4, 88, 202, 2, 193, 105, 209, 58, 248, 4, 88, 186, - 234, 204, 209, 58, 248, 4, 88, 202, 2, 234, 204, 209, 58, 248, 4, 229, 4, - 208, 6, 51, 211, 42, 229, 4, 208, 6, 51, 211, 43, 223, 163, 62, 201, 190, - 202, 25, 208, 6, 51, 211, 42, 202, 25, 208, 6, 51, 211, 43, 223, 163, 62, - 201, 190, 118, 206, 146, 196, 66, 206, 146, 96, 206, 146, 235, 119, 206, - 146, 27, 34, 234, 0, 211, 42, 88, 27, 34, 234, 0, 211, 42, 34, 211, 77, - 234, 0, 211, 42, 88, 34, 211, 77, 234, 0, 211, 42, 88, 251, 138, 211, 42, - 200, 146, 251, 138, 211, 42, 49, 88, 55, 153, 242, 75, 207, 252, 87, 211, - 42, 49, 88, 55, 242, 75, 207, 252, 87, 211, 42, 49, 88, 130, 55, 242, 75, - 207, 252, 87, 211, 42, 88, 223, 103, 211, 42, 49, 223, 103, 211, 42, 88, - 49, 223, 103, 211, 42, 195, 83, 88, 202, 23, 195, 83, 88, 207, 19, 202, - 23, 243, 124, 248, 107, 207, 19, 243, 124, 248, 107, 206, 146, 229, 205, - 201, 85, 219, 32, 207, 152, 247, 102, 229, 131, 198, 16, 229, 131, 198, - 17, 4, 247, 249, 213, 13, 198, 16, 216, 158, 156, 207, 153, 201, 93, 198, - 14, 198, 15, 247, 102, 247, 223, 211, 101, 247, 223, 197, 212, 247, 224, - 201, 63, 216, 42, 251, 142, 232, 244, 234, 87, 209, 50, 247, 102, 211, - 101, 209, 50, 247, 102, 199, 155, 211, 101, 199, 155, 250, 150, 211, 101, - 250, 150, 207, 94, 195, 145, 237, 110, 197, 203, 250, 225, 218, 254, 198, - 23, 215, 218, 215, 185, 207, 151, 200, 164, 207, 151, 215, 185, 247, 154, - 252, 11, 198, 13, 203, 65, 206, 112, 201, 228, 228, 241, 198, 20, 219, - 132, 81, 198, 20, 219, 132, 239, 37, 56, 209, 50, 247, 86, 207, 12, 219, - 132, 197, 238, 232, 218, 211, 105, 209, 19, 236, 144, 213, 44, 234, 73, - 56, 202, 62, 113, 213, 44, 202, 62, 113, 208, 132, 219, 84, 223, 163, - 223, 50, 209, 108, 113, 236, 175, 213, 12, 219, 84, 113, 209, 13, 193, - 144, 113, 213, 28, 193, 144, 113, 248, 184, 213, 44, 248, 183, 248, 182, - 215, 185, 248, 182, 210, 51, 213, 44, 210, 50, 243, 85, 238, 209, 216, - 182, 113, 193, 32, 113, 207, 28, 249, 149, 113, 198, 86, 193, 144, 242, - 216, 203, 20, 249, 61, 249, 59, 210, 91, 239, 21, 238, 156, 249, 126, - 242, 246, 45, 218, 215, 197, 242, 4, 206, 113, 239, 0, 208, 196, 56, 47, - 223, 137, 202, 3, 248, 59, 113, 231, 27, 113, 238, 248, 23, 220, 25, 202, - 92, 252, 57, 203, 43, 249, 125, 248, 234, 248, 235, 249, 2, 209, 108, 79, - 193, 15, 211, 159, 56, 203, 43, 197, 213, 201, 8, 210, 201, 229, 127, - 199, 98, 228, 129, 234, 130, 193, 54, 209, 96, 202, 87, 193, 93, 206, - 189, 247, 233, 230, 62, 23, 193, 9, 203, 78, 211, 132, 235, 94, 215, 189, - 207, 152, 198, 25, 215, 192, 248, 106, 196, 76, 216, 54, 251, 223, 196, - 76, 251, 223, 196, 76, 2, 251, 223, 2, 251, 223, 213, 17, 251, 223, 251, - 224, 237, 93, 251, 224, 250, 238, 205, 118, 211, 101, 232, 244, 234, 87, - 237, 22, 219, 32, 210, 95, 203, 65, 205, 83, 215, 192, 205, 83, 247, 113, - 202, 94, 232, 178, 205, 113, 202, 111, 250, 152, 206, 243, 209, 178, 197, - 203, 206, 139, 202, 112, 160, 16, 40, 208, 2, 160, 16, 40, 251, 225, 160, - 16, 40, 232, 243, 160, 16, 40, 234, 207, 160, 16, 40, 193, 143, 160, 16, - 40, 251, 35, 160, 16, 40, 251, 36, 207, 81, 160, 16, 40, 251, 36, 207, - 80, 160, 16, 40, 251, 36, 195, 31, 160, 16, 40, 251, 36, 195, 30, 160, + 112, 8, 6, 1, 192, 159, 112, 8, 6, 1, 191, 166, 112, 228, 128, 112, 215, + 89, 112, 205, 71, 112, 201, 179, 112, 208, 250, 112, 193, 126, 214, 108, + 47, 8, 6, 1, 65, 214, 108, 47, 8, 6, 1, 250, 122, 214, 108, 47, 8, 6, 1, + 247, 195, 214, 108, 47, 8, 6, 1, 238, 129, 214, 108, 47, 8, 6, 1, 71, + 214, 108, 47, 8, 6, 1, 233, 177, 214, 108, 47, 8, 6, 1, 232, 53, 214, + 108, 47, 8, 6, 1, 230, 118, 214, 108, 47, 8, 6, 1, 68, 214, 108, 47, 8, + 6, 1, 223, 37, 214, 108, 47, 8, 6, 1, 222, 154, 214, 108, 47, 8, 6, 1, + 172, 214, 108, 47, 8, 6, 1, 218, 170, 214, 108, 47, 8, 6, 1, 215, 63, + 214, 108, 47, 8, 6, 1, 74, 214, 108, 47, 8, 6, 1, 210, 238, 214, 108, 47, + 8, 6, 1, 208, 106, 214, 108, 47, 8, 6, 1, 146, 214, 108, 47, 8, 6, 1, + 206, 9, 214, 108, 47, 8, 6, 1, 200, 43, 214, 108, 47, 8, 6, 1, 66, 214, + 108, 47, 8, 6, 1, 196, 12, 214, 108, 47, 8, 6, 1, 193, 224, 214, 108, 47, + 8, 6, 1, 192, 235, 214, 108, 47, 8, 6, 1, 192, 159, 214, 108, 47, 8, 6, + 1, 191, 166, 207, 149, 216, 241, 56, 207, 149, 216, 237, 56, 207, 149, + 215, 166, 56, 47, 247, 68, 47, 247, 196, 4, 211, 6, 249, 143, 47, 228, + 147, 233, 14, 214, 108, 112, 8, 6, 1, 65, 214, 108, 112, 8, 6, 1, 250, + 122, 214, 108, 112, 8, 6, 1, 247, 195, 214, 108, 112, 8, 6, 1, 238, 129, + 214, 108, 112, 8, 6, 1, 71, 214, 108, 112, 8, 6, 1, 233, 177, 214, 108, + 112, 8, 6, 1, 232, 53, 214, 108, 112, 8, 6, 1, 230, 118, 214, 108, 112, + 8, 6, 1, 68, 214, 108, 112, 8, 6, 1, 223, 37, 214, 108, 112, 8, 6, 1, + 222, 154, 214, 108, 112, 8, 6, 1, 172, 214, 108, 112, 8, 6, 1, 218, 170, + 214, 108, 112, 8, 6, 1, 215, 63, 214, 108, 112, 8, 6, 1, 74, 214, 108, + 112, 8, 6, 1, 210, 238, 214, 108, 112, 8, 6, 1, 208, 106, 214, 108, 112, + 8, 6, 1, 146, 214, 108, 112, 8, 6, 1, 206, 9, 214, 108, 112, 8, 6, 1, + 200, 43, 214, 108, 112, 8, 6, 1, 66, 214, 108, 112, 8, 6, 1, 196, 12, + 214, 108, 112, 8, 6, 1, 193, 224, 214, 108, 112, 8, 6, 1, 192, 235, 214, + 108, 112, 8, 6, 1, 192, 159, 214, 108, 112, 8, 6, 1, 191, 166, 238, 216, + 214, 108, 112, 8, 6, 1, 210, 238, 214, 108, 112, 228, 30, 214, 108, 112, + 168, 214, 108, 112, 188, 214, 108, 112, 252, 157, 214, 108, 112, 193, + 126, 51, 236, 196, 112, 242, 249, 112, 239, 16, 112, 232, 110, 112, 228, + 21, 112, 214, 81, 112, 214, 72, 112, 211, 127, 112, 202, 10, 112, 133, 4, + 233, 218, 77, 112, 194, 252, 112, 115, 238, 129, 112, 205, 58, 205, 77, + 112, 105, 222, 154, 112, 232, 130, 222, 154, 112, 234, 166, 222, 154, + 112, 232, 228, 209, 64, 107, 112, 203, 248, 209, 64, 107, 112, 197, 21, + 209, 64, 109, 112, 202, 122, 210, 238, 112, 91, 228, 143, 197, 33, 210, + 238, 112, 8, 2, 1, 238, 129, 112, 229, 250, 112, 229, 249, 112, 229, 152, + 112, 218, 254, 112, 202, 242, 112, 196, 140, 112, 195, 21, 217, 38, 193, + 21, 113, 207, 80, 223, 147, 16, 1, 65, 207, 80, 223, 147, 16, 1, 250, + 122, 207, 80, 223, 147, 16, 1, 247, 195, 207, 80, 223, 147, 16, 1, 238, + 129, 207, 80, 223, 147, 16, 1, 71, 207, 80, 223, 147, 16, 1, 233, 177, + 207, 80, 223, 147, 16, 1, 232, 53, 207, 80, 223, 147, 16, 1, 230, 118, + 207, 80, 223, 147, 16, 1, 68, 207, 80, 223, 147, 16, 1, 223, 37, 207, 80, + 223, 147, 16, 1, 222, 154, 207, 80, 223, 147, 16, 1, 172, 207, 80, 223, + 147, 16, 1, 218, 170, 207, 80, 223, 147, 16, 1, 215, 63, 207, 80, 223, + 147, 16, 1, 74, 207, 80, 223, 147, 16, 1, 210, 238, 207, 80, 223, 147, + 16, 1, 208, 106, 207, 80, 223, 147, 16, 1, 146, 207, 80, 223, 147, 16, 1, + 206, 9, 207, 80, 223, 147, 16, 1, 200, 43, 207, 80, 223, 147, 16, 1, 66, + 207, 80, 223, 147, 16, 1, 196, 12, 207, 80, 223, 147, 16, 1, 193, 224, + 207, 80, 223, 147, 16, 1, 192, 235, 207, 80, 223, 147, 16, 1, 192, 159, + 207, 80, 223, 147, 16, 1, 191, 166, 51, 229, 122, 229, 11, 112, 72, 221, + 51, 112, 72, 188, 112, 12, 196, 95, 225, 219, 112, 12, 196, 95, 225, 223, + 112, 12, 196, 95, 225, 231, 112, 72, 237, 148, 112, 12, 196, 95, 225, + 238, 112, 12, 196, 95, 225, 225, 112, 12, 196, 95, 225, 197, 112, 12, + 196, 95, 225, 224, 112, 12, 196, 95, 225, 237, 112, 12, 196, 95, 225, + 211, 112, 12, 196, 95, 225, 204, 112, 12, 196, 95, 225, 213, 112, 12, + 196, 95, 225, 234, 112, 12, 196, 95, 225, 220, 112, 12, 196, 95, 225, + 236, 112, 12, 196, 95, 225, 212, 112, 12, 196, 95, 225, 235, 112, 12, + 196, 95, 225, 198, 112, 12, 196, 95, 225, 203, 112, 12, 196, 95, 225, + 196, 112, 12, 196, 95, 225, 226, 112, 12, 196, 95, 225, 228, 112, 12, + 196, 95, 225, 206, 112, 12, 196, 95, 225, 217, 112, 12, 196, 95, 225, + 215, 112, 12, 196, 95, 225, 241, 112, 12, 196, 95, 225, 240, 112, 12, + 196, 95, 225, 194, 112, 12, 196, 95, 225, 221, 112, 12, 196, 95, 225, + 239, 112, 12, 196, 95, 225, 230, 112, 12, 196, 95, 225, 216, 112, 12, + 196, 95, 225, 195, 112, 12, 196, 95, 225, 218, 112, 12, 196, 95, 225, + 200, 112, 12, 196, 95, 225, 199, 112, 12, 196, 95, 225, 229, 112, 12, + 196, 95, 225, 207, 112, 12, 196, 95, 225, 209, 112, 12, 196, 95, 225, + 210, 112, 12, 196, 95, 225, 202, 112, 12, 196, 95, 225, 233, 112, 12, + 196, 95, 225, 227, 112, 12, 196, 95, 225, 193, 198, 42, 203, 104, 248, + 54, 12, 196, 95, 225, 208, 198, 42, 203, 104, 248, 54, 12, 196, 95, 225, + 240, 198, 42, 203, 104, 248, 54, 12, 196, 95, 225, 238, 198, 42, 203, + 104, 248, 54, 12, 196, 95, 225, 222, 198, 42, 203, 104, 248, 54, 12, 196, + 95, 225, 205, 198, 42, 203, 104, 248, 54, 12, 196, 95, 225, 218, 198, 42, + 203, 104, 248, 54, 12, 196, 95, 225, 201, 198, 42, 203, 104, 248, 54, 12, + 196, 95, 225, 232, 198, 42, 203, 104, 248, 54, 12, 196, 95, 225, 214, 47, + 228, 16, 252, 29, 47, 228, 16, 252, 60, 206, 114, 16, 40, 232, 88, 206, + 114, 16, 40, 218, 227, 206, 114, 16, 40, 203, 24, 206, 114, 16, 40, 192, + 207, 206, 114, 16, 40, 203, 3, 206, 114, 16, 40, 247, 150, 238, 141, 232, + 175, 242, 221, 196, 117, 213, 193, 4, 201, 100, 200, 193, 139, 215, 185, + 200, 192, 242, 253, 250, 185, 235, 63, 200, 191, 139, 247, 255, 207, 150, + 248, 31, 250, 185, 213, 192, 193, 144, 193, 138, 195, 14, 216, 54, 193, + 128, 234, 210, 231, 14, 233, 234, 234, 210, 231, 14, 251, 142, 234, 210, + 231, 14, 250, 204, 231, 14, 4, 216, 179, 214, 82, 215, 208, 113, 193, + 130, 238, 230, 215, 208, 113, 232, 240, 208, 25, 215, 208, 113, 193, 130, + 231, 51, 215, 208, 113, 232, 82, 215, 208, 113, 193, 159, 231, 51, 215, + 208, 113, 220, 8, 208, 25, 215, 208, 113, 193, 159, 238, 230, 215, 208, + 113, 238, 230, 215, 207, 214, 82, 215, 208, 4, 233, 105, 232, 240, 208, + 25, 215, 208, 4, 233, 105, 220, 8, 208, 25, 215, 208, 4, 233, 105, 232, + 82, 215, 208, 4, 233, 105, 200, 199, 4, 233, 105, 231, 10, 201, 103, 203, + 46, 201, 103, 199, 21, 62, 235, 99, 63, 200, 198, 63, 200, 199, 4, 2, + 242, 212, 63, 200, 199, 248, 244, 242, 212, 63, 200, 199, 248, 244, 242, + 213, 4, 207, 151, 242, 213, 4, 207, 151, 242, 213, 4, 202, 53, 242, 213, + 4, 219, 131, 242, 213, 4, 198, 46, 232, 176, 193, 67, 248, 118, 233, 105, + 228, 183, 236, 164, 199, 227, 247, 230, 243, 105, 205, 49, 233, 228, 197, + 254, 237, 141, 197, 254, 210, 185, 197, 254, 247, 155, 228, 183, 210, 17, + 197, 78, 243, 109, 248, 121, 206, 127, 229, 151, 200, 196, 248, 121, 234, + 214, 79, 217, 105, 234, 214, 79, 206, 246, 229, 195, 232, 130, 219, 236, + 242, 211, 217, 71, 219, 235, 233, 86, 219, 235, 219, 236, 232, 183, 223, + 165, 193, 66, 215, 100, 198, 83, 250, 164, 230, 220, 216, 198, 193, 142, + 199, 187, 219, 203, 249, 100, 209, 135, 207, 89, 251, 48, 230, 203, 251, + 48, 210, 57, 210, 61, 243, 110, 201, 43, 230, 65, 202, 90, 79, 209, 114, + 216, 227, 211, 107, 248, 100, 209, 11, 219, 214, 206, 247, 238, 236, 206, + 247, 249, 113, 239, 19, 206, 246, 238, 169, 23, 206, 246, 201, 84, 248, + 68, 201, 244, 248, 45, 232, 108, 232, 104, 206, 153, 200, 142, 209, 14, + 237, 237, 211, 155, 200, 165, 232, 105, 203, 14, 232, 239, 247, 149, 4, + 200, 134, 237, 82, 202, 33, 228, 29, 238, 234, 203, 122, 228, 28, 228, + 29, 238, 234, 235, 128, 239, 18, 243, 68, 164, 247, 120, 219, 26, 238, + 160, 229, 0, 209, 16, 203, 30, 248, 224, 248, 64, 209, 17, 79, 232, 163, + 239, 17, 232, 152, 23, 221, 80, 199, 133, 193, 51, 230, 33, 205, 177, + 248, 81, 23, 238, 183, 193, 63, 231, 18, 242, 96, 231, 18, 197, 204, 235, + 106, 248, 255, 215, 142, 242, 228, 248, 255, 215, 141, 249, 151, 248, 80, + 232, 152, 23, 221, 81, 4, 209, 99, 248, 81, 4, 209, 32, 239, 5, 209, 34, + 206, 248, 193, 11, 208, 224, 248, 159, 247, 148, 223, 31, 243, 58, 197, + 254, 233, 69, 243, 57, 232, 242, 232, 243, 201, 242, 249, 111, 210, 104, + 209, 33, 239, 56, 249, 113, 199, 191, 197, 254, 238, 216, 232, 213, 209, + 136, 237, 138, 223, 21, 236, 156, 247, 92, 201, 42, 193, 67, 243, 84, + 215, 208, 195, 54, 247, 10, 205, 91, 205, 121, 230, 227, 247, 113, 229, + 226, 4, 198, 136, 211, 107, 199, 34, 219, 226, 248, 74, 79, 232, 187, + 216, 56, 216, 221, 207, 59, 206, 248, 37, 221, 223, 4, 223, 30, 201, 12, + 216, 91, 219, 170, 202, 87, 239, 24, 221, 74, 249, 15, 250, 215, 37, 213, + 3, 249, 15, 237, 88, 37, 213, 3, 233, 2, 232, 114, 252, 33, 198, 180, + 247, 93, 228, 185, 233, 35, 193, 93, 206, 140, 242, 99, 232, 234, 209, + 55, 23, 232, 238, 216, 91, 215, 171, 247, 134, 243, 16, 229, 233, 250, + 226, 210, 190, 198, 54, 230, 11, 243, 2, 199, 87, 198, 181, 242, 244, + 248, 109, 210, 8, 250, 224, 195, 65, 231, 216, 236, 236, 229, 119, 202, + 80, 217, 150, 248, 172, 231, 217, 237, 26, 248, 67, 232, 189, 209, 97, + 247, 101, 37, 213, 8, 215, 131, 37, 213, 3, 205, 105, 230, 164, 37, 221, + 222, 197, 179, 195, 42, 37, 205, 83, 206, 43, 203, 61, 4, 205, 124, 199, + 92, 207, 172, 23, 249, 113, 202, 110, 23, 202, 110, 248, 93, 249, 70, 23, + 228, 249, 243, 111, 232, 219, 202, 52, 206, 44, 200, 170, 201, 203, 216, + 221, 197, 205, 228, 186, 207, 173, 251, 143, 232, 160, 206, 57, 232, 160, + 200, 137, 193, 110, 219, 136, 230, 251, 207, 174, 215, 193, 207, 174, + 247, 104, 238, 227, 249, 67, 23, 249, 113, 195, 13, 233, 24, 229, 14, + 201, 76, 23, 249, 113, 228, 29, 229, 14, 201, 76, 23, 208, 159, 199, 234, + 199, 92, 210, 209, 23, 249, 113, 202, 54, 247, 109, 215, 186, 247, 132, + 249, 18, 4, 196, 117, 248, 1, 239, 38, 228, 175, 247, 255, 242, 252, 237, + 92, 228, 175, 248, 0, 242, 242, 248, 0, 237, 84, 237, 85, 223, 62, 214, + 210, 210, 111, 201, 114, 228, 175, 248, 0, 228, 175, 4, 231, 200, 211, + 146, 248, 0, 223, 21, 209, 22, 211, 145, 233, 233, 209, 22, 211, 145, + 228, 184, 249, 94, 250, 153, 199, 102, 217, 150, 228, 180, 218, 244, 228, + 180, 239, 22, 201, 58, 205, 90, 237, 96, 201, 58, 233, 94, 223, 42, 220, + 20, 223, 21, 247, 82, 233, 233, 247, 82, 63, 210, 30, 62, 210, 30, 193, + 136, 63, 232, 219, 193, 136, 62, 232, 219, 206, 126, 62, 206, 126, 220, + 119, 249, 134, 207, 172, 23, 202, 245, 248, 72, 23, 57, 251, 138, 234, + 111, 52, 232, 229, 196, 253, 234, 111, 52, 232, 229, 196, 250, 234, 111, + 52, 232, 229, 196, 248, 234, 111, 52, 232, 229, 196, 246, 234, 111, 52, + 232, 229, 196, 244, 207, 132, 215, 183, 210, 249, 193, 144, 248, 5, 238, + 241, 198, 173, 219, 187, 207, 176, 247, 80, 235, 113, 238, 225, 193, 96, + 202, 61, 202, 59, 228, 185, 207, 144, 231, 1, 203, 108, 215, 227, 206, + 130, 243, 95, 236, 164, 209, 149, 248, 111, 234, 133, 211, 158, 201, 219, + 203, 103, 248, 4, 251, 91, 228, 255, 220, 110, 248, 253, 232, 238, 197, + 204, 232, 238, 248, 119, 197, 55, 230, 9, 243, 96, 249, 151, 243, 96, + 232, 98, 249, 151, 243, 96, 248, 162, 210, 32, 221, 63, 209, 38, 235, + 103, 247, 136, 249, 139, 247, 136, 236, 155, 215, 184, 233, 105, 238, + 242, 233, 105, 198, 174, 233, 105, 207, 177, 233, 105, 247, 81, 233, 105, + 235, 114, 233, 105, 201, 201, 193, 96, 228, 186, 233, 105, 215, 228, 233, + 105, 236, 165, 233, 105, 209, 150, 233, 105, 232, 102, 233, 105, 230, 61, + 233, 105, 193, 38, 233, 105, 249, 12, 233, 105, 210, 164, 233, 105, 209, + 150, 213, 15, 210, 78, 208, 210, 243, 79, 233, 187, 233, 195, 234, 213, + 213, 15, 215, 181, 198, 61, 63, 133, 209, 60, 249, 146, 223, 150, 63, + 144, 209, 60, 249, 146, 223, 150, 63, 45, 209, 60, 249, 146, 223, 150, + 63, 50, 209, 60, 249, 146, 223, 150, 232, 232, 230, 56, 56, 193, 136, + 230, 56, 56, 211, 128, 230, 56, 56, 198, 211, 133, 56, 198, 211, 144, 56, + 242, 243, 230, 31, 56, 211, 79, 230, 31, 56, 238, 210, 193, 34, 230, 11, + 233, 190, 214, 113, 200, 41, 223, 11, 235, 108, 221, 144, 248, 175, 193, + 34, 242, 214, 208, 139, 230, 35, 209, 12, 217, 80, 203, 53, 250, 180, + 203, 53, 229, 136, 203, 53, 193, 34, 205, 140, 193, 34, 248, 92, 232, + 158, 247, 222, 223, 165, 202, 188, 247, 221, 223, 165, 202, 188, 248, 62, + 231, 30, 217, 92, 193, 35, 233, 83, 217, 93, 23, 193, 36, 229, 8, 230, + 30, 105, 216, 189, 229, 8, 230, 30, 105, 193, 33, 229, 8, 230, 30, 209, + 52, 211, 144, 193, 36, 4, 247, 241, 234, 211, 248, 32, 4, 195, 144, 209, + 253, 4, 248, 123, 230, 80, 217, 93, 4, 230, 178, 209, 188, 217, 75, 217, + 93, 4, 197, 63, 211, 120, 217, 92, 211, 120, 193, 35, 249, 150, 239, 39, + 193, 19, 208, 215, 223, 21, 211, 139, 223, 21, 231, 0, 231, 63, 249, 151, + 251, 122, 233, 200, 251, 184, 251, 185, 215, 217, 223, 170, 202, 104, + 223, 139, 237, 81, 209, 252, 230, 172, 237, 242, 219, 97, 214, 237, 209, + 50, 233, 106, 217, 35, 230, 79, 249, 88, 209, 54, 200, 62, 209, 142, 221, + 125, 77, 218, 244, 219, 177, 206, 189, 231, 157, 201, 66, 221, 124, 248, + 73, 238, 245, 4, 229, 225, 193, 117, 249, 8, 229, 225, 248, 24, 229, 225, + 105, 229, 223, 201, 240, 229, 225, 230, 188, 229, 225, 229, 226, 4, 57, + 248, 117, 229, 225, 230, 203, 229, 225, 192, 73, 229, 225, 208, 140, 229, + 225, 229, 226, 4, 206, 248, 207, 13, 229, 223, 229, 226, 237, 138, 237, + 35, 203, 136, 4, 42, 75, 223, 119, 234, 137, 156, 247, 253, 251, 121, + 113, 248, 101, 202, 93, 113, 242, 87, 113, 201, 213, 200, 144, 113, 235, + 99, 237, 218, 113, 209, 143, 79, 209, 39, 232, 201, 248, 187, 236, 197, + 113, 201, 231, 249, 111, 198, 231, 249, 111, 63, 232, 188, 228, 143, 209, + 58, 113, 215, 232, 249, 132, 238, 172, 233, 220, 88, 236, 157, 56, 238, + 232, 247, 102, 249, 93, 4, 192, 71, 56, 249, 93, 4, 236, 157, 56, 249, + 93, 4, 233, 236, 56, 249, 93, 4, 209, 10, 56, 215, 232, 4, 193, 60, 243, + 139, 4, 196, 66, 197, 250, 23, 192, 71, 56, 205, 61, 209, 251, 239, 61, + 248, 30, 216, 43, 232, 193, 236, 222, 211, 62, 236, 228, 235, 57, 233, 9, + 232, 173, 211, 79, 233, 9, 232, 173, 210, 207, 4, 238, 177, 210, 207, + 233, 98, 196, 77, 247, 142, 199, 130, 247, 142, 247, 103, 223, 150, 243, + 139, 4, 196, 66, 197, 249, 243, 139, 4, 235, 121, 197, 249, 249, 90, 243, + 138, 242, 227, 208, 135, 206, 116, 208, 135, 210, 136, 201, 54, 206, 51, + 197, 238, 206, 51, 248, 97, 199, 232, 219, 231, 213, 6, 213, 7, 4, 237, + 137, 238, 244, 242, 221, 248, 98, 211, 79, 248, 98, 230, 203, 248, 98, + 248, 117, 248, 98, 211, 57, 248, 98, 248, 95, 214, 230, 249, 136, 205, + 74, 216, 190, 199, 107, 207, 103, 210, 205, 233, 66, 217, 150, 205, 120, + 251, 88, 208, 160, 252, 41, 218, 246, 243, 121, 216, 203, 211, 15, 198, + 2, 223, 161, 198, 2, 210, 214, 235, 10, 113, 223, 158, 234, 69, 234, 70, + 4, 235, 121, 64, 58, 242, 221, 217, 111, 4, 218, 237, 232, 219, 242, 221, + 217, 111, 4, 207, 149, 232, 219, 211, 79, 217, 111, 4, 207, 149, 232, + 219, 211, 79, 217, 111, 4, 218, 237, 232, 219, 209, 19, 209, 20, 228, + 189, 214, 77, 216, 6, 209, 196, 216, 6, 209, 197, 4, 96, 64, 250, 185, + 219, 226, 195, 68, 216, 5, 216, 6, 209, 197, 211, 147, 213, 46, 216, 6, + 209, 195, 251, 89, 4, 249, 78, 247, 134, 247, 135, 4, 232, 210, 195, 65, + 247, 134, 199, 104, 207, 167, 195, 64, 233, 2, 208, 195, 209, 29, 201, + 78, 208, 238, 249, 17, 197, 17, 96, 250, 233, 242, 223, 96, 23, 118, 211, + 79, 243, 13, 250, 233, 242, 223, 96, 23, 118, 211, 79, 243, 13, 250, 234, + 4, 47, 91, 211, 1, 242, 223, 235, 121, 23, 196, 66, 211, 79, 243, 13, + 250, 233, 251, 87, 235, 121, 23, 196, 66, 211, 79, 243, 13, 250, 233, + 130, 248, 28, 113, 137, 248, 28, 113, 201, 236, 4, 247, 127, 106, 201, + 235, 201, 236, 4, 91, 202, 6, 193, 138, 201, 236, 4, 115, 202, 6, 193, + 137, 249, 60, 234, 137, 209, 89, 219, 221, 217, 123, 231, 18, 206, 204, + 217, 123, 231, 18, 219, 37, 4, 223, 131, 210, 36, 242, 221, 219, 37, 4, + 221, 224, 221, 224, 219, 36, 211, 79, 219, 36, 248, 237, 248, 238, 4, + 247, 127, 106, 248, 96, 219, 105, 113, 207, 168, 247, 215, 249, 149, 4, + 118, 64, 58, 234, 97, 4, 118, 64, 58, 211, 107, 4, 233, 218, 87, 4, 45, + 50, 64, 58, 202, 16, 4, 96, 64, 58, 198, 54, 4, 196, 66, 64, 58, 213, 46, + 91, 196, 105, 234, 164, 113, 221, 221, 199, 95, 223, 125, 16, 40, 8, 6, + 219, 176, 223, 125, 16, 40, 8, 2, 219, 176, 223, 125, 16, 40, 212, 137, + 223, 125, 16, 40, 200, 76, 223, 125, 16, 40, 8, 219, 176, 232, 245, 234, + 137, 198, 49, 193, 9, 230, 63, 212, 120, 23, 248, 103, 229, 15, 209, 120, + 216, 90, 199, 105, 238, 199, 249, 113, 202, 137, 209, 62, 201, 104, 4, + 82, 236, 142, 223, 21, 16, 40, 248, 250, 197, 236, 234, 113, 62, 51, 247, + 215, 63, 51, 247, 215, 220, 15, 207, 89, 243, 12, 220, 15, 248, 117, 243, + 12, 220, 15, 211, 57, 237, 34, 220, 15, 248, 117, 237, 34, 2, 211, 57, + 237, 34, 2, 248, 117, 237, 34, 196, 76, 207, 89, 197, 241, 235, 124, 207, + 89, 197, 241, 196, 76, 2, 207, 89, 197, 241, 235, 124, 2, 207, 89, 197, + 241, 110, 50, 203, 152, 63, 243, 12, 116, 50, 203, 152, 63, 243, 12, 47, + 238, 220, 209, 43, 238, 220, 209, 44, 4, 230, 69, 60, 238, 220, 209, 43, + 213, 10, 45, 204, 29, 4, 115, 236, 140, 213, 10, 50, 204, 29, 4, 115, + 236, 140, 16, 40, 217, 52, 246, 244, 63, 8, 238, 219, 88, 8, 238, 219, + 247, 28, 238, 219, 211, 116, 113, 235, 127, 79, 210, 62, 222, 127, 215, + 199, 200, 70, 216, 185, 4, 213, 177, 248, 48, 248, 69, 79, 228, 92, 242, + 225, 233, 106, 91, 211, 164, 242, 225, 233, 106, 105, 211, 164, 242, 225, + 233, 106, 115, 211, 164, 242, 225, 233, 106, 232, 130, 211, 164, 242, + 225, 233, 106, 232, 228, 211, 164, 242, 225, 233, 106, 202, 137, 211, + 164, 242, 225, 233, 106, 203, 248, 211, 164, 242, 225, 233, 106, 234, + 166, 211, 164, 242, 225, 233, 106, 213, 177, 211, 164, 242, 225, 233, + 106, 199, 96, 211, 164, 242, 225, 233, 106, 234, 130, 211, 164, 242, 225, + 233, 106, 197, 38, 211, 164, 242, 225, 233, 106, 211, 99, 242, 225, 233, + 106, 197, 11, 242, 225, 233, 106, 198, 217, 242, 225, 233, 106, 232, 126, + 242, 225, 233, 106, 232, 225, 242, 225, 233, 106, 202, 133, 242, 225, + 233, 106, 203, 247, 242, 225, 233, 106, 234, 165, 242, 225, 233, 106, + 213, 175, 242, 225, 233, 106, 199, 94, 242, 225, 233, 106, 234, 128, 242, + 225, 233, 106, 197, 36, 50, 201, 235, 50, 201, 236, 4, 91, 202, 6, 193, + 138, 50, 201, 236, 4, 115, 202, 6, 193, 137, 247, 248, 247, 249, 4, 202, + 6, 193, 137, 206, 187, 248, 237, 248, 98, 247, 125, 217, 77, 242, 224, + 62, 202, 105, 23, 238, 217, 213, 46, 209, 126, 229, 7, 217, 93, 223, 165, + 247, 224, 200, 212, 219, 167, 202, 91, 211, 59, 201, 192, 237, 223, 200, + 194, 201, 222, 201, 223, 193, 118, 222, 185, 217, 93, 237, 241, 45, 230, + 56, 199, 107, 207, 103, 199, 107, 207, 104, 4, 210, 206, 50, 230, 56, + 199, 107, 207, 103, 63, 198, 34, 199, 106, 62, 198, 34, 199, 106, 199, + 107, 211, 107, 198, 54, 79, 216, 2, 242, 247, 216, 6, 209, 196, 249, 149, + 79, 234, 69, 201, 110, 234, 69, 234, 70, 4, 219, 131, 232, 180, 234, 69, + 210, 37, 139, 201, 110, 234, 69, 219, 104, 210, 135, 62, 208, 135, 110, + 45, 210, 35, 110, 45, 249, 107, 210, 36, 110, 45, 232, 132, 210, 36, 110, + 45, 210, 199, 110, 45, 238, 235, 45, 193, 3, 230, 55, 154, 211, 128, 230, + 56, 56, 207, 149, 230, 56, 4, 232, 250, 201, 212, 207, 19, 207, 149, 230, + 56, 4, 232, 250, 201, 212, 207, 19, 198, 211, 133, 56, 207, 19, 198, 211, + 144, 56, 207, 19, 195, 67, 230, 55, 207, 19, 230, 56, 4, 82, 232, 255, + 233, 206, 207, 149, 230, 56, 4, 210, 109, 248, 212, 82, 23, 206, 190, + 232, 249, 63, 144, 209, 60, 45, 230, 56, 223, 150, 202, 207, 63, 45, 209, + 60, 223, 150, 202, 207, 63, 50, 209, 60, 223, 150, 202, 207, 62, 45, 209, + 60, 223, 150, 202, 207, 62, 50, 209, 60, 223, 150, 62, 45, 209, 60, 249, + 146, 223, 150, 62, 50, 209, 60, 249, 146, 223, 150, 202, 207, 63, 133, + 209, 60, 223, 150, 202, 207, 63, 144, 209, 60, 223, 150, 202, 207, 62, + 133, 209, 60, 223, 150, 202, 207, 62, 144, 209, 60, 223, 150, 62, 133, + 209, 60, 249, 146, 223, 150, 62, 144, 209, 60, 249, 146, 223, 150, 62, + 229, 225, 237, 80, 239, 61, 221, 223, 23, 215, 183, 115, 214, 86, 239, + 60, 208, 211, 209, 73, 247, 144, 62, 230, 19, 203, 104, 232, 193, 236, + 222, 63, 230, 19, 203, 104, 232, 193, 236, 222, 202, 33, 203, 104, 232, + 193, 236, 222, 199, 182, 247, 86, 193, 55, 221, 222, 91, 247, 216, 215, + 183, 105, 247, 216, 215, 183, 115, 247, 216, 215, 183, 198, 24, 39, 209, + 251, 239, 61, 230, 19, 236, 222, 205, 77, 208, 212, 228, 22, 233, 66, + 228, 22, 211, 62, 236, 229, 228, 22, 236, 170, 4, 199, 53, 236, 170, 4, + 199, 54, 23, 209, 179, 236, 170, 4, 209, 179, 232, 116, 4, 209, 179, 232, + 116, 4, 198, 150, 232, 116, 4, 251, 135, 192, 235, 62, 232, 173, 232, + 173, 211, 79, 232, 173, 247, 103, 141, 236, 206, 247, 103, 233, 9, 248, + 64, 233, 9, 247, 157, 234, 107, 213, 8, 234, 107, 213, 9, 210, 206, 234, + 107, 213, 9, 210, 212, 213, 8, 213, 9, 210, 206, 213, 9, 210, 212, 234, + 107, 236, 169, 234, 107, 210, 206, 234, 107, 210, 204, 236, 169, 210, + 206, 210, 204, 193, 148, 201, 219, 213, 9, 210, 212, 201, 219, 247, 143, + 210, 212, 237, 80, 193, 65, 216, 40, 217, 24, 211, 4, 242, 223, 50, 23, + 45, 204, 29, 250, 233, 247, 127, 192, 235, 223, 156, 232, 165, 202, 117, + 113, 237, 136, 232, 165, 202, 117, 113, 239, 62, 39, 221, 224, 206, 141, + 214, 77, 210, 207, 4, 47, 199, 53, 201, 68, 243, 138, 238, 17, 221, 80, + 219, 98, 201, 234, 229, 238, 223, 165, 202, 188, 115, 207, 122, 58, 115, + 207, 122, 60, 115, 207, 122, 219, 226, 115, 207, 122, 179, 45, 201, 231, + 248, 10, 50, 201, 231, 248, 10, 105, 201, 231, 248, 9, 115, 201, 231, + 248, 9, 45, 198, 231, 248, 10, 50, 198, 231, 248, 10, 45, 251, 121, 248, + 10, 50, 251, 121, 248, 10, 215, 212, 248, 10, 219, 132, 215, 212, 248, + 10, 219, 132, 215, 211, 249, 109, 111, 4, 249, 108, 249, 109, 27, 192, + 235, 249, 109, 111, 4, 27, 192, 235, 249, 109, 28, 27, 192, 235, 249, + 109, 111, 4, 28, 27, 192, 235, 156, 243, 128, 77, 249, 109, 111, 4, 28, + 243, 127, 193, 18, 217, 73, 215, 188, 232, 83, 198, 85, 198, 30, 201, 93, + 79, 219, 146, 202, 189, 79, 223, 22, 215, 169, 230, 198, 233, 105, 230, + 198, 233, 106, 4, 202, 65, 233, 187, 233, 106, 4, 199, 126, 79, 222, 187, + 202, 65, 233, 106, 4, 211, 79, 215, 181, 202, 65, 233, 106, 4, 211, 79, + 215, 182, 23, 202, 65, 233, 187, 202, 65, 233, 106, 4, 211, 79, 215, 182, + 23, 242, 89, 200, 143, 202, 65, 233, 106, 4, 211, 79, 215, 182, 23, 198, + 171, 233, 187, 202, 65, 233, 106, 4, 230, 68, 202, 65, 233, 106, 4, 228, + 188, 193, 57, 233, 105, 202, 65, 233, 106, 4, 202, 65, 233, 187, 233, + 106, 205, 110, 237, 116, 232, 163, 207, 62, 233, 105, 202, 65, 233, 106, + 4, 229, 224, 233, 187, 202, 65, 233, 106, 4, 200, 194, 202, 64, 233, 105, + 214, 84, 233, 105, 233, 208, 233, 105, 196, 111, 233, 105, 233, 106, 4, + 242, 89, 200, 143, 210, 28, 233, 105, 239, 53, 233, 105, 239, 54, 233, + 105, 221, 123, 233, 105, 233, 106, 198, 214, 42, 221, 124, 221, 123, 233, + 106, 4, 202, 65, 233, 187, 221, 123, 233, 106, 4, 242, 221, 233, 187, + 233, 106, 4, 201, 13, 198, 61, 233, 106, 4, 201, 13, 198, 62, 23, 193, + 57, 233, 195, 233, 106, 4, 201, 13, 198, 62, 23, 198, 171, 233, 187, 236, + 230, 233, 105, 193, 16, 233, 105, 251, 113, 233, 105, 209, 8, 233, 105, + 238, 201, 233, 105, 209, 255, 233, 105, 233, 106, 4, 219, 9, 79, 197, + 217, 236, 230, 247, 220, 207, 62, 233, 105, 232, 94, 233, 106, 4, 211, + 79, 215, 181, 251, 111, 233, 105, 233, 59, 233, 105, 193, 119, 233, 105, + 202, 92, 233, 105, 198, 130, 233, 105, 230, 199, 233, 105, 218, 247, 238, + 201, 233, 105, 233, 106, 4, 211, 79, 215, 181, 228, 132, 233, 105, 233, + 106, 4, 211, 79, 215, 182, 23, 242, 89, 200, 143, 233, 106, 205, 79, 223, + 165, 233, 60, 250, 192, 233, 105, 232, 185, 233, 105, 202, 93, 233, 105, + 236, 197, 233, 105, 233, 106, 193, 51, 215, 181, 233, 106, 4, 216, 218, + 217, 37, 230, 198, 247, 81, 233, 106, 4, 202, 65, 233, 187, 247, 81, 233, + 106, 4, 199, 126, 79, 222, 187, 202, 65, 247, 81, 233, 106, 4, 211, 79, + 215, 181, 202, 65, 247, 81, 233, 106, 4, 229, 224, 233, 187, 247, 81, + 233, 106, 4, 193, 1, 202, 66, 221, 123, 247, 81, 233, 106, 4, 242, 221, + 233, 187, 209, 8, 247, 81, 233, 105, 238, 201, 247, 81, 233, 105, 193, + 119, 247, 81, 233, 105, 202, 85, 232, 94, 233, 105, 202, 85, 202, 65, + 233, 105, 196, 72, 233, 105, 233, 106, 4, 206, 139, 233, 187, 233, 106, + 4, 213, 46, 230, 246, 231, 134, 233, 106, 4, 211, 128, 231, 134, 209, + 253, 248, 70, 237, 131, 205, 50, 215, 227, 229, 228, 215, 227, 201, 237, + 215, 227, 230, 22, 209, 253, 207, 147, 91, 230, 55, 209, 253, 207, 147, + 248, 82, 230, 31, 223, 165, 247, 30, 209, 253, 232, 93, 209, 253, 4, 209, + 8, 233, 105, 209, 253, 4, 232, 174, 230, 30, 186, 193, 105, 209, 60, 219, + 235, 202, 3, 193, 105, 209, 60, 219, 235, 186, 234, 206, 209, 60, 219, + 235, 202, 3, 234, 206, 209, 60, 219, 235, 154, 186, 193, 105, 209, 60, + 219, 235, 154, 202, 3, 193, 105, 209, 60, 219, 235, 154, 186, 234, 206, + 209, 60, 219, 235, 154, 202, 3, 234, 206, 209, 60, 219, 235, 186, 193, + 105, 209, 60, 195, 48, 219, 235, 202, 3, 193, 105, 209, 60, 195, 48, 219, + 235, 186, 234, 206, 209, 60, 195, 48, 219, 235, 202, 3, 234, 206, 209, + 60, 195, 48, 219, 235, 88, 186, 193, 105, 209, 60, 195, 48, 219, 235, 88, + 202, 3, 193, 105, 209, 60, 195, 48, 219, 235, 88, 186, 234, 206, 209, 60, + 195, 48, 219, 235, 88, 202, 3, 234, 206, 209, 60, 195, 48, 219, 235, 186, + 193, 105, 209, 60, 248, 6, 202, 3, 193, 105, 209, 60, 248, 6, 186, 234, + 206, 209, 60, 248, 6, 202, 3, 234, 206, 209, 60, 248, 6, 88, 186, 193, + 105, 209, 60, 248, 6, 88, 202, 3, 193, 105, 209, 60, 248, 6, 88, 186, + 234, 206, 209, 60, 248, 6, 88, 202, 3, 234, 206, 209, 60, 248, 6, 229, 6, + 208, 8, 51, 211, 44, 229, 6, 208, 8, 51, 211, 45, 223, 165, 62, 201, 191, + 202, 26, 208, 8, 51, 211, 44, 202, 26, 208, 8, 51, 211, 45, 223, 165, 62, + 201, 191, 118, 206, 147, 196, 66, 206, 147, 96, 206, 147, 235, 121, 206, + 147, 27, 34, 234, 2, 211, 44, 88, 27, 34, 234, 2, 211, 44, 34, 211, 79, + 234, 2, 211, 44, 88, 34, 211, 79, 234, 2, 211, 44, 88, 251, 140, 211, 44, + 200, 146, 251, 140, 211, 44, 49, 88, 55, 154, 242, 77, 207, 254, 87, 211, + 44, 49, 88, 55, 242, 77, 207, 254, 87, 211, 44, 49, 88, 130, 55, 242, 77, + 207, 254, 87, 211, 44, 88, 223, 105, 211, 44, 49, 223, 105, 211, 44, 88, + 49, 223, 105, 211, 44, 195, 83, 88, 202, 24, 195, 83, 88, 207, 20, 202, + 24, 243, 126, 248, 109, 207, 20, 243, 126, 248, 109, 206, 147, 229, 207, + 201, 86, 219, 34, 207, 154, 247, 104, 229, 133, 198, 16, 229, 133, 198, + 17, 4, 247, 251, 213, 15, 198, 16, 216, 160, 156, 207, 155, 201, 94, 198, + 14, 198, 15, 247, 104, 247, 225, 211, 103, 247, 225, 197, 212, 247, 226, + 201, 64, 216, 44, 251, 144, 232, 246, 234, 89, 209, 52, 247, 104, 211, + 103, 209, 52, 247, 104, 199, 155, 211, 103, 199, 155, 250, 152, 211, 103, + 250, 152, 207, 96, 195, 145, 237, 112, 197, 203, 250, 227, 219, 0, 198, + 23, 215, 220, 215, 187, 207, 153, 200, 164, 207, 153, 215, 187, 247, 156, + 252, 13, 198, 13, 203, 66, 206, 113, 201, 229, 228, 243, 198, 20, 219, + 134, 81, 198, 20, 219, 134, 239, 39, 56, 209, 52, 247, 88, 207, 13, 219, + 134, 197, 238, 232, 220, 211, 107, 209, 21, 236, 146, 213, 46, 234, 75, + 56, 202, 63, 113, 213, 46, 202, 63, 113, 208, 134, 219, 86, 223, 165, + 223, 52, 209, 110, 113, 236, 177, 213, 14, 219, 86, 113, 209, 15, 193, + 144, 113, 213, 30, 193, 144, 113, 248, 186, 213, 46, 248, 185, 248, 184, + 215, 187, 248, 184, 210, 53, 213, 46, 210, 52, 243, 87, 238, 211, 216, + 184, 113, 193, 32, 113, 207, 29, 249, 151, 113, 198, 86, 193, 144, 242, + 218, 203, 21, 249, 63, 249, 61, 210, 93, 239, 23, 238, 158, 249, 128, + 242, 248, 45, 218, 217, 197, 242, 4, 206, 114, 239, 2, 208, 198, 56, 47, + 223, 139, 202, 4, 248, 61, 113, 231, 29, 113, 238, 250, 23, 220, 27, 202, + 93, 252, 59, 203, 44, 249, 127, 248, 236, 248, 237, 249, 4, 209, 110, 79, + 193, 15, 211, 161, 56, 203, 44, 197, 213, 201, 9, 210, 203, 229, 129, + 199, 98, 228, 131, 234, 132, 193, 54, 209, 98, 202, 88, 193, 93, 206, + 190, 247, 235, 230, 64, 23, 193, 9, 203, 79, 211, 134, 235, 96, 215, 191, + 207, 154, 198, 25, 215, 194, 248, 108, 196, 76, 216, 56, 251, 225, 196, + 76, 251, 225, 196, 76, 2, 251, 225, 2, 251, 225, 213, 19, 251, 225, 251, + 226, 237, 95, 251, 226, 250, 240, 205, 119, 211, 103, 232, 246, 234, 89, + 237, 24, 219, 34, 210, 97, 203, 66, 205, 84, 215, 194, 205, 84, 247, 115, + 202, 95, 232, 180, 205, 114, 202, 112, 250, 154, 206, 244, 209, 180, 197, + 203, 206, 140, 202, 113, 160, 16, 40, 208, 4, 160, 16, 40, 251, 227, 160, + 16, 40, 232, 245, 160, 16, 40, 234, 209, 160, 16, 40, 193, 143, 160, 16, + 40, 251, 37, 160, 16, 40, 251, 38, 207, 82, 160, 16, 40, 251, 38, 207, + 81, 160, 16, 40, 251, 38, 195, 31, 160, 16, 40, 251, 38, 195, 30, 160, 16, 40, 195, 45, 160, 16, 40, 195, 44, 160, 16, 40, 195, 43, 160, 16, 40, - 200, 205, 160, 16, 40, 209, 203, 200, 205, 160, 16, 40, 62, 200, 205, - 160, 16, 40, 216, 181, 200, 236, 160, 16, 40, 216, 181, 200, 235, 160, - 16, 40, 216, 181, 200, 234, 160, 16, 40, 243, 13, 160, 16, 40, 205, 158, - 160, 16, 40, 213, 161, 160, 16, 40, 195, 28, 160, 16, 40, 195, 27, 160, - 16, 40, 206, 148, 205, 158, 160, 16, 40, 206, 148, 205, 157, 160, 16, 40, - 230, 250, 160, 16, 40, 202, 184, 160, 16, 40, 223, 74, 211, 49, 160, 16, - 40, 223, 74, 211, 48, 160, 16, 40, 238, 222, 79, 223, 73, 160, 16, 40, - 207, 77, 79, 223, 73, 160, 16, 40, 239, 12, 211, 49, 160, 16, 40, 223, - 72, 211, 49, 160, 16, 40, 200, 237, 79, 239, 11, 160, 16, 40, 238, 222, - 79, 239, 11, 160, 16, 40, 238, 222, 79, 239, 10, 160, 16, 40, 239, 12, - 251, 79, 160, 16, 40, 205, 159, 79, 239, 12, 251, 79, 160, 16, 40, 200, - 237, 79, 205, 159, 79, 239, 11, 160, 16, 40, 195, 139, 160, 16, 40, 198, - 143, 211, 49, 160, 16, 40, 219, 237, 211, 49, 160, 16, 40, 251, 78, 211, - 49, 160, 16, 40, 200, 237, 79, 251, 77, 160, 16, 40, 205, 159, 79, 251, - 77, 160, 16, 40, 200, 237, 79, 205, 159, 79, 251, 77, 160, 16, 40, 195, - 46, 79, 251, 77, 160, 16, 40, 207, 77, 79, 251, 77, 160, 16, 40, 207, 77, - 79, 251, 76, 160, 16, 40, 207, 76, 160, 16, 40, 207, 75, 160, 16, 40, - 207, 74, 160, 16, 40, 207, 73, 160, 16, 40, 251, 177, 160, 16, 40, 251, - 176, 160, 16, 40, 217, 61, 160, 16, 40, 205, 168, 160, 16, 40, 250, 230, - 160, 16, 40, 207, 105, 160, 16, 40, 207, 104, 160, 16, 40, 250, 154, 160, - 16, 40, 248, 150, 211, 49, 160, 16, 40, 199, 177, 160, 16, 40, 199, 176, - 160, 16, 40, 208, 8, 219, 121, 160, 16, 40, 248, 87, 160, 16, 40, 248, - 86, 160, 16, 40, 248, 85, 160, 16, 40, 251, 151, 160, 16, 40, 211, 131, - 160, 16, 40, 201, 214, 160, 16, 40, 198, 141, 160, 16, 40, 230, 158, 160, - 16, 40, 193, 131, 160, 16, 40, 209, 1, 160, 16, 40, 247, 137, 160, 16, - 40, 197, 50, 160, 16, 40, 247, 104, 215, 198, 160, 16, 40, 205, 93, 79, - 222, 187, 160, 16, 40, 247, 151, 160, 16, 40, 197, 235, 160, 16, 40, 201, - 100, 197, 235, 160, 16, 40, 219, 31, 160, 16, 40, 202, 37, 160, 16, 40, - 196, 54, 160, 16, 40, 228, 184, 235, 71, 160, 16, 40, 250, 204, 160, 16, - 40, 209, 15, 250, 204, 160, 16, 40, 248, 31, 160, 16, 40, 209, 0, 248, - 31, 160, 16, 40, 251, 148, 160, 16, 40, 201, 46, 200, 186, 201, 45, 160, - 16, 40, 201, 46, 200, 186, 201, 44, 160, 16, 40, 200, 233, 160, 16, 40, - 208, 229, 160, 16, 40, 236, 215, 160, 16, 40, 236, 217, 160, 16, 40, 236, - 216, 160, 16, 40, 208, 141, 160, 16, 40, 208, 129, 160, 16, 40, 238, 207, - 160, 16, 40, 238, 206, 160, 16, 40, 238, 205, 160, 16, 40, 238, 204, 160, - 16, 40, 238, 203, 160, 16, 40, 251, 191, 160, 16, 40, 249, 62, 79, 217, - 42, 160, 16, 40, 249, 62, 79, 195, 174, 160, 16, 40, 207, 26, 160, 16, - 40, 228, 176, 160, 16, 40, 213, 190, 160, 16, 40, 237, 203, 160, 16, 40, - 215, 213, 160, 16, 40, 132, 235, 109, 160, 16, 40, 132, 211, 17, 218, - 250, 79, 232, 137, 211, 164, 218, 207, 234, 194, 230, 1, 217, 101, 230, - 246, 208, 24, 211, 52, 62, 219, 219, 223, 56, 50, 197, 241, 62, 196, 76, - 223, 56, 50, 197, 241, 62, 206, 203, 223, 56, 50, 197, 241, 62, 235, 122, - 223, 56, 50, 197, 241, 62, 202, 84, 2, 243, 10, 216, 213, 28, 63, 243, - 10, 28, 63, 243, 10, 88, 63, 243, 10, 195, 83, 88, 63, 243, 10, 233, 197, - 88, 63, 243, 10, 63, 243, 11, 239, 33, 62, 2, 243, 10, 206, 115, 199, - 178, 62, 198, 138, 201, 190, 62, 202, 84, 2, 201, 190, 156, 63, 201, 190, - 216, 213, 63, 201, 190, 28, 63, 201, 190, 88, 63, 201, 190, 195, 83, 88, - 63, 201, 190, 233, 197, 88, 63, 201, 190, 63, 51, 239, 33, 62, 195, 83, - 2, 201, 190, 63, 51, 239, 33, 62, 216, 213, 201, 190, 51, 199, 178, 62, - 198, 138, 237, 32, 62, 195, 83, 2, 237, 32, 62, 216, 213, 2, 237, 32, 63, - 237, 33, 239, 33, 62, 195, 83, 2, 237, 32, 63, 237, 33, 239, 33, 62, 216, - 213, 237, 32, 237, 33, 199, 178, 62, 198, 138, 218, 232, 62, 195, 83, 2, - 218, 232, 62, 216, 213, 2, 218, 232, 63, 218, 233, 239, 33, 62, 2, 218, - 232, 199, 4, 35, 238, 217, 156, 35, 238, 217, 216, 213, 35, 238, 217, 28, - 35, 238, 217, 195, 83, 28, 35, 238, 217, 195, 83, 88, 35, 238, 217, 233, - 197, 88, 35, 238, 217, 199, 4, 205, 154, 156, 205, 154, 216, 213, 205, - 154, 28, 205, 154, 88, 205, 154, 195, 83, 88, 205, 154, 233, 197, 88, - 205, 154, 156, 232, 226, 201, 206, 250, 193, 216, 213, 232, 226, 201, - 206, 250, 193, 28, 232, 226, 201, 206, 250, 193, 88, 232, 226, 201, 206, - 250, 193, 195, 83, 88, 232, 226, 201, 206, 250, 193, 233, 197, 88, 232, - 226, 201, 206, 250, 193, 156, 202, 136, 201, 206, 250, 193, 216, 213, - 202, 136, 201, 206, 250, 193, 28, 202, 136, 201, 206, 250, 193, 88, 202, - 136, 201, 206, 250, 193, 195, 83, 88, 202, 136, 201, 206, 250, 193, 233, - 197, 88, 202, 136, 201, 206, 250, 193, 156, 234, 164, 201, 206, 250, 193, - 216, 213, 234, 164, 201, 206, 250, 193, 28, 234, 164, 201, 206, 250, 193, - 88, 234, 164, 201, 206, 250, 193, 195, 83, 88, 234, 164, 201, 206, 250, - 193, 156, 115, 209, 60, 62, 201, 102, 216, 213, 115, 209, 60, 62, 201, - 102, 115, 209, 60, 62, 201, 102, 216, 213, 115, 209, 60, 209, 130, 201, - 102, 156, 232, 128, 209, 60, 62, 201, 102, 216, 213, 232, 128, 209, 60, - 62, 201, 102, 232, 128, 209, 60, 62, 201, 102, 216, 213, 232, 128, 209, - 60, 209, 130, 201, 102, 207, 19, 156, 232, 128, 209, 60, 209, 130, 201, - 102, 156, 232, 226, 209, 60, 62, 201, 102, 88, 232, 226, 209, 60, 62, - 201, 102, 216, 213, 202, 136, 209, 60, 62, 201, 102, 88, 202, 136, 209, - 60, 62, 201, 102, 202, 136, 209, 60, 209, 130, 201, 102, 216, 213, 234, - 164, 209, 60, 62, 201, 102, 88, 234, 164, 209, 60, 62, 201, 102, 195, 83, - 88, 234, 164, 209, 60, 62, 201, 102, 88, 234, 164, 209, 60, 209, 130, - 201, 102, 156, 197, 38, 209, 60, 62, 201, 102, 88, 197, 38, 209, 60, 62, - 201, 102, 88, 197, 38, 209, 60, 209, 130, 201, 102, 47, 197, 241, 214, - 106, 47, 197, 241, 47, 201, 190, 214, 106, 47, 201, 190, 213, 175, 209, - 60, 63, 201, 102, 220, 13, 211, 55, 243, 10, 220, 13, 192, 73, 243, 10, - 220, 13, 230, 201, 243, 10, 220, 13, 208, 138, 243, 10, 220, 13, 248, 19, - 243, 10, 220, 13, 207, 87, 201, 190, 220, 13, 248, 115, 201, 190, 220, - 13, 211, 55, 201, 190, 220, 13, 192, 73, 201, 190, 220, 13, 230, 201, - 201, 190, 220, 13, 208, 138, 201, 190, 220, 13, 248, 19, 201, 190, 88, - 234, 43, 56, 118, 64, 4, 2, 197, 242, 250, 235, 196, 66, 64, 4, 2, 197, - 242, 250, 235, 96, 64, 4, 2, 197, 242, 250, 235, 235, 119, 64, 4, 2, 197, - 242, 250, 235, 118, 64, 4, 216, 213, 197, 242, 250, 235, 196, 66, 64, 4, - 216, 213, 197, 242, 250, 235, 96, 64, 4, 216, 213, 197, 242, 250, 235, - 235, 119, 64, 4, 216, 213, 197, 242, 250, 235, 118, 64, 4, 220, 13, 197, - 242, 250, 235, 196, 66, 64, 4, 220, 13, 197, 242, 250, 235, 96, 64, 4, - 220, 13, 197, 242, 250, 235, 235, 119, 64, 4, 220, 13, 197, 242, 250, - 235, 118, 64, 4, 2, 234, 37, 250, 235, 196, 66, 64, 4, 2, 234, 37, 250, - 235, 96, 64, 4, 2, 234, 37, 250, 235, 235, 119, 64, 4, 2, 234, 37, 250, - 235, 118, 64, 4, 234, 37, 250, 235, 196, 66, 64, 4, 234, 37, 250, 235, - 96, 64, 4, 234, 37, 250, 235, 235, 119, 64, 4, 234, 37, 250, 235, 88, - 118, 64, 4, 234, 37, 250, 235, 88, 196, 66, 64, 4, 234, 37, 250, 235, 88, - 96, 64, 4, 234, 37, 250, 235, 88, 235, 119, 64, 4, 234, 37, 250, 235, 88, - 118, 64, 4, 220, 13, 234, 37, 250, 235, 88, 196, 66, 64, 4, 220, 13, 234, - 37, 250, 235, 88, 96, 64, 4, 220, 13, 234, 37, 250, 235, 88, 235, 119, - 64, 4, 220, 13, 234, 37, 250, 235, 118, 197, 240, 64, 4, 214, 215, 203, - 149, 196, 66, 197, 240, 64, 4, 214, 215, 203, 149, 96, 197, 240, 64, 4, - 214, 215, 203, 149, 235, 119, 197, 240, 64, 4, 214, 215, 203, 149, 118, - 197, 240, 64, 4, 216, 213, 203, 149, 196, 66, 197, 240, 64, 4, 216, 213, - 203, 149, 96, 197, 240, 64, 4, 216, 213, 203, 149, 235, 119, 197, 240, - 64, 4, 216, 213, 203, 149, 118, 197, 240, 64, 4, 28, 203, 149, 196, 66, - 197, 240, 64, 4, 28, 203, 149, 96, 197, 240, 64, 4, 28, 203, 149, 235, - 119, 197, 240, 64, 4, 28, 203, 149, 118, 197, 240, 64, 4, 88, 203, 149, - 196, 66, 197, 240, 64, 4, 88, 203, 149, 96, 197, 240, 64, 4, 88, 203, - 149, 235, 119, 197, 240, 64, 4, 88, 203, 149, 118, 197, 240, 64, 4, 195, - 83, 88, 203, 149, 196, 66, 197, 240, 64, 4, 195, 83, 88, 203, 149, 96, - 197, 240, 64, 4, 195, 83, 88, 203, 149, 235, 119, 197, 240, 64, 4, 195, - 83, 88, 203, 149, 118, 232, 251, 57, 196, 66, 232, 251, 57, 96, 232, 251, - 57, 235, 119, 232, 251, 57, 118, 112, 57, 196, 66, 112, 57, 96, 112, 57, - 235, 119, 112, 57, 118, 239, 61, 57, 196, 66, 239, 61, 57, 96, 239, 61, - 57, 235, 119, 239, 61, 57, 118, 88, 239, 61, 57, 196, 66, 88, 239, 61, - 57, 96, 88, 239, 61, 57, 235, 119, 88, 239, 61, 57, 118, 88, 57, 196, 66, - 88, 57, 96, 88, 57, 235, 119, 88, 57, 118, 49, 57, 196, 66, 49, 57, 96, - 49, 57, 235, 119, 49, 57, 186, 193, 105, 49, 57, 186, 234, 204, 49, 57, - 202, 2, 234, 204, 49, 57, 202, 2, 193, 105, 49, 57, 45, 50, 49, 57, 133, - 144, 49, 57, 193, 77, 118, 156, 181, 57, 193, 77, 196, 66, 156, 181, 57, - 193, 77, 96, 156, 181, 57, 193, 77, 235, 119, 156, 181, 57, 193, 77, 186, - 193, 105, 156, 181, 57, 193, 77, 186, 234, 204, 156, 181, 57, 193, 77, - 202, 2, 234, 204, 156, 181, 57, 193, 77, 202, 2, 193, 105, 156, 181, 57, - 193, 77, 118, 181, 57, 193, 77, 196, 66, 181, 57, 193, 77, 96, 181, 57, - 193, 77, 235, 119, 181, 57, 193, 77, 186, 193, 105, 181, 57, 193, 77, - 186, 234, 204, 181, 57, 193, 77, 202, 2, 234, 204, 181, 57, 193, 77, 202, - 2, 193, 105, 181, 57, 193, 77, 118, 216, 213, 181, 57, 193, 77, 196, 66, - 216, 213, 181, 57, 193, 77, 96, 216, 213, 181, 57, 193, 77, 235, 119, - 216, 213, 181, 57, 193, 77, 186, 193, 105, 216, 213, 181, 57, 193, 77, - 186, 234, 204, 216, 213, 181, 57, 193, 77, 202, 2, 234, 204, 216, 213, - 181, 57, 193, 77, 202, 2, 193, 105, 216, 213, 181, 57, 193, 77, 118, 88, - 181, 57, 193, 77, 196, 66, 88, 181, 57, 193, 77, 96, 88, 181, 57, 193, - 77, 235, 119, 88, 181, 57, 193, 77, 186, 193, 105, 88, 181, 57, 193, 77, - 186, 234, 204, 88, 181, 57, 193, 77, 202, 2, 234, 204, 88, 181, 57, 193, - 77, 202, 2, 193, 105, 88, 181, 57, 193, 77, 118, 195, 83, 88, 181, 57, - 193, 77, 196, 66, 195, 83, 88, 181, 57, 193, 77, 96, 195, 83, 88, 181, - 57, 193, 77, 235, 119, 195, 83, 88, 181, 57, 193, 77, 186, 193, 105, 195, - 83, 88, 181, 57, 193, 77, 186, 234, 204, 195, 83, 88, 181, 57, 193, 77, - 202, 2, 234, 204, 195, 83, 88, 181, 57, 193, 77, 202, 2, 193, 105, 195, - 83, 88, 181, 57, 118, 197, 242, 250, 235, 196, 66, 197, 242, 250, 235, - 96, 197, 242, 250, 235, 235, 119, 197, 242, 250, 235, 118, 63, 64, 193, - 53, 197, 242, 250, 235, 196, 66, 63, 64, 193, 53, 197, 242, 250, 235, 96, - 63, 64, 193, 53, 197, 242, 250, 235, 235, 119, 63, 64, 193, 53, 197, 242, - 250, 235, 118, 64, 4, 213, 8, 199, 215, 196, 66, 64, 4, 213, 8, 199, 215, - 96, 64, 4, 213, 8, 199, 215, 235, 119, 64, 4, 213, 8, 199, 215, 88, 64, - 203, 150, 193, 75, 107, 88, 64, 203, 150, 193, 75, 105, 198, 253, 88, 64, - 203, 150, 193, 75, 91, 230, 70, 88, 64, 203, 150, 193, 75, 91, 199, 0, - 118, 248, 74, 63, 57, 96, 248, 77, 203, 152, 63, 57, 118, 198, 54, 203, - 152, 63, 57, 96, 198, 54, 203, 152, 63, 57, 118, 219, 218, 63, 57, 96, - 206, 202, 63, 57, 118, 206, 202, 63, 57, 96, 219, 218, 63, 57, 118, 249, - 145, 203, 151, 63, 57, 96, 249, 145, 203, 151, 63, 57, 118, 232, 95, 203, - 151, 63, 57, 96, 232, 95, 203, 151, 63, 57, 63, 64, 203, 150, 193, 75, - 107, 63, 64, 203, 150, 193, 75, 105, 198, 253, 64, 209, 58, 196, 66, 199, - 25, 186, 193, 104, 64, 209, 58, 96, 199, 25, 238, 161, 202, 2, 193, 104, - 47, 238, 218, 232, 143, 4, 232, 128, 236, 138, 47, 238, 218, 232, 143, 4, - 105, 236, 138, 47, 238, 218, 232, 142, 45, 132, 243, 11, 4, 232, 128, - 236, 138, 45, 132, 243, 11, 4, 115, 236, 138, 45, 132, 243, 11, 4, 105, - 236, 138, 45, 132, 243, 11, 4, 236, 140, 45, 132, 243, 10, 235, 120, 233, - 96, 102, 235, 120, 233, 96, 213, 8, 102, 235, 120, 233, 96, 228, 251, 4, - 236, 140, 235, 120, 233, 96, 213, 8, 228, 251, 4, 236, 140, 209, 136, - 232, 247, 63, 229, 223, 248, 19, 229, 223, 209, 135, 230, 53, 191, 17, - 233, 103, 215, 229, 233, 103, 233, 104, 4, 199, 21, 214, 92, 233, 103, - 199, 2, 233, 103, 233, 104, 4, 229, 234, 206, 150, 233, 103, 228, 150, - 233, 103, 3, 79, 199, 34, 228, 186, 247, 139, 216, 233, 230, 53, 207, - 147, 249, 147, 79, 230, 53, 219, 223, 232, 231, 206, 207, 232, 231, 230, - 27, 230, 54, 4, 141, 23, 82, 232, 248, 238, 213, 228, 74, 218, 242, 191, - 239, 230, 54, 56, 233, 104, 4, 238, 238, 230, 9, 242, 208, 233, 103, 214, - 202, 233, 103, 206, 138, 211, 105, 199, 34, 232, 194, 219, 255, 235, 100, - 233, 103, 218, 178, 233, 103, 233, 104, 210, 182, 202, 56, 233, 103, 233, - 104, 4, 91, 233, 192, 207, 146, 230, 196, 233, 104, 4, 201, 103, 233, - 185, 230, 196, 233, 104, 4, 91, 220, 13, 23, 91, 2, 233, 193, 233, 104, - 4, 232, 253, 238, 241, 242, 219, 219, 96, 204, 2, 233, 104, 4, 200, 77, - 238, 241, 215, 179, 202, 64, 233, 104, 4, 202, 64, 233, 186, 23, 230, 54, - 238, 241, 215, 179, 233, 104, 4, 211, 77, 215, 180, 195, 9, 203, 54, 233, - 104, 4, 233, 208, 229, 235, 208, 226, 193, 35, 248, 40, 210, 181, 133, - 198, 87, 204, 31, 208, 214, 217, 91, 223, 163, 197, 46, 215, 194, 243, - 55, 203, 9, 209, 251, 236, 159, 247, 83, 222, 177, 233, 38, 215, 255, - 210, 21, 193, 8, 193, 144, 209, 44, 230, 32, 236, 201, 217, 35, 193, 69, - 232, 186, 235, 95, 4, 235, 93, 242, 226, 231, 15, 197, 74, 231, 16, 201, - 203, 231, 1, 214, 85, 206, 208, 232, 238, 209, 108, 216, 219, 205, 57, - 209, 108, 216, 219, 199, 1, 209, 108, 216, 219, 248, 61, 231, 10, 217, - 46, 250, 223, 196, 94, 238, 172, 201, 65, 220, 110, 201, 75, 23, 249, - 111, 202, 31, 232, 178, 236, 226, 238, 221, 250, 141, 238, 188, 249, 138, - 209, 12, 247, 87, 249, 124, 248, 43, 230, 201, 205, 165, 203, 142, 210, - 167, 79, 232, 161, 201, 9, 232, 205, 234, 179, 231, 17, 79, 216, 53, 210, - 56, 221, 116, 210, 163, 235, 76, 232, 138, 239, 16, 199, 207, 248, 62, - 243, 62, 248, 67, 4, 201, 203, 238, 182, 4, 201, 43, 242, 93, 248, 23, - 209, 176, 208, 218, 238, 155, 79, 216, 224, 205, 137, 247, 115, 232, 161, - 219, 232, 230, 200, 217, 82, 215, 206, 247, 146, 249, 127, 202, 64, 233, - 104, 4, 202, 64, 233, 186, 23, 115, 229, 221, 192, 87, 233, 103, 202, 64, - 233, 104, 4, 199, 131, 233, 104, 4, 210, 102, 228, 188, 23, 210, 102, - 230, 9, 233, 104, 4, 196, 98, 233, 186, 23, 193, 135, 215, 179, 211, 5, - 233, 103, 232, 107, 233, 103, 213, 168, 236, 224, 233, 103, 233, 104, - 229, 6, 249, 147, 199, 125, 233, 104, 4, 209, 93, 233, 185, 205, 125, - 220, 119, 242, 96, 230, 253, 229, 129, 248, 91, 232, 207, 203, 52, 238, - 235, 219, 100, 233, 103, 205, 81, 197, 62, 196, 96, 233, 103, 234, 214, - 235, 85, 249, 64, 203, 128, 210, 249, 232, 120, 233, 103, 247, 215, 237, - 128, 230, 235, 219, 78, 207, 5, 203, 13, 201, 184, 231, 29, 233, 103, - 191, 85, 233, 103, 229, 216, 205, 110, 200, 42, 238, 224, 222, 82, 219, - 70, 210, 58, 229, 121, 210, 108, 207, 173, 219, 41, 215, 196, 216, 90, - 249, 133, 200, 148, 217, 92, 236, 165, 202, 78, 211, 22, 211, 54, 202, - 102, 232, 209, 210, 239, 249, 4, 248, 149, 205, 61, 230, 163, 236, 162, - 208, 202, 247, 117, 234, 109, 242, 64, 207, 87, 230, 78, 234, 109, 242, - 64, 238, 171, 230, 78, 234, 109, 242, 64, 249, 113, 234, 109, 242, 64, - 63, 230, 78, 248, 98, 219, 212, 232, 159, 198, 56, 200, 184, 200, 179, - 205, 188, 195, 81, 234, 212, 4, 229, 225, 251, 235, 215, 190, 193, 91, - 217, 74, 193, 91, 216, 223, 250, 250, 216, 223, 219, 212, 243, 118, 193, - 116, 238, 180, 205, 159, 203, 146, 248, 208, 248, 62, 231, 197, 211, 93, - 233, 85, 193, 174, 247, 216, 217, 29, 235, 104, 228, 27, 238, 190, 248, - 9, 199, 134, 197, 214, 201, 105, 209, 250, 221, 80, 209, 250, 237, 144, - 209, 250, 233, 104, 4, 215, 224, 252, 29, 243, 86, 211, 118, 252, 29, - 249, 8, 209, 250, 209, 251, 4, 229, 230, 209, 251, 223, 163, 201, 82, - 206, 130, 209, 251, 242, 228, 209, 251, 223, 163, 218, 247, 209, 24, 217, - 124, 233, 87, 195, 177, 216, 174, 234, 125, 231, 148, 191, 5, 248, 50, - 211, 55, 229, 223, 248, 171, 247, 111, 205, 94, 231, 9, 242, 96, 202, 34, - 207, 87, 231, 43, 234, 67, 232, 242, 222, 238, 208, 125, 209, 175, 199, - 75, 197, 84, 209, 235, 236, 222, 236, 176, 55, 229, 204, 242, 69, 252, - 71, 232, 244, 233, 202, 198, 58, 248, 31, 217, 122, 218, 215, 218, 248, - 248, 78, 201, 204, 79, 198, 227, 249, 112, 79, 192, 100, 205, 188, 209, - 139, 199, 124, 249, 9, 248, 20, 249, 69, 206, 141, 79, 210, 135, 249, 88, - 79, 202, 37, 201, 205, 207, 103, 214, 196, 251, 134, 214, 82, 243, 105, - 221, 138, 214, 82, 243, 105, 208, 14, 214, 82, 243, 105, 206, 131, 214, - 82, 243, 105, 248, 152, 214, 82, 243, 105, 221, 76, 214, 82, 243, 105, - 210, 74, 63, 243, 105, 221, 77, 206, 122, 232, 134, 237, 124, 62, 243, - 105, 221, 77, 206, 122, 232, 134, 237, 124, 214, 82, 243, 105, 221, 77, - 206, 122, 232, 134, 237, 124, 63, 243, 105, 221, 139, 206, 122, 213, 170, - 237, 124, 63, 243, 105, 208, 15, 206, 122, 213, 170, 237, 124, 63, 243, - 105, 206, 132, 206, 122, 213, 170, 237, 124, 63, 243, 105, 248, 153, 206, - 122, 213, 170, 237, 124, 63, 243, 105, 221, 77, 206, 122, 213, 170, 237, - 124, 63, 243, 105, 210, 75, 206, 122, 213, 170, 237, 124, 62, 243, 105, - 221, 139, 206, 122, 213, 170, 237, 124, 62, 243, 105, 208, 15, 206, 122, - 213, 170, 237, 124, 62, 243, 105, 206, 132, 206, 122, 213, 170, 237, 124, - 62, 243, 105, 248, 153, 206, 122, 213, 170, 237, 124, 62, 243, 105, 221, - 77, 206, 122, 213, 170, 237, 124, 62, 243, 105, 210, 75, 206, 122, 213, - 170, 237, 124, 214, 82, 243, 105, 221, 139, 206, 122, 213, 170, 237, 124, - 214, 82, 243, 105, 208, 15, 206, 122, 213, 170, 237, 124, 214, 82, 243, - 105, 206, 132, 206, 122, 213, 170, 237, 124, 214, 82, 243, 105, 248, 153, - 206, 122, 213, 170, 237, 124, 214, 82, 243, 105, 221, 77, 206, 122, 213, - 170, 237, 124, 214, 82, 243, 105, 210, 75, 206, 122, 213, 170, 237, 124, - 63, 243, 105, 221, 77, 206, 122, 91, 228, 141, 198, 248, 237, 124, 62, - 243, 105, 221, 77, 206, 122, 91, 228, 141, 198, 248, 237, 124, 214, 82, - 243, 105, 221, 77, 206, 122, 91, 228, 141, 198, 248, 237, 124, 63, 243, - 105, 153, 221, 138, 63, 243, 105, 153, 208, 14, 63, 243, 105, 153, 206, - 131, 63, 243, 105, 153, 248, 152, 63, 243, 105, 153, 221, 76, 63, 243, - 105, 153, 210, 74, 62, 243, 105, 153, 221, 138, 62, 243, 105, 153, 208, - 14, 62, 243, 105, 153, 206, 131, 62, 243, 105, 153, 248, 152, 62, 243, - 105, 153, 221, 76, 62, 243, 105, 153, 210, 74, 214, 82, 243, 105, 153, - 221, 138, 214, 82, 243, 105, 153, 208, 14, 214, 82, 243, 105, 153, 206, - 131, 214, 82, 243, 105, 153, 248, 152, 214, 82, 243, 105, 153, 221, 76, - 214, 82, 243, 105, 153, 210, 74, 63, 243, 105, 221, 77, 206, 122, 105, - 228, 141, 197, 29, 237, 124, 62, 243, 105, 221, 77, 206, 122, 105, 228, - 141, 197, 29, 237, 124, 214, 82, 243, 105, 221, 77, 206, 122, 105, 228, - 141, 197, 29, 237, 124, 63, 243, 105, 221, 139, 206, 122, 105, 228, 141, - 203, 242, 237, 124, 63, 243, 105, 208, 15, 206, 122, 105, 228, 141, 203, - 242, 237, 124, 63, 243, 105, 206, 132, 206, 122, 105, 228, 141, 203, 242, - 237, 124, 63, 243, 105, 248, 153, 206, 122, 105, 228, 141, 203, 242, 237, - 124, 63, 243, 105, 221, 77, 206, 122, 105, 228, 141, 203, 242, 237, 124, - 63, 243, 105, 210, 75, 206, 122, 105, 228, 141, 203, 242, 237, 124, 62, - 243, 105, 221, 139, 206, 122, 105, 228, 141, 203, 242, 237, 124, 62, 243, - 105, 208, 15, 206, 122, 105, 228, 141, 203, 242, 237, 124, 62, 243, 105, - 206, 132, 206, 122, 105, 228, 141, 203, 242, 237, 124, 62, 243, 105, 248, - 153, 206, 122, 105, 228, 141, 203, 242, 237, 124, 62, 243, 105, 221, 77, - 206, 122, 105, 228, 141, 203, 242, 237, 124, 62, 243, 105, 210, 75, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 214, 82, 243, 105, 221, 139, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 214, 82, 243, 105, 208, 15, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 214, 82, 243, 105, 206, 132, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 214, 82, 243, 105, 248, 153, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 214, 82, 243, 105, 221, 77, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 214, 82, 243, 105, 210, 75, 206, - 122, 105, 228, 141, 203, 242, 237, 124, 63, 243, 105, 221, 77, 206, 122, - 115, 228, 141, 233, 20, 237, 124, 62, 243, 105, 221, 77, 206, 122, 115, - 228, 141, 233, 20, 237, 124, 214, 82, 243, 105, 221, 77, 206, 122, 115, - 228, 141, 233, 20, 237, 124, 63, 243, 105, 234, 38, 62, 243, 105, 234, - 38, 214, 82, 243, 105, 234, 38, 63, 243, 105, 234, 39, 206, 122, 213, - 170, 237, 124, 62, 243, 105, 234, 39, 206, 122, 213, 170, 237, 124, 214, - 82, 243, 105, 234, 39, 206, 122, 213, 170, 237, 124, 63, 243, 105, 221, - 74, 63, 243, 105, 221, 73, 63, 243, 105, 221, 75, 62, 243, 105, 221, 74, - 62, 243, 105, 221, 73, 62, 243, 105, 221, 75, 192, 205, 207, 87, 231, - 150, 192, 205, 207, 87, 217, 84, 192, 205, 207, 87, 234, 131, 192, 205, - 207, 87, 228, 183, 192, 205, 207, 87, 243, 138, 192, 205, 207, 87, 247, - 114, 192, 205, 207, 87, 202, 26, 192, 205, 62, 231, 150, 192, 205, 62, - 217, 84, 192, 205, 62, 234, 131, 192, 205, 62, 228, 183, 192, 205, 62, - 243, 138, 192, 205, 62, 247, 114, 192, 205, 62, 202, 26, 249, 110, 203, - 51, 211, 98, 200, 135, 248, 27, 203, 25, 198, 237, 205, 139, 156, 248, - 115, 229, 223, 230, 198, 229, 223, 209, 131, 229, 223, 235, 99, 79, 248, - 120, 252, 35, 249, 96, 201, 76, 192, 234, 238, 201, 191, 253, 221, 119, - 210, 129, 248, 92, 217, 123, 193, 162, 209, 137, 214, 87, 236, 154, 217, - 64, 232, 182, 206, 187, 209, 100, 246, 252, 207, 118, 250, 132, 236, 196, - 220, 25, 249, 94, 216, 54, 229, 200, 252, 56, 179, 235, 94, 242, 88, 247, - 89, 205, 108, 205, 75, 220, 109, 102, 216, 26, 193, 65, 209, 83, 203, - 239, 214, 109, 221, 71, 248, 6, 215, 182, 198, 6, 198, 55, 229, 228, 209, - 109, 206, 147, 216, 27, 249, 111, 228, 16, 247, 100, 130, 249, 58, 230, - 60, 232, 170, 230, 54, 233, 80, 230, 79, 209, 180, 221, 203, 232, 179, - 193, 17, 248, 251, 242, 95, 209, 11, 209, 99, 193, 28, 233, 54, 218, 246, - 239, 4, 234, 105, 214, 89, 214, 90, 4, 234, 178, 228, 92, 223, 2, 193, - 61, 230, 243, 251, 129, 229, 223, 218, 205, 210, 20, 228, 149, 208, 226, - 217, 90, 208, 226, 209, 250, 209, 251, 4, 238, 208, 215, 204, 236, 147, - 248, 113, 248, 236, 210, 15, 211, 115, 232, 205, 199, 196, 232, 165, 199, - 132, 209, 7, 219, 92, 249, 11, 223, 18, 231, 36, 206, 128, 210, 62, 209, - 70, 216, 195, 233, 103, 205, 153, 233, 103, 233, 104, 4, 211, 77, 233, - 186, 23, 230, 54, 139, 215, 179, 233, 104, 4, 210, 47, 233, 193, 233, - 104, 4, 237, 39, 215, 179, 235, 138, 219, 113, 233, 103, 248, 145, 219, - 98, 248, 7, 203, 145, 233, 103, 230, 54, 4, 141, 232, 253, 23, 176, 238, - 213, 96, 230, 53, 118, 230, 53, 210, 183, 144, 230, 53, 210, 183, 133, - 230, 53, 141, 209, 58, 250, 183, 199, 34, 195, 55, 229, 224, 230, 28, - 118, 208, 135, 230, 53, 96, 208, 135, 230, 53, 184, 203, 236, 184, 203, - 206, 184, 203, 235, 184, 203, 191, 184, 203, 220, 184, 203, 205, 184, - 203, 234, 184, 203, 183, 184, 203, 213, 184, 203, 197, 184, 203, 227, - 184, 203, 190, 184, 203, 219, 184, 203, 204, 184, 203, 233, 184, 203, - 179, 184, 203, 209, 184, 203, 194, 184, 203, 223, 184, 203, 186, 184, + 200, 205, 160, 16, 40, 209, 205, 200, 205, 160, 16, 40, 62, 200, 205, + 160, 16, 40, 216, 183, 200, 237, 160, 16, 40, 216, 183, 200, 236, 160, + 16, 40, 216, 183, 200, 235, 160, 16, 40, 243, 15, 160, 16, 40, 205, 159, + 160, 16, 40, 213, 163, 160, 16, 40, 195, 28, 160, 16, 40, 195, 27, 160, + 16, 40, 206, 149, 205, 159, 160, 16, 40, 206, 149, 205, 158, 160, 16, 40, + 230, 252, 160, 16, 40, 202, 185, 160, 16, 40, 223, 76, 211, 51, 160, 16, + 40, 223, 76, 211, 50, 160, 16, 40, 238, 224, 79, 223, 75, 160, 16, 40, + 207, 78, 79, 223, 75, 160, 16, 40, 239, 14, 211, 51, 160, 16, 40, 223, + 74, 211, 51, 160, 16, 40, 200, 238, 79, 239, 13, 160, 16, 40, 238, 224, + 79, 239, 13, 160, 16, 40, 238, 224, 79, 239, 12, 160, 16, 40, 239, 14, + 251, 81, 160, 16, 40, 205, 160, 79, 239, 14, 251, 81, 160, 16, 40, 200, + 238, 79, 205, 160, 79, 239, 13, 160, 16, 40, 195, 139, 160, 16, 40, 198, + 143, 211, 51, 160, 16, 40, 219, 239, 211, 51, 160, 16, 40, 251, 80, 211, + 51, 160, 16, 40, 200, 238, 79, 251, 79, 160, 16, 40, 205, 160, 79, 251, + 79, 160, 16, 40, 200, 238, 79, 205, 160, 79, 251, 79, 160, 16, 40, 195, + 46, 79, 251, 79, 160, 16, 40, 207, 78, 79, 251, 79, 160, 16, 40, 207, 78, + 79, 251, 78, 160, 16, 40, 207, 77, 160, 16, 40, 207, 76, 160, 16, 40, + 207, 75, 160, 16, 40, 207, 74, 160, 16, 40, 251, 179, 160, 16, 40, 251, + 178, 160, 16, 40, 217, 63, 160, 16, 40, 205, 169, 160, 16, 40, 250, 232, + 160, 16, 40, 207, 107, 160, 16, 40, 207, 106, 160, 16, 40, 250, 156, 160, + 16, 40, 248, 152, 211, 51, 160, 16, 40, 199, 177, 160, 16, 40, 199, 176, + 160, 16, 40, 208, 10, 219, 123, 160, 16, 40, 248, 89, 160, 16, 40, 248, + 88, 160, 16, 40, 248, 87, 160, 16, 40, 251, 153, 160, 16, 40, 211, 133, + 160, 16, 40, 201, 215, 160, 16, 40, 198, 141, 160, 16, 40, 230, 160, 160, + 16, 40, 193, 131, 160, 16, 40, 209, 3, 160, 16, 40, 247, 139, 160, 16, + 40, 197, 50, 160, 16, 40, 247, 106, 215, 200, 160, 16, 40, 205, 94, 79, + 222, 189, 160, 16, 40, 247, 153, 160, 16, 40, 197, 235, 160, 16, 40, 201, + 101, 197, 235, 160, 16, 40, 219, 33, 160, 16, 40, 202, 38, 160, 16, 40, + 196, 54, 160, 16, 40, 228, 186, 235, 73, 160, 16, 40, 250, 206, 160, 16, + 40, 209, 17, 250, 206, 160, 16, 40, 248, 33, 160, 16, 40, 209, 2, 248, + 33, 160, 16, 40, 251, 150, 160, 16, 40, 201, 47, 200, 186, 201, 46, 160, + 16, 40, 201, 47, 200, 186, 201, 45, 160, 16, 40, 200, 234, 160, 16, 40, + 208, 231, 160, 16, 40, 236, 217, 160, 16, 40, 236, 219, 160, 16, 40, 236, + 218, 160, 16, 40, 208, 143, 160, 16, 40, 208, 131, 160, 16, 40, 238, 209, + 160, 16, 40, 238, 208, 160, 16, 40, 238, 207, 160, 16, 40, 238, 206, 160, + 16, 40, 238, 205, 160, 16, 40, 251, 193, 160, 16, 40, 249, 64, 79, 217, + 44, 160, 16, 40, 249, 64, 79, 195, 174, 160, 16, 40, 207, 27, 160, 16, + 40, 228, 178, 160, 16, 40, 213, 192, 160, 16, 40, 237, 205, 160, 16, 40, + 215, 215, 160, 16, 40, 132, 235, 111, 160, 16, 40, 132, 211, 19, 218, + 252, 79, 232, 139, 211, 166, 218, 209, 234, 196, 230, 3, 217, 103, 230, + 248, 208, 26, 211, 54, 62, 219, 221, 223, 58, 50, 197, 241, 62, 196, 76, + 223, 58, 50, 197, 241, 62, 206, 204, 223, 58, 50, 197, 241, 62, 235, 124, + 223, 58, 50, 197, 241, 62, 202, 85, 2, 243, 12, 216, 215, 28, 63, 243, + 12, 28, 63, 243, 12, 88, 63, 243, 12, 195, 83, 88, 63, 243, 12, 233, 199, + 88, 63, 243, 12, 63, 243, 13, 239, 35, 62, 2, 243, 12, 206, 116, 199, + 178, 62, 198, 138, 201, 191, 62, 202, 85, 2, 201, 191, 156, 63, 201, 191, + 216, 215, 63, 201, 191, 28, 63, 201, 191, 88, 63, 201, 191, 195, 83, 88, + 63, 201, 191, 233, 199, 88, 63, 201, 191, 63, 51, 239, 35, 62, 195, 83, + 2, 201, 191, 63, 51, 239, 35, 62, 216, 215, 201, 191, 51, 199, 178, 62, + 198, 138, 237, 34, 62, 195, 83, 2, 237, 34, 62, 216, 215, 2, 237, 34, 63, + 237, 35, 239, 35, 62, 195, 83, 2, 237, 34, 63, 237, 35, 239, 35, 62, 216, + 215, 237, 34, 237, 35, 199, 178, 62, 198, 138, 218, 234, 62, 195, 83, 2, + 218, 234, 62, 216, 215, 2, 218, 234, 63, 218, 235, 239, 35, 62, 2, 218, + 234, 199, 4, 35, 238, 219, 156, 35, 238, 219, 216, 215, 35, 238, 219, 28, + 35, 238, 219, 195, 83, 28, 35, 238, 219, 195, 83, 88, 35, 238, 219, 233, + 199, 88, 35, 238, 219, 199, 4, 205, 155, 156, 205, 155, 216, 215, 205, + 155, 28, 205, 155, 88, 205, 155, 195, 83, 88, 205, 155, 233, 199, 88, + 205, 155, 156, 232, 228, 201, 207, 250, 195, 216, 215, 232, 228, 201, + 207, 250, 195, 28, 232, 228, 201, 207, 250, 195, 88, 232, 228, 201, 207, + 250, 195, 195, 83, 88, 232, 228, 201, 207, 250, 195, 233, 199, 88, 232, + 228, 201, 207, 250, 195, 156, 202, 137, 201, 207, 250, 195, 216, 215, + 202, 137, 201, 207, 250, 195, 28, 202, 137, 201, 207, 250, 195, 88, 202, + 137, 201, 207, 250, 195, 195, 83, 88, 202, 137, 201, 207, 250, 195, 233, + 199, 88, 202, 137, 201, 207, 250, 195, 156, 234, 166, 201, 207, 250, 195, + 216, 215, 234, 166, 201, 207, 250, 195, 28, 234, 166, 201, 207, 250, 195, + 88, 234, 166, 201, 207, 250, 195, 195, 83, 88, 234, 166, 201, 207, 250, + 195, 156, 115, 209, 62, 62, 201, 103, 216, 215, 115, 209, 62, 62, 201, + 103, 115, 209, 62, 62, 201, 103, 216, 215, 115, 209, 62, 209, 132, 201, + 103, 156, 232, 130, 209, 62, 62, 201, 103, 216, 215, 232, 130, 209, 62, + 62, 201, 103, 232, 130, 209, 62, 62, 201, 103, 216, 215, 232, 130, 209, + 62, 209, 132, 201, 103, 207, 20, 156, 232, 130, 209, 62, 209, 132, 201, + 103, 156, 232, 228, 209, 62, 62, 201, 103, 88, 232, 228, 209, 62, 62, + 201, 103, 216, 215, 202, 137, 209, 62, 62, 201, 103, 88, 202, 137, 209, + 62, 62, 201, 103, 202, 137, 209, 62, 209, 132, 201, 103, 216, 215, 234, + 166, 209, 62, 62, 201, 103, 88, 234, 166, 209, 62, 62, 201, 103, 195, 83, + 88, 234, 166, 209, 62, 62, 201, 103, 88, 234, 166, 209, 62, 209, 132, + 201, 103, 156, 197, 38, 209, 62, 62, 201, 103, 88, 197, 38, 209, 62, 62, + 201, 103, 88, 197, 38, 209, 62, 209, 132, 201, 103, 47, 197, 241, 214, + 108, 47, 197, 241, 47, 201, 191, 214, 108, 47, 201, 191, 213, 177, 209, + 62, 63, 201, 103, 220, 15, 211, 57, 243, 12, 220, 15, 192, 73, 243, 12, + 220, 15, 230, 203, 243, 12, 220, 15, 208, 140, 243, 12, 220, 15, 248, 21, + 243, 12, 220, 15, 207, 89, 201, 191, 220, 15, 248, 117, 201, 191, 220, + 15, 211, 57, 201, 191, 220, 15, 192, 73, 201, 191, 220, 15, 230, 203, + 201, 191, 220, 15, 208, 140, 201, 191, 220, 15, 248, 21, 201, 191, 88, + 234, 45, 56, 118, 64, 4, 2, 197, 242, 250, 237, 196, 66, 64, 4, 2, 197, + 242, 250, 237, 96, 64, 4, 2, 197, 242, 250, 237, 235, 121, 64, 4, 2, 197, + 242, 250, 237, 118, 64, 4, 216, 215, 197, 242, 250, 237, 196, 66, 64, 4, + 216, 215, 197, 242, 250, 237, 96, 64, 4, 216, 215, 197, 242, 250, 237, + 235, 121, 64, 4, 216, 215, 197, 242, 250, 237, 118, 64, 4, 220, 15, 197, + 242, 250, 237, 196, 66, 64, 4, 220, 15, 197, 242, 250, 237, 96, 64, 4, + 220, 15, 197, 242, 250, 237, 235, 121, 64, 4, 220, 15, 197, 242, 250, + 237, 118, 64, 4, 2, 234, 39, 250, 237, 196, 66, 64, 4, 2, 234, 39, 250, + 237, 96, 64, 4, 2, 234, 39, 250, 237, 235, 121, 64, 4, 2, 234, 39, 250, + 237, 118, 64, 4, 234, 39, 250, 237, 196, 66, 64, 4, 234, 39, 250, 237, + 96, 64, 4, 234, 39, 250, 237, 235, 121, 64, 4, 234, 39, 250, 237, 88, + 118, 64, 4, 234, 39, 250, 237, 88, 196, 66, 64, 4, 234, 39, 250, 237, 88, + 96, 64, 4, 234, 39, 250, 237, 88, 235, 121, 64, 4, 234, 39, 250, 237, 88, + 118, 64, 4, 220, 15, 234, 39, 250, 237, 88, 196, 66, 64, 4, 220, 15, 234, + 39, 250, 237, 88, 96, 64, 4, 220, 15, 234, 39, 250, 237, 88, 235, 121, + 64, 4, 220, 15, 234, 39, 250, 237, 118, 197, 240, 64, 4, 214, 217, 203, + 150, 196, 66, 197, 240, 64, 4, 214, 217, 203, 150, 96, 197, 240, 64, 4, + 214, 217, 203, 150, 235, 121, 197, 240, 64, 4, 214, 217, 203, 150, 118, + 197, 240, 64, 4, 216, 215, 203, 150, 196, 66, 197, 240, 64, 4, 216, 215, + 203, 150, 96, 197, 240, 64, 4, 216, 215, 203, 150, 235, 121, 197, 240, + 64, 4, 216, 215, 203, 150, 118, 197, 240, 64, 4, 28, 203, 150, 196, 66, + 197, 240, 64, 4, 28, 203, 150, 96, 197, 240, 64, 4, 28, 203, 150, 235, + 121, 197, 240, 64, 4, 28, 203, 150, 118, 197, 240, 64, 4, 88, 203, 150, + 196, 66, 197, 240, 64, 4, 88, 203, 150, 96, 197, 240, 64, 4, 88, 203, + 150, 235, 121, 197, 240, 64, 4, 88, 203, 150, 118, 197, 240, 64, 4, 195, + 83, 88, 203, 150, 196, 66, 197, 240, 64, 4, 195, 83, 88, 203, 150, 96, + 197, 240, 64, 4, 195, 83, 88, 203, 150, 235, 121, 197, 240, 64, 4, 195, + 83, 88, 203, 150, 118, 232, 253, 57, 196, 66, 232, 253, 57, 96, 232, 253, + 57, 235, 121, 232, 253, 57, 118, 112, 57, 196, 66, 112, 57, 96, 112, 57, + 235, 121, 112, 57, 118, 239, 63, 57, 196, 66, 239, 63, 57, 96, 239, 63, + 57, 235, 121, 239, 63, 57, 118, 88, 239, 63, 57, 196, 66, 88, 239, 63, + 57, 96, 88, 239, 63, 57, 235, 121, 88, 239, 63, 57, 118, 88, 57, 196, 66, + 88, 57, 96, 88, 57, 235, 121, 88, 57, 118, 49, 57, 196, 66, 49, 57, 96, + 49, 57, 235, 121, 49, 57, 186, 193, 105, 49, 57, 186, 234, 206, 49, 57, + 202, 3, 234, 206, 49, 57, 202, 3, 193, 105, 49, 57, 45, 50, 49, 57, 133, + 144, 49, 57, 193, 77, 118, 156, 182, 57, 193, 77, 196, 66, 156, 182, 57, + 193, 77, 96, 156, 182, 57, 193, 77, 235, 121, 156, 182, 57, 193, 77, 186, + 193, 105, 156, 182, 57, 193, 77, 186, 234, 206, 156, 182, 57, 193, 77, + 202, 3, 234, 206, 156, 182, 57, 193, 77, 202, 3, 193, 105, 156, 182, 57, + 193, 77, 118, 182, 57, 193, 77, 196, 66, 182, 57, 193, 77, 96, 182, 57, + 193, 77, 235, 121, 182, 57, 193, 77, 186, 193, 105, 182, 57, 193, 77, + 186, 234, 206, 182, 57, 193, 77, 202, 3, 234, 206, 182, 57, 193, 77, 202, + 3, 193, 105, 182, 57, 193, 77, 118, 216, 215, 182, 57, 193, 77, 196, 66, + 216, 215, 182, 57, 193, 77, 96, 216, 215, 182, 57, 193, 77, 235, 121, + 216, 215, 182, 57, 193, 77, 186, 193, 105, 216, 215, 182, 57, 193, 77, + 186, 234, 206, 216, 215, 182, 57, 193, 77, 202, 3, 234, 206, 216, 215, + 182, 57, 193, 77, 202, 3, 193, 105, 216, 215, 182, 57, 193, 77, 118, 88, + 182, 57, 193, 77, 196, 66, 88, 182, 57, 193, 77, 96, 88, 182, 57, 193, + 77, 235, 121, 88, 182, 57, 193, 77, 186, 193, 105, 88, 182, 57, 193, 77, + 186, 234, 206, 88, 182, 57, 193, 77, 202, 3, 234, 206, 88, 182, 57, 193, + 77, 202, 3, 193, 105, 88, 182, 57, 193, 77, 118, 195, 83, 88, 182, 57, + 193, 77, 196, 66, 195, 83, 88, 182, 57, 193, 77, 96, 195, 83, 88, 182, + 57, 193, 77, 235, 121, 195, 83, 88, 182, 57, 193, 77, 186, 193, 105, 195, + 83, 88, 182, 57, 193, 77, 186, 234, 206, 195, 83, 88, 182, 57, 193, 77, + 202, 3, 234, 206, 195, 83, 88, 182, 57, 193, 77, 202, 3, 193, 105, 195, + 83, 88, 182, 57, 118, 197, 242, 250, 237, 196, 66, 197, 242, 250, 237, + 96, 197, 242, 250, 237, 235, 121, 197, 242, 250, 237, 118, 63, 64, 193, + 53, 197, 242, 250, 237, 196, 66, 63, 64, 193, 53, 197, 242, 250, 237, 96, + 63, 64, 193, 53, 197, 242, 250, 237, 235, 121, 63, 64, 193, 53, 197, 242, + 250, 237, 118, 64, 4, 213, 10, 199, 215, 196, 66, 64, 4, 213, 10, 199, + 215, 96, 64, 4, 213, 10, 199, 215, 235, 121, 64, 4, 213, 10, 199, 215, + 88, 64, 203, 151, 193, 75, 107, 88, 64, 203, 151, 193, 75, 105, 198, 253, + 88, 64, 203, 151, 193, 75, 91, 230, 72, 88, 64, 203, 151, 193, 75, 91, + 199, 0, 118, 248, 76, 63, 57, 96, 248, 79, 203, 153, 63, 57, 118, 198, + 54, 203, 153, 63, 57, 96, 198, 54, 203, 153, 63, 57, 118, 219, 220, 63, + 57, 96, 206, 203, 63, 57, 118, 206, 203, 63, 57, 96, 219, 220, 63, 57, + 118, 249, 147, 203, 152, 63, 57, 96, 249, 147, 203, 152, 63, 57, 118, + 232, 97, 203, 152, 63, 57, 96, 232, 97, 203, 152, 63, 57, 63, 64, 203, + 151, 193, 75, 107, 63, 64, 203, 151, 193, 75, 105, 198, 253, 64, 209, 60, + 196, 66, 199, 25, 186, 193, 104, 64, 209, 60, 96, 199, 25, 238, 163, 202, + 3, 193, 104, 47, 238, 220, 232, 145, 4, 232, 130, 236, 140, 47, 238, 220, + 232, 145, 4, 105, 236, 140, 47, 238, 220, 232, 144, 45, 132, 243, 13, 4, + 232, 130, 236, 140, 45, 132, 243, 13, 4, 115, 236, 140, 45, 132, 243, 13, + 4, 105, 236, 140, 45, 132, 243, 13, 4, 236, 142, 45, 132, 243, 12, 235, + 122, 233, 98, 102, 235, 122, 233, 98, 213, 10, 102, 235, 122, 233, 98, + 228, 253, 4, 236, 142, 235, 122, 233, 98, 213, 10, 228, 253, 4, 236, 142, + 209, 138, 232, 249, 63, 229, 225, 248, 21, 229, 225, 209, 137, 230, 55, + 191, 17, 233, 105, 215, 231, 233, 105, 233, 106, 4, 199, 21, 214, 94, + 233, 105, 199, 2, 233, 105, 233, 106, 4, 229, 236, 206, 151, 233, 105, + 228, 152, 233, 105, 3, 79, 199, 34, 228, 188, 247, 141, 216, 235, 230, + 55, 207, 149, 249, 149, 79, 230, 55, 219, 225, 232, 233, 206, 208, 232, + 233, 230, 29, 230, 56, 4, 141, 23, 82, 232, 250, 238, 215, 228, 76, 218, + 244, 191, 239, 230, 56, 56, 233, 106, 4, 238, 240, 230, 11, 242, 210, + 233, 105, 214, 204, 233, 105, 206, 139, 211, 107, 199, 34, 232, 196, 220, + 1, 235, 102, 233, 105, 218, 180, 233, 105, 233, 106, 210, 184, 202, 57, + 233, 105, 233, 106, 4, 91, 233, 194, 207, 148, 230, 198, 233, 106, 4, + 201, 104, 233, 187, 230, 198, 233, 106, 4, 91, 220, 15, 23, 91, 2, 233, + 195, 233, 106, 4, 232, 255, 238, 243, 242, 221, 219, 98, 204, 3, 233, + 106, 4, 200, 77, 238, 243, 215, 181, 202, 65, 233, 106, 4, 202, 65, 233, + 188, 23, 230, 56, 238, 243, 215, 181, 233, 106, 4, 211, 79, 215, 182, + 195, 9, 203, 55, 233, 106, 4, 233, 210, 229, 237, 208, 228, 193, 35, 248, + 42, 210, 183, 133, 198, 87, 204, 32, 208, 216, 217, 93, 223, 165, 197, + 46, 215, 196, 243, 57, 203, 10, 209, 253, 236, 161, 247, 85, 222, 179, + 233, 40, 216, 1, 210, 23, 193, 8, 193, 144, 209, 46, 230, 34, 236, 203, + 217, 37, 193, 69, 232, 188, 235, 97, 4, 235, 95, 242, 228, 231, 17, 197, + 74, 231, 18, 201, 204, 231, 3, 214, 87, 206, 209, 232, 240, 209, 110, + 216, 221, 205, 58, 209, 110, 216, 221, 199, 1, 209, 110, 216, 221, 248, + 63, 231, 12, 217, 48, 250, 225, 196, 94, 238, 174, 201, 66, 220, 112, + 201, 76, 23, 249, 113, 202, 32, 232, 180, 236, 228, 238, 223, 250, 143, + 238, 190, 249, 140, 209, 14, 247, 89, 249, 126, 248, 45, 230, 203, 205, + 166, 203, 143, 210, 169, 79, 232, 163, 201, 10, 232, 207, 234, 181, 231, + 19, 79, 216, 55, 210, 58, 221, 118, 210, 165, 235, 78, 232, 140, 239, 18, + 199, 207, 248, 64, 243, 64, 248, 69, 4, 201, 204, 238, 184, 4, 201, 44, + 242, 95, 248, 25, 209, 178, 208, 220, 238, 157, 79, 216, 226, 205, 138, + 247, 117, 232, 163, 219, 234, 230, 202, 217, 84, 215, 208, 247, 148, 249, + 129, 202, 65, 233, 106, 4, 202, 65, 233, 188, 23, 115, 229, 223, 192, 87, + 233, 105, 202, 65, 233, 106, 4, 199, 131, 233, 106, 4, 210, 104, 228, + 190, 23, 210, 104, 230, 11, 233, 106, 4, 196, 98, 233, 188, 23, 193, 135, + 215, 181, 211, 7, 233, 105, 232, 109, 233, 105, 213, 170, 236, 226, 233, + 105, 233, 106, 229, 8, 249, 149, 199, 125, 233, 106, 4, 209, 95, 233, + 187, 205, 126, 220, 121, 242, 98, 230, 255, 229, 131, 248, 93, 232, 209, + 203, 53, 238, 237, 219, 102, 233, 105, 205, 82, 197, 62, 196, 96, 233, + 105, 234, 216, 235, 87, 249, 66, 203, 129, 210, 251, 232, 122, 233, 105, + 247, 217, 237, 130, 230, 237, 219, 80, 207, 6, 203, 14, 201, 185, 231, + 31, 233, 105, 191, 85, 233, 105, 229, 218, 205, 111, 200, 42, 238, 226, + 222, 84, 219, 72, 210, 60, 229, 123, 210, 110, 207, 175, 219, 43, 215, + 198, 216, 92, 249, 135, 200, 148, 217, 94, 236, 167, 202, 79, 211, 24, + 211, 56, 202, 103, 232, 211, 210, 241, 249, 6, 248, 151, 205, 62, 230, + 165, 236, 164, 208, 204, 247, 119, 234, 111, 242, 66, 207, 89, 230, 80, + 234, 111, 242, 66, 238, 173, 230, 80, 234, 111, 242, 66, 249, 115, 234, + 111, 242, 66, 63, 230, 80, 248, 100, 219, 214, 232, 161, 198, 56, 200, + 184, 200, 179, 205, 189, 195, 81, 234, 214, 4, 229, 227, 251, 237, 215, + 192, 193, 91, 217, 76, 193, 91, 216, 225, 250, 252, 216, 225, 219, 214, + 243, 120, 193, 116, 238, 182, 205, 160, 203, 147, 248, 210, 248, 64, 231, + 199, 211, 95, 233, 87, 193, 174, 247, 218, 217, 31, 235, 106, 228, 29, + 238, 192, 248, 11, 199, 134, 197, 214, 201, 106, 209, 252, 221, 82, 209, + 252, 237, 146, 209, 252, 233, 106, 4, 215, 226, 252, 31, 243, 88, 211, + 120, 252, 31, 249, 10, 209, 252, 209, 253, 4, 229, 232, 209, 253, 223, + 165, 201, 83, 206, 131, 209, 253, 242, 230, 209, 253, 223, 165, 218, 249, + 209, 26, 217, 126, 233, 89, 195, 177, 216, 176, 234, 127, 231, 150, 191, + 5, 248, 52, 211, 57, 229, 225, 248, 173, 247, 113, 205, 95, 231, 11, 242, + 98, 202, 35, 207, 89, 231, 45, 234, 69, 232, 244, 222, 240, 208, 127, + 209, 177, 199, 75, 197, 84, 209, 237, 236, 224, 236, 178, 55, 229, 206, + 242, 71, 252, 73, 232, 246, 233, 204, 198, 58, 248, 33, 217, 124, 218, + 217, 218, 250, 248, 80, 201, 205, 79, 198, 227, 249, 114, 79, 192, 100, + 205, 189, 209, 141, 199, 124, 249, 11, 248, 22, 249, 71, 206, 142, 79, + 210, 137, 249, 90, 79, 202, 38, 201, 206, 207, 105, 214, 198, 251, 136, + 214, 84, 243, 107, 221, 140, 214, 84, 243, 107, 208, 16, 214, 84, 243, + 107, 206, 132, 214, 84, 243, 107, 248, 154, 214, 84, 243, 107, 221, 78, + 214, 84, 243, 107, 210, 76, 63, 243, 107, 221, 79, 206, 123, 232, 136, + 237, 126, 62, 243, 107, 221, 79, 206, 123, 232, 136, 237, 126, 214, 84, + 243, 107, 221, 79, 206, 123, 232, 136, 237, 126, 63, 243, 107, 221, 141, + 206, 123, 213, 172, 237, 126, 63, 243, 107, 208, 17, 206, 123, 213, 172, + 237, 126, 63, 243, 107, 206, 133, 206, 123, 213, 172, 237, 126, 63, 243, + 107, 248, 155, 206, 123, 213, 172, 237, 126, 63, 243, 107, 221, 79, 206, + 123, 213, 172, 237, 126, 63, 243, 107, 210, 77, 206, 123, 213, 172, 237, + 126, 62, 243, 107, 221, 141, 206, 123, 213, 172, 237, 126, 62, 243, 107, + 208, 17, 206, 123, 213, 172, 237, 126, 62, 243, 107, 206, 133, 206, 123, + 213, 172, 237, 126, 62, 243, 107, 248, 155, 206, 123, 213, 172, 237, 126, + 62, 243, 107, 221, 79, 206, 123, 213, 172, 237, 126, 62, 243, 107, 210, + 77, 206, 123, 213, 172, 237, 126, 214, 84, 243, 107, 221, 141, 206, 123, + 213, 172, 237, 126, 214, 84, 243, 107, 208, 17, 206, 123, 213, 172, 237, + 126, 214, 84, 243, 107, 206, 133, 206, 123, 213, 172, 237, 126, 214, 84, + 243, 107, 248, 155, 206, 123, 213, 172, 237, 126, 214, 84, 243, 107, 221, + 79, 206, 123, 213, 172, 237, 126, 214, 84, 243, 107, 210, 77, 206, 123, + 213, 172, 237, 126, 63, 243, 107, 221, 79, 206, 123, 91, 228, 143, 198, + 248, 237, 126, 62, 243, 107, 221, 79, 206, 123, 91, 228, 143, 198, 248, + 237, 126, 214, 84, 243, 107, 221, 79, 206, 123, 91, 228, 143, 198, 248, + 237, 126, 63, 243, 107, 154, 221, 140, 63, 243, 107, 154, 208, 16, 63, + 243, 107, 154, 206, 132, 63, 243, 107, 154, 248, 154, 63, 243, 107, 154, + 221, 78, 63, 243, 107, 154, 210, 76, 62, 243, 107, 154, 221, 140, 62, + 243, 107, 154, 208, 16, 62, 243, 107, 154, 206, 132, 62, 243, 107, 154, + 248, 154, 62, 243, 107, 154, 221, 78, 62, 243, 107, 154, 210, 76, 214, + 84, 243, 107, 154, 221, 140, 214, 84, 243, 107, 154, 208, 16, 214, 84, + 243, 107, 154, 206, 132, 214, 84, 243, 107, 154, 248, 154, 214, 84, 243, + 107, 154, 221, 78, 214, 84, 243, 107, 154, 210, 76, 63, 243, 107, 221, + 79, 206, 123, 105, 228, 143, 197, 29, 237, 126, 62, 243, 107, 221, 79, + 206, 123, 105, 228, 143, 197, 29, 237, 126, 214, 84, 243, 107, 221, 79, + 206, 123, 105, 228, 143, 197, 29, 237, 126, 63, 243, 107, 221, 141, 206, + 123, 105, 228, 143, 203, 243, 237, 126, 63, 243, 107, 208, 17, 206, 123, + 105, 228, 143, 203, 243, 237, 126, 63, 243, 107, 206, 133, 206, 123, 105, + 228, 143, 203, 243, 237, 126, 63, 243, 107, 248, 155, 206, 123, 105, 228, + 143, 203, 243, 237, 126, 63, 243, 107, 221, 79, 206, 123, 105, 228, 143, + 203, 243, 237, 126, 63, 243, 107, 210, 77, 206, 123, 105, 228, 143, 203, + 243, 237, 126, 62, 243, 107, 221, 141, 206, 123, 105, 228, 143, 203, 243, + 237, 126, 62, 243, 107, 208, 17, 206, 123, 105, 228, 143, 203, 243, 237, + 126, 62, 243, 107, 206, 133, 206, 123, 105, 228, 143, 203, 243, 237, 126, + 62, 243, 107, 248, 155, 206, 123, 105, 228, 143, 203, 243, 237, 126, 62, + 243, 107, 221, 79, 206, 123, 105, 228, 143, 203, 243, 237, 126, 62, 243, + 107, 210, 77, 206, 123, 105, 228, 143, 203, 243, 237, 126, 214, 84, 243, + 107, 221, 141, 206, 123, 105, 228, 143, 203, 243, 237, 126, 214, 84, 243, + 107, 208, 17, 206, 123, 105, 228, 143, 203, 243, 237, 126, 214, 84, 243, + 107, 206, 133, 206, 123, 105, 228, 143, 203, 243, 237, 126, 214, 84, 243, + 107, 248, 155, 206, 123, 105, 228, 143, 203, 243, 237, 126, 214, 84, 243, + 107, 221, 79, 206, 123, 105, 228, 143, 203, 243, 237, 126, 214, 84, 243, + 107, 210, 77, 206, 123, 105, 228, 143, 203, 243, 237, 126, 63, 243, 107, + 221, 79, 206, 123, 115, 228, 143, 233, 22, 237, 126, 62, 243, 107, 221, + 79, 206, 123, 115, 228, 143, 233, 22, 237, 126, 214, 84, 243, 107, 221, + 79, 206, 123, 115, 228, 143, 233, 22, 237, 126, 63, 243, 107, 234, 40, + 62, 243, 107, 234, 40, 214, 84, 243, 107, 234, 40, 63, 243, 107, 234, 41, + 206, 123, 213, 172, 237, 126, 62, 243, 107, 234, 41, 206, 123, 213, 172, + 237, 126, 214, 84, 243, 107, 234, 41, 206, 123, 213, 172, 237, 126, 63, + 243, 107, 221, 76, 63, 243, 107, 221, 75, 63, 243, 107, 221, 77, 62, 243, + 107, 221, 76, 62, 243, 107, 221, 75, 62, 243, 107, 221, 77, 192, 205, + 207, 89, 231, 152, 192, 205, 207, 89, 217, 86, 192, 205, 207, 89, 234, + 133, 192, 205, 207, 89, 228, 185, 192, 205, 207, 89, 243, 140, 192, 205, + 207, 89, 247, 116, 192, 205, 207, 89, 202, 27, 192, 205, 62, 231, 152, + 192, 205, 62, 217, 86, 192, 205, 62, 234, 133, 192, 205, 62, 228, 185, + 192, 205, 62, 243, 140, 192, 205, 62, 247, 116, 192, 205, 62, 202, 27, + 249, 112, 203, 52, 211, 100, 200, 135, 248, 29, 203, 26, 198, 237, 205, + 140, 156, 248, 117, 229, 225, 230, 200, 229, 225, 209, 133, 229, 225, + 235, 101, 79, 248, 122, 252, 37, 249, 98, 201, 77, 192, 234, 238, 203, + 191, 253, 221, 121, 210, 131, 248, 94, 217, 125, 193, 162, 209, 139, 214, + 89, 236, 156, 217, 66, 232, 184, 206, 188, 209, 102, 246, 254, 207, 120, + 250, 134, 236, 198, 220, 27, 249, 96, 216, 56, 229, 202, 252, 58, 180, + 235, 96, 242, 90, 247, 91, 205, 109, 205, 76, 220, 111, 102, 216, 28, + 193, 65, 209, 85, 203, 240, 214, 111, 221, 73, 248, 8, 215, 184, 198, 6, + 198, 55, 229, 230, 209, 111, 206, 148, 216, 29, 249, 113, 228, 18, 247, + 102, 130, 249, 60, 230, 62, 232, 172, 230, 56, 233, 82, 230, 81, 209, + 182, 221, 205, 232, 181, 193, 17, 248, 253, 242, 97, 209, 13, 209, 101, + 193, 28, 233, 56, 218, 248, 239, 6, 234, 107, 214, 91, 214, 92, 4, 234, + 180, 228, 94, 223, 4, 193, 61, 230, 245, 251, 131, 229, 225, 218, 207, + 210, 22, 228, 151, 208, 228, 217, 92, 208, 228, 209, 252, 209, 253, 4, + 238, 210, 215, 206, 236, 149, 248, 115, 248, 238, 210, 17, 211, 117, 232, + 207, 199, 196, 232, 167, 199, 132, 209, 9, 219, 94, 249, 13, 223, 20, + 231, 38, 206, 129, 210, 64, 209, 72, 216, 197, 233, 105, 205, 154, 233, + 105, 233, 106, 4, 211, 79, 233, 188, 23, 230, 56, 139, 215, 181, 233, + 106, 4, 210, 49, 233, 195, 233, 106, 4, 237, 41, 215, 181, 235, 140, 219, + 115, 233, 105, 248, 147, 219, 100, 248, 9, 203, 146, 233, 105, 230, 56, + 4, 141, 232, 255, 23, 176, 238, 215, 96, 230, 55, 118, 230, 55, 210, 185, + 144, 230, 55, 210, 185, 133, 230, 55, 141, 209, 60, 250, 185, 199, 34, + 195, 55, 229, 226, 230, 30, 118, 208, 137, 230, 55, 96, 208, 137, 230, + 55, 184, 203, 237, 184, 203, 207, 184, 203, 236, 184, 203, 192, 184, 203, + 221, 184, 203, 206, 184, 203, 235, 184, 203, 184, 184, 203, 214, 184, + 203, 198, 184, 203, 228, 184, 203, 191, 184, 203, 220, 184, 203, 205, + 184, 203, 234, 184, 203, 180, 184, 203, 210, 184, 203, 195, 184, 203, + 224, 184, 203, 187, 184, 203, 201, 184, 203, 231, 184, 203, 183, 184, + 203, 213, 184, 203, 197, 184, 203, 227, 184, 203, 190, 184, 203, 219, + 184, 203, 204, 184, 203, 233, 184, 203, 178, 184, 203, 208, 184, 203, + 193, 184, 203, 222, 184, 203, 185, 184, 203, 215, 184, 203, 199, 184, + 203, 229, 184, 203, 181, 184, 203, 211, 184, 203, 225, 184, 203, 188, + 184, 203, 217, 184, 203, 202, 184, 203, 232, 184, 203, 179, 184, 203, + 209, 184, 203, 194, 184, 203, 223, 184, 203, 186, 184, 203, 216, 184, 203, 200, 184, 203, 230, 184, 203, 182, 184, 203, 212, 184, 203, 196, - 184, 203, 226, 184, 203, 189, 184, 203, 218, 184, 203, 203, 184, 203, - 232, 184, 203, 177, 184, 203, 207, 184, 203, 192, 184, 203, 221, 184, - 203, 184, 184, 203, 214, 184, 203, 198, 184, 203, 228, 184, 203, 180, - 184, 203, 210, 184, 203, 224, 184, 203, 187, 184, 203, 216, 184, 203, - 201, 184, 203, 231, 184, 203, 178, 184, 203, 208, 184, 203, 193, 184, - 203, 222, 184, 203, 185, 184, 203, 215, 184, 203, 199, 184, 203, 229, - 184, 203, 181, 184, 203, 211, 184, 203, 195, 184, 203, 225, 184, 203, - 188, 184, 203, 217, 184, 203, 202, 110, 45, 184, 237, 39, 110, 82, 45, - 119, 110, 247, 21, 110, 45, 184, 237, 39, 110, 82, 45, 119, 110, 183, - 110, 45, 184, 237, 39, 116, 82, 45, 119, 110, 247, 21, 110, 45, 184, 237, - 39, 116, 82, 45, 119, 110, 183, 110, 45, 184, 237, 39, 116, 45, 119, 110, - 247, 21, 110, 50, 184, 237, 39, 116, 82, 45, 119, 116, 247, 21, 110, 50, - 184, 237, 39, 116, 82, 45, 119, 116, 183, 110, 50, 184, 237, 39, 110, 82, - 45, 119, 116, 247, 21, 110, 50, 184, 237, 39, 110, 82, 45, 119, 116, 183, - 110, 50, 184, 237, 39, 110, 45, 119, 116, 247, 21, 110, 50, 184, 237, 39, - 110, 82, 45, 119, 116, 82, 183, 110, 50, 184, 237, 39, 110, 247, 22, 119, - 110, 82, 183, 110, 50, 184, 237, 39, 110, 45, 119, 110, 82, 183, 110, 50, - 184, 237, 39, 110, 247, 22, 119, 116, 82, 183, 110, 50, 184, 237, 39, - 110, 45, 119, 116, 82, 183, 110, 50, 184, 237, 39, 110, 247, 22, 119, - 116, 183, 110, 45, 184, 237, 39, 116, 247, 22, 119, 116, 82, 183, 110, - 45, 184, 237, 39, 116, 45, 119, 116, 82, 183, 110, 45, 184, 237, 39, 116, - 247, 22, 119, 110, 82, 183, 110, 45, 184, 237, 39, 116, 45, 119, 110, 82, - 183, 110, 45, 184, 237, 39, 116, 247, 22, 119, 110, 183, 110, 45, 184, - 237, 39, 116, 82, 45, 119, 110, 82, 183, 116, 50, 184, 237, 39, 110, 82, - 45, 119, 110, 247, 21, 116, 50, 184, 237, 39, 110, 82, 45, 119, 110, 183, - 116, 50, 184, 237, 39, 116, 82, 45, 119, 110, 247, 21, 116, 50, 184, 237, - 39, 116, 82, 45, 119, 110, 183, 116, 50, 184, 237, 39, 116, 45, 119, 110, - 247, 21, 116, 45, 184, 237, 39, 116, 82, 45, 119, 116, 247, 21, 116, 45, - 184, 237, 39, 116, 82, 45, 119, 116, 183, 116, 45, 184, 237, 39, 110, 82, - 45, 119, 116, 247, 21, 116, 45, 184, 237, 39, 110, 82, 45, 119, 116, 183, - 116, 45, 184, 237, 39, 110, 45, 119, 116, 247, 21, 116, 45, 184, 237, 39, - 110, 82, 45, 119, 116, 82, 183, 116, 45, 184, 237, 39, 110, 247, 22, 119, - 110, 82, 183, 116, 45, 184, 237, 39, 110, 45, 119, 110, 82, 183, 116, 45, - 184, 237, 39, 110, 247, 22, 119, 116, 82, 183, 116, 45, 184, 237, 39, - 110, 45, 119, 116, 82, 183, 116, 45, 184, 237, 39, 110, 247, 22, 119, - 116, 183, 116, 50, 184, 237, 39, 116, 247, 22, 119, 116, 82, 183, 116, - 50, 184, 237, 39, 116, 45, 119, 116, 82, 183, 116, 50, 184, 237, 39, 116, - 247, 22, 119, 110, 82, 183, 116, 50, 184, 237, 39, 116, 45, 119, 110, 82, - 183, 116, 50, 184, 237, 39, 116, 247, 22, 119, 110, 183, 116, 50, 184, - 237, 39, 116, 82, 45, 119, 110, 82, 183, 116, 23, 50, 23, 110, 197, 238, - 115, 208, 21, 248, 129, 45, 23, 110, 23, 50, 197, 238, 115, 208, 21, 248, - 129, 116, 23, 45, 23, 110, 197, 238, 115, 208, 21, 248, 129, 45, 23, 116, - 23, 50, 197, 238, 115, 208, 21, 248, 129, 45, 197, 238, 91, 208, 23, 248, - 129, 116, 197, 238, 91, 208, 23, 248, 129, 50, 197, 238, 91, 208, 23, - 248, 129, 110, 197, 238, 91, 208, 23, 248, 129, 81, 91, 234, 160, 248, - 127, 81, 91, 234, 160, 248, 126, 81, 91, 234, 160, 248, 125, 81, 91, 234, - 160, 248, 124, 81, 91, 234, 160, 248, 123, 81, 91, 234, 160, 248, 122, - 228, 241, 91, 234, 160, 248, 127, 228, 241, 91, 234, 160, 248, 126, 228, - 241, 91, 234, 160, 248, 125, 228, 241, 91, 234, 160, 248, 124, 228, 241, - 91, 234, 160, 248, 123, 228, 241, 91, 234, 160, 248, 122, 45, 23, 110, - 91, 234, 160, 248, 129, 45, 23, 116, 91, 234, 160, 248, 129, 50, 23, 116, - 91, 234, 160, 248, 129, 50, 23, 110, 91, 234, 160, 248, 129, 116, 23, - 110, 91, 234, 160, 248, 129, 228, 241, 91, 234, 160, 248, 128, 116, 91, - 208, 23, 248, 129, 116, 115, 234, 158, 248, 129, 116, 232, 226, 234, 158, - 248, 129, 116, 115, 208, 21, 248, 129, 116, 203, 247, 234, 158, 248, 129, - 50, 91, 208, 23, 248, 129, 50, 115, 234, 158, 248, 129, 50, 232, 226, - 234, 158, 248, 129, 50, 115, 208, 21, 248, 129, 50, 203, 247, 234, 158, - 248, 129, 45, 132, 216, 213, 203, 153, 50, 132, 216, 213, 203, 153, 116, - 132, 216, 213, 203, 153, 110, 132, 216, 213, 203, 153, 223, 95, 216, 213, - 203, 153, 116, 132, 184, 23, 110, 132, 223, 95, 216, 213, 203, 153, 116, - 132, 223, 95, 216, 213, 203, 154, 23, 110, 132, 248, 129, 45, 132, 223, - 95, 216, 213, 203, 154, 23, 50, 132, 248, 129, 243, 124, 248, 108, 233, - 5, 223, 95, 243, 124, 248, 108, 233, 5, 88, 228, 241, 233, 5, 116, 45, - 119, 110, 50, 233, 5, 116, 50, 119, 110, 45, 233, 5, 116, 23, 110, 197, - 238, 132, 248, 129, 45, 23, 50, 197, 238, 132, 248, 129, 116, 45, 197, - 238, 216, 213, 203, 153, 116, 50, 197, 238, 216, 213, 203, 153, 110, 50, - 197, 238, 216, 213, 203, 153, 110, 45, 197, 238, 216, 213, 203, 153, 111, - 122, 156, 237, 39, 116, 247, 22, 119, 82, 219, 224, 111, 122, 156, 237, - 39, 116, 247, 22, 119, 82, 183, 111, 122, 156, 237, 39, 82, 45, 119, 110, - 247, 21, 111, 122, 156, 237, 39, 82, 50, 119, 110, 247, 21, 111, 122, - 156, 237, 39, 116, 247, 22, 119, 82, 45, 119, 110, 247, 21, 111, 122, - 156, 237, 39, 116, 247, 22, 119, 82, 50, 119, 110, 247, 21, 111, 122, - 156, 237, 39, 82, 45, 119, 110, 247, 22, 119, 82, 183, 111, 122, 156, - 237, 39, 82, 45, 119, 116, 247, 22, 119, 82, 183, 111, 122, 156, 237, 39, - 116, 247, 22, 119, 82, 45, 23, 82, 50, 119, 110, 247, 21, 111, 122, 156, - 237, 39, 116, 247, 22, 119, 82, 50, 23, 82, 45, 119, 110, 247, 21, 111, - 122, 156, 237, 39, 116, 247, 22, 119, 82, 50, 119, 110, 247, 22, 119, 82, - 219, 224, 111, 122, 156, 237, 39, 116, 247, 22, 119, 82, 45, 119, 110, - 247, 22, 119, 82, 183, 111, 122, 156, 237, 39, 82, 45, 119, 116, 247, 22, - 119, 82, 50, 119, 110, 247, 21, 111, 122, 156, 237, 39, 82, 50, 119, 116, - 247, 22, 119, 82, 45, 119, 110, 247, 21, 111, 122, 156, 237, 39, 237, 32, - 111, 122, 156, 228, 241, 4, 81, 106, 250, 234, 209, 59, 223, 95, 243, - 126, 77, 45, 132, 206, 42, 217, 90, 50, 132, 206, 42, 217, 90, 223, 95, - 235, 119, 64, 4, 198, 136, 219, 214, 118, 64, 23, 116, 23, 110, 91, 234, - 160, 248, 129, 96, 64, 23, 116, 23, 110, 91, 234, 160, 248, 129, 235, - 119, 64, 23, 50, 91, 234, 160, 248, 129, 196, 66, 64, 23, 50, 91, 234, - 160, 248, 129, 45, 132, 232, 171, 50, 132, 232, 171, 195, 16, 35, 238, - 217, 50, 211, 77, 112, 236, 140, 214, 106, 237, 39, 238, 217, 214, 106, - 237, 39, 82, 50, 119, 110, 247, 21, 214, 106, 237, 39, 237, 32, 63, 88, - 205, 155, 4, 206, 113, 239, 0, 45, 199, 1, 63, 50, 209, 58, 223, 148, 82, - 199, 1, 63, 50, 209, 58, 223, 148, 50, 199, 1, 63, 50, 209, 58, 223, 148, - 214, 106, 112, 208, 13, 77, 201, 75, 233, 12, 201, 75, 233, 13, 4, 250, - 247, 207, 146, 201, 75, 233, 13, 219, 231, 219, 224, 201, 75, 233, 13, - 219, 231, 183, 201, 75, 233, 13, 4, 235, 106, 63, 196, 76, 243, 100, 205, - 42, 17, 191, 77, 205, 42, 17, 107, 205, 42, 17, 109, 205, 42, 17, 138, - 205, 42, 17, 134, 205, 42, 17, 149, 205, 42, 17, 169, 205, 42, 17, 175, - 205, 42, 17, 171, 205, 42, 17, 178, 12, 15, 228, 13, 12, 15, 228, 12, 12, - 15, 228, 11, 12, 15, 228, 10, 12, 15, 228, 9, 12, 15, 228, 8, 12, 15, - 228, 7, 12, 15, 228, 6, 12, 15, 228, 5, 12, 15, 228, 4, 12, 15, 228, 3, - 12, 15, 228, 2, 12, 15, 228, 1, 12, 15, 228, 0, 12, 15, 227, 255, 12, 15, - 227, 254, 12, 15, 227, 253, 12, 15, 227, 252, 12, 15, 227, 251, 12, 15, - 227, 250, 12, 15, 227, 249, 12, 15, 227, 248, 12, 15, 227, 247, 12, 15, - 227, 246, 12, 15, 227, 245, 12, 15, 227, 244, 12, 15, 227, 243, 12, 15, - 227, 242, 12, 15, 227, 241, 12, 15, 227, 240, 12, 15, 227, 239, 12, 15, - 227, 238, 12, 15, 227, 237, 12, 15, 227, 236, 12, 15, 227, 235, 12, 15, - 227, 234, 12, 15, 227, 233, 12, 15, 227, 232, 12, 15, 227, 231, 12, 15, - 227, 230, 12, 15, 227, 229, 12, 15, 227, 228, 12, 15, 227, 227, 12, 15, - 227, 226, 12, 15, 227, 225, 12, 15, 227, 224, 12, 15, 227, 223, 12, 15, - 227, 222, 12, 15, 227, 221, 12, 15, 227, 220, 12, 15, 227, 219, 12, 15, - 227, 218, 12, 15, 227, 217, 12, 15, 227, 216, 12, 15, 227, 215, 12, 15, - 227, 214, 12, 15, 227, 213, 12, 15, 227, 212, 12, 15, 227, 211, 12, 15, - 227, 210, 12, 15, 227, 209, 12, 15, 227, 208, 12, 15, 227, 207, 12, 15, - 227, 206, 12, 15, 227, 205, 12, 15, 227, 204, 12, 15, 227, 203, 12, 15, - 227, 202, 12, 15, 227, 201, 12, 15, 227, 200, 12, 15, 227, 199, 12, 15, - 227, 198, 12, 15, 227, 197, 12, 15, 227, 196, 12, 15, 227, 195, 12, 15, - 227, 194, 12, 15, 227, 193, 12, 15, 227, 192, 12, 15, 227, 191, 12, 15, - 227, 190, 12, 15, 227, 189, 12, 15, 227, 188, 12, 15, 227, 187, 12, 15, - 227, 186, 12, 15, 227, 185, 12, 15, 227, 184, 12, 15, 227, 183, 12, 15, - 227, 182, 12, 15, 227, 181, 12, 15, 227, 180, 12, 15, 227, 179, 12, 15, - 227, 178, 12, 15, 227, 177, 12, 15, 227, 176, 12, 15, 227, 175, 12, 15, - 227, 174, 12, 15, 227, 173, 12, 15, 227, 172, 12, 15, 227, 171, 12, 15, - 227, 170, 12, 15, 227, 169, 12, 15, 227, 168, 12, 15, 227, 167, 12, 15, - 227, 166, 12, 15, 227, 165, 12, 15, 227, 164, 12, 15, 227, 163, 12, 15, - 227, 162, 12, 15, 227, 161, 12, 15, 227, 160, 12, 15, 227, 159, 12, 15, - 227, 158, 12, 15, 227, 157, 12, 15, 227, 156, 12, 15, 227, 155, 12, 15, - 227, 154, 12, 15, 227, 153, 12, 15, 227, 152, 12, 15, 227, 151, 12, 15, - 227, 150, 12, 15, 227, 149, 12, 15, 227, 148, 12, 15, 227, 147, 12, 15, - 227, 146, 12, 15, 227, 145, 12, 15, 227, 144, 12, 15, 227, 143, 12, 15, - 227, 142, 12, 15, 227, 141, 12, 15, 227, 140, 12, 15, 227, 139, 12, 15, - 227, 138, 12, 15, 227, 137, 12, 15, 227, 136, 12, 15, 227, 135, 12, 15, - 227, 134, 12, 15, 227, 133, 12, 15, 227, 132, 12, 15, 227, 131, 12, 15, - 227, 130, 12, 15, 227, 129, 12, 15, 227, 128, 12, 15, 227, 127, 12, 15, - 227, 126, 12, 15, 227, 125, 12, 15, 227, 124, 12, 15, 227, 123, 12, 15, - 227, 122, 12, 15, 227, 121, 12, 15, 227, 120, 12, 15, 227, 119, 12, 15, - 227, 118, 12, 15, 227, 117, 12, 15, 227, 116, 12, 15, 227, 115, 12, 15, - 227, 114, 12, 15, 227, 113, 12, 15, 227, 112, 12, 15, 227, 111, 12, 15, - 227, 110, 12, 15, 227, 109, 12, 15, 227, 108, 12, 15, 227, 107, 12, 15, - 227, 106, 12, 15, 227, 105, 12, 15, 227, 104, 12, 15, 227, 103, 12, 15, - 227, 102, 12, 15, 227, 101, 12, 15, 227, 100, 12, 15, 227, 99, 12, 15, - 227, 98, 12, 15, 227, 97, 12, 15, 227, 96, 12, 15, 227, 95, 12, 15, 227, - 94, 12, 15, 227, 93, 12, 15, 227, 92, 12, 15, 227, 91, 12, 15, 227, 90, - 12, 15, 227, 89, 12, 15, 227, 88, 12, 15, 227, 87, 12, 15, 227, 86, 12, - 15, 227, 85, 12, 15, 227, 84, 12, 15, 227, 83, 12, 15, 227, 82, 12, 15, - 227, 81, 12, 15, 227, 80, 12, 15, 227, 79, 12, 15, 227, 78, 12, 15, 227, - 77, 12, 15, 227, 76, 12, 15, 227, 75, 12, 15, 227, 74, 12, 15, 227, 73, - 12, 15, 227, 72, 12, 15, 227, 71, 12, 15, 227, 70, 12, 15, 227, 69, 12, - 15, 227, 68, 12, 15, 227, 67, 12, 15, 227, 66, 12, 15, 227, 65, 12, 15, - 227, 64, 12, 15, 227, 63, 12, 15, 227, 62, 12, 15, 227, 61, 12, 15, 227, - 60, 12, 15, 227, 59, 12, 15, 227, 58, 12, 15, 227, 57, 12, 15, 227, 56, - 12, 15, 227, 55, 12, 15, 227, 54, 12, 15, 227, 53, 12, 15, 227, 52, 12, - 15, 227, 51, 12, 15, 227, 50, 12, 15, 227, 49, 12, 15, 227, 48, 12, 15, - 227, 47, 12, 15, 227, 46, 12, 15, 227, 45, 12, 15, 227, 44, 12, 15, 227, - 43, 12, 15, 227, 42, 12, 15, 227, 41, 12, 15, 227, 40, 12, 15, 227, 39, - 12, 15, 227, 38, 12, 15, 227, 37, 12, 15, 227, 36, 12, 15, 227, 35, 12, - 15, 227, 34, 12, 15, 227, 33, 12, 15, 227, 32, 12, 15, 227, 31, 12, 15, - 227, 30, 12, 15, 227, 29, 12, 15, 227, 28, 12, 15, 227, 27, 12, 15, 227, - 26, 12, 15, 227, 25, 12, 15, 227, 24, 12, 15, 227, 23, 12, 15, 227, 22, - 12, 15, 227, 21, 12, 15, 227, 20, 12, 15, 227, 19, 12, 15, 227, 18, 12, - 15, 227, 17, 12, 15, 227, 16, 12, 15, 227, 15, 12, 15, 227, 14, 12, 15, - 227, 13, 12, 15, 227, 12, 12, 15, 227, 11, 12, 15, 227, 10, 12, 15, 227, - 9, 12, 15, 227, 8, 12, 15, 227, 7, 12, 15, 227, 6, 12, 15, 227, 5, 12, - 15, 227, 4, 12, 15, 227, 3, 12, 15, 227, 2, 12, 15, 227, 1, 12, 15, 227, - 0, 12, 15, 226, 255, 12, 15, 226, 254, 12, 15, 226, 253, 12, 15, 226, - 252, 12, 15, 226, 251, 12, 15, 226, 250, 12, 15, 226, 249, 12, 15, 226, - 248, 12, 15, 226, 247, 12, 15, 226, 246, 12, 15, 226, 245, 12, 15, 226, - 244, 12, 15, 226, 243, 12, 15, 226, 242, 12, 15, 226, 241, 12, 15, 226, - 240, 12, 15, 226, 239, 12, 15, 226, 238, 12, 15, 226, 237, 12, 15, 226, - 236, 12, 15, 226, 235, 12, 15, 226, 234, 12, 15, 226, 233, 12, 15, 226, - 232, 12, 15, 226, 231, 12, 15, 226, 230, 12, 15, 226, 229, 12, 15, 226, - 228, 12, 15, 226, 227, 12, 15, 226, 226, 12, 15, 226, 225, 12, 15, 226, - 224, 12, 15, 226, 223, 12, 15, 226, 222, 12, 15, 226, 221, 12, 15, 226, - 220, 12, 15, 226, 219, 12, 15, 226, 218, 12, 15, 226, 217, 12, 15, 226, - 216, 12, 15, 226, 215, 12, 15, 226, 214, 12, 15, 226, 213, 12, 15, 226, - 212, 12, 15, 226, 211, 12, 15, 226, 210, 12, 15, 226, 209, 12, 15, 226, - 208, 12, 15, 226, 207, 12, 15, 226, 206, 12, 15, 226, 205, 12, 15, 226, - 204, 12, 15, 226, 203, 12, 15, 226, 202, 12, 15, 226, 201, 12, 15, 226, - 200, 12, 15, 226, 199, 12, 15, 226, 198, 12, 15, 226, 197, 12, 15, 226, - 196, 12, 15, 226, 195, 12, 15, 226, 194, 12, 15, 226, 193, 12, 15, 226, - 192, 12, 15, 226, 191, 12, 15, 226, 190, 12, 15, 226, 189, 12, 15, 226, - 188, 12, 15, 226, 187, 12, 15, 226, 186, 12, 15, 226, 185, 12, 15, 226, - 184, 12, 15, 226, 183, 12, 15, 226, 182, 12, 15, 226, 181, 12, 15, 226, - 180, 12, 15, 226, 179, 12, 15, 226, 178, 12, 15, 226, 177, 12, 15, 226, - 176, 12, 15, 226, 175, 12, 15, 226, 174, 12, 15, 226, 173, 12, 15, 226, - 172, 12, 15, 226, 171, 12, 15, 226, 170, 12, 15, 226, 169, 12, 15, 226, - 168, 12, 15, 226, 167, 12, 15, 226, 166, 12, 15, 226, 165, 12, 15, 226, - 164, 12, 15, 226, 163, 12, 15, 226, 162, 12, 15, 226, 161, 12, 15, 226, - 160, 12, 15, 226, 159, 12, 15, 226, 158, 12, 15, 226, 157, 12, 15, 226, - 156, 12, 15, 226, 155, 12, 15, 226, 154, 12, 15, 226, 153, 12, 15, 226, - 152, 12, 15, 226, 151, 12, 15, 226, 150, 12, 15, 226, 149, 12, 15, 226, - 148, 12, 15, 226, 147, 12, 15, 226, 146, 12, 15, 226, 145, 12, 15, 226, - 144, 12, 15, 226, 143, 12, 15, 226, 142, 12, 15, 226, 141, 12, 15, 226, - 140, 12, 15, 226, 139, 12, 15, 226, 138, 12, 15, 226, 137, 12, 15, 226, - 136, 12, 15, 226, 135, 12, 15, 226, 134, 12, 15, 226, 133, 12, 15, 226, - 132, 12, 15, 226, 131, 12, 15, 226, 130, 12, 15, 226, 129, 12, 15, 226, - 128, 12, 15, 226, 127, 12, 15, 226, 126, 12, 15, 226, 125, 12, 15, 226, - 124, 12, 15, 226, 123, 12, 15, 226, 122, 12, 15, 226, 121, 12, 15, 226, - 120, 12, 15, 226, 119, 12, 15, 226, 118, 12, 15, 226, 117, 12, 15, 226, - 116, 12, 15, 226, 115, 12, 15, 226, 114, 12, 15, 226, 113, 12, 15, 226, - 112, 12, 15, 226, 111, 12, 15, 226, 110, 12, 15, 226, 109, 12, 15, 226, - 108, 12, 15, 226, 107, 12, 15, 226, 106, 12, 15, 226, 105, 12, 15, 226, - 104, 12, 15, 226, 103, 12, 15, 226, 102, 12, 15, 226, 101, 12, 15, 226, - 100, 12, 15, 226, 99, 12, 15, 226, 98, 12, 15, 226, 97, 12, 15, 226, 96, - 12, 15, 226, 95, 12, 15, 226, 94, 12, 15, 226, 93, 12, 15, 226, 92, 12, - 15, 226, 91, 12, 15, 226, 90, 12, 15, 226, 89, 12, 15, 226, 88, 12, 15, - 226, 87, 12, 15, 226, 86, 12, 15, 226, 85, 12, 15, 226, 84, 12, 15, 226, - 83, 12, 15, 226, 82, 12, 15, 226, 81, 12, 15, 226, 80, 12, 15, 226, 79, - 12, 15, 226, 78, 12, 15, 226, 77, 12, 15, 226, 76, 12, 15, 226, 75, 12, - 15, 226, 74, 12, 15, 226, 73, 12, 15, 226, 72, 12, 15, 226, 71, 12, 15, - 226, 70, 12, 15, 226, 69, 12, 15, 226, 68, 12, 15, 226, 67, 12, 15, 226, - 66, 12, 15, 226, 65, 12, 15, 226, 64, 12, 15, 226, 63, 12, 15, 226, 62, - 12, 15, 226, 61, 12, 15, 226, 60, 12, 15, 226, 59, 12, 15, 226, 58, 12, - 15, 226, 57, 12, 15, 226, 56, 12, 15, 226, 55, 12, 15, 226, 54, 12, 15, - 226, 53, 12, 15, 226, 52, 12, 15, 226, 51, 12, 15, 226, 50, 12, 15, 226, - 49, 12, 15, 226, 48, 12, 15, 226, 47, 12, 15, 226, 46, 12, 15, 226, 45, - 12, 15, 226, 44, 12, 15, 226, 43, 12, 15, 226, 42, 12, 15, 226, 41, 12, - 15, 226, 40, 12, 15, 226, 39, 12, 15, 226, 38, 12, 15, 226, 37, 12, 15, - 226, 36, 12, 15, 226, 35, 12, 15, 226, 34, 12, 15, 226, 33, 12, 15, 226, - 32, 12, 15, 226, 31, 12, 15, 226, 30, 12, 15, 226, 29, 12, 15, 226, 28, - 12, 15, 226, 27, 12, 15, 226, 26, 12, 15, 226, 25, 12, 15, 226, 24, 12, - 15, 226, 23, 12, 15, 226, 22, 12, 15, 226, 21, 12, 15, 226, 20, 12, 15, - 226, 19, 12, 15, 226, 18, 12, 15, 226, 17, 12, 15, 226, 16, 12, 15, 226, - 15, 12, 15, 226, 14, 12, 15, 226, 13, 12, 15, 226, 12, 12, 15, 226, 11, - 12, 15, 226, 10, 12, 15, 226, 9, 12, 15, 226, 8, 12, 15, 226, 7, 12, 15, - 226, 6, 12, 15, 226, 5, 12, 15, 226, 4, 12, 15, 226, 3, 12, 15, 226, 2, - 12, 15, 226, 1, 12, 15, 226, 0, 12, 15, 225, 255, 12, 15, 225, 254, 12, - 15, 225, 253, 12, 15, 225, 252, 12, 15, 225, 251, 12, 15, 225, 250, 12, - 15, 225, 249, 12, 15, 225, 248, 12, 15, 225, 247, 12, 15, 225, 246, 12, - 15, 225, 245, 12, 15, 225, 244, 12, 15, 225, 243, 12, 15, 225, 242, 12, - 15, 225, 241, 12, 15, 225, 240, 220, 20, 199, 223, 199, 224, 201, 247, - 199, 224, 233, 216, 77, 199, 224, 207, 252, 77, 199, 224, 31, 56, 199, - 224, 236, 155, 56, 199, 224, 210, 13, 56, 199, 224, 251, 137, 199, 224, - 251, 49, 199, 224, 45, 210, 113, 199, 224, 50, 210, 113, 199, 224, 250, - 193, 199, 224, 108, 56, 199, 224, 242, 74, 199, 224, 228, 87, 199, 224, - 232, 80, 201, 63, 199, 224, 202, 23, 199, 224, 17, 191, 77, 199, 224, 17, - 107, 199, 224, 17, 109, 199, 224, 17, 138, 199, 224, 17, 134, 199, 224, - 17, 149, 199, 224, 17, 169, 199, 224, 17, 175, 199, 224, 17, 171, 199, - 224, 17, 178, 199, 224, 242, 83, 199, 224, 204, 25, 199, 224, 219, 180, - 56, 199, 224, 234, 43, 56, 199, 224, 230, 204, 56, 199, 224, 208, 13, 77, - 199, 224, 242, 72, 250, 182, 199, 224, 8, 6, 1, 65, 199, 224, 8, 6, 1, - 250, 120, 199, 224, 8, 6, 1, 247, 193, 199, 224, 8, 6, 1, 238, 127, 199, - 224, 8, 6, 1, 71, 199, 224, 8, 6, 1, 233, 175, 199, 224, 8, 6, 1, 232, - 51, 199, 224, 8, 6, 1, 230, 116, 199, 224, 8, 6, 1, 68, 199, 224, 8, 6, - 1, 223, 35, 199, 224, 8, 6, 1, 222, 152, 199, 224, 8, 6, 1, 172, 199, - 224, 8, 6, 1, 218, 168, 199, 224, 8, 6, 1, 215, 61, 199, 224, 8, 6, 1, - 74, 199, 224, 8, 6, 1, 210, 236, 199, 224, 8, 6, 1, 208, 104, 199, 224, - 8, 6, 1, 146, 199, 224, 8, 6, 1, 206, 8, 199, 224, 8, 6, 1, 200, 43, 199, - 224, 8, 6, 1, 66, 199, 224, 8, 6, 1, 196, 12, 199, 224, 8, 6, 1, 193, - 224, 199, 224, 8, 6, 1, 192, 235, 199, 224, 8, 6, 1, 192, 159, 199, 224, - 8, 6, 1, 191, 166, 199, 224, 45, 51, 248, 53, 199, 224, 207, 19, 202, 23, - 199, 224, 50, 51, 248, 53, 199, 224, 243, 2, 252, 60, 199, 224, 130, 219, - 112, 199, 224, 230, 211, 252, 60, 199, 224, 8, 2, 1, 65, 199, 224, 8, 2, - 1, 250, 120, 199, 224, 8, 2, 1, 247, 193, 199, 224, 8, 2, 1, 238, 127, - 199, 224, 8, 2, 1, 71, 199, 224, 8, 2, 1, 233, 175, 199, 224, 8, 2, 1, - 232, 51, 199, 224, 8, 2, 1, 230, 116, 199, 224, 8, 2, 1, 68, 199, 224, 8, - 2, 1, 223, 35, 199, 224, 8, 2, 1, 222, 152, 199, 224, 8, 2, 1, 172, 199, - 224, 8, 2, 1, 218, 168, 199, 224, 8, 2, 1, 215, 61, 199, 224, 8, 2, 1, - 74, 199, 224, 8, 2, 1, 210, 236, 199, 224, 8, 2, 1, 208, 104, 199, 224, - 8, 2, 1, 146, 199, 224, 8, 2, 1, 206, 8, 199, 224, 8, 2, 1, 200, 43, 199, - 224, 8, 2, 1, 66, 199, 224, 8, 2, 1, 196, 12, 199, 224, 8, 2, 1, 193, - 224, 199, 224, 8, 2, 1, 192, 235, 199, 224, 8, 2, 1, 192, 159, 199, 224, - 8, 2, 1, 191, 166, 199, 224, 45, 238, 171, 248, 53, 199, 224, 81, 219, - 112, 199, 224, 50, 238, 171, 248, 53, 199, 224, 198, 152, 247, 127, 199, - 223, 67, 204, 211, 67, 204, 200, 67, 204, 189, 67, 204, 177, 67, 204, - 166, 67, 204, 155, 67, 204, 144, 67, 204, 133, 67, 204, 122, 67, 204, - 114, 67, 204, 113, 67, 204, 112, 67, 204, 111, 67, 204, 109, 67, 204, - 108, 67, 204, 107, 67, 204, 106, 67, 204, 105, 67, 204, 104, 67, 204, - 103, 67, 204, 102, 67, 204, 101, 67, 204, 100, 67, 204, 98, 67, 204, 97, - 67, 204, 96, 67, 204, 95, 67, 204, 94, 67, 204, 93, 67, 204, 92, 67, 204, - 91, 67, 204, 90, 67, 204, 89, 67, 204, 87, 67, 204, 86, 67, 204, 85, 67, - 204, 84, 67, 204, 83, 67, 204, 82, 67, 204, 81, 67, 204, 80, 67, 204, 79, - 67, 204, 78, 67, 204, 76, 67, 204, 75, 67, 204, 74, 67, 204, 73, 67, 204, - 72, 67, 204, 71, 67, 204, 70, 67, 204, 69, 67, 204, 68, 67, 204, 67, 67, - 204, 65, 67, 204, 64, 67, 204, 63, 67, 204, 62, 67, 204, 61, 67, 204, 60, - 67, 204, 59, 67, 204, 58, 67, 204, 57, 67, 204, 56, 67, 204, 54, 67, 204, - 53, 67, 204, 52, 67, 204, 51, 67, 204, 50, 67, 204, 49, 67, 204, 48, 67, - 204, 47, 67, 204, 46, 67, 204, 45, 67, 204, 43, 67, 204, 42, 67, 204, 41, - 67, 204, 40, 67, 204, 39, 67, 204, 38, 67, 204, 37, 67, 204, 36, 67, 204, - 35, 67, 204, 34, 67, 205, 31, 67, 205, 30, 67, 205, 29, 67, 205, 28, 67, - 205, 27, 67, 205, 26, 67, 205, 25, 67, 205, 24, 67, 205, 23, 67, 205, 22, - 67, 205, 20, 67, 205, 19, 67, 205, 18, 67, 205, 17, 67, 205, 16, 67, 205, - 15, 67, 205, 14, 67, 205, 13, 67, 205, 12, 67, 205, 11, 67, 205, 9, 67, - 205, 8, 67, 205, 7, 67, 205, 6, 67, 205, 5, 67, 205, 4, 67, 205, 3, 67, - 205, 2, 67, 205, 1, 67, 205, 0, 67, 204, 254, 67, 204, 253, 67, 204, 252, - 67, 204, 251, 67, 204, 250, 67, 204, 249, 67, 204, 248, 67, 204, 247, 67, - 204, 246, 67, 204, 245, 67, 204, 243, 67, 204, 242, 67, 204, 241, 67, - 204, 240, 67, 204, 239, 67, 204, 238, 67, 204, 237, 67, 204, 236, 67, - 204, 235, 67, 204, 234, 67, 204, 232, 67, 204, 231, 67, 204, 230, 67, - 204, 229, 67, 204, 228, 67, 204, 227, 67, 204, 226, 67, 204, 225, 67, - 204, 224, 67, 204, 223, 67, 204, 221, 67, 204, 220, 67, 204, 219, 67, - 204, 218, 67, 204, 217, 67, 204, 216, 67, 204, 215, 67, 204, 214, 67, - 204, 213, 67, 204, 212, 67, 204, 210, 67, 204, 209, 67, 204, 208, 67, - 204, 207, 67, 204, 206, 67, 204, 205, 67, 204, 204, 67, 204, 203, 67, - 204, 202, 67, 204, 201, 67, 204, 199, 67, 204, 198, 67, 204, 197, 67, - 204, 196, 67, 204, 195, 67, 204, 194, 67, 204, 193, 67, 204, 192, 67, - 204, 191, 67, 204, 190, 67, 204, 188, 67, 204, 187, 67, 204, 186, 67, - 204, 185, 67, 204, 184, 67, 204, 183, 67, 204, 182, 67, 204, 181, 67, - 204, 180, 67, 204, 179, 67, 204, 176, 67, 204, 175, 67, 204, 174, 67, - 204, 173, 67, 204, 172, 67, 204, 171, 67, 204, 170, 67, 204, 169, 67, - 204, 168, 67, 204, 167, 67, 204, 165, 67, 204, 164, 67, 204, 163, 67, - 204, 162, 67, 204, 161, 67, 204, 160, 67, 204, 159, 67, 204, 158, 67, - 204, 157, 67, 204, 156, 67, 204, 154, 67, 204, 153, 67, 204, 152, 67, - 204, 151, 67, 204, 150, 67, 204, 149, 67, 204, 148, 67, 204, 147, 67, - 204, 146, 67, 204, 145, 67, 204, 143, 67, 204, 142, 67, 204, 141, 67, - 204, 140, 67, 204, 139, 67, 204, 138, 67, 204, 137, 67, 204, 136, 67, - 204, 135, 67, 204, 134, 67, 204, 132, 67, 204, 131, 67, 204, 130, 67, - 204, 129, 67, 204, 128, 67, 204, 127, 67, 204, 126, 67, 204, 125, 67, - 204, 124, 67, 204, 123, 67, 204, 121, 67, 204, 120, 67, 204, 119, 67, - 204, 118, 67, 204, 117, 67, 204, 116, 67, 204, 115, 212, 138, 212, 140, - 201, 98, 79, 229, 232, 202, 27, 201, 98, 79, 199, 53, 201, 6, 234, 95, - 79, 199, 53, 233, 244, 234, 95, 79, 198, 11, 234, 57, 234, 81, 234, 82, - 252, 51, 252, 52, 251, 189, 248, 238, 249, 140, 248, 16, 246, 240, 199, - 230, 228, 241, 199, 230, 228, 165, 199, 236, 219, 113, 233, 50, 214, 80, - 219, 112, 234, 95, 79, 219, 112, 219, 161, 213, 105, 234, 60, 219, 113, - 199, 230, 81, 199, 230, 193, 251, 232, 146, 233, 50, 233, 27, 247, 88, - 207, 22, 238, 236, 203, 77, 211, 14, 219, 33, 107, 202, 46, 203, 77, 223, - 162, 219, 33, 191, 77, 202, 222, 237, 210, 219, 103, 234, 14, 236, 185, - 237, 75, 239, 22, 107, 237, 199, 237, 75, 239, 22, 109, 237, 198, 237, - 75, 239, 22, 138, 237, 197, 237, 75, 239, 22, 134, 237, 196, 214, 106, - 252, 51, 214, 233, 200, 69, 223, 228, 200, 73, 234, 95, 79, 198, 12, 248, - 129, 233, 252, 247, 126, 247, 128, 234, 95, 79, 216, 212, 234, 58, 234, - 114, 200, 226, 200, 245, 234, 14, 234, 15, 223, 137, 204, 11, 134, 233, - 7, 204, 10, 232, 90, 223, 137, 204, 11, 138, 230, 187, 204, 10, 230, 184, - 223, 137, 204, 11, 109, 207, 98, 204, 10, 206, 74, 223, 137, 204, 11, - 107, 196, 91, 204, 10, 196, 45, 201, 250, 237, 116, 237, 118, 210, 208, - 246, 239, 210, 210, 137, 211, 158, 208, 220, 228, 244, 248, 42, 210, 1, - 229, 192, 248, 58, 213, 44, 248, 42, 229, 192, 214, 191, 223, 148, 223, - 150, 214, 73, 219, 112, 214, 104, 201, 98, 79, 205, 36, 251, 8, 201, 175, - 234, 95, 79, 205, 36, 251, 8, 234, 17, 246, 240, 199, 231, 203, 252, 228, - 241, 199, 231, 203, 252, 228, 162, 246, 240, 199, 231, 4, 222, 164, 228, - 241, 199, 231, 4, 222, 164, 228, 163, 219, 113, 199, 231, 203, 252, 81, - 199, 231, 203, 252, 193, 250, 210, 105, 219, 113, 232, 132, 210, 105, - 219, 113, 235, 123, 209, 94, 210, 105, 219, 113, 249, 139, 210, 105, 219, - 113, 196, 77, 209, 88, 207, 19, 219, 113, 233, 50, 207, 19, 223, 148, - 207, 1, 202, 170, 203, 77, 109, 202, 167, 201, 177, 202, 170, 203, 77, - 138, 202, 166, 201, 176, 237, 75, 239, 22, 201, 30, 237, 194, 208, 205, - 196, 44, 107, 208, 205, 196, 42, 208, 164, 208, 205, 196, 44, 109, 208, - 205, 196, 41, 208, 163, 203, 253, 198, 10, 201, 95, 201, 13, 247, 127, - 246, 239, 247, 61, 216, 169, 193, 171, 215, 81, 201, 98, 79, 230, 172, - 251, 8, 201, 98, 79, 208, 182, 251, 8, 201, 249, 234, 95, 79, 230, 172, - 251, 8, 234, 95, 79, 208, 182, 251, 8, 234, 55, 201, 98, 79, 201, 30, - 202, 9, 202, 170, 230, 216, 246, 240, 223, 96, 203, 170, 202, 170, 246, - 240, 223, 96, 205, 85, 239, 22, 204, 7, 223, 96, 238, 196, 201, 31, 199, - 80, 201, 118, 211, 68, 200, 58, 242, 73, 211, 34, 208, 206, 216, 168, - 209, 76, 251, 45, 208, 198, 242, 73, 251, 62, 214, 179, 202, 231, 8, 6, - 1, 231, 91, 8, 2, 1, 231, 91, 247, 4, 9, 2, 137, 34, 131, 4, 99, 249, 80, - 251, 166, 200, 63, 200, 232, 242, 84, 202, 110, 219, 224, 222, 81, 1, - 219, 62, 220, 17, 1, 232, 176, 232, 166, 220, 17, 1, 232, 176, 233, 62, - 220, 17, 1, 206, 162, 220, 17, 1, 219, 43, 86, 87, 248, 141, 203, 50, - 231, 54, 216, 118, 207, 9, 30, 125, 192, 54, 30, 125, 192, 50, 30, 125, - 201, 153, 30, 125, 192, 55, 232, 66, 232, 65, 232, 64, 215, 83, 232, 63, - 200, 197, 1, 251, 14, 68, 190, 232, 190, 233, 190, 235, 218, 229, 206, - 170, 218, 231, 206, 172, 210, 66, 218, 228, 206, 169, 213, 75, 216, 16, - 193, 50, 218, 230, 206, 171, 232, 89, 210, 65, 193, 111, 234, 119, 232, - 76, 216, 92, 211, 105, 196, 46, 113, 216, 92, 237, 216, 113, 118, 197, - 240, 64, 4, 55, 81, 106, 96, 197, 240, 64, 4, 55, 81, 106, 11, 5, 223, - 51, 77, 80, 1, 221, 206, 219, 73, 194, 251, 194, 140, 194, 72, 194, 61, - 194, 50, 194, 39, 194, 28, 194, 17, 194, 6, 194, 250, 194, 239, 194, 228, - 194, 217, 194, 206, 194, 195, 194, 184, 208, 221, 232, 146, 40, 81, 50, - 63, 219, 187, 248, 53, 247, 198, 211, 51, 77, 248, 100, 190, 234, 10, 3, - 212, 148, 199, 84, 10, 3, 212, 148, 139, 212, 148, 247, 231, 139, 247, - 230, 216, 218, 6, 1, 230, 116, 216, 218, 6, 1, 214, 70, 216, 218, 2, 1, - 230, 116, 216, 218, 2, 1, 214, 70, 61, 1, 235, 14, 73, 37, 16, 232, 88, - 202, 106, 243, 52, 195, 164, 194, 173, 194, 162, 194, 151, 194, 139, 194, - 128, 194, 117, 194, 106, 194, 95, 194, 84, 194, 76, 194, 75, 194, 74, - 194, 73, 194, 71, 194, 70, 194, 69, 194, 68, 194, 67, 194, 66, 194, 65, - 194, 64, 194, 63, 194, 62, 194, 60, 194, 59, 194, 58, 194, 57, 194, 56, - 194, 55, 194, 54, 194, 53, 194, 52, 194, 51, 194, 49, 194, 48, 194, 47, - 194, 46, 194, 45, 194, 44, 194, 43, 194, 42, 194, 41, 194, 40, 194, 38, - 194, 37, 194, 36, 194, 35, 194, 34, 194, 33, 194, 32, 194, 31, 194, 30, - 194, 29, 194, 27, 194, 26, 194, 25, 194, 24, 194, 23, 194, 22, 194, 21, - 194, 20, 194, 19, 194, 18, 194, 16, 194, 15, 194, 14, 194, 13, 194, 12, - 194, 11, 194, 10, 194, 9, 194, 8, 194, 7, 194, 5, 194, 4, 194, 3, 194, 2, - 194, 1, 194, 0, 193, 255, 193, 254, 193, 253, 193, 252, 194, 249, 194, - 248, 194, 247, 194, 246, 194, 245, 194, 244, 194, 243, 194, 242, 194, - 241, 194, 240, 194, 238, 194, 237, 194, 236, 194, 235, 194, 234, 194, - 233, 194, 232, 194, 231, 194, 230, 194, 229, 194, 227, 194, 226, 194, - 225, 194, 224, 194, 223, 194, 222, 194, 221, 194, 220, 194, 219, 194, - 218, 194, 216, 194, 215, 194, 214, 194, 213, 194, 212, 194, 211, 194, - 210, 194, 209, 194, 208, 194, 207, 194, 205, 194, 204, 194, 203, 194, - 202, 194, 201, 194, 200, 194, 199, 194, 198, 194, 197, 194, 196, 194, - 194, 194, 193, 194, 192, 194, 191, 194, 190, 194, 189, 194, 188, 194, - 187, 194, 186, 194, 185, 194, 183, 194, 182, 194, 181, 194, 180, 194, - 179, 194, 178, 194, 177, 194, 176, 194, 175, 194, 174, 194, 172, 194, - 171, 194, 170, 194, 169, 194, 168, 194, 167, 194, 166, 194, 165, 194, - 164, 194, 163, 194, 161, 194, 160, 194, 159, 194, 158, 194, 157, 194, - 156, 194, 155, 194, 154, 194, 153, 194, 152, 194, 150, 194, 149, 194, - 148, 194, 147, 194, 146, 194, 145, 194, 144, 194, 143, 194, 142, 194, - 141, 194, 138, 194, 137, 194, 136, 194, 135, 194, 134, 194, 133, 194, - 132, 194, 131, 194, 130, 194, 129, 194, 127, 194, 126, 194, 125, 194, - 124, 194, 123, 194, 122, 194, 121, 194, 120, 194, 119, 194, 118, 194, - 116, 194, 115, 194, 114, 194, 113, 194, 112, 194, 111, 194, 110, 194, - 109, 194, 108, 194, 107, 194, 105, 194, 104, 194, 103, 194, 102, 194, - 101, 194, 100, 194, 99, 194, 98, 194, 97, 194, 96, 194, 94, 194, 93, 194, - 92, 194, 91, 194, 90, 194, 89, 194, 88, 194, 87, 194, 86, 194, 85, 194, - 83, 194, 82, 194, 81, 194, 80, 194, 79, 194, 78, 194, 77, 221, 219, 31, - 56, 221, 219, 250, 193, 221, 219, 17, 191, 77, 221, 219, 17, 107, 221, - 219, 17, 109, 221, 219, 17, 138, 221, 219, 17, 134, 221, 219, 17, 149, - 221, 219, 17, 169, 221, 219, 17, 175, 221, 219, 17, 171, 221, 219, 17, - 178, 8, 6, 1, 42, 4, 217, 147, 23, 230, 210, 8, 2, 1, 42, 4, 217, 147, - 23, 230, 210, 8, 6, 1, 228, 74, 4, 217, 147, 23, 230, 210, 8, 2, 1, 228, - 74, 4, 217, 147, 23, 230, 210, 8, 6, 1, 126, 4, 217, 147, 23, 230, 210, - 8, 2, 1, 126, 4, 217, 147, 23, 230, 210, 8, 6, 1, 235, 15, 4, 81, 219, - 113, 60, 8, 2, 1, 235, 15, 4, 81, 219, 113, 60, 8, 6, 1, 235, 15, 4, 81, - 219, 113, 248, 233, 23, 230, 210, 8, 2, 1, 235, 15, 4, 81, 219, 113, 248, - 233, 23, 230, 210, 8, 6, 1, 235, 15, 4, 81, 219, 113, 248, 233, 23, 252, - 46, 8, 2, 1, 235, 15, 4, 81, 219, 113, 248, 233, 23, 252, 46, 8, 6, 1, - 187, 4, 81, 219, 113, 60, 8, 2, 1, 187, 4, 81, 219, 113, 60, 8, 6, 1, - 187, 4, 81, 219, 113, 248, 233, 23, 230, 210, 8, 2, 1, 187, 4, 81, 219, - 113, 248, 233, 23, 230, 210, 8, 6, 1, 187, 4, 81, 219, 113, 248, 233, 23, - 252, 46, 8, 2, 1, 187, 4, 81, 219, 113, 248, 233, 23, 252, 46, 8, 6, 1, - 206, 9, 4, 81, 219, 113, 60, 8, 2, 1, 206, 9, 4, 81, 219, 113, 60, 8, 6, - 1, 235, 15, 4, 243, 2, 23, 217, 146, 8, 2, 1, 235, 15, 4, 243, 2, 23, - 217, 146, 8, 6, 1, 235, 15, 4, 243, 2, 23, 247, 92, 8, 2, 1, 235, 15, 4, - 243, 2, 23, 247, 92, 8, 2, 1, 228, 74, 4, 75, 93, 23, 252, 46, 8, 2, 1, - 214, 71, 4, 198, 153, 58, 8, 6, 1, 42, 4, 211, 139, 23, 252, 46, 8, 2, 1, - 42, 4, 211, 139, 23, 252, 46, 8, 6, 1, 42, 4, 211, 139, 23, 198, 152, 8, - 2, 1, 42, 4, 211, 139, 23, 198, 152, 8, 6, 1, 235, 15, 4, 211, 139, 23, - 252, 46, 8, 2, 1, 235, 15, 4, 211, 139, 23, 252, 46, 8, 6, 1, 235, 15, 4, - 211, 139, 23, 198, 152, 8, 2, 1, 235, 15, 4, 211, 139, 23, 198, 152, 8, - 6, 1, 235, 15, 4, 75, 93, 23, 252, 46, 8, 2, 1, 235, 15, 4, 75, 93, 23, - 252, 46, 8, 6, 1, 235, 15, 4, 75, 93, 23, 198, 152, 8, 2, 1, 235, 15, 4, - 75, 93, 23, 198, 152, 8, 2, 1, 228, 74, 4, 75, 93, 23, 230, 210, 8, 2, 1, - 228, 74, 4, 75, 93, 23, 198, 152, 8, 6, 1, 228, 74, 4, 211, 139, 23, 252, - 46, 8, 2, 1, 228, 74, 4, 211, 139, 23, 75, 93, 23, 252, 46, 8, 6, 1, 228, - 74, 4, 211, 139, 23, 198, 152, 8, 2, 1, 228, 74, 4, 211, 139, 23, 75, 93, - 23, 198, 152, 8, 6, 1, 223, 36, 4, 198, 152, 8, 2, 1, 223, 36, 4, 75, 93, - 23, 198, 152, 8, 6, 1, 220, 143, 4, 198, 152, 8, 2, 1, 220, 143, 4, 198, - 152, 8, 6, 1, 218, 169, 4, 198, 152, 8, 2, 1, 218, 169, 4, 198, 152, 8, - 6, 1, 207, 222, 4, 198, 152, 8, 2, 1, 207, 222, 4, 198, 152, 8, 6, 1, - 126, 4, 211, 139, 23, 252, 46, 8, 2, 1, 126, 4, 211, 139, 23, 252, 46, 8, - 6, 1, 126, 4, 211, 139, 23, 198, 152, 8, 2, 1, 126, 4, 211, 139, 23, 198, - 152, 8, 6, 1, 126, 4, 217, 147, 23, 252, 46, 8, 2, 1, 126, 4, 217, 147, - 23, 252, 46, 8, 6, 1, 126, 4, 217, 147, 23, 198, 152, 8, 2, 1, 126, 4, - 217, 147, 23, 198, 152, 8, 2, 1, 252, 26, 4, 230, 210, 8, 2, 1, 211, 77, - 187, 4, 230, 210, 8, 2, 1, 211, 77, 187, 4, 252, 46, 8, 2, 1, 153, 196, - 13, 4, 230, 210, 8, 2, 1, 153, 196, 13, 4, 252, 46, 8, 2, 1, 205, 87, 4, - 230, 210, 8, 2, 1, 205, 87, 4, 252, 46, 8, 2, 1, 228, 250, 205, 87, 4, - 230, 210, 8, 2, 1, 228, 250, 205, 87, 4, 252, 46, 9, 204, 7, 99, 4, 230, - 58, 93, 4, 251, 192, 9, 204, 7, 99, 4, 230, 58, 93, 4, 193, 133, 9, 204, - 7, 99, 4, 230, 58, 93, 4, 131, 217, 99, 9, 204, 7, 99, 4, 230, 58, 93, 4, - 211, 151, 9, 204, 7, 99, 4, 230, 58, 93, 4, 66, 9, 204, 7, 99, 4, 230, - 58, 93, 4, 191, 225, 9, 204, 7, 99, 4, 230, 58, 93, 4, 71, 9, 204, 7, 99, - 4, 230, 58, 93, 4, 252, 25, 9, 204, 7, 213, 25, 4, 222, 4, 100, 204, 7, - 40, 1, 208, 96, 100, 204, 7, 40, 1, 221, 193, 100, 204, 7, 40, 1, 231, - 66, 100, 204, 7, 40, 1, 191, 123, 100, 204, 7, 40, 1, 237, 180, 100, 204, - 7, 40, 1, 207, 6, 100, 204, 7, 40, 1, 233, 109, 100, 204, 7, 40, 1, 191, - 175, 248, 225, 204, 7, 40, 1, 206, 109, 248, 225, 204, 7, 40, 1, 207, 6, - 248, 225, 204, 7, 40, 1, 191, 175, 230, 144, 204, 7, 40, 1, 219, 73, 230, - 144, 204, 7, 40, 1, 203, 165, 230, 144, 204, 7, 40, 1, 221, 193, 230, - 144, 204, 7, 40, 1, 231, 66, 230, 144, 204, 7, 40, 1, 191, 123, 230, 144, - 204, 7, 40, 1, 233, 109, 211, 45, 204, 7, 40, 1, 206, 109, 211, 45, 204, - 7, 40, 1, 207, 6, 248, 225, 1, 221, 187, 44, 120, 222, 152, 44, 120, 214, - 70, 44, 120, 247, 193, 44, 120, 212, 103, 44, 120, 197, 135, 44, 120, - 213, 80, 44, 120, 200, 43, 44, 120, 215, 61, 44, 120, 210, 236, 44, 120, - 218, 168, 44, 120, 192, 159, 44, 120, 146, 44, 120, 172, 44, 120, 196, - 12, 44, 120, 219, 63, 44, 120, 219, 74, 44, 120, 206, 110, 44, 120, 213, - 62, 44, 120, 223, 35, 44, 120, 203, 167, 44, 120, 201, 178, 44, 120, 206, - 8, 44, 120, 230, 116, 44, 120, 220, 247, 44, 5, 222, 127, 44, 5, 221, - 166, 44, 5, 221, 145, 44, 5, 220, 232, 44, 5, 220, 187, 44, 5, 222, 22, - 44, 5, 222, 13, 44, 5, 222, 102, 44, 5, 221, 67, 44, 5, 221, 41, 44, 5, - 222, 42, 44, 5, 214, 67, 44, 5, 214, 16, 44, 5, 214, 12, 44, 5, 213, 237, - 44, 5, 213, 228, 44, 5, 214, 55, 44, 5, 214, 53, 44, 5, 214, 64, 44, 5, - 213, 249, 44, 5, 213, 244, 44, 5, 214, 57, 44, 5, 247, 159, 44, 5, 243, - 29, 44, 5, 243, 19, 44, 5, 238, 195, 44, 5, 238, 153, 44, 5, 247, 42, 44, - 5, 247, 34, 44, 5, 247, 148, 44, 5, 242, 99, 44, 5, 239, 18, 44, 5, 247, - 76, 44, 5, 212, 100, 44, 5, 212, 81, 44, 5, 212, 75, 44, 5, 212, 58, 44, - 5, 212, 50, 44, 5, 212, 90, 44, 5, 212, 89, 44, 5, 212, 97, 44, 5, 212, - 65, 44, 5, 212, 62, 44, 5, 212, 93, 44, 5, 197, 131, 44, 5, 197, 111, 44, - 5, 197, 110, 44, 5, 197, 99, 44, 5, 197, 96, 44, 5, 197, 127, 44, 5, 197, - 126, 44, 5, 197, 130, 44, 5, 197, 109, 44, 5, 197, 108, 44, 5, 197, 129, - 44, 5, 213, 78, 44, 5, 213, 64, 44, 5, 213, 63, 44, 5, 213, 47, 44, 5, - 213, 46, 44, 5, 213, 74, 44, 5, 213, 73, 44, 5, 213, 77, 44, 5, 213, 49, - 44, 5, 213, 48, 44, 5, 213, 76, 44, 5, 199, 245, 44, 5, 198, 193, 44, 5, - 198, 170, 44, 5, 197, 94, 44, 5, 197, 49, 44, 5, 199, 145, 44, 5, 199, - 121, 44, 5, 199, 217, 44, 5, 159, 44, 5, 198, 59, 44, 5, 199, 166, 44, 5, - 214, 250, 44, 5, 213, 219, 44, 5, 213, 186, 44, 5, 212, 178, 44, 5, 212, - 115, 44, 5, 214, 121, 44, 5, 214, 110, 44, 5, 214, 236, 44, 5, 213, 43, - 44, 5, 213, 26, 44, 5, 214, 205, 44, 5, 210, 220, 44, 5, 209, 185, 44, 5, - 209, 145, 44, 5, 208, 165, 44, 5, 208, 128, 44, 5, 210, 63, 44, 5, 210, - 49, 44, 5, 210, 198, 44, 5, 209, 73, 44, 5, 209, 37, 44, 5, 210, 80, 44, - 5, 217, 151, 44, 5, 216, 100, 44, 5, 216, 61, 44, 5, 215, 155, 44, 5, - 215, 93, 44, 5, 216, 232, 44, 5, 216, 211, 44, 5, 217, 112, 44, 5, 216, - 12, 44, 5, 215, 211, 44, 5, 217, 25, 44, 5, 192, 140, 44, 5, 192, 33, 44, - 5, 192, 23, 44, 5, 191, 225, 44, 5, 191, 188, 44, 5, 192, 80, 44, 5, 192, - 77, 44, 5, 192, 119, 44, 5, 192, 12, 44, 5, 191, 246, 44, 5, 192, 91, 44, - 5, 207, 178, 44, 5, 207, 1, 44, 5, 206, 195, 44, 5, 206, 68, 44, 5, 206, - 29, 44, 5, 207, 113, 44, 5, 207, 84, 44, 5, 207, 156, 44, 5, 206, 162, - 44, 5, 206, 134, 44, 5, 207, 125, 44, 5, 220, 125, 44, 5, 219, 146, 44, - 5, 219, 128, 44, 5, 218, 225, 44, 5, 218, 194, 44, 5, 219, 238, 44, 5, - 219, 228, 44, 5, 220, 96, 44, 5, 219, 43, 44, 5, 219, 8, 44, 5, 220, 0, - 44, 5, 195, 187, 44, 5, 195, 69, 44, 5, 195, 51, 44, 5, 193, 249, 44, 5, - 193, 241, 44, 5, 195, 153, 44, 5, 195, 148, 44, 5, 195, 183, 44, 5, 195, - 24, 44, 5, 195, 8, 44, 5, 195, 160, 44, 5, 219, 61, 44, 5, 219, 56, 44, - 5, 219, 55, 44, 5, 219, 52, 44, 5, 219, 51, 44, 5, 219, 58, 44, 5, 219, - 57, 44, 5, 219, 60, 44, 5, 219, 54, 44, 5, 219, 53, 44, 5, 219, 59, 44, - 5, 219, 72, 44, 5, 219, 65, 44, 5, 219, 64, 44, 5, 219, 48, 44, 5, 219, - 47, 44, 5, 219, 68, 44, 5, 219, 67, 44, 5, 219, 71, 44, 5, 219, 50, 44, - 5, 219, 49, 44, 5, 219, 69, 44, 5, 206, 108, 44, 5, 206, 97, 44, 5, 206, - 96, 44, 5, 206, 89, 44, 5, 206, 82, 44, 5, 206, 104, 44, 5, 206, 103, 44, - 5, 206, 107, 44, 5, 206, 95, 44, 5, 206, 94, 44, 5, 206, 106, 44, 5, 213, - 60, 44, 5, 213, 55, 44, 5, 213, 54, 44, 5, 213, 51, 44, 5, 213, 50, 44, - 5, 213, 57, 44, 5, 213, 56, 44, 5, 213, 59, 44, 5, 213, 53, 44, 5, 213, - 52, 44, 5, 213, 58, 44, 5, 223, 31, 44, 5, 222, 244, 44, 5, 222, 236, 44, - 5, 222, 182, 44, 5, 222, 162, 44, 5, 223, 10, 44, 5, 223, 8, 44, 5, 223, - 25, 44, 5, 222, 201, 44, 5, 222, 191, 44, 5, 223, 17, 44, 5, 203, 160, - 44, 5, 203, 81, 44, 5, 203, 76, 44, 5, 203, 5, 44, 5, 202, 243, 44, 5, - 203, 113, 44, 5, 203, 111, 44, 5, 203, 148, 44, 5, 203, 56, 44, 5, 203, - 48, 44, 5, 203, 122, 44, 5, 201, 174, 44, 5, 201, 142, 44, 5, 201, 138, - 44, 5, 201, 129, 44, 5, 201, 126, 44, 5, 201, 148, 44, 5, 201, 147, 44, - 5, 201, 173, 44, 5, 201, 134, 44, 5, 201, 133, 44, 5, 201, 150, 44, 5, - 205, 197, 44, 5, 202, 222, 44, 5, 202, 193, 44, 5, 201, 4, 44, 5, 200, - 160, 44, 5, 205, 68, 44, 5, 205, 50, 44, 5, 205, 181, 44, 5, 202, 46, 44, - 5, 202, 16, 44, 5, 205, 114, 44, 5, 230, 91, 44, 5, 229, 158, 44, 5, 229, - 130, 44, 5, 228, 159, 44, 5, 228, 128, 44, 5, 229, 245, 44, 5, 229, 215, - 44, 5, 230, 80, 44, 5, 229, 23, 44, 5, 228, 252, 44, 5, 230, 2, 44, 5, - 220, 246, 44, 5, 220, 245, 44, 5, 220, 240, 44, 5, 220, 239, 44, 5, 220, - 236, 44, 5, 220, 235, 44, 5, 220, 242, 44, 5, 220, 241, 44, 5, 220, 244, - 44, 5, 220, 238, 44, 5, 220, 237, 44, 5, 220, 243, 44, 5, 203, 14, 166, - 120, 3, 192, 105, 166, 120, 3, 207, 144, 166, 120, 3, 207, 50, 101, 1, - 196, 224, 95, 120, 3, 242, 91, 155, 95, 120, 3, 242, 91, 221, 215, 95, - 120, 3, 242, 91, 221, 67, 95, 120, 3, 242, 91, 221, 183, 95, 120, 3, 242, - 91, 213, 249, 95, 120, 3, 242, 91, 247, 160, 95, 120, 3, 242, 91, 247, 1, - 95, 120, 3, 242, 91, 242, 99, 95, 120, 3, 242, 91, 243, 68, 95, 120, 3, - 242, 91, 212, 65, 95, 120, 3, 242, 91, 238, 32, 95, 120, 3, 242, 91, 197, - 120, 95, 120, 3, 242, 91, 236, 174, 95, 120, 3, 242, 91, 197, 115, 95, - 120, 3, 242, 91, 180, 95, 120, 3, 242, 91, 190, 190, 95, 120, 3, 242, 91, - 199, 49, 95, 120, 3, 242, 91, 159, 95, 120, 3, 242, 91, 198, 241, 95, - 120, 3, 242, 91, 213, 43, 95, 120, 3, 242, 91, 249, 153, 95, 120, 3, 242, - 91, 209, 228, 95, 120, 3, 242, 91, 209, 73, 95, 120, 3, 242, 91, 209, - 199, 95, 120, 3, 242, 91, 216, 12, 95, 120, 3, 242, 91, 192, 12, 95, 120, - 3, 242, 91, 206, 162, 95, 120, 3, 242, 91, 219, 43, 95, 120, 3, 242, 91, - 195, 24, 95, 120, 3, 242, 91, 203, 165, 95, 120, 3, 242, 91, 201, 175, - 95, 120, 3, 242, 91, 188, 95, 120, 3, 242, 91, 140, 95, 120, 3, 242, 91, - 173, 95, 18, 3, 242, 91, 208, 96, 95, 223, 149, 18, 3, 242, 91, 208, 33, - 95, 223, 149, 18, 3, 242, 91, 206, 17, 95, 223, 149, 18, 3, 242, 91, 206, - 10, 95, 223, 149, 18, 3, 242, 91, 208, 75, 95, 18, 3, 211, 113, 95, 18, - 3, 252, 167, 229, 120, 1, 248, 181, 214, 68, 229, 120, 1, 248, 181, 214, - 16, 229, 120, 1, 248, 181, 213, 237, 229, 120, 1, 248, 181, 214, 55, 229, - 120, 1, 248, 181, 213, 249, 72, 1, 248, 181, 214, 68, 72, 1, 248, 181, - 214, 16, 72, 1, 248, 181, 213, 237, 72, 1, 248, 181, 214, 55, 72, 1, 248, - 181, 213, 249, 72, 1, 251, 228, 247, 42, 72, 1, 251, 228, 197, 94, 72, 1, - 251, 228, 159, 72, 1, 251, 228, 210, 236, 52, 1, 233, 200, 233, 199, 239, - 26, 163, 164, 52, 1, 233, 199, 233, 200, 239, 26, 163, 164, + 184, 203, 226, 184, 203, 189, 184, 203, 218, 184, 203, 203, 110, 45, 184, + 237, 41, 110, 82, 45, 119, 110, 247, 23, 110, 45, 184, 237, 41, 110, 82, + 45, 119, 110, 179, 110, 45, 184, 237, 41, 116, 82, 45, 119, 110, 247, 23, + 110, 45, 184, 237, 41, 116, 82, 45, 119, 110, 179, 110, 45, 184, 237, 41, + 116, 45, 119, 110, 247, 23, 110, 50, 184, 237, 41, 116, 82, 45, 119, 116, + 247, 23, 110, 50, 184, 237, 41, 116, 82, 45, 119, 116, 179, 110, 50, 184, + 237, 41, 110, 82, 45, 119, 116, 247, 23, 110, 50, 184, 237, 41, 110, 82, + 45, 119, 116, 179, 110, 50, 184, 237, 41, 110, 45, 119, 116, 247, 23, + 110, 50, 184, 237, 41, 110, 82, 45, 119, 116, 82, 179, 110, 50, 184, 237, + 41, 110, 247, 24, 119, 110, 82, 179, 110, 50, 184, 237, 41, 110, 45, 119, + 110, 82, 179, 110, 50, 184, 237, 41, 110, 247, 24, 119, 116, 82, 179, + 110, 50, 184, 237, 41, 110, 45, 119, 116, 82, 179, 110, 50, 184, 237, 41, + 110, 247, 24, 119, 116, 179, 110, 45, 184, 237, 41, 116, 247, 24, 119, + 116, 82, 179, 110, 45, 184, 237, 41, 116, 45, 119, 116, 82, 179, 110, 45, + 184, 237, 41, 116, 247, 24, 119, 110, 82, 179, 110, 45, 184, 237, 41, + 116, 45, 119, 110, 82, 179, 110, 45, 184, 237, 41, 116, 247, 24, 119, + 110, 179, 110, 45, 184, 237, 41, 116, 82, 45, 119, 110, 82, 179, 116, 50, + 184, 237, 41, 110, 82, 45, 119, 110, 247, 23, 116, 50, 184, 237, 41, 110, + 82, 45, 119, 110, 179, 116, 50, 184, 237, 41, 116, 82, 45, 119, 110, 247, + 23, 116, 50, 184, 237, 41, 116, 82, 45, 119, 110, 179, 116, 50, 184, 237, + 41, 116, 45, 119, 110, 247, 23, 116, 45, 184, 237, 41, 116, 82, 45, 119, + 116, 247, 23, 116, 45, 184, 237, 41, 116, 82, 45, 119, 116, 179, 116, 45, + 184, 237, 41, 110, 82, 45, 119, 116, 247, 23, 116, 45, 184, 237, 41, 110, + 82, 45, 119, 116, 179, 116, 45, 184, 237, 41, 110, 45, 119, 116, 247, 23, + 116, 45, 184, 237, 41, 110, 82, 45, 119, 116, 82, 179, 116, 45, 184, 237, + 41, 110, 247, 24, 119, 110, 82, 179, 116, 45, 184, 237, 41, 110, 45, 119, + 110, 82, 179, 116, 45, 184, 237, 41, 110, 247, 24, 119, 116, 82, 179, + 116, 45, 184, 237, 41, 110, 45, 119, 116, 82, 179, 116, 45, 184, 237, 41, + 110, 247, 24, 119, 116, 179, 116, 50, 184, 237, 41, 116, 247, 24, 119, + 116, 82, 179, 116, 50, 184, 237, 41, 116, 45, 119, 116, 82, 179, 116, 50, + 184, 237, 41, 116, 247, 24, 119, 110, 82, 179, 116, 50, 184, 237, 41, + 116, 45, 119, 110, 82, 179, 116, 50, 184, 237, 41, 116, 247, 24, 119, + 110, 179, 116, 50, 184, 237, 41, 116, 82, 45, 119, 110, 82, 179, 116, 23, + 50, 23, 110, 197, 238, 115, 208, 23, 248, 131, 45, 23, 110, 23, 50, 197, + 238, 115, 208, 23, 248, 131, 116, 23, 45, 23, 110, 197, 238, 115, 208, + 23, 248, 131, 45, 23, 116, 23, 50, 197, 238, 115, 208, 23, 248, 131, 45, + 197, 238, 91, 208, 25, 248, 131, 116, 197, 238, 91, 208, 25, 248, 131, + 50, 197, 238, 91, 208, 25, 248, 131, 110, 197, 238, 91, 208, 25, 248, + 131, 81, 91, 234, 162, 248, 129, 81, 91, 234, 162, 248, 128, 81, 91, 234, + 162, 248, 127, 81, 91, 234, 162, 248, 126, 81, 91, 234, 162, 248, 125, + 81, 91, 234, 162, 248, 124, 228, 243, 91, 234, 162, 248, 129, 228, 243, + 91, 234, 162, 248, 128, 228, 243, 91, 234, 162, 248, 127, 228, 243, 91, + 234, 162, 248, 126, 228, 243, 91, 234, 162, 248, 125, 228, 243, 91, 234, + 162, 248, 124, 45, 23, 110, 91, 234, 162, 248, 131, 45, 23, 116, 91, 234, + 162, 248, 131, 50, 23, 116, 91, 234, 162, 248, 131, 50, 23, 110, 91, 234, + 162, 248, 131, 116, 23, 110, 91, 234, 162, 248, 131, 228, 243, 91, 234, + 162, 248, 130, 116, 91, 208, 25, 248, 131, 116, 115, 234, 160, 248, 131, + 116, 232, 228, 234, 160, 248, 131, 116, 115, 208, 23, 248, 131, 116, 203, + 248, 234, 160, 248, 131, 50, 91, 208, 25, 248, 131, 50, 115, 234, 160, + 248, 131, 50, 232, 228, 234, 160, 248, 131, 50, 115, 208, 23, 248, 131, + 50, 203, 248, 234, 160, 248, 131, 45, 132, 216, 215, 203, 154, 50, 132, + 216, 215, 203, 154, 116, 132, 216, 215, 203, 154, 110, 132, 216, 215, + 203, 154, 223, 97, 216, 215, 203, 154, 116, 132, 184, 23, 110, 132, 223, + 97, 216, 215, 203, 154, 116, 132, 223, 97, 216, 215, 203, 155, 23, 110, + 132, 248, 131, 45, 132, 223, 97, 216, 215, 203, 155, 23, 50, 132, 248, + 131, 243, 126, 248, 110, 233, 7, 223, 97, 243, 126, 248, 110, 233, 7, 88, + 228, 243, 233, 7, 116, 45, 119, 110, 50, 233, 7, 116, 50, 119, 110, 45, + 233, 7, 116, 23, 110, 197, 238, 132, 248, 131, 45, 23, 50, 197, 238, 132, + 248, 131, 116, 45, 197, 238, 216, 215, 203, 154, 116, 50, 197, 238, 216, + 215, 203, 154, 110, 50, 197, 238, 216, 215, 203, 154, 110, 45, 197, 238, + 216, 215, 203, 154, 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 219, + 226, 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 179, 111, 122, 156, + 237, 41, 82, 45, 119, 110, 247, 23, 111, 122, 156, 237, 41, 82, 50, 119, + 110, 247, 23, 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 45, 119, + 110, 247, 23, 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 50, 119, + 110, 247, 23, 111, 122, 156, 237, 41, 82, 45, 119, 110, 247, 24, 119, 82, + 179, 111, 122, 156, 237, 41, 82, 45, 119, 116, 247, 24, 119, 82, 179, + 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 45, 23, 82, 50, 119, 110, + 247, 23, 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 50, 23, 82, 45, + 119, 110, 247, 23, 111, 122, 156, 237, 41, 116, 247, 24, 119, 82, 50, + 119, 110, 247, 24, 119, 82, 219, 226, 111, 122, 156, 237, 41, 116, 247, + 24, 119, 82, 45, 119, 110, 247, 24, 119, 82, 179, 111, 122, 156, 237, 41, + 82, 45, 119, 116, 247, 24, 119, 82, 50, 119, 110, 247, 23, 111, 122, 156, + 237, 41, 82, 50, 119, 116, 247, 24, 119, 82, 45, 119, 110, 247, 23, 111, + 122, 156, 237, 41, 237, 34, 111, 122, 156, 228, 243, 4, 81, 106, 250, + 236, 209, 61, 223, 97, 243, 128, 77, 45, 132, 206, 43, 217, 92, 50, 132, + 206, 43, 217, 92, 223, 97, 235, 121, 64, 4, 198, 136, 219, 216, 118, 64, + 23, 116, 23, 110, 91, 234, 162, 248, 131, 96, 64, 23, 116, 23, 110, 91, + 234, 162, 248, 131, 235, 121, 64, 23, 50, 91, 234, 162, 248, 131, 196, + 66, 64, 23, 50, 91, 234, 162, 248, 131, 45, 132, 232, 173, 50, 132, 232, + 173, 195, 16, 35, 238, 219, 50, 211, 79, 112, 236, 142, 214, 108, 237, + 41, 238, 219, 214, 108, 237, 41, 82, 50, 119, 110, 247, 23, 214, 108, + 237, 41, 237, 34, 63, 88, 205, 156, 4, 206, 114, 239, 2, 45, 199, 1, 63, + 50, 209, 60, 223, 150, 82, 199, 1, 63, 50, 209, 60, 223, 150, 50, 199, 1, + 63, 50, 209, 60, 223, 150, 214, 108, 112, 208, 15, 77, 201, 76, 233, 14, + 201, 76, 233, 15, 4, 250, 249, 207, 148, 201, 76, 233, 15, 219, 233, 219, + 226, 201, 76, 233, 15, 219, 233, 179, 201, 76, 233, 15, 4, 235, 108, 63, + 196, 76, 243, 102, 205, 43, 17, 191, 77, 205, 43, 17, 107, 205, 43, 17, + 109, 205, 43, 17, 138, 205, 43, 17, 134, 205, 43, 17, 150, 205, 43, 17, + 169, 205, 43, 17, 175, 205, 43, 17, 171, 205, 43, 17, 178, 12, 15, 228, + 15, 12, 15, 228, 14, 12, 15, 228, 13, 12, 15, 228, 12, 12, 15, 228, 11, + 12, 15, 228, 10, 12, 15, 228, 9, 12, 15, 228, 8, 12, 15, 228, 7, 12, 15, + 228, 6, 12, 15, 228, 5, 12, 15, 228, 4, 12, 15, 228, 3, 12, 15, 228, 2, + 12, 15, 228, 1, 12, 15, 228, 0, 12, 15, 227, 255, 12, 15, 227, 254, 12, + 15, 227, 253, 12, 15, 227, 252, 12, 15, 227, 251, 12, 15, 227, 250, 12, + 15, 227, 249, 12, 15, 227, 248, 12, 15, 227, 247, 12, 15, 227, 246, 12, + 15, 227, 245, 12, 15, 227, 244, 12, 15, 227, 243, 12, 15, 227, 242, 12, + 15, 227, 241, 12, 15, 227, 240, 12, 15, 227, 239, 12, 15, 227, 238, 12, + 15, 227, 237, 12, 15, 227, 236, 12, 15, 227, 235, 12, 15, 227, 234, 12, + 15, 227, 233, 12, 15, 227, 232, 12, 15, 227, 231, 12, 15, 227, 230, 12, + 15, 227, 229, 12, 15, 227, 228, 12, 15, 227, 227, 12, 15, 227, 226, 12, + 15, 227, 225, 12, 15, 227, 224, 12, 15, 227, 223, 12, 15, 227, 222, 12, + 15, 227, 221, 12, 15, 227, 220, 12, 15, 227, 219, 12, 15, 227, 218, 12, + 15, 227, 217, 12, 15, 227, 216, 12, 15, 227, 215, 12, 15, 227, 214, 12, + 15, 227, 213, 12, 15, 227, 212, 12, 15, 227, 211, 12, 15, 227, 210, 12, + 15, 227, 209, 12, 15, 227, 208, 12, 15, 227, 207, 12, 15, 227, 206, 12, + 15, 227, 205, 12, 15, 227, 204, 12, 15, 227, 203, 12, 15, 227, 202, 12, + 15, 227, 201, 12, 15, 227, 200, 12, 15, 227, 199, 12, 15, 227, 198, 12, + 15, 227, 197, 12, 15, 227, 196, 12, 15, 227, 195, 12, 15, 227, 194, 12, + 15, 227, 193, 12, 15, 227, 192, 12, 15, 227, 191, 12, 15, 227, 190, 12, + 15, 227, 189, 12, 15, 227, 188, 12, 15, 227, 187, 12, 15, 227, 186, 12, + 15, 227, 185, 12, 15, 227, 184, 12, 15, 227, 183, 12, 15, 227, 182, 12, + 15, 227, 181, 12, 15, 227, 180, 12, 15, 227, 179, 12, 15, 227, 178, 12, + 15, 227, 177, 12, 15, 227, 176, 12, 15, 227, 175, 12, 15, 227, 174, 12, + 15, 227, 173, 12, 15, 227, 172, 12, 15, 227, 171, 12, 15, 227, 170, 12, + 15, 227, 169, 12, 15, 227, 168, 12, 15, 227, 167, 12, 15, 227, 166, 12, + 15, 227, 165, 12, 15, 227, 164, 12, 15, 227, 163, 12, 15, 227, 162, 12, + 15, 227, 161, 12, 15, 227, 160, 12, 15, 227, 159, 12, 15, 227, 158, 12, + 15, 227, 157, 12, 15, 227, 156, 12, 15, 227, 155, 12, 15, 227, 154, 12, + 15, 227, 153, 12, 15, 227, 152, 12, 15, 227, 151, 12, 15, 227, 150, 12, + 15, 227, 149, 12, 15, 227, 148, 12, 15, 227, 147, 12, 15, 227, 146, 12, + 15, 227, 145, 12, 15, 227, 144, 12, 15, 227, 143, 12, 15, 227, 142, 12, + 15, 227, 141, 12, 15, 227, 140, 12, 15, 227, 139, 12, 15, 227, 138, 12, + 15, 227, 137, 12, 15, 227, 136, 12, 15, 227, 135, 12, 15, 227, 134, 12, + 15, 227, 133, 12, 15, 227, 132, 12, 15, 227, 131, 12, 15, 227, 130, 12, + 15, 227, 129, 12, 15, 227, 128, 12, 15, 227, 127, 12, 15, 227, 126, 12, + 15, 227, 125, 12, 15, 227, 124, 12, 15, 227, 123, 12, 15, 227, 122, 12, + 15, 227, 121, 12, 15, 227, 120, 12, 15, 227, 119, 12, 15, 227, 118, 12, + 15, 227, 117, 12, 15, 227, 116, 12, 15, 227, 115, 12, 15, 227, 114, 12, + 15, 227, 113, 12, 15, 227, 112, 12, 15, 227, 111, 12, 15, 227, 110, 12, + 15, 227, 109, 12, 15, 227, 108, 12, 15, 227, 107, 12, 15, 227, 106, 12, + 15, 227, 105, 12, 15, 227, 104, 12, 15, 227, 103, 12, 15, 227, 102, 12, + 15, 227, 101, 12, 15, 227, 100, 12, 15, 227, 99, 12, 15, 227, 98, 12, 15, + 227, 97, 12, 15, 227, 96, 12, 15, 227, 95, 12, 15, 227, 94, 12, 15, 227, + 93, 12, 15, 227, 92, 12, 15, 227, 91, 12, 15, 227, 90, 12, 15, 227, 89, + 12, 15, 227, 88, 12, 15, 227, 87, 12, 15, 227, 86, 12, 15, 227, 85, 12, + 15, 227, 84, 12, 15, 227, 83, 12, 15, 227, 82, 12, 15, 227, 81, 12, 15, + 227, 80, 12, 15, 227, 79, 12, 15, 227, 78, 12, 15, 227, 77, 12, 15, 227, + 76, 12, 15, 227, 75, 12, 15, 227, 74, 12, 15, 227, 73, 12, 15, 227, 72, + 12, 15, 227, 71, 12, 15, 227, 70, 12, 15, 227, 69, 12, 15, 227, 68, 12, + 15, 227, 67, 12, 15, 227, 66, 12, 15, 227, 65, 12, 15, 227, 64, 12, 15, + 227, 63, 12, 15, 227, 62, 12, 15, 227, 61, 12, 15, 227, 60, 12, 15, 227, + 59, 12, 15, 227, 58, 12, 15, 227, 57, 12, 15, 227, 56, 12, 15, 227, 55, + 12, 15, 227, 54, 12, 15, 227, 53, 12, 15, 227, 52, 12, 15, 227, 51, 12, + 15, 227, 50, 12, 15, 227, 49, 12, 15, 227, 48, 12, 15, 227, 47, 12, 15, + 227, 46, 12, 15, 227, 45, 12, 15, 227, 44, 12, 15, 227, 43, 12, 15, 227, + 42, 12, 15, 227, 41, 12, 15, 227, 40, 12, 15, 227, 39, 12, 15, 227, 38, + 12, 15, 227, 37, 12, 15, 227, 36, 12, 15, 227, 35, 12, 15, 227, 34, 12, + 15, 227, 33, 12, 15, 227, 32, 12, 15, 227, 31, 12, 15, 227, 30, 12, 15, + 227, 29, 12, 15, 227, 28, 12, 15, 227, 27, 12, 15, 227, 26, 12, 15, 227, + 25, 12, 15, 227, 24, 12, 15, 227, 23, 12, 15, 227, 22, 12, 15, 227, 21, + 12, 15, 227, 20, 12, 15, 227, 19, 12, 15, 227, 18, 12, 15, 227, 17, 12, + 15, 227, 16, 12, 15, 227, 15, 12, 15, 227, 14, 12, 15, 227, 13, 12, 15, + 227, 12, 12, 15, 227, 11, 12, 15, 227, 10, 12, 15, 227, 9, 12, 15, 227, + 8, 12, 15, 227, 7, 12, 15, 227, 6, 12, 15, 227, 5, 12, 15, 227, 4, 12, + 15, 227, 3, 12, 15, 227, 2, 12, 15, 227, 1, 12, 15, 227, 0, 12, 15, 226, + 255, 12, 15, 226, 254, 12, 15, 226, 253, 12, 15, 226, 252, 12, 15, 226, + 251, 12, 15, 226, 250, 12, 15, 226, 249, 12, 15, 226, 248, 12, 15, 226, + 247, 12, 15, 226, 246, 12, 15, 226, 245, 12, 15, 226, 244, 12, 15, 226, + 243, 12, 15, 226, 242, 12, 15, 226, 241, 12, 15, 226, 240, 12, 15, 226, + 239, 12, 15, 226, 238, 12, 15, 226, 237, 12, 15, 226, 236, 12, 15, 226, + 235, 12, 15, 226, 234, 12, 15, 226, 233, 12, 15, 226, 232, 12, 15, 226, + 231, 12, 15, 226, 230, 12, 15, 226, 229, 12, 15, 226, 228, 12, 15, 226, + 227, 12, 15, 226, 226, 12, 15, 226, 225, 12, 15, 226, 224, 12, 15, 226, + 223, 12, 15, 226, 222, 12, 15, 226, 221, 12, 15, 226, 220, 12, 15, 226, + 219, 12, 15, 226, 218, 12, 15, 226, 217, 12, 15, 226, 216, 12, 15, 226, + 215, 12, 15, 226, 214, 12, 15, 226, 213, 12, 15, 226, 212, 12, 15, 226, + 211, 12, 15, 226, 210, 12, 15, 226, 209, 12, 15, 226, 208, 12, 15, 226, + 207, 12, 15, 226, 206, 12, 15, 226, 205, 12, 15, 226, 204, 12, 15, 226, + 203, 12, 15, 226, 202, 12, 15, 226, 201, 12, 15, 226, 200, 12, 15, 226, + 199, 12, 15, 226, 198, 12, 15, 226, 197, 12, 15, 226, 196, 12, 15, 226, + 195, 12, 15, 226, 194, 12, 15, 226, 193, 12, 15, 226, 192, 12, 15, 226, + 191, 12, 15, 226, 190, 12, 15, 226, 189, 12, 15, 226, 188, 12, 15, 226, + 187, 12, 15, 226, 186, 12, 15, 226, 185, 12, 15, 226, 184, 12, 15, 226, + 183, 12, 15, 226, 182, 12, 15, 226, 181, 12, 15, 226, 180, 12, 15, 226, + 179, 12, 15, 226, 178, 12, 15, 226, 177, 12, 15, 226, 176, 12, 15, 226, + 175, 12, 15, 226, 174, 12, 15, 226, 173, 12, 15, 226, 172, 12, 15, 226, + 171, 12, 15, 226, 170, 12, 15, 226, 169, 12, 15, 226, 168, 12, 15, 226, + 167, 12, 15, 226, 166, 12, 15, 226, 165, 12, 15, 226, 164, 12, 15, 226, + 163, 12, 15, 226, 162, 12, 15, 226, 161, 12, 15, 226, 160, 12, 15, 226, + 159, 12, 15, 226, 158, 12, 15, 226, 157, 12, 15, 226, 156, 12, 15, 226, + 155, 12, 15, 226, 154, 12, 15, 226, 153, 12, 15, 226, 152, 12, 15, 226, + 151, 12, 15, 226, 150, 12, 15, 226, 149, 12, 15, 226, 148, 12, 15, 226, + 147, 12, 15, 226, 146, 12, 15, 226, 145, 12, 15, 226, 144, 12, 15, 226, + 143, 12, 15, 226, 142, 12, 15, 226, 141, 12, 15, 226, 140, 12, 15, 226, + 139, 12, 15, 226, 138, 12, 15, 226, 137, 12, 15, 226, 136, 12, 15, 226, + 135, 12, 15, 226, 134, 12, 15, 226, 133, 12, 15, 226, 132, 12, 15, 226, + 131, 12, 15, 226, 130, 12, 15, 226, 129, 12, 15, 226, 128, 12, 15, 226, + 127, 12, 15, 226, 126, 12, 15, 226, 125, 12, 15, 226, 124, 12, 15, 226, + 123, 12, 15, 226, 122, 12, 15, 226, 121, 12, 15, 226, 120, 12, 15, 226, + 119, 12, 15, 226, 118, 12, 15, 226, 117, 12, 15, 226, 116, 12, 15, 226, + 115, 12, 15, 226, 114, 12, 15, 226, 113, 12, 15, 226, 112, 12, 15, 226, + 111, 12, 15, 226, 110, 12, 15, 226, 109, 12, 15, 226, 108, 12, 15, 226, + 107, 12, 15, 226, 106, 12, 15, 226, 105, 12, 15, 226, 104, 12, 15, 226, + 103, 12, 15, 226, 102, 12, 15, 226, 101, 12, 15, 226, 100, 12, 15, 226, + 99, 12, 15, 226, 98, 12, 15, 226, 97, 12, 15, 226, 96, 12, 15, 226, 95, + 12, 15, 226, 94, 12, 15, 226, 93, 12, 15, 226, 92, 12, 15, 226, 91, 12, + 15, 226, 90, 12, 15, 226, 89, 12, 15, 226, 88, 12, 15, 226, 87, 12, 15, + 226, 86, 12, 15, 226, 85, 12, 15, 226, 84, 12, 15, 226, 83, 12, 15, 226, + 82, 12, 15, 226, 81, 12, 15, 226, 80, 12, 15, 226, 79, 12, 15, 226, 78, + 12, 15, 226, 77, 12, 15, 226, 76, 12, 15, 226, 75, 12, 15, 226, 74, 12, + 15, 226, 73, 12, 15, 226, 72, 12, 15, 226, 71, 12, 15, 226, 70, 12, 15, + 226, 69, 12, 15, 226, 68, 12, 15, 226, 67, 12, 15, 226, 66, 12, 15, 226, + 65, 12, 15, 226, 64, 12, 15, 226, 63, 12, 15, 226, 62, 12, 15, 226, 61, + 12, 15, 226, 60, 12, 15, 226, 59, 12, 15, 226, 58, 12, 15, 226, 57, 12, + 15, 226, 56, 12, 15, 226, 55, 12, 15, 226, 54, 12, 15, 226, 53, 12, 15, + 226, 52, 12, 15, 226, 51, 12, 15, 226, 50, 12, 15, 226, 49, 12, 15, 226, + 48, 12, 15, 226, 47, 12, 15, 226, 46, 12, 15, 226, 45, 12, 15, 226, 44, + 12, 15, 226, 43, 12, 15, 226, 42, 12, 15, 226, 41, 12, 15, 226, 40, 12, + 15, 226, 39, 12, 15, 226, 38, 12, 15, 226, 37, 12, 15, 226, 36, 12, 15, + 226, 35, 12, 15, 226, 34, 12, 15, 226, 33, 12, 15, 226, 32, 12, 15, 226, + 31, 12, 15, 226, 30, 12, 15, 226, 29, 12, 15, 226, 28, 12, 15, 226, 27, + 12, 15, 226, 26, 12, 15, 226, 25, 12, 15, 226, 24, 12, 15, 226, 23, 12, + 15, 226, 22, 12, 15, 226, 21, 12, 15, 226, 20, 12, 15, 226, 19, 12, 15, + 226, 18, 12, 15, 226, 17, 12, 15, 226, 16, 12, 15, 226, 15, 12, 15, 226, + 14, 12, 15, 226, 13, 12, 15, 226, 12, 12, 15, 226, 11, 12, 15, 226, 10, + 12, 15, 226, 9, 12, 15, 226, 8, 12, 15, 226, 7, 12, 15, 226, 6, 12, 15, + 226, 5, 12, 15, 226, 4, 12, 15, 226, 3, 12, 15, 226, 2, 12, 15, 226, 1, + 12, 15, 226, 0, 12, 15, 225, 255, 12, 15, 225, 254, 12, 15, 225, 253, 12, + 15, 225, 252, 12, 15, 225, 251, 12, 15, 225, 250, 12, 15, 225, 249, 12, + 15, 225, 248, 12, 15, 225, 247, 12, 15, 225, 246, 12, 15, 225, 245, 12, + 15, 225, 244, 12, 15, 225, 243, 12, 15, 225, 242, 220, 22, 199, 223, 199, + 224, 201, 248, 199, 224, 233, 218, 77, 199, 224, 207, 254, 77, 199, 224, + 31, 56, 199, 224, 236, 157, 56, 199, 224, 210, 15, 56, 199, 224, 251, + 139, 199, 224, 251, 51, 199, 224, 45, 210, 115, 199, 224, 50, 210, 115, + 199, 224, 250, 195, 199, 224, 108, 56, 199, 224, 242, 76, 199, 224, 228, + 89, 199, 224, 232, 82, 201, 64, 199, 224, 202, 24, 199, 224, 17, 191, 77, + 199, 224, 17, 107, 199, 224, 17, 109, 199, 224, 17, 138, 199, 224, 17, + 134, 199, 224, 17, 150, 199, 224, 17, 169, 199, 224, 17, 175, 199, 224, + 17, 171, 199, 224, 17, 178, 199, 224, 242, 85, 199, 224, 204, 26, 199, + 224, 219, 182, 56, 199, 224, 234, 45, 56, 199, 224, 230, 206, 56, 199, + 224, 208, 15, 77, 199, 224, 242, 74, 250, 184, 199, 224, 8, 6, 1, 65, + 199, 224, 8, 6, 1, 250, 122, 199, 224, 8, 6, 1, 247, 195, 199, 224, 8, 6, + 1, 238, 129, 199, 224, 8, 6, 1, 71, 199, 224, 8, 6, 1, 233, 177, 199, + 224, 8, 6, 1, 232, 53, 199, 224, 8, 6, 1, 230, 118, 199, 224, 8, 6, 1, + 68, 199, 224, 8, 6, 1, 223, 37, 199, 224, 8, 6, 1, 222, 154, 199, 224, 8, + 6, 1, 172, 199, 224, 8, 6, 1, 218, 170, 199, 224, 8, 6, 1, 215, 63, 199, + 224, 8, 6, 1, 74, 199, 224, 8, 6, 1, 210, 238, 199, 224, 8, 6, 1, 208, + 106, 199, 224, 8, 6, 1, 146, 199, 224, 8, 6, 1, 206, 9, 199, 224, 8, 6, + 1, 200, 43, 199, 224, 8, 6, 1, 66, 199, 224, 8, 6, 1, 196, 12, 199, 224, + 8, 6, 1, 193, 224, 199, 224, 8, 6, 1, 192, 235, 199, 224, 8, 6, 1, 192, + 159, 199, 224, 8, 6, 1, 191, 166, 199, 224, 45, 51, 248, 55, 199, 224, + 207, 20, 202, 24, 199, 224, 50, 51, 248, 55, 199, 224, 243, 4, 252, 62, + 199, 224, 130, 219, 114, 199, 224, 230, 213, 252, 62, 199, 224, 8, 2, 1, + 65, 199, 224, 8, 2, 1, 250, 122, 199, 224, 8, 2, 1, 247, 195, 199, 224, + 8, 2, 1, 238, 129, 199, 224, 8, 2, 1, 71, 199, 224, 8, 2, 1, 233, 177, + 199, 224, 8, 2, 1, 232, 53, 199, 224, 8, 2, 1, 230, 118, 199, 224, 8, 2, + 1, 68, 199, 224, 8, 2, 1, 223, 37, 199, 224, 8, 2, 1, 222, 154, 199, 224, + 8, 2, 1, 172, 199, 224, 8, 2, 1, 218, 170, 199, 224, 8, 2, 1, 215, 63, + 199, 224, 8, 2, 1, 74, 199, 224, 8, 2, 1, 210, 238, 199, 224, 8, 2, 1, + 208, 106, 199, 224, 8, 2, 1, 146, 199, 224, 8, 2, 1, 206, 9, 199, 224, 8, + 2, 1, 200, 43, 199, 224, 8, 2, 1, 66, 199, 224, 8, 2, 1, 196, 12, 199, + 224, 8, 2, 1, 193, 224, 199, 224, 8, 2, 1, 192, 235, 199, 224, 8, 2, 1, + 192, 159, 199, 224, 8, 2, 1, 191, 166, 199, 224, 45, 238, 173, 248, 55, + 199, 224, 81, 219, 114, 199, 224, 50, 238, 173, 248, 55, 199, 224, 198, + 152, 247, 129, 199, 223, 67, 204, 212, 67, 204, 201, 67, 204, 190, 67, + 204, 178, 67, 204, 167, 67, 204, 156, 67, 204, 145, 67, 204, 134, 67, + 204, 123, 67, 204, 115, 67, 204, 114, 67, 204, 113, 67, 204, 112, 67, + 204, 110, 67, 204, 109, 67, 204, 108, 67, 204, 107, 67, 204, 106, 67, + 204, 105, 67, 204, 104, 67, 204, 103, 67, 204, 102, 67, 204, 101, 67, + 204, 99, 67, 204, 98, 67, 204, 97, 67, 204, 96, 67, 204, 95, 67, 204, 94, + 67, 204, 93, 67, 204, 92, 67, 204, 91, 67, 204, 90, 67, 204, 88, 67, 204, + 87, 67, 204, 86, 67, 204, 85, 67, 204, 84, 67, 204, 83, 67, 204, 82, 67, + 204, 81, 67, 204, 80, 67, 204, 79, 67, 204, 77, 67, 204, 76, 67, 204, 75, + 67, 204, 74, 67, 204, 73, 67, 204, 72, 67, 204, 71, 67, 204, 70, 67, 204, + 69, 67, 204, 68, 67, 204, 66, 67, 204, 65, 67, 204, 64, 67, 204, 63, 67, + 204, 62, 67, 204, 61, 67, 204, 60, 67, 204, 59, 67, 204, 58, 67, 204, 57, + 67, 204, 55, 67, 204, 54, 67, 204, 53, 67, 204, 52, 67, 204, 51, 67, 204, + 50, 67, 204, 49, 67, 204, 48, 67, 204, 47, 67, 204, 46, 67, 204, 44, 67, + 204, 43, 67, 204, 42, 67, 204, 41, 67, 204, 40, 67, 204, 39, 67, 204, 38, + 67, 204, 37, 67, 204, 36, 67, 204, 35, 67, 205, 32, 67, 205, 31, 67, 205, + 30, 67, 205, 29, 67, 205, 28, 67, 205, 27, 67, 205, 26, 67, 205, 25, 67, + 205, 24, 67, 205, 23, 67, 205, 21, 67, 205, 20, 67, 205, 19, 67, 205, 18, + 67, 205, 17, 67, 205, 16, 67, 205, 15, 67, 205, 14, 67, 205, 13, 67, 205, + 12, 67, 205, 10, 67, 205, 9, 67, 205, 8, 67, 205, 7, 67, 205, 6, 67, 205, + 5, 67, 205, 4, 67, 205, 3, 67, 205, 2, 67, 205, 1, 67, 204, 255, 67, 204, + 254, 67, 204, 253, 67, 204, 252, 67, 204, 251, 67, 204, 250, 67, 204, + 249, 67, 204, 248, 67, 204, 247, 67, 204, 246, 67, 204, 244, 67, 204, + 243, 67, 204, 242, 67, 204, 241, 67, 204, 240, 67, 204, 239, 67, 204, + 238, 67, 204, 237, 67, 204, 236, 67, 204, 235, 67, 204, 233, 67, 204, + 232, 67, 204, 231, 67, 204, 230, 67, 204, 229, 67, 204, 228, 67, 204, + 227, 67, 204, 226, 67, 204, 225, 67, 204, 224, 67, 204, 222, 67, 204, + 221, 67, 204, 220, 67, 204, 219, 67, 204, 218, 67, 204, 217, 67, 204, + 216, 67, 204, 215, 67, 204, 214, 67, 204, 213, 67, 204, 211, 67, 204, + 210, 67, 204, 209, 67, 204, 208, 67, 204, 207, 67, 204, 206, 67, 204, + 205, 67, 204, 204, 67, 204, 203, 67, 204, 202, 67, 204, 200, 67, 204, + 199, 67, 204, 198, 67, 204, 197, 67, 204, 196, 67, 204, 195, 67, 204, + 194, 67, 204, 193, 67, 204, 192, 67, 204, 191, 67, 204, 189, 67, 204, + 188, 67, 204, 187, 67, 204, 186, 67, 204, 185, 67, 204, 184, 67, 204, + 183, 67, 204, 182, 67, 204, 181, 67, 204, 180, 67, 204, 177, 67, 204, + 176, 67, 204, 175, 67, 204, 174, 67, 204, 173, 67, 204, 172, 67, 204, + 171, 67, 204, 170, 67, 204, 169, 67, 204, 168, 67, 204, 166, 67, 204, + 165, 67, 204, 164, 67, 204, 163, 67, 204, 162, 67, 204, 161, 67, 204, + 160, 67, 204, 159, 67, 204, 158, 67, 204, 157, 67, 204, 155, 67, 204, + 154, 67, 204, 153, 67, 204, 152, 67, 204, 151, 67, 204, 150, 67, 204, + 149, 67, 204, 148, 67, 204, 147, 67, 204, 146, 67, 204, 144, 67, 204, + 143, 67, 204, 142, 67, 204, 141, 67, 204, 140, 67, 204, 139, 67, 204, + 138, 67, 204, 137, 67, 204, 136, 67, 204, 135, 67, 204, 133, 67, 204, + 132, 67, 204, 131, 67, 204, 130, 67, 204, 129, 67, 204, 128, 67, 204, + 127, 67, 204, 126, 67, 204, 125, 67, 204, 124, 67, 204, 122, 67, 204, + 121, 67, 204, 120, 67, 204, 119, 67, 204, 118, 67, 204, 117, 67, 204, + 116, 212, 140, 212, 142, 201, 99, 79, 229, 234, 202, 28, 201, 99, 79, + 199, 53, 201, 7, 234, 97, 79, 199, 53, 233, 246, 234, 97, 79, 198, 11, + 234, 59, 234, 83, 234, 84, 252, 53, 252, 54, 251, 191, 248, 240, 249, + 142, 248, 18, 246, 242, 199, 230, 228, 243, 199, 230, 228, 167, 199, 236, + 219, 115, 233, 52, 214, 82, 219, 114, 234, 97, 79, 219, 114, 219, 163, + 213, 107, 234, 62, 219, 115, 199, 230, 81, 199, 230, 193, 251, 232, 148, + 233, 52, 233, 29, 247, 90, 207, 23, 238, 238, 203, 78, 211, 16, 219, 35, + 107, 202, 47, 203, 78, 223, 164, 219, 35, 191, 77, 202, 223, 237, 212, + 219, 105, 234, 16, 236, 187, 237, 77, 239, 24, 107, 237, 201, 237, 77, + 239, 24, 109, 237, 200, 237, 77, 239, 24, 138, 237, 199, 237, 77, 239, + 24, 134, 237, 198, 214, 108, 252, 53, 214, 235, 200, 69, 223, 230, 200, + 73, 234, 97, 79, 198, 12, 248, 131, 233, 254, 247, 128, 247, 130, 234, + 97, 79, 216, 214, 234, 60, 234, 116, 200, 227, 200, 246, 234, 16, 234, + 17, 223, 139, 204, 12, 134, 233, 9, 204, 11, 232, 92, 223, 139, 204, 12, + 138, 230, 189, 204, 11, 230, 186, 223, 139, 204, 12, 109, 207, 100, 204, + 11, 206, 75, 223, 139, 204, 12, 107, 196, 91, 204, 11, 196, 45, 201, 251, + 237, 118, 237, 120, 210, 210, 246, 241, 210, 212, 137, 211, 160, 208, + 222, 228, 246, 248, 44, 210, 3, 229, 194, 248, 60, 213, 46, 248, 44, 229, + 194, 214, 193, 223, 150, 223, 152, 214, 75, 219, 114, 214, 106, 201, 99, + 79, 205, 37, 251, 10, 201, 176, 234, 97, 79, 205, 37, 251, 10, 234, 19, + 246, 242, 199, 231, 203, 253, 228, 243, 199, 231, 203, 253, 228, 164, + 246, 242, 199, 231, 4, 222, 166, 228, 243, 199, 231, 4, 222, 166, 228, + 165, 219, 115, 199, 231, 203, 253, 81, 199, 231, 203, 253, 193, 250, 210, + 107, 219, 115, 232, 134, 210, 107, 219, 115, 235, 125, 209, 96, 210, 107, + 219, 115, 249, 141, 210, 107, 219, 115, 196, 77, 209, 90, 207, 20, 219, + 115, 233, 52, 207, 20, 223, 150, 207, 2, 202, 171, 203, 78, 109, 202, + 168, 201, 178, 202, 171, 203, 78, 138, 202, 167, 201, 177, 237, 77, 239, + 24, 201, 31, 237, 196, 208, 207, 196, 44, 107, 208, 207, 196, 42, 208, + 166, 208, 207, 196, 44, 109, 208, 207, 196, 41, 208, 165, 203, 254, 198, + 10, 201, 96, 201, 14, 247, 129, 246, 241, 247, 63, 216, 171, 193, 171, + 215, 83, 201, 99, 79, 230, 174, 251, 10, 201, 99, 79, 208, 184, 251, 10, + 201, 250, 234, 97, 79, 230, 174, 251, 10, 234, 97, 79, 208, 184, 251, 10, + 234, 57, 201, 99, 79, 201, 31, 202, 10, 202, 171, 230, 218, 246, 242, + 223, 98, 203, 171, 202, 171, 246, 242, 223, 98, 205, 86, 239, 24, 204, 8, + 223, 98, 238, 198, 201, 32, 199, 80, 201, 119, 211, 70, 200, 58, 242, 75, + 211, 36, 208, 208, 216, 170, 209, 78, 251, 47, 208, 200, 242, 75, 251, + 64, 214, 181, 202, 232, 8, 6, 1, 231, 93, 8, 2, 1, 231, 93, 247, 6, 9, 2, + 137, 34, 131, 4, 99, 249, 82, 251, 168, 200, 63, 200, 233, 242, 86, 202, + 111, 219, 226, 222, 83, 1, 219, 64, 220, 19, 1, 232, 178, 232, 168, 220, + 19, 1, 232, 178, 233, 64, 220, 19, 1, 206, 163, 220, 19, 1, 219, 45, 86, + 87, 248, 143, 203, 51, 231, 56, 216, 120, 207, 10, 30, 125, 192, 54, 30, + 125, 192, 50, 30, 125, 201, 154, 30, 125, 192, 55, 232, 68, 232, 67, 232, + 66, 215, 85, 232, 65, 200, 197, 1, 251, 16, 68, 190, 232, 190, 233, 190, + 235, 218, 231, 206, 171, 218, 233, 206, 173, 210, 68, 218, 230, 206, 170, + 213, 77, 216, 18, 193, 50, 218, 232, 206, 172, 232, 91, 210, 67, 193, + 111, 234, 121, 232, 78, 216, 94, 211, 107, 196, 46, 113, 216, 94, 237, + 218, 113, 118, 197, 240, 64, 4, 55, 81, 106, 96, 197, 240, 64, 4, 55, 81, + 106, 11, 5, 223, 53, 77, 80, 1, 221, 208, 219, 75, 194, 251, 194, 140, + 194, 72, 194, 61, 194, 50, 194, 39, 194, 28, 194, 17, 194, 6, 194, 250, + 194, 239, 194, 228, 194, 217, 194, 206, 194, 195, 194, 184, 208, 223, + 232, 148, 40, 81, 50, 63, 219, 189, 248, 55, 247, 200, 211, 53, 77, 248, + 102, 190, 234, 10, 3, 212, 150, 199, 84, 10, 3, 212, 150, 139, 212, 150, + 247, 233, 139, 247, 232, 216, 220, 6, 1, 230, 118, 216, 220, 6, 1, 214, + 72, 216, 220, 2, 1, 230, 118, 216, 220, 2, 1, 214, 72, 61, 1, 235, 16, + 73, 37, 16, 232, 90, 202, 107, 243, 54, 195, 164, 194, 173, 194, 162, + 194, 151, 194, 139, 194, 128, 194, 117, 194, 106, 194, 95, 194, 84, 194, + 76, 194, 75, 194, 74, 194, 73, 194, 71, 194, 70, 194, 69, 194, 68, 194, + 67, 194, 66, 194, 65, 194, 64, 194, 63, 194, 62, 194, 60, 194, 59, 194, + 58, 194, 57, 194, 56, 194, 55, 194, 54, 194, 53, 194, 52, 194, 51, 194, + 49, 194, 48, 194, 47, 194, 46, 194, 45, 194, 44, 194, 43, 194, 42, 194, + 41, 194, 40, 194, 38, 194, 37, 194, 36, 194, 35, 194, 34, 194, 33, 194, + 32, 194, 31, 194, 30, 194, 29, 194, 27, 194, 26, 194, 25, 194, 24, 194, + 23, 194, 22, 194, 21, 194, 20, 194, 19, 194, 18, 194, 16, 194, 15, 194, + 14, 194, 13, 194, 12, 194, 11, 194, 10, 194, 9, 194, 8, 194, 7, 194, 5, + 194, 4, 194, 3, 194, 2, 194, 1, 194, 0, 193, 255, 193, 254, 193, 253, + 193, 252, 194, 249, 194, 248, 194, 247, 194, 246, 194, 245, 194, 244, + 194, 243, 194, 242, 194, 241, 194, 240, 194, 238, 194, 237, 194, 236, + 194, 235, 194, 234, 194, 233, 194, 232, 194, 231, 194, 230, 194, 229, + 194, 227, 194, 226, 194, 225, 194, 224, 194, 223, 194, 222, 194, 221, + 194, 220, 194, 219, 194, 218, 194, 216, 194, 215, 194, 214, 194, 213, + 194, 212, 194, 211, 194, 210, 194, 209, 194, 208, 194, 207, 194, 205, + 194, 204, 194, 203, 194, 202, 194, 201, 194, 200, 194, 199, 194, 198, + 194, 197, 194, 196, 194, 194, 194, 193, 194, 192, 194, 191, 194, 190, + 194, 189, 194, 188, 194, 187, 194, 186, 194, 185, 194, 183, 194, 182, + 194, 181, 194, 180, 194, 179, 194, 178, 194, 177, 194, 176, 194, 175, + 194, 174, 194, 172, 194, 171, 194, 170, 194, 169, 194, 168, 194, 167, + 194, 166, 194, 165, 194, 164, 194, 163, 194, 161, 194, 160, 194, 159, + 194, 158, 194, 157, 194, 156, 194, 155, 194, 154, 194, 153, 194, 152, + 194, 150, 194, 149, 194, 148, 194, 147, 194, 146, 194, 145, 194, 144, + 194, 143, 194, 142, 194, 141, 194, 138, 194, 137, 194, 136, 194, 135, + 194, 134, 194, 133, 194, 132, 194, 131, 194, 130, 194, 129, 194, 127, + 194, 126, 194, 125, 194, 124, 194, 123, 194, 122, 194, 121, 194, 120, + 194, 119, 194, 118, 194, 116, 194, 115, 194, 114, 194, 113, 194, 112, + 194, 111, 194, 110, 194, 109, 194, 108, 194, 107, 194, 105, 194, 104, + 194, 103, 194, 102, 194, 101, 194, 100, 194, 99, 194, 98, 194, 97, 194, + 96, 194, 94, 194, 93, 194, 92, 194, 91, 194, 90, 194, 89, 194, 88, 194, + 87, 194, 86, 194, 85, 194, 83, 194, 82, 194, 81, 194, 80, 194, 79, 194, + 78, 194, 77, 221, 221, 31, 56, 221, 221, 250, 195, 221, 221, 17, 191, 77, + 221, 221, 17, 107, 221, 221, 17, 109, 221, 221, 17, 138, 221, 221, 17, + 134, 221, 221, 17, 150, 221, 221, 17, 169, 221, 221, 17, 175, 221, 221, + 17, 171, 221, 221, 17, 178, 8, 6, 1, 42, 4, 217, 149, 23, 230, 212, 8, 2, + 1, 42, 4, 217, 149, 23, 230, 212, 8, 6, 1, 228, 76, 4, 217, 149, 23, 230, + 212, 8, 2, 1, 228, 76, 4, 217, 149, 23, 230, 212, 8, 6, 1, 126, 4, 217, + 149, 23, 230, 212, 8, 2, 1, 126, 4, 217, 149, 23, 230, 212, 8, 6, 1, 235, + 17, 4, 81, 219, 115, 60, 8, 2, 1, 235, 17, 4, 81, 219, 115, 60, 8, 6, 1, + 235, 17, 4, 81, 219, 115, 248, 235, 23, 230, 212, 8, 2, 1, 235, 17, 4, + 81, 219, 115, 248, 235, 23, 230, 212, 8, 6, 1, 235, 17, 4, 81, 219, 115, + 248, 235, 23, 252, 48, 8, 2, 1, 235, 17, 4, 81, 219, 115, 248, 235, 23, + 252, 48, 8, 6, 1, 187, 4, 81, 219, 115, 60, 8, 2, 1, 187, 4, 81, 219, + 115, 60, 8, 6, 1, 187, 4, 81, 219, 115, 248, 235, 23, 230, 212, 8, 2, 1, + 187, 4, 81, 219, 115, 248, 235, 23, 230, 212, 8, 6, 1, 187, 4, 81, 219, + 115, 248, 235, 23, 252, 48, 8, 2, 1, 187, 4, 81, 219, 115, 248, 235, 23, + 252, 48, 8, 6, 1, 206, 10, 4, 81, 219, 115, 60, 8, 2, 1, 206, 10, 4, 81, + 219, 115, 60, 8, 6, 1, 235, 17, 4, 243, 4, 23, 217, 148, 8, 2, 1, 235, + 17, 4, 243, 4, 23, 217, 148, 8, 6, 1, 235, 17, 4, 243, 4, 23, 247, 94, 8, + 2, 1, 235, 17, 4, 243, 4, 23, 247, 94, 8, 2, 1, 228, 76, 4, 75, 93, 23, + 252, 48, 8, 2, 1, 214, 73, 4, 198, 153, 58, 8, 6, 1, 42, 4, 211, 141, 23, + 252, 48, 8, 2, 1, 42, 4, 211, 141, 23, 252, 48, 8, 6, 1, 42, 4, 211, 141, + 23, 198, 152, 8, 2, 1, 42, 4, 211, 141, 23, 198, 152, 8, 6, 1, 235, 17, + 4, 211, 141, 23, 252, 48, 8, 2, 1, 235, 17, 4, 211, 141, 23, 252, 48, 8, + 6, 1, 235, 17, 4, 211, 141, 23, 198, 152, 8, 2, 1, 235, 17, 4, 211, 141, + 23, 198, 152, 8, 6, 1, 235, 17, 4, 75, 93, 23, 252, 48, 8, 2, 1, 235, 17, + 4, 75, 93, 23, 252, 48, 8, 6, 1, 235, 17, 4, 75, 93, 23, 198, 152, 8, 2, + 1, 235, 17, 4, 75, 93, 23, 198, 152, 8, 2, 1, 228, 76, 4, 75, 93, 23, + 230, 212, 8, 2, 1, 228, 76, 4, 75, 93, 23, 198, 152, 8, 6, 1, 228, 76, 4, + 211, 141, 23, 252, 48, 8, 2, 1, 228, 76, 4, 211, 141, 23, 75, 93, 23, + 252, 48, 8, 6, 1, 228, 76, 4, 211, 141, 23, 198, 152, 8, 2, 1, 228, 76, + 4, 211, 141, 23, 75, 93, 23, 198, 152, 8, 6, 1, 223, 38, 4, 198, 152, 8, + 2, 1, 223, 38, 4, 75, 93, 23, 198, 152, 8, 6, 1, 220, 145, 4, 198, 152, + 8, 2, 1, 220, 145, 4, 198, 152, 8, 6, 1, 218, 171, 4, 198, 152, 8, 2, 1, + 218, 171, 4, 198, 152, 8, 6, 1, 207, 224, 4, 198, 152, 8, 2, 1, 207, 224, + 4, 198, 152, 8, 6, 1, 126, 4, 211, 141, 23, 252, 48, 8, 2, 1, 126, 4, + 211, 141, 23, 252, 48, 8, 6, 1, 126, 4, 211, 141, 23, 198, 152, 8, 2, 1, + 126, 4, 211, 141, 23, 198, 152, 8, 6, 1, 126, 4, 217, 149, 23, 252, 48, + 8, 2, 1, 126, 4, 217, 149, 23, 252, 48, 8, 6, 1, 126, 4, 217, 149, 23, + 198, 152, 8, 2, 1, 126, 4, 217, 149, 23, 198, 152, 8, 2, 1, 252, 28, 4, + 230, 212, 8, 2, 1, 211, 79, 187, 4, 230, 212, 8, 2, 1, 211, 79, 187, 4, + 252, 48, 8, 2, 1, 154, 196, 13, 4, 230, 212, 8, 2, 1, 154, 196, 13, 4, + 252, 48, 8, 2, 1, 205, 88, 4, 230, 212, 8, 2, 1, 205, 88, 4, 252, 48, 8, + 2, 1, 228, 252, 205, 88, 4, 230, 212, 8, 2, 1, 228, 252, 205, 88, 4, 252, + 48, 9, 204, 8, 99, 4, 230, 60, 93, 4, 251, 194, 9, 204, 8, 99, 4, 230, + 60, 93, 4, 193, 133, 9, 204, 8, 99, 4, 230, 60, 93, 4, 131, 217, 101, 9, + 204, 8, 99, 4, 230, 60, 93, 4, 211, 153, 9, 204, 8, 99, 4, 230, 60, 93, + 4, 66, 9, 204, 8, 99, 4, 230, 60, 93, 4, 191, 225, 9, 204, 8, 99, 4, 230, + 60, 93, 4, 71, 9, 204, 8, 99, 4, 230, 60, 93, 4, 252, 27, 9, 204, 8, 213, + 27, 4, 222, 6, 100, 204, 8, 40, 1, 208, 98, 100, 204, 8, 40, 1, 221, 195, + 100, 204, 8, 40, 1, 231, 68, 100, 204, 8, 40, 1, 191, 123, 100, 204, 8, + 40, 1, 237, 182, 100, 204, 8, 40, 1, 207, 7, 100, 204, 8, 40, 1, 233, + 111, 100, 204, 8, 40, 1, 191, 175, 248, 227, 204, 8, 40, 1, 206, 110, + 248, 227, 204, 8, 40, 1, 207, 7, 248, 227, 204, 8, 40, 1, 191, 175, 230, + 146, 204, 8, 40, 1, 219, 75, 230, 146, 204, 8, 40, 1, 203, 166, 230, 146, + 204, 8, 40, 1, 221, 195, 230, 146, 204, 8, 40, 1, 231, 68, 230, 146, 204, + 8, 40, 1, 191, 123, 230, 146, 204, 8, 40, 1, 233, 111, 211, 47, 204, 8, + 40, 1, 206, 110, 211, 47, 204, 8, 40, 1, 207, 7, 248, 227, 1, 221, 189, + 44, 120, 222, 154, 44, 120, 214, 72, 44, 120, 247, 195, 44, 120, 212, + 105, 44, 120, 197, 135, 44, 120, 213, 82, 44, 120, 200, 43, 44, 120, 215, + 63, 44, 120, 210, 238, 44, 120, 218, 170, 44, 120, 192, 159, 44, 120, + 146, 44, 120, 172, 44, 120, 196, 12, 44, 120, 219, 65, 44, 120, 219, 76, + 44, 120, 206, 111, 44, 120, 213, 64, 44, 120, 223, 37, 44, 120, 203, 168, + 44, 120, 201, 179, 44, 120, 206, 9, 44, 120, 230, 118, 44, 120, 220, 249, + 44, 5, 222, 129, 44, 5, 221, 168, 44, 5, 221, 147, 44, 5, 220, 234, 44, + 5, 220, 189, 44, 5, 222, 24, 44, 5, 222, 15, 44, 5, 222, 104, 44, 5, 221, + 69, 44, 5, 221, 43, 44, 5, 222, 44, 44, 5, 214, 69, 44, 5, 214, 18, 44, + 5, 214, 14, 44, 5, 213, 239, 44, 5, 213, 230, 44, 5, 214, 57, 44, 5, 214, + 55, 44, 5, 214, 66, 44, 5, 213, 251, 44, 5, 213, 246, 44, 5, 214, 59, 44, + 5, 247, 161, 44, 5, 243, 31, 44, 5, 243, 21, 44, 5, 238, 197, 44, 5, 238, + 155, 44, 5, 247, 44, 44, 5, 247, 36, 44, 5, 247, 150, 44, 5, 242, 101, + 44, 5, 239, 20, 44, 5, 247, 78, 44, 5, 212, 102, 44, 5, 212, 83, 44, 5, + 212, 77, 44, 5, 212, 60, 44, 5, 212, 52, 44, 5, 212, 92, 44, 5, 212, 91, + 44, 5, 212, 99, 44, 5, 212, 67, 44, 5, 212, 64, 44, 5, 212, 95, 44, 5, + 197, 131, 44, 5, 197, 111, 44, 5, 197, 110, 44, 5, 197, 99, 44, 5, 197, + 96, 44, 5, 197, 127, 44, 5, 197, 126, 44, 5, 197, 130, 44, 5, 197, 109, + 44, 5, 197, 108, 44, 5, 197, 129, 44, 5, 213, 80, 44, 5, 213, 66, 44, 5, + 213, 65, 44, 5, 213, 49, 44, 5, 213, 48, 44, 5, 213, 76, 44, 5, 213, 75, + 44, 5, 213, 79, 44, 5, 213, 51, 44, 5, 213, 50, 44, 5, 213, 78, 44, 5, + 199, 245, 44, 5, 198, 193, 44, 5, 198, 170, 44, 5, 197, 94, 44, 5, 197, + 49, 44, 5, 199, 145, 44, 5, 199, 121, 44, 5, 199, 217, 44, 5, 159, 44, 5, + 198, 59, 44, 5, 199, 166, 44, 5, 214, 252, 44, 5, 213, 221, 44, 5, 213, + 188, 44, 5, 212, 180, 44, 5, 212, 117, 44, 5, 214, 123, 44, 5, 214, 112, + 44, 5, 214, 238, 44, 5, 213, 45, 44, 5, 213, 28, 44, 5, 214, 207, 44, 5, + 210, 222, 44, 5, 209, 187, 44, 5, 209, 147, 44, 5, 208, 167, 44, 5, 208, + 130, 44, 5, 210, 65, 44, 5, 210, 51, 44, 5, 210, 200, 44, 5, 209, 75, 44, + 5, 209, 39, 44, 5, 210, 82, 44, 5, 217, 153, 44, 5, 216, 102, 44, 5, 216, + 63, 44, 5, 215, 157, 44, 5, 215, 95, 44, 5, 216, 234, 44, 5, 216, 213, + 44, 5, 217, 114, 44, 5, 216, 14, 44, 5, 215, 213, 44, 5, 217, 27, 44, 5, + 192, 140, 44, 5, 192, 33, 44, 5, 192, 23, 44, 5, 191, 225, 44, 5, 191, + 188, 44, 5, 192, 80, 44, 5, 192, 77, 44, 5, 192, 119, 44, 5, 192, 12, 44, + 5, 191, 246, 44, 5, 192, 91, 44, 5, 207, 180, 44, 5, 207, 2, 44, 5, 206, + 196, 44, 5, 206, 69, 44, 5, 206, 30, 44, 5, 207, 115, 44, 5, 207, 86, 44, + 5, 207, 158, 44, 5, 206, 163, 44, 5, 206, 135, 44, 5, 207, 127, 44, 5, + 220, 127, 44, 5, 219, 148, 44, 5, 219, 130, 44, 5, 218, 227, 44, 5, 218, + 196, 44, 5, 219, 240, 44, 5, 219, 230, 44, 5, 220, 98, 44, 5, 219, 45, + 44, 5, 219, 10, 44, 5, 220, 2, 44, 5, 195, 187, 44, 5, 195, 69, 44, 5, + 195, 51, 44, 5, 193, 249, 44, 5, 193, 241, 44, 5, 195, 153, 44, 5, 195, + 148, 44, 5, 195, 183, 44, 5, 195, 24, 44, 5, 195, 8, 44, 5, 195, 160, 44, + 5, 219, 63, 44, 5, 219, 58, 44, 5, 219, 57, 44, 5, 219, 54, 44, 5, 219, + 53, 44, 5, 219, 60, 44, 5, 219, 59, 44, 5, 219, 62, 44, 5, 219, 56, 44, + 5, 219, 55, 44, 5, 219, 61, 44, 5, 219, 74, 44, 5, 219, 67, 44, 5, 219, + 66, 44, 5, 219, 50, 44, 5, 219, 49, 44, 5, 219, 70, 44, 5, 219, 69, 44, + 5, 219, 73, 44, 5, 219, 52, 44, 5, 219, 51, 44, 5, 219, 71, 44, 5, 206, + 109, 44, 5, 206, 98, 44, 5, 206, 97, 44, 5, 206, 90, 44, 5, 206, 83, 44, + 5, 206, 105, 44, 5, 206, 104, 44, 5, 206, 108, 44, 5, 206, 96, 44, 5, + 206, 95, 44, 5, 206, 107, 44, 5, 213, 62, 44, 5, 213, 57, 44, 5, 213, 56, + 44, 5, 213, 53, 44, 5, 213, 52, 44, 5, 213, 59, 44, 5, 213, 58, 44, 5, + 213, 61, 44, 5, 213, 55, 44, 5, 213, 54, 44, 5, 213, 60, 44, 5, 223, 33, + 44, 5, 222, 246, 44, 5, 222, 238, 44, 5, 222, 184, 44, 5, 222, 164, 44, + 5, 223, 12, 44, 5, 223, 10, 44, 5, 223, 27, 44, 5, 222, 203, 44, 5, 222, + 193, 44, 5, 223, 19, 44, 5, 203, 161, 44, 5, 203, 82, 44, 5, 203, 77, 44, + 5, 203, 6, 44, 5, 202, 244, 44, 5, 203, 114, 44, 5, 203, 112, 44, 5, 203, + 149, 44, 5, 203, 57, 44, 5, 203, 49, 44, 5, 203, 123, 44, 5, 201, 175, + 44, 5, 201, 143, 44, 5, 201, 139, 44, 5, 201, 130, 44, 5, 201, 127, 44, + 5, 201, 149, 44, 5, 201, 148, 44, 5, 201, 174, 44, 5, 201, 135, 44, 5, + 201, 134, 44, 5, 201, 151, 44, 5, 205, 198, 44, 5, 202, 223, 44, 5, 202, + 194, 44, 5, 201, 5, 44, 5, 200, 160, 44, 5, 205, 69, 44, 5, 205, 51, 44, + 5, 205, 182, 44, 5, 202, 47, 44, 5, 202, 17, 44, 5, 205, 115, 44, 5, 230, + 93, 44, 5, 229, 160, 44, 5, 229, 132, 44, 5, 228, 161, 44, 5, 228, 130, + 44, 5, 229, 247, 44, 5, 229, 217, 44, 5, 230, 82, 44, 5, 229, 25, 44, 5, + 228, 254, 44, 5, 230, 4, 44, 5, 220, 248, 44, 5, 220, 247, 44, 5, 220, + 242, 44, 5, 220, 241, 44, 5, 220, 238, 44, 5, 220, 237, 44, 5, 220, 244, + 44, 5, 220, 243, 44, 5, 220, 246, 44, 5, 220, 240, 44, 5, 220, 239, 44, + 5, 220, 245, 44, 5, 203, 15, 166, 120, 3, 192, 105, 166, 120, 3, 207, + 146, 166, 120, 3, 207, 51, 101, 1, 196, 224, 95, 120, 3, 242, 93, 155, + 95, 120, 3, 242, 93, 221, 217, 95, 120, 3, 242, 93, 221, 69, 95, 120, 3, + 242, 93, 221, 185, 95, 120, 3, 242, 93, 213, 251, 95, 120, 3, 242, 93, + 247, 162, 95, 120, 3, 242, 93, 247, 3, 95, 120, 3, 242, 93, 242, 101, 95, + 120, 3, 242, 93, 243, 70, 95, 120, 3, 242, 93, 212, 67, 95, 120, 3, 242, + 93, 238, 34, 95, 120, 3, 242, 93, 197, 120, 95, 120, 3, 242, 93, 236, + 176, 95, 120, 3, 242, 93, 197, 115, 95, 120, 3, 242, 93, 181, 95, 120, 3, + 242, 93, 190, 190, 95, 120, 3, 242, 93, 199, 49, 95, 120, 3, 242, 93, + 159, 95, 120, 3, 242, 93, 198, 241, 95, 120, 3, 242, 93, 213, 45, 95, + 120, 3, 242, 93, 249, 155, 95, 120, 3, 242, 93, 209, 230, 95, 120, 3, + 242, 93, 209, 75, 95, 120, 3, 242, 93, 209, 201, 95, 120, 3, 242, 93, + 216, 14, 95, 120, 3, 242, 93, 192, 12, 95, 120, 3, 242, 93, 206, 163, 95, + 120, 3, 242, 93, 219, 45, 95, 120, 3, 242, 93, 195, 24, 95, 120, 3, 242, + 93, 203, 166, 95, 120, 3, 242, 93, 201, 176, 95, 120, 3, 242, 93, 188, + 95, 120, 3, 242, 93, 140, 95, 120, 3, 242, 93, 173, 95, 18, 3, 242, 93, + 208, 98, 95, 223, 151, 18, 3, 242, 93, 208, 35, 95, 223, 151, 18, 3, 242, + 93, 206, 18, 95, 223, 151, 18, 3, 242, 93, 206, 11, 95, 223, 151, 18, 3, + 242, 93, 208, 77, 95, 18, 3, 211, 115, 95, 18, 3, 252, 169, 229, 122, 1, + 248, 183, 214, 70, 229, 122, 1, 248, 183, 214, 18, 229, 122, 1, 248, 183, + 213, 239, 229, 122, 1, 248, 183, 214, 57, 229, 122, 1, 248, 183, 213, + 251, 72, 1, 248, 183, 214, 70, 72, 1, 248, 183, 214, 18, 72, 1, 248, 183, + 213, 239, 72, 1, 248, 183, 214, 57, 72, 1, 248, 183, 213, 251, 72, 1, + 251, 230, 247, 44, 72, 1, 251, 230, 197, 94, 72, 1, 251, 230, 159, 72, 1, + 251, 230, 210, 238, 52, 1, 233, 202, 233, 201, 239, 28, 163, 164, 52, 1, + 233, 201, 233, 202, 239, 28, 163, 164, }; static const unsigned short phrasebook_offset1[] = { @@ -22436,108 +22442,108 @@ static const unsigned int phrasebook_offset2[] = { 64361, 64365, 64369, 64373, 64377, 64381, 64385, 64389, 64393, 64397, 64401, 64405, 64409, 64413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64417, 64425, 64433, 64443, 64453, - 64462, 64472, 64482, 64493, 64505, 64516, 64528, 0, 0, 0, 0, 64535, - 64538, 64541, 64546, 64549, 64556, 64560, 64564, 64568, 64573, 64578, - 64584, 64590, 64595, 64600, 64606, 64612, 64618, 64624, 64627, 64630, - 64637, 64644, 64650, 64656, 64664, 64672, 64677, 64682, 64686, 64694, - 64700, 64707, 64712, 64717, 64722, 64727, 64732, 64737, 64742, 64747, - 64752, 64757, 64762, 64767, 64772, 64777, 64783, 64788, 64792, 64798, - 64809, 64818, 64832, 64841, 64845, 64855, 64861, 64867, 64873, 64878, - 64881, 64886, 64890, 0, 64896, 64901, 64905, 64910, 64914, 64919, 64923, - 64928, 64932, 64937, 64941, 64945, 64950, 64955, 64960, 64965, 64970, - 64975, 64980, 64985, 64990, 64994, 64999, 65004, 65009, 65014, 65019, - 65024, 65029, 65034, 65039, 65044, 65049, 65054, 65059, 65065, 65070, - 65075, 65080, 65085, 65089, 65094, 65098, 65103, 65108, 65113, 65118, - 65122, 65127, 65131, 65136, 65141, 65146, 65151, 65156, 65161, 65166, - 65171, 65176, 65181, 65186, 65191, 65195, 65200, 65205, 65210, 65215, - 65220, 65224, 65230, 65235, 65241, 65246, 65250, 65255, 65260, 65265, - 65270, 65276, 65281, 65286, 65291, 65296, 65301, 65306, 65311, 0, 0, - 65317, 65325, 65333, 65340, 65347, 65352, 65359, 65365, 65370, 65374, - 65377, 65381, 65384, 65388, 65391, 65395, 65398, 65402, 65405, 65408, - 65412, 65416, 65420, 65424, 65428, 65432, 65436, 65440, 65444, 65447, - 65451, 65455, 65459, 65463, 65467, 65471, 65475, 65479, 65483, 65487, - 65491, 65495, 65499, 65504, 65508, 65512, 65516, 65520, 65523, 65527, - 65530, 65534, 65538, 65542, 65546, 65549, 65553, 65556, 65560, 65564, - 65568, 65572, 65576, 65580, 65584, 65588, 65592, 65596, 65600, 65604, - 65607, 65611, 65615, 65619, 65623, 65627, 65630, 65635, 65639, 65644, - 65648, 65651, 65655, 65659, 65663, 65667, 65672, 65676, 65680, 65684, - 65688, 65692, 65696, 65700, 65705, 65709, 65713, 65717, 65721, 65725, - 65732, 65736, 65742, 0, 0, 0, 0, 0, 65747, 65752, 65757, 65762, 65767, - 65772, 65777, 65782, 65786, 65791, 65796, 65801, 65806, 65811, 65816, - 65821, 65826, 65831, 65835, 65840, 65845, 65850, 65854, 65858, 65862, - 65867, 65872, 65877, 65882, 65887, 65892, 65897, 65902, 65907, 65912, - 65916, 65920, 65925, 65930, 65935, 65940, 65945, 65952, 0, 65957, 65961, - 65965, 65969, 65973, 65977, 65981, 65985, 65989, 65993, 65997, 66001, - 66005, 66009, 66013, 66017, 66021, 66025, 66029, 66033, 66037, 66041, - 66045, 66049, 66053, 66057, 66061, 66065, 66069, 66073, 66077, 66080, - 66084, 66087, 66091, 66095, 66098, 66102, 66106, 66109, 66113, 66117, - 66121, 66125, 66128, 66132, 66136, 66140, 66144, 66148, 66152, 66155, - 66158, 66162, 66166, 66170, 66174, 66178, 66182, 66186, 66190, 66194, - 66198, 66202, 66206, 66210, 66214, 66218, 66222, 66226, 66230, 66234, - 66238, 66242, 66246, 66250, 66254, 66258, 66262, 66266, 66270, 66274, - 66278, 66282, 66286, 66290, 66294, 66298, 66302, 66306, 66310, 66314, - 66318, 66322, 0, 66326, 66332, 66338, 66343, 66348, 66353, 66359, 66365, - 66370, 66376, 66382, 66388, 66394, 66400, 66406, 66412, 66418, 66423, - 66428, 66433, 66438, 66443, 66448, 66453, 66458, 66463, 66468, 66473, - 66478, 66483, 66488, 66493, 66498, 66503, 66508, 66513, 66518, 66524, - 66530, 66536, 66542, 66547, 66552, 66557, 66563, 66568, 66573, 66578, - 66583, 66588, 66593, 66598, 66603, 66608, 66613, 66618, 66623, 66628, - 66633, 66638, 66643, 66648, 66653, 66658, 66663, 66668, 66673, 66678, - 66683, 66688, 66693, 66698, 66703, 66708, 66713, 66718, 66723, 66728, - 66733, 66738, 66743, 66748, 66753, 66758, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 66763, 66768, 66773, 66778, 66782, 66787, 66791, 66796, 66801, - 66806, 66811, 66816, 66820, 66825, 66830, 66835, 66840, 66844, 66848, - 66852, 66856, 66860, 66864, 66868, 66872, 66876, 66880, 66884, 66888, - 66892, 66896, 66901, 66906, 66911, 66916, 66921, 66926, 66931, 66936, - 66941, 66946, 66951, 66956, 66961, 66966, 66971, 66978, 0, 66986, 66990, - 66994, 66998, 67002, 67006, 67010, 67014, 67018, 67022, 67027, 67032, - 67037, 67042, 67047, 67052, 67057, 67062, 67067, 67072, 67077, 67082, - 67087, 67092, 67097, 67102, 67107, 67112, 67117, 67122, 67127, 67132, - 67137, 67142, 67147, 67152, 67157, 67162, 67167, 67172, 67177, 67186, - 67195, 67204, 67213, 67222, 67231, 67240, 67249, 67252, 67257, 67262, - 67267, 67272, 67277, 67282, 67287, 67292, 67297, 67301, 67306, 67311, - 67316, 67321, 67326, 67330, 67334, 67338, 67342, 67346, 67350, 67354, - 67358, 67362, 67366, 67370, 67374, 67378, 67382, 67387, 67392, 67397, - 67402, 67407, 67412, 67417, 67422, 67427, 67432, 67437, 67442, 67447, - 67452, 67459, 67466, 67471, 67476, 67480, 67484, 67488, 67492, 67496, - 67500, 67504, 67508, 67512, 67517, 67522, 67527, 67532, 67537, 67542, - 67547, 67552, 67557, 67562, 67567, 67572, 67577, 67582, 67587, 67592, - 67597, 67602, 67607, 67612, 67617, 67622, 67627, 67632, 67637, 67642, - 67647, 67652, 67657, 67662, 67667, 67671, 67676, 67681, 67686, 67691, - 67696, 67701, 67706, 67711, 67716, 67721, 67726, 67731, 67735, 67740, - 67745, 67750, 67755, 67760, 67765, 67770, 67775, 67780, 67784, 67791, - 67798, 67805, 67812, 67819, 67826, 67833, 67840, 67847, 67854, 67861, - 67868, 67871, 67874, 67877, 67882, 67885, 67888, 67891, 67894, 67897, - 67900, 67904, 67908, 67912, 67916, 67919, 67923, 67927, 67931, 67935, - 67939, 67943, 67947, 67951, 67954, 67957, 67961, 67965, 67969, 67973, - 67976, 67980, 67984, 67988, 67992, 67995, 67999, 68003, 68007, 68011, - 68014, 68018, 68022, 68025, 68029, 68033, 68037, 68041, 68045, 68049, - 68053, 68057, 68064, 68067, 68070, 68073, 68076, 68079, 68082, 68085, - 68088, 68091, 68094, 68097, 68100, 68103, 68106, 68109, 68112, 68115, - 68118, 68121, 68124, 68127, 68130, 68133, 68136, 68139, 68142, 68145, - 68148, 68151, 68154, 68157, 68160, 68163, 68166, 68169, 68172, 68175, - 68178, 68181, 68184, 68187, 68190, 68193, 68196, 68199, 68202, 68205, - 68208, 68211, 68214, 68217, 68220, 68223, 68226, 68229, 68232, 68235, - 68238, 68241, 68244, 68247, 68250, 68253, 68256, 68259, 68262, 68265, - 68268, 68271, 68274, 68277, 68280, 68283, 68286, 68289, 68292, 68295, - 68298, 68301, 68304, 68307, 68310, 68313, 68316, 68319, 68322, 68325, - 68328, 68337, 68345, 68353, 68361, 68369, 68377, 68385, 68393, 68401, - 68409, 68418, 68427, 68436, 68445, 68454, 68463, 68472, 68481, 68490, - 68499, 68508, 68517, 68526, 68535, 68544, 68547, 68550, 68553, 68555, - 68558, 68561, 68564, 68569, 68574, 68577, 68584, 68591, 68598, 68605, - 68608, 68613, 68615, 68619, 68621, 68623, 68626, 68629, 68632, 68635, - 68638, 68641, 68644, 68649, 68654, 68657, 68660, 68663, 68666, 68669, - 68672, 68675, 68679, 68682, 68685, 68688, 68691, 68694, 68699, 68702, - 68705, 68708, 68713, 68718, 68723, 68728, 68733, 68738, 68743, 68748, - 68754, 68762, 68764, 68767, 68770, 68773, 68776, 68782, 68790, 68793, - 68796, 68801, 68804, 68807, 68810, 68815, 68818, 68821, 68826, 68829, - 68832, 68837, 68840, 68843, 68848, 68853, 68858, 68861, 68864, 68867, - 68870, 68876, 68879, 68882, 68885, 68887, 68890, 68893, 68896, 68901, - 68904, 68907, 68910, 68913, 68916, 68921, 68924, 68927, 68930, 68933, - 68936, 68939, 68942, 68945, 68948, 68954, 68959, 68967, 68975, 68983, - 68991, 68999, 69007, 69015, 69023, 69031, 69040, 69049, 69058, 69067, - 69076, 69085, 69094, 69103, 69112, 69121, 69130, 69139, 69148, 69157, - 69166, 69175, 69184, 69193, 69202, 69211, 69220, 69229, 0, 0, 0, 0, 0, 0, + 64462, 64472, 64482, 64493, 64505, 64516, 64528, 64535, 64545, 64556, + 64565, 64572, 64575, 64578, 64583, 64586, 64593, 64597, 64601, 64605, + 64610, 64615, 64621, 64627, 64632, 64637, 64643, 64649, 64655, 64661, + 64664, 64667, 64674, 64681, 64687, 64693, 64701, 64709, 64714, 64719, + 64723, 64731, 64737, 64744, 64749, 64754, 64759, 64764, 64769, 64774, + 64779, 64784, 64789, 64794, 64799, 64804, 64809, 64814, 64820, 64825, + 64829, 64835, 64846, 64855, 64869, 64878, 64882, 64892, 64898, 64904, + 64910, 64915, 64918, 64923, 64927, 0, 64933, 64938, 64942, 64947, 64951, + 64956, 64960, 64965, 64969, 64974, 64978, 64982, 64987, 64992, 64997, + 65002, 65007, 65012, 65017, 65022, 65027, 65031, 65036, 65041, 65046, + 65051, 65056, 65061, 65066, 65071, 65076, 65081, 65086, 65091, 65096, + 65102, 65107, 65112, 65117, 65122, 65126, 65131, 65135, 65140, 65145, + 65150, 65155, 65159, 65164, 65168, 65173, 65178, 65183, 65188, 65193, + 65198, 65203, 65208, 65213, 65218, 65223, 65228, 65232, 65237, 65242, + 65247, 65252, 65257, 65261, 65267, 65272, 65278, 65283, 65287, 65292, + 65297, 65302, 65307, 65313, 65318, 65323, 65328, 65333, 65338, 65343, + 65348, 0, 0, 65354, 65362, 65370, 65377, 65384, 65389, 65396, 65402, + 65407, 65411, 65414, 65418, 65421, 65425, 65428, 65432, 65435, 65439, + 65442, 65445, 65449, 65453, 65457, 65461, 65465, 65469, 65473, 65477, + 65481, 65484, 65488, 65492, 65496, 65500, 65504, 65508, 65512, 65516, + 65520, 65524, 65528, 65532, 65536, 65541, 65545, 65549, 65553, 65557, + 65560, 65564, 65567, 65571, 65575, 65579, 65583, 65586, 65590, 65593, + 65597, 65601, 65605, 65609, 65613, 65617, 65621, 65625, 65629, 65633, + 65637, 65641, 65644, 65648, 65652, 65656, 65660, 65664, 65667, 65672, + 65676, 65681, 65685, 65688, 65692, 65696, 65700, 65704, 65709, 65713, + 65717, 65721, 65725, 65729, 65733, 65737, 65742, 65746, 65750, 65754, + 65758, 65762, 65769, 65773, 65779, 0, 0, 0, 0, 0, 65784, 65789, 65794, + 65799, 65804, 65809, 65814, 65819, 65823, 65828, 65833, 65838, 65843, + 65848, 65853, 65858, 65863, 65868, 65872, 65877, 65882, 65887, 65891, + 65895, 65899, 65904, 65909, 65914, 65919, 65924, 65929, 65934, 65939, + 65944, 65949, 65953, 65957, 65962, 65967, 65972, 65977, 65982, 65989, 0, + 65994, 65998, 66002, 66006, 66010, 66014, 66018, 66022, 66026, 66030, + 66034, 66038, 66042, 66046, 66050, 66054, 66058, 66062, 66066, 66070, + 66074, 66078, 66082, 66086, 66090, 66094, 66098, 66102, 66106, 66110, + 66114, 66117, 66121, 66124, 66128, 66132, 66135, 66139, 66143, 66146, + 66150, 66154, 66158, 66162, 66165, 66169, 66173, 66177, 66181, 66185, + 66189, 66192, 66195, 66199, 66203, 66207, 66211, 66215, 66219, 66223, + 66227, 66231, 66235, 66239, 66243, 66247, 66251, 66255, 66259, 66263, + 66267, 66271, 66275, 66279, 66283, 66287, 66291, 66295, 66299, 66303, + 66307, 66311, 66315, 66319, 66323, 66327, 66331, 66335, 66339, 66343, + 66347, 66351, 66355, 66359, 0, 66363, 66369, 66375, 66380, 66385, 66390, + 66396, 66402, 66407, 66413, 66419, 66425, 66431, 66437, 66443, 66449, + 66455, 66460, 66465, 66470, 66475, 66480, 66485, 66490, 66495, 66500, + 66505, 66510, 66515, 66520, 66525, 66530, 66535, 66540, 66545, 66550, + 66555, 66561, 66567, 66573, 66579, 66584, 66589, 66594, 66600, 66605, + 66610, 66615, 66620, 66625, 66630, 66635, 66640, 66645, 66650, 66655, + 66660, 66665, 66670, 66675, 66680, 66685, 66690, 66695, 66700, 66705, + 66710, 66715, 66720, 66725, 66730, 66735, 66740, 66745, 66750, 66755, + 66760, 66765, 66770, 66775, 66780, 66785, 66790, 66795, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 66800, 66807, 66812, 66817, 66822, 66826, 66831, 66835, + 66840, 66845, 66850, 66855, 66860, 66864, 66869, 66874, 66879, 66884, + 66888, 66892, 66896, 66900, 66904, 66908, 66912, 66916, 66920, 66924, + 66928, 66932, 66936, 66940, 66945, 66950, 66955, 66960, 66965, 66970, + 66975, 66980, 66985, 66990, 66995, 67000, 67005, 67010, 67015, 67022, 0, + 67030, 67034, 67038, 67042, 67046, 67050, 67054, 67058, 67062, 67066, + 67071, 67076, 67081, 67086, 67091, 67096, 67101, 67106, 67111, 67116, + 67121, 67126, 67131, 67136, 67141, 67146, 67151, 67156, 67161, 67166, + 67171, 67176, 67181, 67186, 67191, 67196, 67201, 67206, 67211, 67216, + 67221, 67230, 67239, 67248, 67257, 67266, 67275, 67284, 67293, 67296, + 67301, 67306, 67311, 67316, 67321, 67326, 67331, 67336, 67341, 67345, + 67350, 67355, 67360, 67365, 67370, 67374, 67378, 67382, 67386, 67390, + 67394, 67398, 67402, 67406, 67410, 67414, 67418, 67422, 67426, 67431, + 67436, 67441, 67446, 67451, 67456, 67461, 67466, 67471, 67476, 67481, + 67486, 67491, 67496, 67503, 67510, 67515, 67520, 67524, 67528, 67532, + 67536, 67540, 67544, 67548, 67552, 67556, 67561, 67566, 67571, 67576, + 67581, 67586, 67591, 67596, 67601, 67606, 67611, 67616, 67621, 67626, + 67631, 67636, 67641, 67646, 67651, 67656, 67661, 67666, 67671, 67676, + 67681, 67686, 67691, 67696, 67701, 67706, 67711, 67715, 67720, 67725, + 67730, 67735, 67740, 67745, 67750, 67755, 67760, 67765, 67770, 67775, + 67779, 67784, 67789, 67794, 67799, 67804, 67809, 67814, 67819, 67824, + 67828, 67835, 67842, 67849, 67856, 67863, 67870, 67877, 67884, 67891, + 67898, 67905, 67912, 67915, 67918, 67921, 67926, 67929, 67932, 67935, + 67938, 67941, 67944, 67948, 67952, 67956, 67960, 67963, 67967, 67971, + 67975, 67979, 67983, 67987, 67991, 67995, 67998, 68001, 68005, 68009, + 68013, 68017, 68020, 68024, 68028, 68032, 68036, 68039, 68043, 68047, + 68051, 68055, 68058, 68062, 68066, 68069, 68073, 68077, 68081, 68085, + 68089, 68093, 68097, 68101, 68108, 68111, 68114, 68117, 68120, 68123, + 68126, 68129, 68132, 68135, 68138, 68141, 68144, 68147, 68150, 68153, + 68156, 68159, 68162, 68165, 68168, 68171, 68174, 68177, 68180, 68183, + 68186, 68189, 68192, 68195, 68198, 68201, 68204, 68207, 68210, 68213, + 68216, 68219, 68222, 68225, 68228, 68231, 68234, 68237, 68240, 68243, + 68246, 68249, 68252, 68255, 68258, 68261, 68264, 68267, 68270, 68273, + 68276, 68279, 68282, 68285, 68288, 68291, 68294, 68297, 68300, 68303, + 68306, 68309, 68312, 68315, 68318, 68321, 68324, 68327, 68330, 68333, + 68336, 68339, 68342, 68345, 68348, 68351, 68354, 68357, 68360, 68363, + 68366, 68369, 68372, 68381, 68389, 68397, 68405, 68413, 68421, 68429, + 68437, 68445, 68453, 68462, 68471, 68480, 68489, 68498, 68507, 68516, + 68525, 68534, 68543, 68552, 68561, 68570, 68579, 68588, 68591, 68594, + 68597, 68599, 68602, 68605, 68608, 68613, 68618, 68621, 68628, 68635, + 68642, 68649, 68652, 68657, 68659, 68663, 68665, 68667, 68670, 68673, + 68676, 68679, 68682, 68685, 68688, 68693, 68698, 68701, 68704, 68707, + 68710, 68713, 68716, 68719, 68723, 68726, 68729, 68732, 68735, 68738, + 68743, 68746, 68749, 68752, 68757, 68762, 68767, 68772, 68777, 68782, + 68787, 68792, 68798, 68806, 68808, 68811, 68814, 68817, 68820, 68826, + 68834, 68837, 68840, 68845, 68848, 68851, 68854, 68859, 68862, 68865, + 68870, 68873, 68876, 68881, 68884, 68887, 68892, 68897, 68902, 68905, + 68908, 68911, 68914, 68920, 68923, 68926, 68929, 68931, 68934, 68937, + 68940, 68945, 68948, 68951, 68954, 68957, 68960, 68965, 68968, 68971, + 68974, 68977, 68980, 68983, 68986, 68989, 68992, 68998, 69003, 69011, + 69019, 69027, 69035, 69043, 69051, 69059, 69067, 69075, 69084, 69093, + 69102, 69111, 69120, 69129, 69138, 69147, 69156, 69165, 69174, 69183, + 69192, 69201, 69210, 69219, 69228, 69237, 69246, 69255, 69264, 69273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -22545,320 +22551,319 @@ static const unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69232, 69241, - 69250, 69261, 69268, 69273, 69278, 69285, 69292, 69298, 69303, 69308, - 69313, 69318, 69325, 69330, 69335, 69340, 69351, 69356, 69361, 69368, - 69373, 69380, 69385, 69390, 69397, 69404, 69411, 69420, 69429, 69434, - 69439, 69444, 69451, 69456, 69466, 69473, 69478, 69483, 69488, 69493, - 69498, 69503, 69511, 69518, 69525, 69530, 69537, 69542, 69549, 69558, - 69569, 69574, 69583, 69588, 69595, 69604, 69613, 69618, 69623, 69630, - 69636, 69643, 69650, 69654, 69658, 69661, 69665, 69669, 69673, 69677, - 69681, 69685, 69689, 69692, 69696, 69700, 69704, 69708, 69712, 69716, - 69719, 69723, 69727, 69730, 69734, 69738, 69742, 69746, 69750, 69754, - 69758, 69762, 69766, 69770, 69774, 69778, 69782, 69786, 69790, 69794, - 69798, 69802, 69806, 69810, 69814, 69818, 69822, 69826, 69830, 69834, - 69838, 69842, 69846, 69850, 69854, 69858, 69862, 69866, 69870, 69874, - 69878, 69882, 69886, 69890, 69894, 69898, 69902, 69906, 69909, 69913, - 69917, 69921, 69925, 69929, 69933, 69937, 69941, 69945, 69949, 69953, - 69957, 69961, 69965, 69969, 69973, 69977, 69981, 69985, 69989, 69993, - 69997, 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, 70033, - 70037, 70041, 70045, 70049, 70053, 70057, 70061, 70065, 70069, 70073, - 70077, 70081, 70085, 70089, 70093, 70097, 70101, 70105, 70109, 70113, - 70117, 70121, 70125, 70129, 70133, 70137, 70141, 70145, 70149, 70153, - 70157, 70161, 70165, 70169, 70173, 70177, 70181, 70185, 70189, 70193, - 70197, 70201, 70205, 70209, 70213, 70217, 70221, 70225, 70229, 70233, - 70237, 70241, 70245, 70249, 70253, 70257, 70261, 70265, 70269, 70273, - 70277, 70281, 70285, 70289, 70293, 70297, 70301, 70305, 70309, 70313, - 70317, 70321, 70325, 70329, 70333, 70337, 70341, 70345, 70349, 70353, - 70357, 70361, 70365, 70369, 70373, 70377, 70380, 70384, 70388, 70392, - 70396, 70400, 70404, 70408, 70412, 70416, 70420, 70424, 70428, 70432, - 70436, 70440, 70444, 70448, 70452, 70456, 70460, 70464, 70468, 70472, - 70476, 70480, 70484, 70488, 70492, 70496, 70500, 70504, 70508, 70512, - 70516, 70520, 70524, 70528, 70532, 70536, 70540, 70544, 70548, 70552, - 70556, 70560, 70564, 70568, 70572, 70576, 70580, 70584, 70588, 70592, - 70596, 70600, 70604, 70608, 70612, 70616, 70620, 70624, 70628, 70632, - 70636, 70640, 70644, 70648, 70652, 70656, 70660, 70664, 70668, 70672, - 70676, 70680, 70684, 70688, 70692, 70696, 70700, 70704, 70708, 70712, - 70716, 70720, 70724, 70728, 70732, 70736, 70740, 70744, 70748, 70752, - 70756, 70760, 70764, 70768, 70772, 70776, 70780, 70784, 70788, 70792, - 70796, 70800, 70804, 70808, 70812, 70816, 70820, 70824, 70828, 70832, - 70836, 70840, 70843, 70847, 70851, 70855, 70859, 70863, 70867, 70871, - 70875, 70879, 70883, 70887, 70891, 70895, 70899, 70903, 70907, 70911, - 70915, 70919, 70923, 70927, 70931, 70935, 70939, 70943, 70947, 70951, - 70955, 70959, 70963, 70967, 70971, 70975, 70979, 70983, 70987, 70991, - 70995, 70999, 71003, 71007, 71011, 71015, 71019, 71023, 71027, 71031, - 71035, 71039, 71043, 71047, 71051, 71055, 71059, 71063, 71067, 71071, - 71075, 71079, 71083, 71087, 71091, 71095, 71099, 71103, 71107, 71111, - 71115, 71119, 71123, 71127, 71131, 71135, 71139, 71143, 71147, 71151, - 71155, 71159, 71163, 71167, 71171, 71175, 71179, 71183, 71187, 71191, - 71195, 71199, 71202, 71206, 71210, 71214, 71218, 71222, 71226, 71230, - 71234, 71238, 71242, 71246, 71250, 71254, 71258, 71262, 71266, 71270, - 71274, 71278, 71282, 71286, 71290, 71294, 71298, 71302, 71306, 71310, - 71314, 71318, 71322, 71326, 71330, 71334, 71338, 71342, 71346, 71350, - 71354, 71358, 71362, 71366, 71370, 71374, 71378, 71382, 71386, 71390, - 71394, 71398, 71402, 71406, 71410, 71414, 71418, 71422, 71426, 71430, - 71434, 71438, 71441, 71445, 71449, 71453, 71457, 71461, 71465, 71469, - 71473, 71477, 71481, 71485, 71489, 71493, 71497, 71501, 71505, 71509, - 71513, 71517, 71521, 71525, 71529, 71533, 71537, 71541, 71545, 71549, - 71553, 71557, 71561, 71565, 71569, 71573, 71577, 71581, 71585, 71589, - 71593, 71597, 71601, 71605, 71609, 71613, 71617, 71621, 71625, 71629, - 71633, 71637, 71641, 71645, 71649, 71653, 71657, 71661, 71665, 71669, - 71673, 71677, 71681, 71685, 71689, 71693, 71696, 71700, 71704, 71708, - 71712, 71716, 71720, 71724, 71728, 71732, 71736, 71740, 71744, 71748, - 71752, 71756, 71760, 71764, 71768, 71772, 71776, 71780, 71784, 71788, - 71792, 71796, 71800, 71804, 71808, 71812, 71816, 71820, 71824, 71828, - 71832, 71836, 71840, 71844, 71848, 71852, 71856, 71860, 71864, 71868, - 71872, 71876, 71880, 71884, 71888, 71892, 71896, 71900, 71904, 71908, - 71912, 71916, 71920, 71924, 71928, 71932, 71936, 71940, 71944, 71948, - 71952, 71956, 71960, 71964, 71968, 71972, 71976, 71980, 71984, 71988, - 71992, 71996, 72000, 72004, 72008, 72012, 72016, 72020, 72024, 72028, - 72032, 72036, 72040, 72044, 72048, 72052, 72056, 72060, 72064, 72068, - 72072, 72076, 72080, 72084, 72088, 72092, 72096, 72100, 72104, 72108, - 72112, 72116, 72120, 72124, 72128, 72132, 72136, 72140, 72144, 72148, - 72151, 72155, 72159, 72163, 72167, 72171, 72175, 72179, 72183, 72187, - 72191, 72195, 72199, 72203, 72207, 72211, 72215, 72219, 72223, 72227, - 72231, 72235, 72239, 72243, 72247, 72251, 72255, 72259, 72263, 72267, - 72271, 72275, 72279, 72283, 72287, 72291, 72295, 72299, 72303, 72307, - 72311, 72315, 72319, 72323, 72327, 72331, 72335, 72339, 72343, 72347, - 72351, 72355, 72359, 72363, 72367, 72371, 72375, 72379, 72383, 72387, - 72391, 72395, 72399, 72403, 72407, 72411, 72415, 72419, 72423, 72427, - 72431, 72435, 72439, 72443, 72447, 72451, 72455, 72459, 72463, 72467, - 72471, 72475, 72479, 72483, 72487, 72491, 72495, 72499, 72503, 72507, - 72511, 72515, 72519, 72523, 72527, 72531, 72535, 72539, 72543, 72547, - 72551, 72555, 72559, 72563, 72567, 72571, 72575, 72579, 72583, 72587, - 72591, 72595, 72599, 72603, 72607, 72611, 72615, 72619, 72623, 72627, - 72631, 72635, 72639, 72643, 72647, 72651, 72655, 72659, 72663, 72667, - 72671, 72675, 72679, 72683, 72687, 72691, 72695, 72699, 72703, 72707, - 72711, 72715, 72719, 72723, 72727, 72731, 72735, 72739, 72743, 72747, - 72751, 72754, 72758, 72762, 72766, 72770, 72774, 72778, 72782, 72785, - 72789, 72793, 72797, 72801, 72805, 72809, 72813, 72817, 72821, 72825, - 72829, 72833, 72837, 72841, 72845, 72849, 72853, 72857, 72861, 72865, - 72869, 72873, 72877, 72881, 72885, 72889, 72893, 72897, 72901, 72905, - 72909, 72913, 72917, 72921, 72925, 72929, 72933, 72937, 72941, 72945, - 72949, 72953, 72957, 72961, 72965, 72969, 72973, 72977, 72981, 72985, - 72989, 72993, 72997, 73001, 73005, 73009, 73013, 73017, 73021, 73025, - 73029, 73033, 73037, 73041, 73045, 73049, 73053, 73057, 73061, 73065, - 73069, 73073, 73077, 73081, 73085, 73089, 73093, 73097, 73101, 73105, - 73109, 73113, 73117, 73121, 73125, 73129, 73133, 73137, 73141, 73145, - 73149, 73153, 73157, 73161, 73165, 73169, 73173, 73177, 73181, 73185, - 73189, 73193, 73197, 73201, 73205, 73209, 73213, 73217, 73221, 73225, - 73229, 73233, 73237, 73241, 73245, 73249, 73253, 73257, 73261, 73265, - 73269, 73273, 73277, 73281, 73285, 73289, 73293, 73297, 73301, 73305, - 73309, 73313, 73317, 73321, 73325, 73329, 73333, 73337, 73341, 73345, - 73349, 73353, 73357, 73361, 73365, 73369, 73373, 73377, 73381, 73385, - 73389, 73393, 73397, 73401, 73405, 73409, 73413, 73417, 73421, 73425, - 73429, 73433, 73437, 73441, 73445, 73449, 73453, 73457, 73461, 73465, - 73469, 73473, 73477, 73481, 73485, 73489, 73493, 73497, 73501, 73505, - 73509, 73512, 73516, 73520, 73524, 73528, 73532, 73536, 73540, 73544, - 73548, 73552, 73556, 73560, 73564, 73568, 73572, 73576, 73580, 73584, - 73588, 73592, 73596, 73600, 73604, 73608, 73612, 73616, 73620, 73624, - 73628, 73632, 73636, 73640, 73644, 73648, 73652, 73656, 73660, 73664, - 73668, 73672, 73676, 73680, 73684, 73688, 73692, 73696, 73700, 73704, - 73708, 73712, 73716, 73720, 73724, 73728, 73732, 73736, 73740, 73744, - 73748, 73752, 73756, 73760, 73764, 73768, 73772, 73776, 73780, 73784, - 73788, 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, 73824, - 73828, 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, 73864, - 73868, 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, 73904, - 73908, 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, 73944, - 73948, 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, 73984, - 73988, 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, 74024, - 74028, 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, 74064, - 74068, 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, 74104, - 74108, 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, 74144, - 74148, 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, 74184, - 74188, 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, 74224, - 74228, 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, 74264, - 74268, 74272, 74276, 74280, 74284, 74288, 74292, 0, 0, 0, 74296, 74300, - 74304, 74308, 74312, 74316, 74320, 74324, 74328, 74332, 74336, 74340, - 74344, 74348, 74352, 74356, 74360, 74364, 74368, 74372, 74376, 74380, - 74384, 74388, 74392, 74396, 74400, 74404, 74408, 74412, 74416, 74420, - 74424, 74428, 74432, 74436, 74440, 74444, 74448, 74452, 74456, 74460, - 74464, 74468, 74472, 74476, 74480, 74484, 74488, 74492, 74496, 74500, - 74504, 74508, 74512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74516, 74521, 74525, - 74530, 74535, 74540, 74545, 74550, 74554, 74559, 74564, 74569, 74574, - 74579, 74584, 74589, 74593, 74597, 74601, 74605, 74610, 74615, 74620, - 74624, 74629, 74634, 74639, 74644, 74649, 74653, 74658, 74662, 74667, - 74671, 74676, 74680, 74684, 74688, 74693, 74698, 74703, 74711, 74719, - 74727, 74735, 74742, 74750, 74756, 74764, 74768, 74772, 74776, 74780, - 74784, 74788, 74792, 74796, 74800, 74804, 74808, 74812, 74816, 74820, - 74824, 74828, 74832, 74836, 74840, 74844, 74848, 74852, 74856, 74860, - 74864, 74868, 74872, 74876, 74880, 74884, 74888, 74892, 74896, 74900, - 74904, 74908, 74911, 74915, 74919, 74923, 74927, 74931, 74935, 74939, - 74943, 74947, 74951, 74955, 74959, 74963, 74967, 74971, 74975, 74979, - 74983, 74987, 74991, 74995, 74999, 75003, 75007, 75011, 75015, 75019, - 75023, 75027, 75031, 75035, 75039, 75043, 75047, 75051, 75055, 75058, - 75062, 75066, 75069, 75073, 75077, 75081, 75084, 75088, 75092, 75096, - 75100, 75104, 75108, 75112, 75116, 75120, 75124, 75128, 75132, 75136, - 75139, 75142, 75146, 75150, 75153, 75157, 75161, 75165, 75169, 75173, - 75177, 75180, 75183, 75187, 75191, 75195, 75198, 75201, 75205, 75209, - 75213, 75217, 75221, 75225, 75229, 75233, 75237, 75241, 75245, 75249, - 75253, 75257, 75261, 75265, 75269, 75273, 75277, 75281, 75285, 75289, - 75293, 75297, 75301, 75305, 75309, 75313, 75317, 75321, 75325, 75329, - 75333, 75337, 75341, 75345, 75349, 75352, 75356, 75360, 75364, 75368, - 75372, 75376, 75380, 75384, 75388, 75392, 75396, 75400, 75404, 75408, - 75412, 75416, 75420, 75424, 75428, 75432, 75436, 75440, 75444, 75448, - 75452, 75456, 75460, 75464, 75468, 75472, 75476, 75480, 75484, 75488, - 75492, 75496, 75499, 75503, 75507, 75511, 75515, 75519, 75523, 75527, - 75531, 75535, 75539, 75543, 75547, 75551, 75555, 75559, 75563, 75566, - 75570, 75574, 75578, 75582, 75586, 75590, 75594, 75598, 75602, 75606, - 75610, 75614, 75618, 75622, 75626, 75630, 75634, 75638, 75642, 75646, - 75650, 75653, 75657, 75661, 75665, 75669, 75673, 75677, 75681, 75685, - 75689, 75693, 75697, 75701, 75705, 75709, 75713, 75717, 75721, 75725, - 75729, 75733, 75737, 75741, 75745, 75749, 75753, 75757, 75761, 75765, - 75769, 75773, 75777, 75781, 75785, 75789, 75793, 75797, 75801, 75805, - 75809, 75813, 75817, 75821, 75825, 75828, 75833, 75837, 75843, 75848, - 75854, 75858, 75862, 75866, 75870, 75874, 75878, 75882, 75886, 75890, - 75894, 75898, 75902, 75906, 75910, 75913, 75916, 75919, 75922, 75925, - 75928, 75931, 75934, 75937, 75942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75948, 75953, 75958, 75963, 75968, 75975, 75982, - 75987, 75992, 75997, 76002, 76009, 76016, 76023, 76030, 76037, 76044, - 76054, 76064, 76071, 76078, 76085, 76092, 76098, 76104, 76113, 76122, - 76129, 76136, 76147, 76158, 76163, 76168, 76175, 76182, 76189, 76196, - 76203, 76210, 76217, 76224, 76230, 76236, 76242, 76248, 76255, 76262, - 76267, 76271, 76278, 76285, 76292, 76296, 76303, 76307, 76312, 76316, - 76322, 76327, 76333, 76338, 76342, 76346, 76349, 76352, 76357, 76362, - 76367, 76372, 76377, 76382, 76387, 76392, 76397, 76402, 76410, 76418, - 76423, 76428, 76433, 76438, 76443, 76448, 76453, 76458, 76463, 76468, - 76473, 76478, 76483, 76488, 76494, 76500, 76506, 76512, 76517, 76523, - 76526, 76529, 76532, 76536, 76540, 76544, 76548, 76551, 76555, 76558, - 76561, 76564, 76568, 76572, 76576, 76580, 76584, 76588, 76592, 76596, - 76600, 76604, 76608, 76612, 76616, 76620, 76624, 76628, 76632, 76636, - 76640, 76644, 76648, 76652, 76655, 76659, 76663, 76667, 76671, 76675, - 76679, 76683, 76687, 76691, 76695, 76699, 76703, 76707, 76711, 76715, - 76719, 76723, 76727, 76731, 76735, 76739, 76743, 76747, 76751, 76754, - 76758, 76762, 76766, 76770, 76774, 76778, 76782, 76785, 76789, 76793, - 76797, 76801, 76805, 76809, 76813, 76817, 76821, 76825, 76829, 76833, - 76838, 76843, 76846, 76851, 76854, 76857, 76860, 0, 0, 0, 0, 0, 0, 0, 0, - 76864, 76873, 76882, 76891, 76900, 76909, 76918, 76927, 76936, 76944, - 76951, 76959, 76966, 76974, 76984, 76993, 77003, 77012, 77022, 77030, - 77037, 77045, 77052, 77060, 77065, 77070, 77076, 77084, 77090, 77096, - 77103, 77112, 77120, 77128, 77136, 77143, 77150, 77157, 77164, 77169, - 77174, 77179, 77184, 77189, 77194, 77199, 77204, 77212, 77220, 77226, - 77232, 77237, 77242, 77247, 77252, 77257, 77262, 77267, 77272, 77281, - 77290, 77295, 77300, 77310, 77320, 77327, 77334, 77343, 77352, 77364, - 77376, 77382, 77388, 77396, 77404, 77414, 77424, 77431, 77438, 77443, - 77448, 77460, 77472, 77480, 77488, 77498, 77508, 77520, 77532, 77541, - 77550, 77557, 77564, 77571, 77578, 77587, 77596, 77601, 77606, 77613, - 77620, 77627, 77634, 77646, 77658, 77663, 77668, 77673, 77678, 77683, - 77688, 77693, 77698, 77702, 77707, 77712, 77717, 77722, 77727, 77733, - 77738, 77743, 77750, 77757, 77764, 77771, 77778, 77786, 77794, 77799, - 77804, 77810, 77816, 77823, 77830, 77837, 77844, 77851, 77855, 77862, - 77867, 77872, 77878, 77891, 77897, 77905, 77913, 77920, 77927, 77936, - 77945, 77952, 77959, 77966, 77973, 77980, 77987, 77994, 78001, 78008, - 78015, 78024, 78033, 78042, 78051, 78060, 78069, 78078, 78087, 78096, - 78105, 78112, 78120, 78126, 78134, 78140, 78146, 78152, 78158, 78166, - 78171, 78176, 78181, 78186, 78191, 78197, 78203, 78209, 78215, 78221, - 78227, 78233, 78239, 78246, 78253, 78260, 78267, 78276, 78283, 78292, - 78304, 78316, 78328, 0, 0, 0, 0, 0, 78340, 78349, 0, 78358, 0, 78364, - 78370, 78378, 78386, 78393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 78400, 78405, 78410, 78415, 78423, 78431, - 78438, 78445, 78451, 78458, 78466, 78474, 78482, 78490, 78498, 78504, - 78510, 78517, 78523, 78529, 78535, 78542, 78549, 78556, 78563, 78570, - 78577, 78584, 78591, 78598, 78605, 78612, 78619, 78626, 78633, 78639, - 78646, 78653, 78660, 78667, 78674, 78681, 78688, 78695, 78702, 78709, - 78716, 78723, 78730, 78737, 78744, 78751, 78758, 78765, 78773, 78781, - 78789, 78797, 78805, 0, 0, 0, 78814, 78822, 78830, 78838, 78846, 78854, - 78862, 78868, 78874, 78880, 0, 0, 0, 0, 0, 0, 78886, 78890, 78895, 78900, - 78905, 78910, 78915, 78920, 78925, 78930, 78935, 78940, 78944, 78948, - 78953, 78958, 78962, 78967, 78972, 78977, 78982, 78987, 78992, 78997, - 79001, 79005, 79009, 79014, 79018, 79022, 79026, 79030, 79034, 79038, - 79042, 79047, 79052, 79057, 79062, 79067, 79074, 79080, 79085, 79090, - 79095, 79100, 79106, 79113, 79119, 79126, 79132, 79138, 79143, 79150, - 79156, 79161, 0, 0, 0, 0, 0, 0, 0, 0, 79167, 79172, 79177, 79181, 79186, - 79190, 79195, 79199, 79204, 79209, 79215, 79220, 79226, 79230, 79235, - 79240, 79244, 79249, 79254, 79258, 79263, 79268, 79273, 79278, 79283, - 79288, 79293, 79298, 79303, 79308, 79313, 79318, 79323, 79328, 79333, - 79338, 79343, 79348, 79352, 79356, 79361, 79366, 79371, 79375, 79379, - 79383, 79387, 79392, 79397, 79402, 79406, 79410, 79415, 79421, 79427, - 79432, 79438, 79443, 79449, 79455, 79462, 79468, 79475, 79480, 79486, - 79492, 79497, 79503, 79509, 79514, 0, 0, 0, 0, 0, 0, 0, 0, 79519, 79523, - 79528, 79533, 79537, 79541, 79545, 79549, 79553, 79557, 79561, 79565, 0, - 0, 0, 0, 0, 0, 79569, 79574, 79578, 79582, 79586, 79590, 79594, 79598, - 79602, 79606, 79610, 79614, 79618, 79622, 79626, 79630, 79634, 79639, - 79644, 79650, 79656, 79663, 79668, 79673, 79679, 79683, 79688, 79691, - 79694, 79698, 79703, 79707, 79712, 79719, 79725, 79731, 79737, 79743, - 79749, 79755, 79761, 79767, 79773, 79779, 79786, 79793, 79800, 79806, - 79813, 79820, 79827, 79834, 79841, 79847, 79853, 79860, 79866, 79873, - 79880, 79886, 79892, 79898, 79905, 79912, 79918, 79925, 79932, 79938, - 79945, 79951, 79958, 79965, 79971, 79977, 79984, 79990, 79997, 80004, - 80013, 80020, 80027, 80031, 80036, 80041, 80046, 80051, 80055, 80059, - 80064, 80068, 80073, 80078, 80083, 80087, 80091, 80095, 80099, 80104, - 80108, 80113, 80118, 80123, 80128, 80132, 80137, 80142, 80147, 80153, - 80158, 80164, 80170, 80176, 80182, 80188, 80193, 80199, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80203, 80208, 80212, 80216, 80220, 80224, 80228, 80232, - 80236, 80240, 80244, 80248, 80252, 80256, 80260, 80264, 80268, 80272, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 69276, 69285, 69294, 69305, 69312, 69317, 69322, 69329, 69336, 69342, + 69347, 69352, 69357, 69362, 69369, 69374, 69379, 69384, 69395, 69400, + 69405, 69412, 69417, 69424, 69429, 69434, 69441, 69448, 69455, 69464, + 69473, 69478, 69483, 69488, 69495, 69500, 69510, 69517, 69522, 69527, + 69532, 69537, 69542, 69547, 69555, 69562, 69569, 69574, 69581, 69586, + 69593, 69602, 69613, 69618, 69627, 69632, 69639, 69648, 69657, 69662, + 69667, 69674, 69680, 69687, 69694, 69698, 69702, 69705, 69709, 69713, + 69717, 69721, 69725, 69729, 69733, 69736, 69740, 69744, 69748, 69752, + 69756, 69760, 69763, 69767, 69771, 69774, 69778, 69782, 69786, 69790, + 69794, 69798, 69802, 69806, 69810, 69814, 69818, 69822, 69826, 69830, + 69834, 69838, 69842, 69846, 69850, 69854, 69858, 69862, 69866, 69870, + 69874, 69878, 69882, 69886, 69890, 69894, 69898, 69902, 69906, 69910, + 69914, 69918, 69922, 69926, 69930, 69934, 69938, 69942, 69946, 69950, + 69953, 69957, 69961, 69965, 69969, 69973, 69977, 69981, 69985, 69989, + 69993, 69997, 70001, 70005, 70009, 70013, 70017, 70021, 70025, 70029, + 70033, 70037, 70041, 70045, 70049, 70053, 70057, 70061, 70065, 70069, + 70073, 70077, 70081, 70085, 70089, 70093, 70097, 70101, 70105, 70109, + 70113, 70117, 70121, 70125, 70129, 70133, 70137, 70141, 70145, 70149, + 70153, 70157, 70161, 70165, 70169, 70173, 70177, 70181, 70185, 70189, + 70193, 70197, 70201, 70205, 70209, 70213, 70217, 70221, 70225, 70229, + 70233, 70237, 70241, 70245, 70249, 70253, 70257, 70261, 70265, 70269, + 70273, 70277, 70281, 70285, 70289, 70293, 70297, 70301, 70305, 70309, + 70313, 70317, 70321, 70325, 70329, 70333, 70337, 70341, 70345, 70349, + 70353, 70357, 70361, 70365, 70369, 70373, 70377, 70381, 70385, 70389, + 70393, 70397, 70401, 70405, 70409, 70413, 70417, 70421, 70424, 70428, + 70432, 70436, 70440, 70444, 70448, 70452, 70456, 70460, 70464, 70468, + 70472, 70476, 70480, 70484, 70488, 70492, 70496, 70500, 70504, 70508, + 70512, 70516, 70520, 70524, 70528, 70532, 70536, 70540, 70544, 70548, + 70552, 70556, 70560, 70564, 70568, 70572, 70576, 70580, 70584, 70588, + 70592, 70596, 70600, 70604, 70608, 70612, 70616, 70620, 70624, 70628, + 70632, 70636, 70640, 70644, 70648, 70652, 70656, 70660, 70664, 70668, + 70672, 70676, 70680, 70684, 70688, 70692, 70696, 70700, 70704, 70708, + 70712, 70716, 70720, 70724, 70728, 70732, 70736, 70740, 70744, 70748, + 70752, 70756, 70760, 70764, 70768, 70772, 70776, 70780, 70784, 70788, + 70792, 70796, 70800, 70804, 70808, 70812, 70816, 70820, 70824, 70828, + 70832, 70836, 70840, 70844, 70848, 70852, 70856, 70860, 70864, 70868, + 70872, 70876, 70880, 70884, 70887, 70891, 70895, 70899, 70903, 70907, + 70911, 70915, 70919, 70923, 70927, 70931, 70935, 70939, 70943, 70947, + 70951, 70955, 70959, 70963, 70967, 70971, 70975, 70979, 70983, 70987, + 70991, 70995, 70999, 71003, 71007, 71011, 71015, 71019, 71023, 71027, + 71031, 71035, 71039, 71043, 71047, 71051, 71055, 71059, 71063, 71067, + 71071, 71075, 71079, 71083, 71087, 71091, 71095, 71099, 71103, 71107, + 71111, 71115, 71119, 71123, 71127, 71131, 71135, 71139, 71143, 71147, + 71151, 71155, 71159, 71163, 71167, 71171, 71175, 71179, 71183, 71187, + 71191, 71195, 71199, 71203, 71207, 71211, 71215, 71219, 71223, 71227, + 71231, 71235, 71239, 71243, 71246, 71250, 71254, 71258, 71262, 71266, + 71270, 71274, 71278, 71282, 71286, 71290, 71294, 71298, 71302, 71306, + 71310, 71314, 71318, 71322, 71326, 71330, 71334, 71338, 71342, 71346, + 71350, 71354, 71358, 71362, 71366, 71370, 71374, 71378, 71382, 71386, + 71390, 71394, 71398, 71402, 71406, 71410, 71414, 71418, 71422, 71426, + 71430, 71434, 71438, 71442, 71446, 71450, 71454, 71458, 71462, 71466, + 71470, 71474, 71478, 71482, 71485, 71489, 71493, 71497, 71501, 71505, + 71509, 71513, 71517, 71521, 71525, 71529, 71533, 71537, 71541, 71545, + 71549, 71553, 71557, 71561, 71565, 71569, 71573, 71577, 71581, 71585, + 71589, 71593, 71597, 71601, 71605, 71609, 71613, 71617, 71621, 71625, + 71629, 71633, 71637, 71641, 71645, 71649, 71653, 71657, 71661, 71665, + 71669, 71673, 71677, 71681, 71685, 71689, 71693, 71697, 71701, 71705, + 71709, 71713, 71717, 71721, 71725, 71729, 71733, 71737, 71740, 71744, + 71748, 71752, 71756, 71760, 71764, 71768, 71772, 71776, 71780, 71784, + 71788, 71792, 71796, 71800, 71804, 71808, 71812, 71816, 71820, 71824, + 71828, 71832, 71836, 71840, 71844, 71848, 71852, 71856, 71860, 71864, + 71868, 71872, 71876, 71880, 71884, 71888, 71892, 71896, 71900, 71904, + 71908, 71912, 71916, 71920, 71924, 71928, 71932, 71936, 71940, 71944, + 71948, 71952, 71956, 71960, 71964, 71968, 71972, 71976, 71980, 71984, + 71988, 71992, 71996, 72000, 72004, 72008, 72012, 72016, 72020, 72024, + 72028, 72032, 72036, 72040, 72044, 72048, 72052, 72056, 72060, 72064, + 72068, 72072, 72076, 72080, 72084, 72088, 72092, 72096, 72100, 72104, + 72108, 72112, 72116, 72120, 72124, 72128, 72132, 72136, 72140, 72144, + 72148, 72152, 72156, 72160, 72164, 72168, 72172, 72176, 72180, 72184, + 72188, 72192, 72195, 72199, 72203, 72207, 72211, 72215, 72219, 72223, + 72227, 72231, 72235, 72239, 72243, 72247, 72251, 72255, 72259, 72263, + 72267, 72271, 72275, 72279, 72283, 72287, 72291, 72295, 72299, 72303, + 72307, 72311, 72315, 72319, 72323, 72327, 72331, 72335, 72339, 72343, + 72347, 72351, 72355, 72359, 72363, 72367, 72371, 72375, 72379, 72383, + 72387, 72391, 72395, 72399, 72403, 72407, 72411, 72415, 72419, 72423, + 72427, 72431, 72435, 72439, 72443, 72447, 72451, 72455, 72459, 72463, + 72467, 72471, 72475, 72479, 72483, 72487, 72491, 72495, 72499, 72503, + 72507, 72511, 72515, 72519, 72523, 72527, 72531, 72535, 72539, 72543, + 72547, 72551, 72555, 72559, 72563, 72567, 72571, 72575, 72579, 72583, + 72587, 72591, 72595, 72599, 72603, 72607, 72611, 72615, 72619, 72623, + 72627, 72631, 72635, 72639, 72643, 72647, 72651, 72655, 72659, 72663, + 72667, 72671, 72675, 72679, 72683, 72687, 72691, 72695, 72699, 72703, + 72707, 72711, 72715, 72719, 72723, 72727, 72731, 72735, 72739, 72743, + 72747, 72751, 72755, 72759, 72763, 72767, 72771, 72775, 72779, 72783, + 72787, 72791, 72795, 72798, 72802, 72806, 72810, 72814, 72818, 72822, + 72826, 72829, 72833, 72837, 72841, 72845, 72849, 72853, 72857, 72861, + 72865, 72869, 72873, 72877, 72881, 72885, 72889, 72893, 72897, 72901, + 72905, 72909, 72913, 72917, 72921, 72925, 72929, 72933, 72937, 72941, + 72945, 72949, 72953, 72957, 72961, 72965, 72969, 72973, 72977, 72981, + 72985, 72989, 72993, 72997, 73001, 73005, 73009, 73013, 73017, 73021, + 73025, 73029, 73033, 73037, 73041, 73045, 73049, 73053, 73057, 73061, + 73065, 73069, 73073, 73077, 73081, 73085, 73089, 73093, 73097, 73101, + 73105, 73109, 73113, 73117, 73121, 73125, 73129, 73133, 73137, 73141, + 73145, 73149, 73153, 73157, 73161, 73165, 73169, 73173, 73177, 73181, + 73185, 73189, 73193, 73197, 73201, 73205, 73209, 73213, 73217, 73221, + 73225, 73229, 73233, 73237, 73241, 73245, 73249, 73253, 73257, 73261, + 73265, 73269, 73273, 73277, 73281, 73285, 73289, 73293, 73297, 73301, + 73305, 73309, 73313, 73317, 73321, 73325, 73329, 73333, 73337, 73341, + 73345, 73349, 73353, 73357, 73361, 73365, 73369, 73373, 73377, 73381, + 73385, 73389, 73393, 73397, 73401, 73405, 73409, 73413, 73417, 73421, + 73425, 73429, 73433, 73437, 73441, 73445, 73449, 73453, 73457, 73461, + 73465, 73469, 73473, 73477, 73481, 73485, 73489, 73493, 73497, 73501, + 73505, 73509, 73513, 73517, 73521, 73525, 73529, 73533, 73537, 73541, + 73545, 73549, 73553, 73556, 73560, 73564, 73568, 73572, 73576, 73580, + 73584, 73588, 73592, 73596, 73600, 73604, 73608, 73612, 73616, 73620, + 73624, 73628, 73632, 73636, 73640, 73644, 73648, 73652, 73656, 73660, + 73664, 73668, 73672, 73676, 73680, 73684, 73688, 73692, 73696, 73700, + 73704, 73708, 73712, 73716, 73720, 73724, 73728, 73732, 73736, 73740, + 73744, 73748, 73752, 73756, 73760, 73764, 73768, 73772, 73776, 73780, + 73784, 73788, 73792, 73796, 73800, 73804, 73808, 73812, 73816, 73820, + 73824, 73828, 73832, 73836, 73840, 73844, 73848, 73852, 73856, 73860, + 73864, 73868, 73872, 73876, 73880, 73884, 73888, 73892, 73896, 73900, + 73904, 73908, 73912, 73916, 73920, 73924, 73928, 73932, 73936, 73940, + 73944, 73948, 73952, 73956, 73960, 73964, 73968, 73972, 73976, 73980, + 73984, 73988, 73992, 73996, 74000, 74004, 74008, 74012, 74016, 74020, + 74024, 74028, 74032, 74036, 74040, 74044, 74048, 74052, 74056, 74060, + 74064, 74068, 74072, 74076, 74080, 74084, 74088, 74092, 74096, 74100, + 74104, 74108, 74112, 74116, 74120, 74124, 74128, 74132, 74136, 74140, + 74144, 74148, 74152, 74156, 74160, 74164, 74168, 74172, 74176, 74180, + 74184, 74188, 74192, 74196, 74200, 74204, 74208, 74212, 74216, 74220, + 74224, 74228, 74232, 74236, 74240, 74244, 74248, 74252, 74256, 74260, + 74264, 74268, 74272, 74276, 74280, 74284, 74288, 74292, 74296, 74300, + 74304, 74308, 74312, 74316, 74320, 74324, 74328, 74332, 74336, 0, 0, 0, + 74340, 74344, 74348, 74352, 74356, 74360, 74364, 74368, 74372, 74376, + 74380, 74384, 74388, 74392, 74396, 74400, 74404, 74408, 74412, 74416, + 74420, 74424, 74428, 74432, 74436, 74440, 74444, 74448, 74452, 74456, + 74460, 74464, 74468, 74472, 74476, 74480, 74484, 74488, 74492, 74496, + 74500, 74504, 74508, 74512, 74516, 74520, 74524, 74528, 74532, 74536, + 74540, 74544, 74548, 74552, 74556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74560, + 74565, 74569, 74574, 74579, 74584, 74589, 74594, 74598, 74603, 74608, + 74613, 74618, 74623, 74628, 74633, 74637, 74641, 74645, 74649, 74654, + 74659, 74664, 74668, 74673, 74678, 74683, 74688, 74693, 74697, 74702, + 74706, 74711, 74715, 74720, 74724, 74728, 74732, 74737, 74742, 74747, + 74755, 74763, 74771, 74779, 74786, 74794, 74800, 74808, 74812, 74816, + 74820, 74824, 74828, 74832, 74836, 74840, 74844, 74848, 74852, 74856, + 74860, 74864, 74868, 74872, 74876, 74880, 74884, 74888, 74892, 74896, + 74900, 74904, 74908, 74912, 74916, 74920, 74924, 74928, 74932, 74936, + 74940, 74944, 74948, 74952, 74955, 74959, 74963, 74967, 74971, 74975, + 74979, 74983, 74987, 74991, 74995, 74999, 75003, 75007, 75011, 75015, + 75019, 75023, 75027, 75031, 75035, 75039, 75043, 75047, 75051, 75055, + 75059, 75063, 75067, 75071, 75075, 75079, 75083, 75087, 75091, 75095, + 75099, 75102, 75106, 75110, 75113, 75117, 75121, 75125, 75128, 75132, + 75136, 75140, 75144, 75148, 75152, 75156, 75160, 75164, 75168, 75172, + 75176, 75180, 75183, 75186, 75190, 75194, 75197, 75201, 75205, 75209, + 75213, 75217, 75221, 75224, 75227, 75231, 75235, 75239, 75242, 75245, + 75249, 75253, 75257, 75261, 75265, 75269, 75273, 75277, 75281, 75285, + 75289, 75293, 75297, 75301, 75305, 75309, 75313, 75317, 75321, 75325, + 75329, 75333, 75337, 75341, 75345, 75349, 75353, 75357, 75361, 75365, + 75369, 75373, 75377, 75381, 75385, 75389, 75393, 75396, 75400, 75404, + 75408, 75412, 75416, 75420, 75424, 75428, 75432, 75436, 75440, 75444, + 75448, 75452, 75456, 75460, 75464, 75468, 75472, 75476, 75480, 75484, + 75488, 75492, 75496, 75500, 75504, 75508, 75512, 75516, 75520, 75524, + 75528, 75532, 75536, 75540, 75543, 75547, 75551, 75555, 75559, 75563, + 75567, 75571, 75575, 75579, 75583, 75587, 75591, 75595, 75599, 75603, + 75607, 75610, 75614, 75618, 75622, 75626, 75630, 75634, 75638, 75642, + 75646, 75650, 75654, 75658, 75662, 75666, 75670, 75674, 75678, 75682, + 75686, 75690, 75694, 75697, 75701, 75705, 75709, 75713, 75717, 75721, + 75725, 75729, 75733, 75737, 75741, 75745, 75749, 75753, 75757, 75761, + 75765, 75769, 75773, 75777, 75781, 75785, 75789, 75793, 75797, 75801, + 75805, 75809, 75813, 75817, 75821, 75825, 75829, 75833, 75837, 75841, + 75845, 75849, 75853, 75857, 75861, 75865, 75869, 75872, 75877, 75881, + 75887, 75892, 75898, 75902, 75906, 75910, 75914, 75918, 75922, 75926, + 75930, 75934, 75938, 75942, 75946, 75950, 75954, 75957, 75960, 75963, + 75966, 75969, 75972, 75975, 75978, 75981, 75986, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75992, 75997, 76002, 76007, 76012, + 76019, 76026, 76031, 76036, 76041, 76046, 76053, 76060, 76067, 76074, + 76081, 76088, 76098, 76108, 76115, 76122, 76129, 76136, 76142, 76148, + 76157, 76166, 76173, 76180, 76191, 76202, 76207, 76212, 76219, 76226, + 76233, 76240, 76247, 76254, 76261, 76268, 76274, 76280, 76286, 76292, + 76299, 76306, 76311, 76315, 76322, 76329, 76336, 76340, 76347, 76351, + 76356, 76360, 76366, 76371, 76377, 76382, 76386, 76390, 76393, 76396, + 76401, 76406, 76411, 76416, 76421, 76426, 76431, 76436, 76441, 76446, + 76454, 76462, 76467, 76472, 76477, 76482, 76487, 76492, 76497, 76502, + 76507, 76512, 76517, 76522, 76527, 76532, 76538, 76544, 76550, 76556, + 76561, 76567, 76570, 76573, 76576, 76580, 76584, 76588, 76592, 76595, + 76599, 76602, 76605, 76608, 76612, 76616, 76620, 76624, 76628, 76632, + 76636, 76640, 76644, 76648, 76652, 76656, 76660, 76664, 76668, 76672, + 76676, 76680, 76684, 76688, 76692, 76696, 76699, 76703, 76707, 76711, + 76715, 76719, 76723, 76727, 76731, 76735, 76739, 76743, 76747, 76751, + 76755, 76759, 76763, 76767, 76771, 76775, 76779, 76783, 76787, 76791, + 76795, 76798, 76802, 76806, 76810, 76814, 76818, 76822, 76826, 76829, + 76833, 76837, 76841, 76845, 76849, 76853, 76857, 76861, 76865, 76869, + 76873, 76877, 76882, 76887, 76890, 76895, 76898, 76901, 76904, 0, 0, 0, + 0, 0, 0, 0, 0, 76908, 76917, 76926, 76935, 76944, 76953, 76962, 76971, + 76980, 76988, 76995, 77003, 77010, 77018, 77028, 77037, 77047, 77056, + 77066, 77074, 77081, 77089, 77096, 77104, 77109, 77114, 77120, 77128, + 77134, 77140, 77147, 77156, 77164, 77172, 77180, 77187, 77194, 77201, + 77208, 77213, 77218, 77223, 77228, 77233, 77238, 77243, 77248, 77256, + 77264, 77270, 77276, 77281, 77286, 77291, 77296, 77301, 77306, 77311, + 77316, 77325, 77334, 77339, 77344, 77354, 77364, 77371, 77378, 77387, + 77396, 77408, 77420, 77426, 77432, 77440, 77448, 77458, 77468, 77475, + 77482, 77487, 77492, 77504, 77516, 77524, 77532, 77542, 77552, 77564, + 77576, 77585, 77594, 77601, 77608, 77615, 77622, 77631, 77640, 77645, + 77650, 77657, 77664, 77671, 77678, 77690, 77702, 77707, 77712, 77717, + 77722, 77727, 77732, 77737, 77742, 77746, 77751, 77756, 77761, 77766, + 77771, 77777, 77782, 77787, 77794, 77801, 77808, 77815, 77822, 77830, + 77838, 77843, 77848, 77854, 77860, 77867, 77874, 77881, 77888, 77895, + 77899, 77906, 77911, 77916, 77922, 77935, 77941, 77949, 77957, 77964, + 77971, 77980, 77989, 77996, 78003, 78010, 78017, 78024, 78031, 78038, + 78045, 78052, 78059, 78068, 78077, 78086, 78095, 78104, 78113, 78122, + 78131, 78140, 78149, 78156, 78164, 78170, 78178, 78184, 78190, 78196, + 78202, 78210, 78215, 78220, 78225, 78230, 78235, 78241, 78247, 78253, + 78259, 78265, 78271, 78277, 78283, 78290, 78297, 78304, 78311, 78320, + 78327, 78336, 78348, 78360, 78372, 0, 0, 0, 0, 0, 78384, 78393, 0, 78402, + 0, 78408, 78414, 78422, 78430, 78437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78444, 78449, 78454, 78459, 78467, + 78475, 78482, 78489, 78495, 78502, 78510, 78518, 78526, 78534, 78542, + 78548, 78554, 78561, 78567, 78573, 78579, 78586, 78593, 78600, 78607, + 78614, 78621, 78628, 78635, 78642, 78649, 78656, 78663, 78670, 78677, + 78683, 78690, 78697, 78704, 78711, 78718, 78725, 78732, 78739, 78746, + 78753, 78760, 78767, 78774, 78781, 78788, 78795, 78802, 78809, 78817, + 78825, 78833, 78841, 78849, 0, 0, 0, 78858, 78866, 78874, 78882, 78890, + 78898, 78906, 78912, 78918, 78924, 0, 0, 0, 0, 0, 0, 78930, 78934, 78939, + 78944, 78949, 78954, 78959, 78964, 78969, 78974, 78979, 78984, 78988, + 78992, 78997, 79002, 79006, 79011, 79016, 79021, 79026, 79031, 79036, + 79041, 79045, 79049, 79053, 79058, 79062, 79066, 79070, 79074, 79078, + 79082, 79086, 79091, 79096, 79101, 79106, 79111, 79118, 79124, 79129, + 79134, 79139, 79144, 79150, 79157, 79163, 79170, 79176, 79182, 79187, + 79194, 79200, 79205, 0, 0, 0, 0, 0, 0, 0, 0, 79211, 79216, 79221, 79225, + 79230, 79234, 79239, 79243, 79248, 79253, 79259, 79264, 79270, 79274, + 79279, 79284, 79288, 79293, 79298, 79302, 79307, 79312, 79317, 79322, + 79327, 79332, 79337, 79342, 79347, 79352, 79357, 79362, 79367, 79372, + 79377, 79382, 79387, 79392, 79396, 79400, 79405, 79410, 79415, 79419, + 79423, 79427, 79431, 79436, 79441, 79446, 79450, 79454, 79459, 79465, + 79471, 79476, 79482, 79487, 79493, 79499, 79506, 79512, 79519, 79524, + 79530, 79536, 79541, 79547, 79553, 79558, 0, 0, 0, 0, 0, 0, 0, 0, 79563, + 79567, 79572, 79577, 79581, 79585, 79589, 79593, 79597, 79601, 79605, + 79609, 0, 0, 0, 0, 0, 0, 79613, 79618, 79622, 79626, 79630, 79634, 79638, + 79642, 79646, 79650, 79654, 79658, 79662, 79666, 79670, 79674, 79678, + 79683, 79688, 79694, 79700, 79707, 79712, 79717, 79723, 79727, 79732, + 79735, 79738, 79742, 79747, 79751, 79756, 79763, 79769, 79775, 79781, + 79787, 79793, 79799, 79805, 79811, 79817, 79823, 79830, 79837, 79844, + 79850, 79857, 79864, 79871, 79878, 79885, 79891, 79897, 79904, 79910, + 79917, 79924, 79930, 79936, 79942, 79949, 79956, 79962, 79969, 79976, + 79982, 79989, 79995, 80002, 80009, 80015, 80021, 80028, 80034, 80041, + 80048, 80057, 80064, 80071, 80075, 80080, 80085, 80090, 80095, 80099, + 80103, 80108, 80112, 80117, 80122, 80127, 80131, 80135, 80139, 80143, + 80148, 80152, 80157, 80162, 80167, 80172, 80176, 80181, 80186, 80191, + 80197, 80202, 80208, 80214, 80220, 80226, 80232, 80237, 80243, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80247, 80252, 80256, 80260, 80264, 80268, 80272, 80276, 80280, 80284, 80288, 80292, 80296, 80300, 80304, 80308, 80312, - 80316, 80320, 0, 0, 0, 80324, 80329, 80334, 80339, 80344, 80348, 80355, - 80359, 80364, 80368, 80375, 80382, 80391, 80395, 80400, 80404, 80408, - 80415, 80422, 80427, 80434, 80439, 80444, 80451, 80456, 80463, 80470, - 80475, 80480, 80487, 80492, 80499, 80506, 80511, 80518, 80523, 80530, - 80534, 80538, 80545, 80550, 80557, 80561, 80565, 80569, 80576, 80580, - 80585, 80592, 80599, 80603, 80607, 80614, 80620, 80626, 80632, 80640, - 80646, 80654, 80660, 80668, 80674, 80680, 80686, 80692, 80696, 80701, - 80706, 80712, 80718, 80724, 80730, 80736, 80742, 80748, 80754, 80762, - 80768, 0, 80775, 80779, 80784, 80788, 80792, 80796, 80800, 80804, 80808, - 80812, 80816, 0, 0, 0, 0, 80820, 80828, 80834, 80840, 80846, 80852, - 80858, 80864, 80870, 80877, 80884, 80891, 80898, 80905, 80912, 80919, - 80926, 80933, 80940, 80947, 80953, 80959, 80965, 80971, 80977, 80983, - 80989, 80995, 81001, 81008, 81015, 81022, 81029, 0, 81036, 81040, 81044, - 81048, 81052, 81057, 81061, 81065, 81070, 81075, 81080, 81085, 81090, - 81095, 81100, 81105, 81110, 81115, 81120, 81125, 81130, 81135, 81140, - 81145, 81150, 81154, 81159, 81163, 81168, 81173, 81178, 81183, 81188, - 81192, 81197, 81201, 81205, 81209, 81214, 81219, 81223, 81227, 81233, - 81238, 81244, 81250, 81255, 81261, 81266, 81272, 81278, 81284, 81289, - 81294, 81299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81305, 81311, 81317, 81323, - 81330, 81336, 81342, 81348, 81354, 81360, 81365, 81370, 81376, 81383, 0, - 0, 81390, 81395, 81399, 81403, 81407, 81411, 81415, 81419, 81423, 81427, - 0, 0, 81431, 81437, 81443, 81450, 81458, 81464, 81470, 81476, 81482, - 81488, 81494, 81500, 81506, 81512, 81518, 81524, 81529, 81534, 81539, - 81545, 81551, 81558, 81564, 81570, 81575, 81582, 81589, 81596, 81602, - 81607, 81612, 81617, 81625, 81632, 81639, 81647, 81655, 81662, 81669, - 81676, 81683, 81690, 81697, 81704, 81711, 81718, 81725, 81732, 81739, - 81746, 81753, 81760, 81767, 81774, 81781, 81788, 81795, 81801, 81807, - 81814, 81821, 81828, 81835, 81842, 81849, 81856, 81863, 81870, 81877, - 81884, 81891, 81898, 81905, 81912, 81919, 81926, 81933, 81940, 81947, - 81954, 81961, 81968, 81975, 81981, 81987, 81994, 82000, 82005, 82011, - 82016, 82021, 82026, 82033, 82039, 82045, 82051, 82057, 82063, 82069, - 82075, 82083, 82091, 82099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 82107, 82113, 82119, 82125, 82133, 82141, - 82147, 82153, 82160, 82167, 82174, 82181, 82188, 82195, 82202, 82209, - 82216, 82224, 82232, 82240, 82248, 82256, 82262, 82270, 82276, 82284, - 82293, 82301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82307, 82311, 82315, 82319, - 82323, 82327, 0, 0, 82331, 82335, 82339, 82343, 82347, 82351, 0, 0, - 82355, 82359, 82363, 82367, 82371, 82375, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 82379, 82383, 82387, 82391, 82395, 82399, 82403, 0, 82407, 82411, 82415, - 82419, 82423, 82427, 82431, 0, 82435, 82442, 82448, 82454, 82460, 82468, - 82475, 82484, 82496, 82506, 82515, 82523, 82531, 82539, 82545, 82553, - 82561, 82568, 82576, 82586, 82593, 82602, 82608, 82618, 82627, 82632, - 82640, 82649, 82654, 82663, 82670, 82680, 82692, 82697, 82703, 82710, - 82715, 82725, 82735, 82745, 82755, 82770, 82783, 82794, 82802, 82807, - 82819, 82828, 82835, 82842, 82848, 82855, 82860, 82867, 82873, 82884, - 82895, 82905, 82911, 82916, 0, 0, 0, 0, 82921, 82925, 82929, 82933, - 82937, 82941, 82946, 82951, 82955, 82960, 82965, 82970, 82975, 82980, - 82984, 82989, 82994, 82999, 83004, 83009, 83013, 83018, 83023, 83028, - 83033, 83038, 83042, 83047, 83052, 83057, 83062, 83066, 83071, 83076, - 83081, 83086, 83091, 83096, 83101, 83106, 83111, 83116, 83121, 83126, - 83131, 83135, 83140, 83145, 83150, 83155, 83160, 83165, 83170, 83175, - 83180, 83185, 83190, 83195, 83200, 83205, 83210, 83215, 83220, 83225, - 83230, 83235, 83240, 83245, 83250, 83255, 83260, 83265, 83270, 83275, - 83280, 83285, 83290, 83295, 83300, 83305, 83309, 83316, 83323, 83330, - 83337, 83343, 83349, 83356, 83363, 83370, 83377, 83384, 83391, 83398, - 83405, 83412, 83418, 83425, 83432, 83439, 83446, 83453, 83460, 83467, - 83474, 83481, 83488, 83495, 83504, 83513, 83522, 83531, 83540, 83549, - 83558, 83567, 83575, 83583, 83591, 83599, 83607, 83615, 83623, 83631, - 83637, 83645, 0, 0, 83653, 83660, 83666, 83672, 83678, 83684, 83690, - 83696, 83702, 83708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80316, 80320, 80324, 80328, 80332, 80336, 80340, 80344, 80348, 80352, + 80356, 80360, 80364, 0, 0, 0, 80368, 80373, 80378, 80383, 80388, 80392, + 80399, 80403, 80408, 80412, 80419, 80426, 80435, 80439, 80444, 80448, + 80452, 80459, 80466, 80471, 80478, 80483, 80488, 80495, 80500, 80507, + 80514, 80519, 80524, 80531, 80536, 80543, 80550, 80555, 80562, 80567, + 80574, 80578, 80582, 80589, 80594, 80601, 80605, 80609, 80613, 80620, + 80624, 80629, 80636, 80643, 80647, 80651, 80658, 80664, 80670, 80676, + 80684, 80690, 80698, 80704, 80712, 80718, 80724, 80730, 80736, 80740, + 80745, 80750, 80756, 80762, 80768, 80774, 80780, 80786, 80792, 80798, + 80806, 80812, 0, 80819, 80823, 80828, 80832, 80836, 80840, 80844, 80848, + 80852, 80856, 80860, 0, 0, 0, 0, 80864, 80872, 80878, 80884, 80890, + 80896, 80902, 80908, 80914, 80921, 80928, 80935, 80942, 80949, 80956, + 80963, 80970, 80977, 80984, 80991, 80997, 81003, 81009, 81015, 81021, + 81027, 81033, 81039, 81045, 81052, 81059, 81066, 81073, 0, 81080, 81084, + 81088, 81092, 81096, 81101, 81105, 81109, 81114, 81119, 81124, 81129, + 81134, 81139, 81144, 81149, 81154, 81159, 81164, 81169, 81174, 81179, + 81184, 81189, 81194, 81198, 81203, 81207, 81212, 81217, 81222, 81227, + 81232, 81236, 81241, 81245, 81249, 81253, 81258, 81263, 81267, 81271, + 81277, 81282, 81288, 81294, 81299, 81305, 81310, 81316, 81322, 81328, + 81333, 81338, 81343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81349, 81355, 81361, + 81367, 81374, 81380, 81386, 81392, 81398, 81404, 81409, 81414, 81420, + 81427, 0, 0, 81434, 81439, 81443, 81447, 81451, 81455, 81459, 81463, + 81467, 81471, 0, 0, 81475, 81481, 81487, 81494, 81502, 81508, 81514, + 81520, 81526, 81532, 81538, 81544, 81550, 81556, 81562, 81568, 81573, + 81578, 81583, 81589, 81595, 81602, 81608, 81614, 81619, 81626, 81633, + 81640, 81646, 81651, 81656, 81661, 81669, 81676, 81683, 81691, 81699, + 81706, 81713, 81720, 81727, 81734, 81741, 81748, 81755, 81762, 81769, + 81776, 81783, 81790, 81797, 81804, 81811, 81818, 81825, 81832, 81839, + 81845, 81851, 81858, 81865, 81872, 81879, 81886, 81893, 81900, 81907, + 81914, 81921, 81928, 81935, 81942, 81949, 81956, 81963, 81970, 81977, + 81984, 81991, 81998, 82005, 82012, 82019, 82025, 82031, 82038, 82044, + 82049, 82055, 82060, 82065, 82070, 82077, 82083, 82089, 82095, 82101, + 82107, 82113, 82119, 82127, 82135, 82143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82151, 82157, 82163, 82169, + 82177, 82185, 82191, 82197, 82204, 82211, 82218, 82225, 82232, 82239, + 82246, 82253, 82260, 82268, 82276, 82284, 82292, 82300, 82306, 82314, + 82320, 82328, 82337, 82345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82351, 82355, + 82359, 82363, 82367, 82371, 0, 0, 82375, 82379, 82383, 82387, 82391, + 82395, 0, 0, 82399, 82403, 82407, 82411, 82415, 82419, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 82423, 82427, 82431, 82435, 82439, 82443, 82447, 0, 82451, + 82455, 82459, 82463, 82467, 82471, 82475, 0, 82479, 82486, 82492, 82498, + 82504, 82512, 82519, 82528, 82540, 82550, 82559, 82567, 82575, 82583, + 82589, 82597, 82605, 82612, 82620, 82630, 82637, 82646, 82652, 82662, + 82671, 82676, 82684, 82693, 82698, 82707, 82714, 82724, 82736, 82741, + 82747, 82754, 82759, 82769, 82779, 82789, 82799, 82814, 82827, 82838, + 82846, 82851, 82863, 82872, 82879, 82886, 82892, 82899, 82904, 82911, + 82917, 82928, 82939, 82949, 82955, 82960, 0, 0, 0, 0, 82965, 82969, + 82973, 82977, 82981, 82985, 82990, 82995, 82999, 83004, 83009, 83014, + 83019, 83024, 83028, 83033, 83038, 83043, 83048, 83053, 83057, 83062, + 83067, 83072, 83077, 83082, 83086, 83091, 83096, 83101, 83106, 83110, + 83115, 83120, 83125, 83130, 83135, 83140, 83145, 83150, 83155, 83160, + 83165, 83170, 83175, 83179, 83184, 83189, 83194, 83199, 83204, 83209, + 83214, 83219, 83224, 83229, 83234, 83239, 83244, 83249, 83254, 83259, + 83264, 83269, 83274, 83279, 83284, 83289, 83294, 83299, 83304, 83309, + 83314, 83319, 83324, 83329, 83334, 83339, 83344, 83349, 83353, 83360, + 83367, 83374, 83381, 83387, 83393, 83400, 83407, 83414, 83421, 83428, + 83435, 83442, 83449, 83456, 83462, 83469, 83476, 83483, 83490, 83497, + 83504, 83511, 83518, 83525, 83532, 83539, 83548, 83557, 83566, 83575, + 83584, 83593, 83602, 83611, 83619, 83627, 83635, 83643, 83651, 83659, + 83667, 83675, 83681, 83689, 0, 0, 83697, 83704, 83710, 83716, 83722, + 83728, 83734, 83740, 83746, 83752, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83714, 83719, 83724, 83729, 83734, - 83739, 83744, 83749, 83754, 83759, 83764, 83769, 83774, 83779, 83784, - 83789, 83794, 83799, 83804, 83809, 83814, 83819, 83824, 0, 0, 0, 0, - 83829, 83833, 83837, 83841, 83845, 83849, 83853, 83857, 83861, 83865, - 83869, 83873, 83877, 83881, 83885, 83889, 83893, 83897, 83901, 83905, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83758, 83763, 83768, + 83773, 83778, 83783, 83788, 83793, 83798, 83803, 83808, 83813, 83818, + 83823, 83828, 83833, 83838, 83843, 83848, 83853, 83858, 83863, 83868, 0, + 0, 0, 0, 83873, 83877, 83881, 83885, 83889, 83893, 83897, 83901, 83905, 83909, 83913, 83917, 83921, 83925, 83929, 83933, 83937, 83941, 83945, 83949, 83953, 83957, 83961, 83965, 83969, 83973, 83977, 83981, 83985, - 83989, 83993, 83997, 84001, 84005, 84009, 84013, 84017, 84021, 0, 0, 0, - 0, 84025, 84029, 84033, 84037, 84041, 84045, 84049, 84053, 84057, 84061, - 84065, 84069, 84073, 84077, 84081, 84085, 84089, 84093, 84097, 84101, + 83989, 83993, 83997, 84001, 84005, 84009, 84013, 84017, 84021, 84025, + 84029, 84033, 84037, 84041, 84045, 84049, 84053, 84057, 84061, 84065, 0, + 0, 0, 0, 84069, 84073, 84077, 84081, 84085, 84089, 84093, 84097, 84101, 84105, 84109, 84113, 84117, 84121, 84125, 84129, 84133, 84137, 84141, 84145, 84149, 84153, 84157, 84161, 84165, 84169, 84173, 84177, 84181, 84185, 84189, 84193, 84197, 84201, 84205, 84209, 84213, 84217, 84221, @@ -22893,8 +22898,8 @@ static const unsigned int phrasebook_offset2[] = { 85345, 85349, 85353, 85357, 85361, 85365, 85369, 85373, 85377, 85381, 85385, 85389, 85393, 85397, 85401, 85405, 85409, 85413, 85417, 85421, 85425, 85429, 85433, 85437, 85441, 85445, 85449, 85453, 85457, 85461, - 85465, 85469, 85473, 85477, 85481, 85485, 0, 0, 85489, 85493, 85497, - 85501, 85505, 85509, 85513, 85517, 85521, 85525, 85529, 85533, 85537, + 85465, 85469, 85473, 85477, 85481, 85485, 85489, 85493, 85497, 85501, + 85505, 85509, 85513, 85517, 85521, 85525, 85529, 0, 0, 85533, 85537, 85541, 85545, 85549, 85553, 85557, 85561, 85565, 85569, 85573, 85577, 85581, 85585, 85589, 85593, 85597, 85601, 85605, 85609, 85613, 85617, 85621, 85625, 85629, 85633, 85637, 85641, 85645, 85649, 85653, 85657, @@ -22904,731 +22909,732 @@ static const unsigned int phrasebook_offset2[] = { 85781, 85785, 85789, 85793, 85797, 85801, 85805, 85809, 85813, 85817, 85821, 85825, 85829, 85833, 85837, 85841, 85845, 85849, 85853, 85857, 85861, 85865, 85869, 85873, 85877, 85881, 85885, 85889, 85893, 85897, - 85901, 85905, 85909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85913, - 85918, 85923, 85928, 85933, 85938, 85946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85951, 85959, 85967, 85975, 85983, 0, 0, 0, 0, 0, 85991, 85998, - 86005, 86015, 86021, 86027, 86033, 86039, 86045, 86051, 86058, 86064, - 86070, 86076, 86085, 86094, 86106, 86118, 86124, 86130, 86136, 86143, - 86150, 86157, 86164, 86171, 0, 86178, 86185, 86192, 86200, 86207, 0, - 86214, 0, 86221, 86228, 0, 86235, 86243, 0, 86250, 86257, 86264, 86271, - 86278, 86285, 86292, 86299, 86306, 86313, 86318, 86325, 86332, 86338, - 86344, 86350, 86357, 86363, 86369, 86375, 86382, 86388, 86394, 86400, - 86407, 86413, 86419, 86425, 86432, 86438, 86444, 86450, 86457, 86463, - 86469, 86475, 86482, 86488, 86494, 86500, 86507, 86513, 86519, 86525, - 86532, 86538, 86544, 86550, 86557, 86563, 86569, 86575, 86582, 86588, - 86594, 86600, 86607, 86613, 86619, 86625, 86632, 86638, 86644, 86650, - 86656, 86662, 86668, 86674, 86680, 86686, 86692, 86698, 86704, 86710, - 86716, 86722, 86729, 86735, 86741, 86747, 86754, 86760, 86766, 86772, - 86779, 86785, 86791, 86797, 86804, 86812, 86820, 86826, 86832, 86838, - 86845, 86854, 86863, 86871, 86879, 86887, 86896, 86904, 86912, 86920, - 86929, 86936, 86943, 86954, 86965, 86969, 86973, 86978, 86983, 86988, - 86993, 87002, 87011, 87017, 87023, 87030, 87037, 87044, 87048, 87054, - 87060, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87065, 87071, - 87077, 87083, 87090, 87095, 87100, 87106, 87112, 87118, 87124, 87133, - 87139, 87145, 87153, 87161, 87169, 87177, 87183, 87189, 87195, 87202, - 87215, 87229, 87240, 87251, 87263, 87275, 87287, 87299, 87310, 87321, - 87333, 87345, 87357, 87369, 87381, 87393, 87405, 87422, 87439, 87456, - 87463, 87470, 87477, 87485, 87497, 87508, 87519, 87532, 87543, 87552, - 87560, 87569, 87577, 87587, 87595, 87604, 87612, 87621, 87629, 87639, - 87647, 87656, 87664, 87674, 87682, 87690, 87698, 87706, 87713, 87722, - 87730, 87738, 87747, 87755, 87764, 87772, 87780, 87788, 87797, 87805, - 87814, 87822, 87830, 87838, 87846, 87855, 87863, 87872, 87880, 87889, - 87897, 87906, 87914, 87924, 87932, 87940, 87948, 87958, 87966, 87974, - 87983, 87991, 88000, 88009, 88017, 88027, 88035, 88044, 88052, 88061, - 88069, 88079, 88087, 88095, 88102, 88110, 88117, 88126, 88133, 88142, - 88150, 88159, 88167, 88177, 88185, 88194, 88202, 88212, 88220, 88228, - 88235, 88243, 88250, 88259, 88266, 88276, 88286, 88297, 88306, 88315, - 88324, 88333, 88342, 88352, 88364, 88376, 88387, 88399, 88412, 88423, - 88432, 88441, 88449, 88458, 88468, 88476, 88485, 88494, 88502, 88511, - 88521, 88529, 88538, 88547, 88555, 88564, 88574, 88582, 88592, 88600, - 88610, 88618, 88626, 88635, 88643, 88653, 88661, 88669, 88679, 88687, - 88694, 88701, 88710, 88719, 88727, 88736, 88746, 88754, 88765, 88773, - 88781, 88788, 88796, 88805, 88812, 88824, 88835, 88847, 88858, 88870, - 88879, 88887, 88896, 88904, 88913, 88922, 88930, 88939, 88947, 88956, - 88964, 88972, 88980, 88988, 88995, 89004, 89012, 89021, 89029, 89038, - 89046, 89054, 89063, 89071, 89080, 89088, 89097, 89105, 89113, 89121, - 89130, 89138, 89147, 89155, 89164, 89172, 89181, 89189, 89197, 89205, - 89214, 89222, 89231, 89240, 89248, 89257, 89265, 89274, 89282, 89291, - 89299, 89306, 89314, 89321, 89330, 89338, 89347, 89355, 89364, 89373, - 89381, 89391, 89399, 89406, 89414, 89421, 89429, 89441, 89454, 89463, - 89473, 89482, 89492, 89501, 89511, 89520, 89530, 89539, 89549, 89559, - 89568, 89577, 89586, 89596, 89604, 89613, 89623, 89633, 89643, 89653, - 89661, 89671, 89679, 89689, 89697, 89707, 89715, 89725, 89733, 89742, - 89749, 89759, 89767, 89777, 89785, 89795, 89803, 89813, 89821, 89830, - 89838, 89847, 89855, 89864, 89873, 89882, 89891, 89901, 89909, 89919, - 89927, 89937, 89945, 89955, 89963, 89973, 89981, 89990, 89997, 90007, - 90015, 90025, 90033, 90043, 90051, 90061, 90069, 90078, 90086, 90095, - 90103, 90112, 90121, 90130, 90139, 90148, 90156, 90165, 90173, 90182, - 90191, 90199, 90209, 90218, 90228, 90238, 90247, 90257, 90266, 90275, - 90283, 90291, 90296, 90301, 90307, 90315, 90323, 90331, 90339, 90347, - 90355, 90361, 90367, 90373, 90381, 90387, 90397, 90403, 90409, 90415, - 90426, 90437, 90448, 90458, 90469, 90480, 90490, 90501, 90511, 90521, - 90530, 90541, 90552, 90563, 90576, 90586, 90596, 90607, 90617, 90627, - 90637, 90647, 90657, 90667, 90677, 90688, 90699, 90710, 90720, 90730, - 90742, 90753, 90764, 90774, 90784, 90794, 90804, 90815, 90825, 90835, - 90847, 90857, 90867, 90879, 90890, 90901, 90911, 90921, 90931, 90941, - 90953, 90965, 90977, 90988, 90999, 91009, 91019, 91029, 91038, 91047, - 91057, 91067, 91078, 0, 0, 91088, 91099, 91110, 91120, 91130, 91142, - 91153, 91164, 91177, 91187, 91199, 91208, 91217, 91228, 91239, 91252, - 91263, 91276, 91286, 91298, 91308, 91320, 91332, 91345, 91355, 91365, - 91375, 91386, 91396, 91405, 91415, 91424, 91433, 91443, 91453, 91463, - 91473, 91483, 91493, 91504, 91514, 91525, 91535, 91546, 91557, 91567, - 91577, 91587, 91597, 91607, 91617, 91628, 91638, 91649, 0, 0, 0, 0, 0, 0, - 0, 91660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91666, 91681, 91696, 91702, 91708, - 91714, 91720, 91726, 91732, 91738, 91744, 91752, 91756, 91759, 91767, - 91775, 91783, 91786, 91789, 91792, 91795, 91798, 91801, 91804, 91807, - 91810, 91813, 91816, 91819, 91822, 91825, 91828, 91831, 91839, 91848, - 91859, 91867, 91875, 91884, 91893, 91905, 91917, 0, 0, 0, 0, 0, 0, 91927, - 91932, 91937, 91944, 91951, 91957, 91963, 91968, 91973, 91978, 91984, - 91990, 91996, 92002, 92008, 92015, 92022, 92032, 92042, 92052, 92061, - 92072, 92081, 92090, 92101, 92112, 92125, 92138, 92150, 92162, 92174, - 92186, 92197, 92208, 92219, 92230, 92242, 92254, 92258, 92263, 92273, - 92283, 92287, 92291, 92295, 92300, 92305, 92310, 92315, 92318, 92322, 0, - 92327, 92330, 92333, 92337, 92341, 92346, 92350, 92354, 92360, 92366, - 92374, 92382, 92385, 92388, 92391, 92394, 92397, 92401, 92405, 0, 92409, - 92414, 92418, 92422, 0, 0, 0, 0, 92427, 92432, 92439, 92444, 92449, 0, - 92454, 92459, 92465, 92470, 92476, 92481, 92487, 92492, 92498, 92503, - 92509, 92515, 92524, 92533, 92542, 92551, 92561, 92571, 92581, 92591, - 92600, 92609, 92618, 92628, 92633, 92638, 92644, 92650, 92656, 92663, - 92671, 92679, 92685, 92691, 92697, 92704, 92710, 92716, 92722, 92729, - 92735, 92741, 92747, 92754, 92759, 92764, 92769, 92775, 92781, 92787, - 92793, 92800, 92806, 92812, 92818, 92824, 92830, 92836, 92842, 92848, - 92854, 92860, 92866, 92873, 92879, 92885, 92891, 92898, 92904, 92910, - 92916, 92923, 92929, 92935, 92941, 92948, 92954, 92960, 92966, 92973, - 92979, 92985, 92991, 92998, 93004, 93010, 93016, 93023, 93029, 93035, - 93041, 93048, 93054, 93060, 93066, 93073, 93079, 93085, 93091, 93098, - 93104, 93110, 93116, 93123, 93129, 93135, 93141, 93148, 93153, 93158, - 93163, 93169, 93175, 93181, 93187, 93194, 93200, 93206, 93212, 93219, - 93225, 93231, 93238, 93245, 93250, 93255, 93260, 93266, 93278, 93290, - 93302, 93314, 93327, 93340, 93348, 0, 0, 93356, 0, 93364, 93369, 93374, - 93378, 93383, 93388, 93392, 93396, 93401, 93406, 93410, 93414, 93418, - 93422, 93428, 93432, 93437, 93441, 93445, 93449, 93453, 93457, 93461, - 93465, 93469, 93473, 93477, 93481, 93486, 93491, 93496, 93501, 93507, - 93513, 93520, 93527, 93534, 93540, 93547, 93554, 93561, 93567, 93574, - 93581, 93587, 93594, 93601, 93607, 93614, 93621, 93627, 93634, 93641, - 93647, 93654, 93661, 93668, 93675, 93682, 93688, 93694, 93700, 93706, - 93711, 93717, 93723, 93730, 93737, 93744, 93750, 93757, 93764, 93771, - 93777, 93784, 93791, 93797, 93804, 93811, 93817, 93824, 93831, 93837, - 93844, 93851, 93857, 93864, 93871, 93878, 93885, 93892, 93899, 93904, - 93911, 93915, 93921, 93927, 93933, 93939, 93945, 93949, 93954, 93959, - 93964, 93969, 93974, 93979, 93984, 93989, 93995, 94001, 94007, 94015, - 94019, 94023, 94027, 94031, 94035, 94039, 94044, 94049, 94054, 94059, - 94063, 94068, 94073, 94078, 94083, 94088, 94093, 94098, 94103, 94107, - 94111, 94116, 94121, 94126, 94131, 94135, 94140, 94145, 94150, 94155, - 94159, 94164, 94169, 94174, 94179, 94183, 94188, 94193, 94197, 94202, - 94207, 94212, 94217, 94222, 94227, 94234, 94241, 94245, 94250, 94255, - 94260, 94265, 94270, 94275, 94280, 94285, 94290, 94295, 94300, 94305, - 94310, 94315, 94320, 94325, 94330, 94335, 94340, 94345, 94350, 94355, - 94360, 94365, 94370, 94375, 94380, 94385, 94390, 0, 0, 0, 94395, 94399, - 94404, 94408, 94413, 94418, 0, 0, 94422, 94427, 94432, 94436, 94441, - 94446, 0, 0, 94451, 94456, 94460, 94465, 94470, 94475, 0, 0, 94480, - 94485, 94490, 0, 0, 0, 94494, 94499, 94504, 94509, 94513, 94518, 94523, - 0, 94528, 94534, 94537, 94541, 94544, 94548, 94552, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94556, 94562, 94568, 94574, 94580, 0, 0, 94584, 94590, 94596, - 94602, 94608, 94614, 94621, 94628, 94635, 94642, 94649, 94656, 0, 94663, - 94670, 94677, 94683, 94690, 94697, 94704, 94711, 94717, 94724, 94731, - 94738, 94745, 94751, 94758, 94765, 94772, 94779, 94785, 94792, 94799, - 94806, 94813, 94820, 94827, 94834, 0, 94841, 94847, 94854, 94861, 94868, - 94875, 94881, 94888, 94895, 94902, 94909, 94916, 94923, 94930, 94936, - 94943, 94950, 94957, 94964, 0, 94971, 94978, 0, 94985, 94992, 94999, - 95006, 95013, 95020, 95027, 95034, 95041, 95048, 95055, 95062, 95069, - 95076, 95083, 0, 0, 95089, 95094, 95099, 95104, 95109, 95114, 95119, - 95124, 95129, 95134, 95139, 95144, 95149, 95154, 0, 0, 0, 0, 0, 0, 0, 0, + 85901, 85905, 85909, 85913, 85917, 85921, 85925, 85929, 85933, 85937, + 85941, 85945, 85949, 85953, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 85957, 85962, 85967, 85972, 85977, 85982, 85990, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 85995, 86003, 86011, 86019, 86027, 0, 0, 0, 0, 0, 86035, + 86042, 86049, 86059, 86065, 86071, 86077, 86083, 86089, 86095, 86102, + 86108, 86114, 86120, 86129, 86138, 86150, 86162, 86168, 86174, 86180, + 86187, 86194, 86201, 86208, 86215, 0, 86222, 86229, 86236, 86244, 86251, + 0, 86258, 0, 86265, 86272, 0, 86279, 86287, 0, 86294, 86301, 86308, + 86315, 86322, 86329, 86336, 86343, 86350, 86357, 86362, 86369, 86376, + 86382, 86388, 86394, 86401, 86407, 86413, 86419, 86426, 86432, 86438, + 86444, 86451, 86457, 86463, 86469, 86476, 86482, 86488, 86494, 86501, + 86507, 86513, 86519, 86526, 86532, 86538, 86544, 86551, 86557, 86563, + 86569, 86576, 86582, 86588, 86594, 86601, 86607, 86613, 86619, 86626, + 86632, 86638, 86644, 86651, 86657, 86663, 86669, 86676, 86682, 86688, + 86694, 86700, 86706, 86712, 86718, 86724, 86730, 86736, 86742, 86748, + 86754, 86760, 86766, 86773, 86779, 86785, 86791, 86798, 86804, 86810, + 86816, 86823, 86829, 86835, 86841, 86848, 86856, 86864, 86870, 86876, + 86882, 86889, 86898, 86907, 86915, 86923, 86931, 86940, 86948, 86956, + 86964, 86973, 86980, 86987, 86998, 87009, 87013, 87017, 87022, 87027, + 87032, 87037, 87046, 87055, 87061, 87067, 87074, 87081, 87088, 87092, + 87098, 87104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87109, + 87115, 87121, 87127, 87134, 87139, 87144, 87150, 87156, 87162, 87168, + 87177, 87183, 87189, 87197, 87205, 87213, 87221, 87227, 87233, 87239, + 87246, 87259, 87273, 87284, 87295, 87307, 87319, 87331, 87343, 87354, + 87365, 87377, 87389, 87401, 87413, 87425, 87437, 87449, 87466, 87483, + 87500, 87507, 87514, 87521, 87529, 87541, 87552, 87563, 87576, 87587, + 87596, 87604, 87613, 87621, 87631, 87639, 87648, 87656, 87665, 87673, + 87683, 87691, 87700, 87708, 87718, 87726, 87734, 87742, 87750, 87757, + 87766, 87774, 87782, 87791, 87799, 87808, 87816, 87824, 87832, 87841, + 87849, 87858, 87866, 87874, 87882, 87890, 87899, 87907, 87916, 87924, + 87933, 87941, 87950, 87958, 87968, 87976, 87984, 87992, 88002, 88010, + 88018, 88027, 88035, 88044, 88053, 88061, 88071, 88079, 88088, 88096, + 88105, 88113, 88123, 88131, 88139, 88146, 88154, 88161, 88170, 88177, + 88186, 88194, 88203, 88211, 88221, 88229, 88238, 88246, 88256, 88264, + 88272, 88279, 88287, 88294, 88303, 88310, 88320, 88330, 88341, 88350, + 88359, 88368, 88377, 88386, 88396, 88408, 88420, 88431, 88443, 88456, + 88467, 88476, 88485, 88493, 88502, 88512, 88520, 88529, 88538, 88546, + 88555, 88565, 88573, 88582, 88591, 88599, 88608, 88618, 88626, 88636, + 88644, 88654, 88662, 88670, 88679, 88687, 88697, 88705, 88713, 88723, + 88731, 88738, 88745, 88754, 88763, 88771, 88780, 88790, 88798, 88809, + 88817, 88825, 88832, 88840, 88849, 88856, 88868, 88879, 88891, 88902, + 88914, 88923, 88931, 88940, 88948, 88957, 88966, 88974, 88983, 88991, + 89000, 89008, 89016, 89024, 89032, 89039, 89048, 89056, 89065, 89073, + 89082, 89090, 89098, 89107, 89115, 89124, 89132, 89141, 89149, 89157, + 89165, 89174, 89182, 89191, 89199, 89208, 89216, 89225, 89233, 89241, + 89249, 89258, 89266, 89275, 89284, 89292, 89301, 89309, 89318, 89326, + 89335, 89343, 89350, 89358, 89365, 89374, 89382, 89391, 89399, 89408, + 89417, 89425, 89435, 89443, 89450, 89458, 89465, 89473, 89485, 89498, + 89507, 89517, 89526, 89536, 89545, 89555, 89564, 89574, 89583, 89593, + 89603, 89612, 89621, 89630, 89640, 89648, 89657, 89667, 89677, 89687, + 89697, 89705, 89715, 89723, 89733, 89741, 89751, 89759, 89769, 89777, + 89786, 89793, 89803, 89811, 89821, 89829, 89839, 89847, 89857, 89865, + 89874, 89882, 89891, 89899, 89908, 89917, 89926, 89935, 89945, 89953, + 89963, 89971, 89981, 89989, 89999, 90007, 90017, 90025, 90034, 90041, + 90051, 90059, 90069, 90077, 90087, 90095, 90105, 90113, 90122, 90130, + 90139, 90147, 90156, 90165, 90174, 90183, 90192, 90200, 90209, 90217, + 90226, 90235, 90243, 90253, 90262, 90272, 90282, 90291, 90301, 90310, + 90319, 90327, 90335, 90340, 90345, 90351, 90359, 90367, 90375, 90383, + 90391, 90399, 90405, 90411, 90417, 90425, 90431, 90441, 90447, 90453, + 90459, 90470, 90481, 90492, 90502, 90513, 90524, 90534, 90545, 90555, + 90565, 90574, 90585, 90596, 90607, 90620, 90630, 90640, 90651, 90661, + 90671, 90681, 90691, 90701, 90711, 90721, 90732, 90743, 90754, 90764, + 90774, 90786, 90797, 90808, 90818, 90828, 90838, 90848, 90859, 90869, + 90879, 90891, 90901, 90911, 90923, 90934, 90945, 90955, 90965, 90975, + 90985, 90997, 91009, 91021, 91032, 91043, 91053, 91063, 91073, 91082, + 91091, 91101, 91111, 91122, 0, 0, 91132, 91143, 91154, 91164, 91174, + 91186, 91197, 91208, 91221, 91231, 91243, 91252, 91261, 91272, 91283, + 91296, 91307, 91320, 91330, 91342, 91352, 91364, 91376, 91389, 91399, + 91409, 91419, 91430, 91440, 91449, 91459, 91468, 91477, 91487, 91497, + 91507, 91517, 91527, 91537, 91548, 91558, 91569, 91579, 91590, 91601, + 91611, 91621, 91631, 91641, 91651, 91661, 91672, 91682, 91693, 0, 0, 0, + 0, 0, 0, 0, 91704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91710, 91725, 91740, 91746, + 91752, 91758, 91764, 91770, 91776, 91782, 91788, 91796, 91800, 91803, + 91811, 91819, 91827, 91830, 91833, 91836, 91839, 91842, 91845, 91848, + 91851, 91854, 91857, 91860, 91863, 91866, 91869, 91872, 91875, 91883, + 91892, 91903, 91911, 91919, 91928, 91937, 91949, 91961, 0, 0, 0, 0, 0, 0, + 91971, 91976, 91981, 91988, 91995, 92001, 92007, 92012, 92017, 92022, + 92028, 92034, 92040, 92046, 92052, 92059, 92066, 92076, 92086, 92096, + 92105, 92116, 92125, 92134, 92145, 92156, 92169, 92182, 92194, 92206, + 92218, 92230, 92241, 92252, 92263, 92274, 92286, 92298, 92302, 92307, + 92317, 92327, 92331, 92335, 92339, 92344, 92349, 92354, 92359, 92362, + 92366, 0, 92371, 92374, 92377, 92381, 92385, 92390, 92394, 92398, 92404, + 92410, 92418, 92426, 92429, 92432, 92435, 92438, 92441, 92445, 92449, 0, + 92453, 92458, 92462, 92466, 0, 0, 0, 0, 92471, 92476, 92483, 92488, + 92493, 0, 92498, 92503, 92509, 92514, 92520, 92525, 92531, 92536, 92542, + 92547, 92553, 92559, 92568, 92577, 92586, 92595, 92605, 92615, 92625, + 92635, 92644, 92653, 92662, 92672, 92677, 92682, 92688, 92694, 92700, + 92707, 92715, 92723, 92729, 92735, 92741, 92748, 92754, 92760, 92766, + 92773, 92779, 92785, 92791, 92798, 92803, 92808, 92813, 92819, 92825, + 92831, 92837, 92844, 92850, 92856, 92862, 92868, 92874, 92880, 92886, + 92892, 92898, 92904, 92910, 92917, 92923, 92929, 92935, 92942, 92948, + 92954, 92960, 92967, 92973, 92979, 92985, 92992, 92998, 93004, 93010, + 93017, 93023, 93029, 93035, 93042, 93048, 93054, 93060, 93067, 93073, + 93079, 93085, 93092, 93098, 93104, 93110, 93117, 93123, 93129, 93135, + 93142, 93148, 93154, 93160, 93167, 93173, 93179, 93185, 93192, 93197, + 93202, 93207, 93213, 93219, 93225, 93231, 93238, 93244, 93250, 93256, + 93263, 93269, 93275, 93282, 93289, 93294, 93299, 93304, 93310, 93322, + 93334, 93346, 93358, 93371, 93384, 93392, 0, 0, 93400, 0, 93408, 93413, + 93418, 93422, 93427, 93432, 93436, 93440, 93445, 93450, 93454, 93458, + 93462, 93466, 93472, 93476, 93481, 93485, 93489, 93493, 93497, 93501, + 93505, 93509, 93513, 93517, 93521, 93525, 93530, 93535, 93540, 93545, + 93551, 93557, 93564, 93571, 93578, 93584, 93591, 93598, 93605, 93611, + 93618, 93625, 93631, 93638, 93645, 93651, 93658, 93665, 93671, 93678, + 93685, 93691, 93698, 93705, 93712, 93719, 93726, 93732, 93738, 93744, + 93750, 93755, 93761, 93767, 93774, 93781, 93788, 93794, 93801, 93808, + 93815, 93821, 93828, 93835, 93841, 93848, 93855, 93861, 93868, 93875, + 93881, 93888, 93895, 93901, 93908, 93915, 93922, 93929, 93936, 93943, + 93948, 93955, 93959, 93965, 93971, 93977, 93983, 93989, 93993, 93998, + 94003, 94008, 94013, 94018, 94023, 94028, 94033, 94039, 94045, 94051, + 94059, 94063, 94067, 94071, 94075, 94079, 94083, 94088, 94093, 94098, + 94103, 94107, 94112, 94117, 94122, 94127, 94132, 94137, 94142, 94147, + 94151, 94155, 94160, 94165, 94170, 94175, 94179, 94184, 94189, 94194, + 94199, 94203, 94208, 94213, 94218, 94223, 94227, 94232, 94237, 94241, + 94246, 94251, 94256, 94261, 94266, 94271, 94278, 94285, 94289, 94294, + 94299, 94304, 94309, 94314, 94319, 94324, 94329, 94334, 94339, 94344, + 94349, 94354, 94359, 94364, 94369, 94374, 94379, 94384, 94389, 94394, + 94399, 94404, 94409, 94414, 94419, 94424, 94429, 94434, 0, 0, 0, 94439, + 94443, 94448, 94452, 94457, 94462, 0, 0, 94466, 94471, 94476, 94480, + 94485, 94490, 0, 0, 94495, 94500, 94504, 94509, 94514, 94519, 0, 0, + 94524, 94529, 94534, 0, 0, 0, 94538, 94543, 94548, 94553, 94557, 94562, + 94567, 0, 94572, 94578, 94581, 94585, 94588, 94592, 94596, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94600, 94606, 94612, 94618, 94624, 0, 0, 94628, 94634, + 94640, 94646, 94652, 94658, 94665, 94672, 94679, 94686, 94693, 94700, 0, + 94707, 94714, 94721, 94727, 94734, 94741, 94748, 94755, 94761, 94768, + 94775, 94782, 94789, 94795, 94802, 94809, 94816, 94823, 94829, 94836, + 94843, 94850, 94857, 94864, 94871, 94878, 0, 94885, 94891, 94898, 94905, + 94912, 94919, 94925, 94932, 94939, 94946, 94953, 94960, 94967, 94974, + 94980, 94987, 94994, 95001, 95008, 0, 95015, 95022, 0, 95029, 95036, + 95043, 95050, 95057, 95064, 95071, 95078, 95085, 95092, 95099, 95106, + 95113, 95120, 95127, 0, 0, 95133, 95138, 95143, 95148, 95153, 95158, + 95163, 95168, 95173, 95178, 95183, 95188, 95193, 95198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 95159, 95166, 95173, 95180, 95187, 95194, 95201, 95208, 95215, - 95222, 95229, 95236, 95243, 95250, 95257, 95264, 95271, 95278, 95285, - 95292, 95300, 95308, 95315, 95322, 95327, 95335, 95343, 95350, 95357, - 95362, 95369, 95374, 95379, 95386, 95391, 95396, 95401, 95409, 95414, - 95419, 95426, 95431, 95436, 95443, 95450, 95455, 95460, 95465, 95470, - 95475, 95480, 95485, 95490, 95495, 95502, 95507, 95514, 95519, 95524, - 95529, 95534, 95539, 95544, 95549, 95554, 95559, 95564, 95569, 95576, - 95583, 95590, 95597, 95603, 95608, 95615, 95620, 95625, 95634, 95641, - 95650, 95657, 95662, 95667, 95675, 95680, 95685, 95690, 95695, 95700, - 95707, 95712, 95717, 95722, 95727, 95732, 95739, 95746, 95753, 95760, - 95767, 95774, 95781, 95788, 95795, 95802, 95809, 95816, 95823, 95830, - 95837, 95844, 95851, 95858, 95865, 95872, 95879, 95886, 95893, 95900, - 95907, 95914, 95921, 95928, 0, 0, 0, 0, 0, 95935, 95943, 95951, 0, 0, 0, - 0, 95956, 95960, 95964, 95968, 95972, 95976, 95980, 95984, 95988, 95992, - 95997, 96002, 96007, 96012, 96017, 96022, 96027, 96032, 96037, 96043, - 96049, 96055, 96062, 96069, 96076, 96083, 96090, 96097, 96102, 96107, - 96112, 96118, 96124, 96130, 96136, 96142, 96148, 96154, 96160, 96166, - 96172, 96178, 96184, 96190, 96196, 0, 0, 0, 96202, 96210, 96218, 96226, - 96234, 96242, 96252, 96262, 96270, 96278, 96286, 96294, 96302, 96308, - 96315, 96324, 96332, 96340, 96349, 96358, 96367, 96377, 96388, 96398, - 96409, 96418, 96427, 96436, 96446, 96457, 96467, 96478, 96489, 96498, - 96506, 96512, 96518, 96524, 96530, 96538, 96546, 96552, 96559, 96569, - 96576, 96583, 96590, 96597, 96604, 96614, 96621, 96628, 96636, 96644, - 96653, 96662, 96671, 96680, 96689, 96696, 96704, 96713, 96722, 96726, - 96733, 96738, 96743, 96747, 96751, 96755, 96759, 96764, 96769, 96775, - 96781, 96785, 96791, 96795, 96799, 96803, 96807, 96811, 96815, 96821, - 96825, 96830, 96834, 96838, 0, 96841, 96846, 96851, 96856, 96861, 96868, - 96873, 96878, 96883, 96888, 96893, 96898, 96903, 0, 0, 0, 96906, 0, 0, 0, + 0, 0, 0, 0, 95203, 95210, 95217, 95224, 95231, 95238, 95245, 95252, + 95259, 95266, 95273, 95280, 95287, 95294, 95301, 95308, 95315, 95322, + 95329, 95336, 95344, 95352, 95359, 95366, 95371, 95379, 95387, 95394, + 95401, 95406, 95413, 95418, 95423, 95430, 95435, 95440, 95445, 95453, + 95458, 95463, 95470, 95475, 95480, 95487, 95494, 95499, 95504, 95509, + 95514, 95519, 95524, 95529, 95534, 95539, 95546, 95551, 95558, 95563, + 95568, 95573, 95578, 95583, 95588, 95593, 95598, 95603, 95608, 95613, + 95620, 95627, 95634, 95641, 95647, 95652, 95659, 95664, 95669, 95678, + 95685, 95694, 95701, 95706, 95711, 95719, 95724, 95729, 95734, 95739, + 95744, 95751, 95756, 95761, 95766, 95771, 95776, 95783, 95790, 95797, + 95804, 95811, 95818, 95825, 95832, 95839, 95846, 95853, 95860, 95867, + 95874, 95881, 95888, 95895, 95902, 95909, 95916, 95923, 95930, 95937, + 95944, 95951, 95958, 95965, 95972, 0, 0, 0, 0, 0, 95979, 95987, 95995, 0, + 0, 0, 0, 96000, 96004, 96008, 96012, 96016, 96020, 96024, 96028, 96032, + 96036, 96041, 96046, 96051, 96056, 96061, 96066, 96071, 96076, 96081, + 96087, 96093, 96099, 96106, 96113, 96120, 96127, 96134, 96141, 96146, + 96151, 96156, 96162, 96168, 96174, 96180, 96186, 96192, 96198, 96204, + 96210, 96216, 96222, 96228, 96234, 96240, 0, 0, 0, 96246, 96254, 96262, + 96270, 96278, 96286, 96296, 96306, 96314, 96322, 96330, 96338, 96346, + 96352, 96359, 96368, 96376, 96384, 96393, 96402, 96411, 96421, 96432, + 96442, 96453, 96462, 96471, 96480, 96490, 96501, 96511, 96522, 96533, + 96542, 96550, 96556, 96562, 96568, 96574, 96582, 96590, 96596, 96603, + 96613, 96620, 96627, 96634, 96641, 96648, 96658, 96665, 96672, 96680, + 96688, 96697, 96706, 96715, 96724, 96733, 96740, 96748, 96757, 96766, + 96770, 96777, 96782, 96787, 96791, 96795, 96799, 96803, 96808, 96813, + 96819, 96825, 96829, 96835, 96839, 96843, 96847, 96851, 96855, 96859, + 96865, 96869, 96874, 96878, 96882, 0, 96885, 96890, 96895, 96900, 96905, + 96912, 96917, 96922, 96927, 96932, 96937, 96942, 96947, 0, 0, 0, 96950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96912, 96919, - 96928, 96937, 96944, 96951, 96958, 96965, 96972, 96979, 96985, 96992, - 96999, 97006, 97013, 97020, 97027, 97034, 97041, 97050, 97057, 97064, - 97071, 97078, 97085, 97092, 97099, 97106, 97115, 97122, 97129, 97136, - 97143, 97150, 97157, 97166, 97173, 97180, 97187, 97194, 97203, 97210, - 97217, 97224, 97232, 97241, 0, 0, 97250, 97254, 97258, 97263, 97268, - 97273, 97278, 97282, 97287, 97292, 97297, 97302, 97307, 97312, 97316, - 97321, 97326, 97331, 97336, 97340, 97345, 97350, 97354, 97359, 97364, - 97369, 97374, 97379, 97384, 0, 0, 0, 97389, 97393, 97398, 97403, 97407, - 97412, 97416, 97421, 97426, 97431, 97436, 97441, 97445, 97450, 97455, - 97460, 97465, 97470, 97475, 97479, 97484, 97489, 97494, 97499, 97504, - 97509, 97513, 97517, 97522, 97527, 97532, 97537, 97542, 97547, 97552, - 97557, 97562, 97567, 97572, 97577, 97582, 97587, 97592, 97597, 97602, - 97607, 97612, 97617, 97622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97627, 97633, 97638, 97643, 97648, 97653, 97658, 97663, 97668, 97673, - 97678, 97684, 97690, 97696, 97702, 97708, 97714, 97720, 97726, 97732, - 97739, 97746, 97753, 97761, 97769, 97777, 97785, 97793, 0, 0, 0, 0, - 97801, 97805, 97810, 97815, 97820, 97824, 97829, 97834, 97839, 97844, - 97848, 97852, 97857, 97862, 97867, 97872, 97876, 97881, 97886, 97891, - 97896, 97901, 97906, 97910, 97915, 97920, 97925, 97930, 97935, 97940, - 97945, 97950, 97955, 97960, 97965, 97971, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97977, 97982, 97989, 97996, 98001, 98006, 98011, 98016, 98021, 98026, - 98031, 98036, 98041, 98046, 98051, 98056, 98061, 98066, 98071, 98076, - 98081, 98086, 98091, 98096, 98101, 98106, 98111, 98116, 98121, 98126, 0, - 0, 0, 0, 0, 98133, 98139, 98145, 98151, 98157, 98162, 98168, 98174, - 98180, 98186, 98191, 98197, 98203, 98209, 98215, 98221, 98227, 98233, - 98239, 98245, 98250, 98256, 98262, 98268, 98274, 98280, 98285, 98291, - 98297, 98302, 98308, 98314, 98320, 98326, 98332, 98338, 98344, 98349, - 98355, 98362, 98369, 98376, 98383, 0, 0, 0, 0, 0, 98390, 98395, 98400, - 98405, 98410, 98415, 98420, 98425, 98430, 98435, 98440, 98445, 98450, - 98455, 98460, 98465, 98470, 98475, 98480, 98485, 98490, 98495, 98500, - 98505, 98510, 98515, 98520, 98524, 98528, 98532, 0, 98537, 98543, 98548, - 98553, 98558, 98563, 98569, 98575, 98581, 98587, 98593, 98599, 98605, - 98611, 98617, 98623, 98629, 98635, 98641, 98646, 98652, 98658, 98663, - 98669, 98674, 98680, 98686, 98691, 98697, 98703, 98708, 98714, 98719, - 98724, 98730, 98736, 98742, 0, 0, 0, 0, 98747, 98753, 98759, 98765, - 98771, 98777, 98783, 98789, 98795, 98802, 98807, 98812, 98818, 98824, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96956, 96963, 96972, 96981, 96988, 96995, 97002, 97009, 97016, 97023, + 97029, 97036, 97043, 97050, 97057, 97064, 97071, 97078, 97085, 97094, + 97101, 97108, 97115, 97122, 97129, 97136, 97143, 97150, 97159, 97166, + 97173, 97180, 97187, 97194, 97201, 97210, 97217, 97224, 97231, 97238, + 97247, 97254, 97261, 97268, 97276, 97285, 0, 0, 97294, 97298, 97302, + 97307, 97312, 97317, 97322, 97326, 97331, 97336, 97341, 97346, 97351, + 97356, 97360, 97365, 97370, 97375, 97380, 97384, 97389, 97394, 97398, + 97403, 97408, 97413, 97418, 97423, 97428, 0, 0, 0, 97433, 97437, 97442, + 97447, 97451, 97456, 97460, 97465, 97470, 97475, 97480, 97485, 97489, + 97494, 97499, 97504, 97509, 97514, 97519, 97523, 97528, 97533, 97538, + 97543, 97548, 97553, 97557, 97561, 97566, 97571, 97576, 97581, 97586, + 97591, 97596, 97601, 97606, 97611, 97616, 97621, 97626, 97631, 97636, + 97641, 97646, 97651, 97656, 97661, 97666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97671, 97677, 97682, 97687, 97692, 97697, 97702, 97707, + 97712, 97717, 97722, 97728, 97734, 97740, 97746, 97752, 97758, 97764, + 97770, 97776, 97783, 97790, 97797, 97805, 97813, 97821, 97829, 97837, 0, + 0, 0, 0, 97845, 97849, 97854, 97859, 97864, 97868, 97873, 97878, 97883, + 97888, 97892, 97896, 97901, 97906, 97911, 97916, 97920, 97925, 97930, + 97935, 97940, 97945, 97950, 97954, 97959, 97964, 97969, 97974, 97979, + 97984, 97989, 97994, 97999, 98004, 98009, 98015, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98021, 98026, 98033, 98040, 98045, 98050, 98055, 98060, 98065, 98070, + 98075, 98080, 98085, 98090, 98095, 98100, 98105, 98110, 98115, 98120, + 98125, 98130, 98135, 98140, 98145, 98150, 98155, 98160, 98165, 98170, 0, + 0, 0, 0, 0, 98177, 98183, 98189, 98195, 98201, 98206, 98212, 98218, + 98224, 98230, 98235, 98241, 98247, 98253, 98259, 98265, 98271, 98277, + 98283, 98289, 98294, 98300, 98306, 98312, 98318, 98324, 98329, 98335, + 98341, 98346, 98352, 98358, 98364, 98370, 98376, 98382, 98388, 98393, + 98399, 98406, 98413, 98420, 98427, 0, 0, 0, 0, 0, 98434, 98439, 98444, + 98449, 98454, 98459, 98464, 98469, 98474, 98479, 98484, 98489, 98494, + 98499, 98504, 98509, 98514, 98519, 98524, 98529, 98534, 98539, 98544, + 98549, 98554, 98559, 98564, 98568, 98572, 98576, 0, 98581, 98587, 98592, + 98597, 98602, 98607, 98613, 98619, 98625, 98631, 98637, 98643, 98649, + 98655, 98661, 98667, 98673, 98679, 98685, 98690, 98696, 98702, 98707, + 98713, 98718, 98724, 98730, 98735, 98741, 98747, 98752, 98758, 98763, + 98768, 98774, 98780, 98786, 0, 0, 0, 0, 98791, 98797, 98803, 98809, + 98815, 98821, 98827, 98833, 98839, 98846, 98851, 98856, 98862, 98868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98830, 98836, 98842, - 98848, 98855, 98861, 98868, 98875, 98882, 98889, 98897, 98904, 98912, - 98918, 98924, 98930, 98936, 98942, 98948, 98954, 98960, 98966, 98972, - 98978, 98984, 98990, 98996, 99002, 99008, 99014, 99020, 99026, 99032, - 99038, 99044, 99050, 99056, 99062, 99068, 99074, 99080, 99086, 99092, - 99098, 99105, 99111, 99118, 99125, 99132, 99139, 99147, 99154, 99162, - 99168, 99174, 99180, 99186, 99192, 99198, 99204, 99210, 99216, 99222, - 99228, 99234, 99240, 99246, 99252, 99258, 99264, 99270, 99276, 99282, - 99288, 99294, 99300, 99306, 99312, 99318, 99324, 99330, 99335, 99340, - 99345, 99350, 99355, 99360, 99365, 99370, 99375, 99380, 99385, 99390, - 99395, 99400, 99405, 99410, 99415, 99420, 99425, 99430, 99435, 99440, - 99445, 99450, 99455, 99460, 99465, 99470, 99475, 99480, 99485, 99490, - 99495, 99500, 99505, 99510, 99515, 99520, 99525, 99530, 99535, 99540, - 99545, 99550, 99555, 99560, 99565, 99570, 99575, 99580, 99585, 99590, - 99595, 99600, 99605, 99609, 99613, 99618, 99623, 99628, 99633, 99638, - 99643, 99648, 99653, 99658, 99663, 99668, 99672, 99676, 99680, 99684, - 99688, 99692, 99696, 99701, 99706, 0, 0, 99711, 99716, 99720, 99724, - 99728, 99732, 99736, 99740, 99744, 99748, 0, 0, 0, 0, 0, 0, 99752, 99757, - 99763, 99769, 99775, 99781, 99787, 99793, 99798, 99804, 99809, 99815, - 99820, 99825, 99831, 99837, 99842, 99847, 99852, 99857, 99863, 99868, - 99874, 99879, 99885, 99891, 99897, 99903, 99909, 99915, 99921, 99926, - 99932, 99938, 99944, 99950, 0, 0, 0, 0, 99956, 99961, 99967, 99973, - 99979, 99985, 99991, 99997, 100002, 100008, 100013, 100019, 100024, - 100029, 100035, 100041, 100046, 100051, 100056, 100061, 100067, 100072, - 100078, 100083, 100089, 100095, 100101, 100107, 100113, 100119, 100125, - 100130, 100136, 100142, 100148, 100154, 0, 0, 0, 0, 100160, 100164, - 100169, 100174, 100179, 100184, 100189, 100194, 100199, 100203, 100208, - 100213, 100218, 100223, 100227, 100232, 100237, 100242, 100247, 100252, - 100257, 100261, 100266, 100270, 100275, 100280, 100285, 100290, 100295, - 100300, 100305, 100310, 100314, 100319, 100324, 100329, 100334, 100339, - 100344, 100349, 0, 0, 0, 0, 0, 0, 0, 0, 100354, 100361, 100368, 100375, - 100382, 100389, 100396, 100403, 100410, 100417, 100424, 100431, 100438, - 100445, 100452, 100459, 100466, 100473, 100480, 100487, 100494, 100501, - 100508, 100515, 100522, 100529, 100536, 100543, 100550, 100557, 100564, - 100571, 100578, 100585, 100592, 100599, 100606, 100613, 100620, 100627, - 100634, 100641, 100648, 100655, 100662, 100669, 100676, 100683, 100690, - 100697, 100704, 100711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100718, 100725, - 100730, 100736, 100742, 100748, 100754, 100760, 100766, 100772, 100777, - 100783, 0, 100789, 100794, 100800, 100805, 100811, 100817, 100822, - 100827, 100833, 100839, 100845, 100851, 100856, 100862, 100868, 0, - 100874, 100880, 100886, 100892, 100898, 100903, 100909, 0, 100915, - 100921, 0, 100927, 100932, 100938, 100944, 100950, 100956, 100962, - 100968, 100974, 100979, 100985, 0, 100991, 100996, 101002, 101007, - 101013, 101019, 101024, 101029, 101035, 101041, 101047, 101053, 101058, - 101064, 101070, 0, 101076, 101082, 101088, 101094, 101100, 101105, - 101111, 0, 101117, 101123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98874, 98880, 98886, + 98892, 98899, 98905, 98912, 98919, 98926, 98933, 98941, 98948, 98956, + 98962, 98968, 98974, 98980, 98986, 98992, 98998, 99004, 99010, 99016, + 99022, 99028, 99034, 99040, 99046, 99052, 99058, 99064, 99070, 99076, + 99082, 99088, 99094, 99100, 99106, 99112, 99118, 99124, 99130, 99136, + 99142, 99149, 99155, 99162, 99169, 99176, 99183, 99191, 99198, 99206, + 99212, 99218, 99224, 99230, 99236, 99242, 99248, 99254, 99260, 99266, + 99272, 99278, 99284, 99290, 99296, 99302, 99308, 99314, 99320, 99326, + 99332, 99338, 99344, 99350, 99356, 99362, 99368, 99374, 99379, 99384, + 99389, 99394, 99399, 99404, 99409, 99414, 99419, 99424, 99429, 99434, + 99439, 99444, 99449, 99454, 99459, 99464, 99469, 99474, 99479, 99484, + 99489, 99494, 99499, 99504, 99509, 99514, 99519, 99524, 99529, 99534, + 99539, 99544, 99549, 99554, 99559, 99564, 99569, 99574, 99579, 99584, + 99589, 99594, 99599, 99604, 99609, 99614, 99619, 99624, 99629, 99634, + 99639, 99644, 99649, 99653, 99657, 99662, 99667, 99672, 99677, 99682, + 99687, 99692, 99697, 99702, 99707, 99712, 99716, 99720, 99724, 99728, + 99732, 99736, 99740, 99745, 99750, 0, 0, 99755, 99760, 99764, 99768, + 99772, 99776, 99780, 99784, 99788, 99792, 0, 0, 0, 0, 0, 0, 99796, 99801, + 99807, 99813, 99819, 99825, 99831, 99837, 99842, 99848, 99853, 99859, + 99864, 99869, 99875, 99881, 99886, 99891, 99896, 99901, 99907, 99912, + 99918, 99923, 99929, 99935, 99941, 99947, 99953, 99959, 99965, 99970, + 99976, 99982, 99988, 99994, 0, 0, 0, 0, 100000, 100005, 100011, 100017, + 100023, 100029, 100035, 100041, 100046, 100052, 100057, 100063, 100068, + 100073, 100079, 100085, 100090, 100095, 100100, 100105, 100111, 100116, + 100122, 100127, 100133, 100139, 100145, 100151, 100157, 100163, 100169, + 100174, 100180, 100186, 100192, 100198, 0, 0, 0, 0, 100204, 100208, + 100213, 100218, 100223, 100228, 100233, 100238, 100243, 100247, 100252, + 100257, 100262, 100267, 100271, 100276, 100281, 100286, 100291, 100296, + 100301, 100305, 100310, 100314, 100319, 100324, 100329, 100334, 100339, + 100344, 100349, 100354, 100358, 100363, 100368, 100373, 100378, 100383, + 100388, 100393, 0, 0, 0, 0, 0, 0, 0, 0, 100398, 100405, 100412, 100419, + 100426, 100433, 100440, 100447, 100454, 100461, 100468, 100475, 100482, + 100489, 100496, 100503, 100510, 100517, 100524, 100531, 100538, 100545, + 100552, 100559, 100566, 100573, 100580, 100587, 100594, 100601, 100608, + 100615, 100622, 100629, 100636, 100643, 100650, 100657, 100664, 100671, + 100678, 100685, 100692, 100699, 100706, 100713, 100720, 100727, 100734, + 100741, 100748, 100755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100762, 100769, + 100774, 100780, 100786, 100792, 100798, 100804, 100810, 100816, 100821, + 100827, 0, 100833, 100838, 100844, 100849, 100855, 100861, 100866, + 100871, 100877, 100883, 100889, 100895, 100900, 100906, 100912, 0, + 100918, 100924, 100930, 100936, 100942, 100947, 100953, 0, 100959, + 100965, 0, 100971, 100976, 100982, 100988, 100994, 101000, 101006, + 101012, 101018, 101023, 101029, 0, 101035, 101040, 101046, 101051, + 101057, 101063, 101068, 101073, 101079, 101085, 101091, 101097, 101102, + 101108, 101114, 0, 101120, 101126, 101132, 101138, 101144, 101149, + 101155, 0, 101161, 101167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 101129, 101134, 101139, 101144, 101149, 101154, 101159, - 101164, 101169, 101174, 101179, 101184, 101189, 101194, 101199, 101204, - 101209, 101214, 101219, 101224, 101229, 101234, 101239, 101244, 101249, - 101254, 101259, 101264, 101269, 101274, 101279, 101284, 101289, 101294, - 101299, 101304, 101309, 101314, 101319, 101324, 101329, 101334, 101339, - 101344, 101349, 101354, 101359, 101364, 101369, 101374, 101379, 101384, - 101389, 101394, 101399, 101404, 101409, 101414, 101419, 101424, 101429, - 101434, 101439, 101444, 101449, 101454, 101459, 101464, 101469, 101474, - 101479, 101484, 101489, 101494, 101499, 101504, 101509, 101514, 101519, - 101524, 101529, 101534, 101539, 101544, 101549, 101554, 101559, 101564, - 101569, 101574, 101579, 101584, 101589, 101594, 101599, 101604, 101609, - 101614, 101619, 101624, 101629, 101634, 101639, 101644, 101649, 101654, - 101659, 101664, 101669, 101674, 101679, 101684, 101689, 101694, 101699, - 101704, 101709, 101714, 101719, 101724, 101729, 101734, 101739, 101744, - 101749, 101754, 101759, 101764, 101769, 101774, 101779, 101784, 101789, - 101794, 101799, 101804, 101809, 101814, 101819, 101824, 101829, 101834, - 101839, 101844, 101849, 101854, 101859, 101864, 101869, 101874, 101879, - 101884, 101889, 101894, 101899, 101904, 101909, 101914, 101919, 101924, - 101929, 101934, 101939, 101944, 101949, 101954, 101959, 101964, 101969, - 101974, 101979, 101984, 101989, 101994, 101999, 102004, 102009, 102014, - 102019, 102024, 102029, 102034, 102039, 102044, 102049, 102054, 102059, - 102064, 102069, 102074, 102079, 102084, 102089, 102094, 102099, 102104, - 102109, 102114, 102119, 102124, 102129, 102134, 102139, 102144, 102149, - 102154, 102159, 102164, 102169, 102174, 102179, 102184, 102189, 102194, - 102199, 102204, 102209, 102214, 102219, 102224, 102229, 102234, 102239, - 102244, 102249, 102254, 102259, 102264, 102269, 102274, 102279, 102284, - 102289, 102294, 102299, 102304, 102309, 102314, 102319, 102324, 102329, - 102334, 102339, 102344, 102349, 102354, 102359, 102364, 102369, 102374, - 102379, 102384, 102389, 102394, 102399, 102404, 102409, 102414, 102419, - 102424, 102429, 102434, 102439, 102444, 102449, 102454, 102459, 102464, - 102469, 102474, 102479, 102484, 102489, 102494, 102499, 102504, 102509, - 102514, 102519, 102524, 102529, 102534, 102539, 102544, 102549, 102554, - 102559, 102564, 102569, 102574, 102579, 102584, 102589, 102594, 102599, - 102604, 102609, 102614, 102619, 102624, 102629, 102634, 102639, 102644, - 102649, 102654, 102659, 102664, 102669, 102674, 102679, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 102684, 102690, 102697, 102704, 102710, 102717, 102724, 102731, - 102738, 102744, 102751, 102758, 102765, 102772, 102779, 102786, 102793, - 102800, 102807, 102814, 102821, 102828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 102835, 102840, 102845, 102850, 102855, 102860, 102865, 102870, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102875, - 102881, 102889, 102898, 102903, 102909, 0, 102915, 102922, 102933, - 102943, 102950, 102958, 102965, 102976, 102982, 102992, 102999, 103006, - 103012, 103019, 103027, 103034, 103040, 103047, 103059, 103066, 103073, - 103081, 103090, 103103, 103108, 103117, 103123, 103132, 103138, 103144, - 103151, 103156, 103166, 103180, 103188, 103196, 103201, 103211, 103218, - 103229, 103236, 103245, 0, 103253, 103259, 103267, 103277, 103283, - 103289, 103295, 103301, 103311, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101173, 101178, 101183, 101188, 101193, 101198, 101203, + 101208, 101213, 101218, 101223, 101228, 101233, 101238, 101243, 101248, + 101253, 101258, 101263, 101268, 101273, 101278, 101283, 101288, 101293, + 101298, 101303, 101308, 101313, 101318, 101323, 101328, 101333, 101338, + 101343, 101348, 101353, 101358, 101363, 101368, 101373, 101378, 101383, + 101388, 101393, 101398, 101403, 101408, 101413, 101418, 101423, 101428, + 101433, 101438, 101443, 101448, 101453, 101458, 101463, 101468, 101473, + 101478, 101483, 101488, 101493, 101498, 101503, 101508, 101513, 101518, + 101523, 101528, 101533, 101538, 101543, 101548, 101553, 101558, 101563, + 101568, 101573, 101578, 101583, 101588, 101593, 101598, 101603, 101608, + 101613, 101618, 101623, 101628, 101633, 101638, 101643, 101648, 101653, + 101658, 101663, 101668, 101673, 101678, 101683, 101688, 101693, 101698, + 101703, 101708, 101713, 101718, 101723, 101728, 101733, 101738, 101743, + 101748, 101753, 101758, 101763, 101768, 101773, 101778, 101783, 101788, + 101793, 101798, 101803, 101808, 101813, 101818, 101823, 101828, 101833, + 101838, 101843, 101848, 101853, 101858, 101863, 101868, 101873, 101878, + 101883, 101888, 101893, 101898, 101903, 101908, 101913, 101918, 101923, + 101928, 101933, 101938, 101943, 101948, 101953, 101958, 101963, 101968, + 101973, 101978, 101983, 101988, 101993, 101998, 102003, 102008, 102013, + 102018, 102023, 102028, 102033, 102038, 102043, 102048, 102053, 102058, + 102063, 102068, 102073, 102078, 102083, 102088, 102093, 102098, 102103, + 102108, 102113, 102118, 102123, 102128, 102133, 102138, 102143, 102148, + 102153, 102158, 102163, 102168, 102173, 102178, 102183, 102188, 102193, + 102198, 102203, 102208, 102213, 102218, 102223, 102228, 102233, 102238, + 102243, 102248, 102253, 102258, 102263, 102268, 102273, 102278, 102283, + 102288, 102293, 102298, 102303, 102308, 102313, 102318, 102323, 102328, + 102333, 102338, 102343, 102348, 102353, 102358, 102363, 102368, 102373, + 102378, 102383, 102388, 102393, 102398, 102403, 102408, 102413, 102418, + 102423, 102428, 102433, 102438, 102443, 102448, 102453, 102458, 102463, + 102468, 102473, 102478, 102483, 102488, 102493, 102498, 102503, 102508, + 102513, 102518, 102523, 102528, 102533, 102538, 102543, 102548, 102553, + 102558, 102563, 102568, 102573, 102578, 102583, 102588, 102593, 102598, + 102603, 102608, 102613, 102618, 102623, 102628, 102633, 102638, 102643, + 102648, 102653, 102658, 102663, 102668, 102673, 102678, 102683, 102688, + 102693, 102698, 102703, 102708, 102713, 102718, 102723, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102728, 102734, 102741, 102748, 102754, 102761, 102768, 102775, + 102782, 102788, 102795, 102802, 102809, 102816, 102823, 102830, 102837, + 102844, 102851, 102858, 102865, 102872, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 102879, 102884, 102889, 102894, 102899, 102904, 102909, 102914, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102919, + 102925, 102933, 102942, 102947, 102953, 0, 102959, 102966, 102977, + 102987, 102994, 103002, 103009, 103020, 103026, 103036, 103043, 103050, + 103056, 103063, 103071, 103078, 103084, 103091, 103103, 103110, 103117, + 103125, 103134, 103147, 103152, 103161, 103167, 103176, 103182, 103188, + 103195, 103200, 103210, 103224, 103232, 103240, 103245, 103255, 103262, + 103273, 103280, 103289, 0, 103297, 103303, 103311, 103321, 103327, + 103333, 103339, 103345, 103355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 103319, 103323, 103327, 103331, 103335, 103339, 0, - 0, 103344, 0, 103349, 103353, 103358, 103363, 103368, 103373, 103377, - 103382, 103387, 103392, 103397, 103401, 103406, 103411, 103416, 103421, - 103425, 103430, 103435, 103440, 103445, 103449, 103454, 103459, 103464, - 103469, 103473, 103478, 103483, 103488, 103493, 103497, 103502, 103507, - 103512, 103517, 103522, 103527, 103532, 103536, 103541, 103546, 103551, - 103556, 0, 103561, 103566, 0, 0, 0, 103571, 0, 0, 103576, 103581, 103588, - 103595, 103602, 103609, 103616, 103623, 103630, 103637, 103644, 103651, - 103658, 103665, 103672, 103679, 103686, 103693, 103700, 103707, 103714, - 103721, 103728, 0, 103735, 103742, 103748, 103754, 103760, 103767, - 103774, 103782, 103789, 103797, 103802, 103807, 103812, 103817, 103822, - 103827, 103832, 103837, 103842, 103847, 103852, 103857, 103862, 103868, - 103873, 103878, 103883, 103888, 103893, 103898, 103903, 103908, 103913, - 103919, 103925, 103929, 103933, 103937, 103941, 103945, 103950, 103955, - 103961, 103966, 103972, 103977, 103982, 103987, 103993, 103998, 104003, - 104008, 104013, 104018, 104024, 104029, 104035, 104040, 104046, 104051, - 104057, 104062, 104068, 104073, 104078, 104083, 104088, 104093, 104098, - 104103, 104109, 104114, 0, 0, 0, 0, 0, 0, 0, 0, 104119, 104123, 104127, - 104131, 104135, 104141, 104145, 104150, 104155, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 103363, 103367, 103371, 103375, 103379, 103383, 0, + 0, 103388, 0, 103393, 103397, 103402, 103407, 103412, 103417, 103421, + 103426, 103431, 103436, 103441, 103445, 103450, 103455, 103460, 103465, + 103469, 103474, 103479, 103484, 103489, 103493, 103498, 103503, 103508, + 103513, 103517, 103522, 103527, 103532, 103537, 103541, 103546, 103551, + 103556, 103561, 103566, 103571, 103576, 103580, 103585, 103590, 103595, + 103600, 0, 103605, 103610, 0, 0, 0, 103615, 0, 0, 103620, 103625, 103632, + 103639, 103646, 103653, 103660, 103667, 103674, 103681, 103688, 103695, + 103702, 103709, 103716, 103723, 103730, 103737, 103744, 103751, 103758, + 103765, 103772, 0, 103779, 103786, 103792, 103798, 103804, 103811, + 103818, 103826, 103833, 103841, 103846, 103851, 103856, 103861, 103866, + 103871, 103876, 103881, 103886, 103891, 103896, 103901, 103906, 103912, + 103917, 103922, 103927, 103932, 103937, 103942, 103947, 103952, 103957, + 103963, 103969, 103973, 103977, 103981, 103985, 103989, 103994, 103999, + 104005, 104010, 104016, 104021, 104026, 104031, 104037, 104042, 104047, + 104052, 104057, 104062, 104068, 104073, 104079, 104084, 104090, 104095, + 104101, 104106, 104112, 104117, 104122, 104127, 104132, 104137, 104142, + 104147, 104153, 104158, 0, 0, 0, 0, 0, 0, 0, 0, 104163, 104167, 104171, + 104175, 104179, 104185, 104189, 104194, 104199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104161, 104166, 104171, - 104176, 104181, 104186, 104191, 104196, 104201, 104206, 104211, 104216, - 104221, 104226, 104231, 104236, 104241, 104246, 104251, 0, 104256, - 104261, 0, 0, 0, 0, 0, 104266, 104270, 104274, 104279, 104284, 104290, - 104295, 104300, 104305, 104310, 104315, 104320, 104325, 104330, 104335, - 104340, 104345, 104350, 104355, 104360, 104365, 104370, 104375, 104380, - 104385, 104390, 104395, 104400, 104404, 104409, 104414, 104420, 104424, - 0, 0, 0, 104428, 104434, 104438, 104443, 104448, 104453, 104457, 104462, - 104466, 104471, 104476, 104480, 104485, 104490, 104494, 104498, 104503, - 104508, 104512, 104517, 104522, 104527, 104532, 104537, 104542, 104547, - 104552, 0, 0, 0, 0, 0, 104557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104205, 104210, 104215, + 104220, 104225, 104230, 104235, 104240, 104245, 104250, 104255, 104260, + 104265, 104270, 104275, 104280, 104285, 104290, 104295, 0, 104300, + 104305, 0, 0, 0, 0, 0, 104310, 104314, 104318, 104323, 104328, 104334, + 104339, 104344, 104349, 104354, 104359, 104364, 104369, 104374, 104379, + 104384, 104389, 104394, 104399, 104404, 104409, 104414, 104419, 104424, + 104429, 104434, 104439, 104444, 104448, 104453, 104458, 104464, 104468, + 0, 0, 0, 104472, 104478, 104482, 104487, 104492, 104497, 104501, 104506, + 104510, 104515, 104520, 104524, 104529, 104534, 104538, 104542, 104547, + 104552, 104556, 104561, 104566, 104571, 104576, 104581, 104586, 104591, + 104596, 0, 0, 0, 0, 0, 104601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104562, 104567, 104572, 104577, 104582, 104587, 104593, 104599, - 104605, 104610, 104615, 104620, 104626, 104632, 104638, 104643, 104649, - 104654, 104660, 104666, 104671, 104677, 104683, 104688, 104694, 104700, - 104706, 104712, 104718, 104723, 104729, 104735, 104741, 104746, 104751, - 104756, 104761, 104766, 104772, 104778, 104783, 104788, 104793, 104799, - 104804, 104809, 104815, 104821, 104826, 104833, 104839, 104844, 104850, - 104856, 104862, 104867, 0, 0, 0, 0, 104873, 104882, 104890, 104897, - 104904, 104909, 104914, 104919, 104924, 104929, 104934, 104939, 104944, - 104949, 104955, 104961, 104967, 104973, 104979, 104985, 0, 0, 104991, - 104998, 105005, 105012, 105020, 105028, 105036, 105044, 105052, 105060, - 105066, 105072, 105078, 105085, 105092, 105099, 105106, 105113, 105120, - 105127, 105134, 105141, 105148, 105155, 105162, 105169, 105176, 105183, - 105191, 105199, 105207, 105216, 105225, 105234, 105243, 105252, 105261, - 105269, 105277, 105285, 105294, 105303, 105312, 105321, 105330, 105339, - 105348, 105352, 105357, 105362, 0, 105368, 105373, 0, 0, 0, 0, 0, 105378, - 105384, 105391, 105396, 105401, 105405, 105410, 105415, 0, 105420, - 105425, 105430, 0, 105435, 105440, 105445, 105450, 105455, 105460, - 105465, 105470, 105475, 105480, 105485, 105489, 105493, 105498, 105503, - 105508, 105512, 105516, 105520, 105524, 105529, 105534, 105539, 105543, - 105548, 105552, 105557, 105562, 105567, 0, 0, 105572, 105578, 105583, 0, - 0, 0, 0, 105588, 105592, 105596, 105600, 105604, 105608, 105613, 105618, - 105624, 105629, 0, 0, 0, 0, 0, 0, 0, 105636, 105642, 105649, 105655, - 105662, 105668, 105674, 105680, 105687, 0, 0, 0, 0, 0, 0, 0, 105693, - 105701, 105709, 105717, 105725, 105733, 105741, 105749, 105757, 105765, - 105773, 105781, 105789, 105797, 105805, 105813, 105821, 105829, 105837, - 105845, 105853, 105861, 105869, 105877, 105885, 105893, 105901, 105909, - 105917, 105925, 105932, 105940, 105948, 105955, 105962, 105969, 105976, - 105983, 105990, 105997, 106004, 106011, 106018, 106025, 106032, 106039, - 106046, 106053, 106060, 106067, 106074, 106081, 106088, 106095, 106102, - 106109, 106116, 106123, 106130, 106137, 106144, 106151, 106157, 106164, + 0, 0, 104606, 104611, 104616, 104621, 104626, 104631, 104637, 104643, + 104649, 104654, 104659, 104664, 104670, 104676, 104682, 104687, 104693, + 104698, 104704, 104710, 104715, 104721, 104727, 104732, 104738, 104744, + 104750, 104756, 104762, 104767, 104773, 104779, 104785, 104790, 104795, + 104800, 104805, 104810, 104816, 104822, 104827, 104832, 104837, 104843, + 104848, 104853, 104859, 104865, 104870, 104877, 104883, 104888, 104894, + 104900, 104906, 104911, 0, 0, 0, 0, 104917, 104926, 104934, 104941, + 104948, 104953, 104958, 104963, 104968, 104973, 104978, 104983, 104988, + 104993, 104999, 105005, 105011, 105017, 105023, 105029, 0, 0, 105035, + 105042, 105049, 105056, 105064, 105072, 105080, 105088, 105096, 105104, + 105110, 105116, 105122, 105129, 105136, 105143, 105150, 105157, 105164, + 105171, 105178, 105185, 105192, 105199, 105206, 105213, 105220, 105227, + 105235, 105243, 105251, 105260, 105269, 105278, 105287, 105296, 105305, + 105313, 105321, 105329, 105338, 105347, 105356, 105365, 105374, 105383, + 105392, 105396, 105401, 105406, 0, 105412, 105417, 0, 0, 0, 0, 0, 105422, + 105428, 105435, 105440, 105445, 105449, 105454, 105459, 0, 105464, + 105469, 105474, 0, 105479, 105484, 105489, 105494, 105499, 105504, + 105509, 105514, 105519, 105524, 105529, 105533, 105537, 105542, 105547, + 105552, 105556, 105560, 105564, 105568, 105573, 105578, 105583, 105587, + 105592, 105596, 105601, 105606, 105611, 0, 0, 105616, 105622, 105627, 0, + 0, 0, 0, 105632, 105636, 105640, 105644, 105648, 105652, 105657, 105662, + 105668, 105673, 0, 0, 0, 0, 0, 0, 0, 105680, 105686, 105693, 105699, + 105706, 105712, 105718, 105724, 105731, 0, 0, 0, 0, 0, 0, 0, 105737, + 105745, 105753, 105761, 105769, 105777, 105785, 105793, 105801, 105809, + 105817, 105825, 105833, 105841, 105849, 105857, 105865, 105873, 105881, + 105889, 105897, 105905, 105913, 105921, 105929, 105937, 105945, 105953, + 105961, 105969, 105976, 105984, 105992, 105999, 106006, 106013, 106020, + 106027, 106034, 106041, 106048, 106055, 106062, 106069, 106076, 106083, + 106090, 106097, 106104, 106111, 106118, 106125, 106132, 106139, 106146, + 106153, 106160, 106167, 106174, 106181, 106188, 106195, 106201, 106208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106171, 106176, 106181, 106186, 106191, 106196, - 106201, 106206, 106211, 106216, 106221, 106226, 106231, 106236, 106241, - 106246, 106251, 106256, 106261, 106266, 106271, 106276, 106281, 106286, - 106291, 106296, 106301, 106306, 106311, 106316, 106321, 106326, 106331, - 106336, 106341, 106346, 106351, 106356, 106362, 0, 0, 0, 0, 106368, - 106372, 106376, 106381, 106386, 106392, 106398, 106404, 106414, 106423, - 106429, 106436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106444, 106448, 106453, - 106458, 106463, 106468, 106473, 106478, 106483, 106487, 106492, 106496, - 106501, 106505, 106510, 106514, 106519, 106524, 106529, 106534, 106539, - 106544, 106549, 106554, 106559, 106564, 106569, 106574, 106579, 106584, - 106589, 106594, 106599, 106604, 106609, 106614, 106619, 106624, 106629, - 106634, 106639, 106644, 106649, 106654, 106659, 106664, 106669, 106674, - 106679, 106684, 106689, 106694, 106699, 106704, 0, 0, 0, 106709, 106714, - 106723, 106731, 106740, 106749, 106760, 106771, 106778, 106785, 106792, - 106799, 106806, 106813, 106820, 106827, 106834, 106841, 106848, 106855, - 106862, 106869, 106876, 106883, 106890, 106897, 106904, 106911, 106918, - 0, 0, 106925, 106931, 106937, 106943, 106949, 106956, 106963, 106971, - 106978, 106985, 106992, 106999, 107006, 107013, 107020, 107027, 107034, - 107041, 107048, 107055, 107062, 107069, 107076, 107083, 107090, 107097, - 107104, 0, 0, 0, 0, 0, 107111, 107117, 107123, 107129, 107135, 107142, - 107149, 107157, 107164, 107171, 107178, 107185, 107192, 107199, 107206, - 107213, 107220, 107227, 107234, 107241, 107248, 107255, 107262, 107269, - 107276, 107283, 0, 0, 0, 0, 0, 0, 0, 107290, 107297, 107305, 107315, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107325, 107331, 107337, 107343, 107349, - 107356, 107363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 106215, 106220, 106225, 106230, 106235, 106240, + 106245, 106250, 106255, 106260, 106265, 106270, 106275, 106280, 106285, + 106290, 106295, 106300, 106305, 106310, 106315, 106320, 106325, 106330, + 106335, 106340, 106345, 106350, 106355, 106360, 106365, 106370, 106375, + 106380, 106385, 106390, 106395, 106400, 106406, 0, 0, 0, 0, 106412, + 106416, 106420, 106425, 106430, 106436, 106442, 106448, 106458, 106467, + 106473, 106480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106488, 106492, 106497, + 106502, 106507, 106512, 106517, 106522, 106527, 106531, 106536, 106540, + 106545, 106549, 106554, 106558, 106563, 106568, 106573, 106578, 106583, + 106588, 106593, 106598, 106603, 106608, 106613, 106618, 106623, 106628, + 106633, 106638, 106643, 106648, 106653, 106658, 106663, 106668, 106673, + 106678, 106683, 106688, 106693, 106698, 106703, 106708, 106713, 106718, + 106723, 106728, 106733, 106738, 106743, 106748, 0, 0, 0, 106753, 106758, + 106767, 106775, 106784, 106793, 106804, 106815, 106822, 106829, 106836, + 106843, 106850, 106857, 106864, 106871, 106878, 106885, 106892, 106899, + 106906, 106913, 106920, 106927, 106934, 106941, 106948, 106955, 106962, + 0, 0, 106969, 106975, 106981, 106987, 106993, 107000, 107007, 107015, + 107022, 107029, 107036, 107043, 107050, 107057, 107064, 107071, 107078, + 107085, 107092, 107099, 107106, 107113, 107120, 107127, 107134, 107141, + 107148, 0, 0, 0, 0, 0, 107155, 107161, 107167, 107173, 107179, 107186, + 107193, 107201, 107208, 107215, 107222, 107229, 107236, 107243, 107250, + 107257, 107264, 107271, 107278, 107285, 107292, 107299, 107306, 107313, + 107320, 107327, 0, 0, 0, 0, 0, 0, 0, 107334, 107341, 107349, 107359, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107369, 107375, 107381, 107387, 107393, + 107400, 107407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107371, 107378, 107385, 107393, - 107400, 107407, 107414, 107421, 107429, 107437, 107445, 107453, 107461, - 107469, 107477, 107485, 107493, 107501, 107509, 107517, 107525, 107533, - 107541, 107549, 107557, 107565, 107573, 107581, 107589, 107597, 107605, - 107613, 107621, 107629, 107637, 107645, 107653, 107661, 107669, 107677, - 107685, 107693, 107701, 107709, 107717, 107725, 107733, 107741, 107749, - 107757, 107765, 107773, 107781, 107789, 107797, 107805, 107813, 107821, - 107829, 107837, 107845, 107853, 107861, 107869, 107877, 107885, 107893, - 107901, 107909, 107917, 107925, 107933, 107941, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107415, 107422, 107429, 107437, + 107444, 107451, 107458, 107465, 107473, 107481, 107489, 107497, 107505, + 107513, 107521, 107529, 107537, 107545, 107553, 107561, 107569, 107577, + 107585, 107593, 107601, 107609, 107617, 107625, 107633, 107641, 107649, + 107657, 107665, 107673, 107681, 107689, 107697, 107705, 107713, 107721, + 107729, 107737, 107745, 107753, 107761, 107769, 107777, 107785, 107793, + 107801, 107809, 107817, 107825, 107833, 107841, 107849, 107857, 107865, + 107873, 107881, 107889, 107897, 107905, 107913, 107921, 107929, 107937, + 107945, 107953, 107961, 107969, 107977, 107985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 107949, 107954, 107960, 107966, 107972, 107978, 107984, 107990, 107996, - 108002, 108007, 108014, 108020, 108026, 108032, 108038, 108044, 108049, - 108055, 108061, 108067, 108073, 108079, 108085, 108091, 108097, 108103, - 108109, 108114, 108120, 108128, 108136, 108142, 108148, 108154, 108160, - 108168, 108174, 108180, 108186, 108192, 108198, 108204, 108209, 108215, - 108223, 108231, 108237, 108243, 108249, 108256, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108262, 108267, 108273, 108279, 108285, 108291, 108297, - 108303, 108309, 108315, 108320, 108327, 108333, 108339, 108345, 108351, - 108357, 108362, 108368, 108374, 108380, 108386, 108392, 108398, 108404, - 108410, 108416, 108422, 108427, 108433, 108441, 108449, 108455, 108461, - 108467, 108473, 108481, 108487, 108493, 108499, 108505, 108511, 108517, - 108522, 108528, 108536, 108544, 108550, 108556, 108562, 108569, 0, 0, 0, - 0, 0, 0, 0, 108575, 108579, 108583, 108588, 108593, 108599, 108604, - 108610, 108617, 108623, 108630, 108637, 108644, 108651, 108657, 108664, - 108671, 108678, 108685, 108691, 108698, 108705, 108711, 108718, 108724, - 108731, 108737, 108743, 108749, 108756, 108765, 108771, 108779, 108786, - 108793, 108800, 108806, 108812, 108818, 108824, 108830, 108837, 108846, - 108853, 108860, 108867, 0, 0, 0, 0, 0, 0, 0, 0, 108874, 108881, 108887, - 108893, 108899, 108905, 108911, 108917, 108923, 108929, 0, 0, 0, 0, 0, 0, + 107993, 107998, 108004, 108010, 108016, 108022, 108028, 108034, 108040, + 108046, 108051, 108058, 108064, 108070, 108076, 108082, 108088, 108093, + 108099, 108105, 108111, 108117, 108123, 108129, 108135, 108141, 108147, + 108153, 108158, 108164, 108172, 108180, 108186, 108192, 108198, 108204, + 108212, 108218, 108224, 108230, 108236, 108242, 108248, 108253, 108259, + 108267, 108275, 108281, 108287, 108293, 108300, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 108306, 108311, 108317, 108323, 108329, 108335, 108341, + 108347, 108353, 108359, 108364, 108371, 108377, 108383, 108389, 108395, + 108401, 108406, 108412, 108418, 108424, 108430, 108436, 108442, 108448, + 108454, 108460, 108466, 108471, 108477, 108485, 108493, 108499, 108505, + 108511, 108517, 108525, 108531, 108537, 108543, 108549, 108555, 108561, + 108566, 108572, 108580, 108588, 108594, 108600, 108606, 108613, 0, 0, 0, + 0, 0, 0, 0, 108619, 108623, 108627, 108632, 108637, 108643, 108648, + 108654, 108661, 108667, 108674, 108681, 108688, 108695, 108701, 108708, + 108715, 108722, 108729, 108735, 108742, 108749, 108755, 108762, 108768, + 108775, 108781, 108787, 108793, 108800, 108809, 108815, 108823, 108830, + 108837, 108844, 108850, 108856, 108862, 108868, 108874, 108881, 108890, + 108897, 108904, 108911, 0, 0, 0, 0, 0, 0, 0, 0, 108918, 108925, 108931, + 108937, 108943, 108949, 108955, 108961, 108967, 108973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108935, 108939, 108943, - 108947, 108951, 108955, 108959, 108963, 108967, 108971, 108976, 108981, - 108986, 108991, 108996, 109001, 109006, 109011, 109016, 109022, 109028, - 109034, 109041, 109048, 109055, 109062, 109069, 109076, 109083, 109090, - 109097, 0, 109104, 109109, 109114, 109119, 109124, 109129, 109134, - 109139, 109144, 109149, 109154, 109159, 109164, 109169, 109173, 109178, - 109183, 109188, 109193, 109198, 109203, 109208, 109213, 109218, 109223, - 109228, 109233, 109238, 109246, 109251, 109256, 109261, 109266, 109271, - 109276, 109281, 109286, 109291, 109296, 109301, 109306, 109311, 0, - 109316, 109322, 109328, 0, 0, 109333, 109341, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108979, 108983, 108987, + 108991, 108995, 108999, 109003, 109007, 109011, 109015, 109020, 109025, + 109030, 109035, 109040, 109045, 109050, 109055, 109060, 109066, 109072, + 109078, 109085, 109092, 109099, 109106, 109113, 109120, 109127, 109134, + 109141, 0, 109148, 109153, 109158, 109163, 109168, 109173, 109178, + 109183, 109188, 109193, 109198, 109203, 109208, 109213, 109217, 109222, + 109227, 109232, 109237, 109242, 109247, 109252, 109257, 109262, 109267, + 109272, 109277, 109282, 109290, 109295, 109300, 109305, 109310, 109315, + 109320, 109325, 109330, 109335, 109340, 109345, 109350, 109355, 0, + 109360, 109366, 109372, 0, 0, 109377, 109385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109350, 109357, - 109364, 109371, 109377, 109384, 109390, 109397, 109403, 109409, 109416, - 109422, 109428, 109434, 109440, 109446, 109452, 109458, 109464, 109471, - 109482, 109488, 109494, 109502, 109508, 109514, 109521, 109532, 109538, - 109544, 109550, 109557, 109568, 109573, 109578, 109583, 109588, 109593, - 109599, 109605, 109611, 109618, 109626, 0, 0, 0, 0, 0, 0, 0, 0, 109632, - 109637, 109642, 109647, 109652, 109657, 109662, 109667, 109672, 109677, - 109682, 109687, 109692, 109697, 109702, 109707, 109712, 109717, 109722, - 109727, 109732, 109737, 109743, 109748, 109754, 109759, 109765, 109771, - 109777, 109783, 109789, 109796, 109802, 109808, 109812, 109817, 109822, - 109828, 109836, 109847, 109856, 109866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109876, 109882, 109888, 109894, 109900, - 109906, 109913, 109919, 109925, 109931, 109937, 109943, 109949, 109955, - 109961, 109967, 109973, 109979, 109985, 109991, 109997, 110004, 110011, - 110017, 110025, 110033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110042, - 110047, 110053, 110058, 110063, 110068, 110073, 110078, 110085, 110090, - 110095, 110100, 110105, 110110, 110115, 110120, 110125, 110130, 110135, - 110140, 110145, 110150, 110154, 110158, 110162, 110166, 110171, 110176, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110182, - 110187, 110192, 110197, 110202, 110207, 110212, 110217, 110222, 110227, - 110232, 110237, 110242, 110247, 110252, 110257, 110262, 110267, 110272, - 110277, 110282, 110287, 110292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110297, - 110301, 110305, 110309, 110313, 110317, 110320, 110324, 110327, 110331, - 110334, 110338, 110342, 110347, 110351, 110356, 110359, 110363, 110366, - 110370, 110373, 110377, 110381, 110385, 110389, 110393, 110397, 110401, - 110405, 110409, 110413, 110417, 110421, 110425, 110429, 110433, 110437, - 110441, 110445, 110448, 110451, 110455, 110459, 110463, 110466, 110469, - 110472, 110475, 110479, 110483, 110487, 110490, 110493, 110497, 110503, - 110509, 110515, 110520, 110527, 110531, 110536, 110540, 110545, 110550, - 110556, 110561, 110567, 110571, 110576, 110580, 110585, 110588, 110591, - 110595, 110600, 110606, 110611, 110617, 0, 0, 0, 0, 110622, 110625, - 110628, 110631, 110634, 110637, 110640, 110643, 110646, 110649, 110653, - 110657, 110661, 110665, 110669, 110673, 110677, 110681, 110685, 110690, - 110694, 110698, 110701, 110704, 110707, 110710, 110713, 110716, 110719, - 110722, 110725, 110731, 110738, 110745, 110753, 110761, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110767, 110771, 110776, 110781, 110786, 110790, 110795, 110799, - 110804, 110808, 110813, 110817, 110822, 110826, 110831, 110835, 110840, - 110845, 110850, 110855, 110860, 110865, 110870, 110875, 110880, 110885, - 110890, 110895, 110900, 110905, 110910, 110915, 110920, 110925, 110930, - 110935, 110939, 110943, 110948, 110953, 110958, 110962, 110966, 110970, - 110974, 110979, 110984, 110989, 110993, 110997, 111003, 111008, 111014, - 111019, 111025, 111030, 111036, 111041, 111047, 111052, 111057, 111062, - 111067, 111071, 111076, 111082, 111086, 111091, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 111097, 0, 0, 111102, 111109, 111116, 111123, 111130, 111137, - 111144, 111151, 111158, 111165, 111172, 111179, 111186, 111193, 111200, - 111207, 111214, 111221, 111228, 111235, 111242, 111249, 111256, 111263, - 111270, 0, 0, 0, 0, 0, 0, 0, 111277, 111284, 111290, 111296, 111302, - 111308, 111314, 111320, 111326, 111332, 0, 0, 0, 0, 0, 0, 111338, 111343, - 111348, 111353, 111358, 111362, 111366, 111370, 111375, 111380, 111385, - 111390, 111395, 111400, 111405, 111410, 111415, 111420, 111425, 111430, - 111435, 111440, 111445, 111450, 111455, 111460, 111465, 111470, 111475, - 111480, 111485, 111490, 111495, 111500, 111505, 111510, 111515, 111520, - 111525, 111530, 111535, 111540, 111546, 111551, 111557, 111562, 111568, - 111573, 111579, 111585, 111589, 111594, 111598, 0, 111602, 111607, - 111611, 111615, 111619, 111623, 111627, 111631, 111635, 111639, 111643, - 111648, 111652, 111657, 111662, 111667, 111673, 111679, 0, 0, 0, 0, 0, 0, - 0, 0, 111684, 111688, 111692, 111696, 111700, 111704, 111708, 111713, - 111718, 111723, 111728, 111733, 111738, 111743, 111748, 111753, 111758, - 111763, 111768, 111773, 111778, 111783, 111788, 111793, 111797, 111801, - 111806, 111811, 111816, 111820, 111824, 111828, 111833, 111837, 111841, - 111846, 111851, 111856, 111861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111866, - 111871, 111876, 111881, 111885, 111890, 111894, 111899, 111903, 111908, - 111913, 111919, 111924, 111930, 111934, 111939, 111943, 111948, 111952, - 111957, 111962, 111967, 111972, 111977, 111982, 111987, 111992, 111997, - 112002, 112007, 112012, 112017, 112022, 112027, 112032, 112037, 112042, - 112046, 112050, 112055, 112060, 112065, 112069, 112073, 112077, 112081, - 112086, 112091, 112096, 112101, 112105, 112109, 112115, 112120, 112126, - 112131, 112137, 112143, 112150, 112156, 112163, 112168, 112174, 112179, - 112185, 112190, 112195, 112200, 112205, 112209, 112213, 112218, 112223, - 112227, 112232, 112237, 112242, 112250, 112255, 112262, 112269, 112274, - 112278, 112282, 112286, 112290, 112294, 112298, 112302, 112306, 112310, - 112314, 112319, 112323, 112328, 112334, 0, 112340, 112345, 112350, - 112355, 112360, 112365, 112370, 112375, 112380, 112385, 112391, 112397, - 112403, 112409, 112415, 112421, 112427, 112433, 112439, 112446, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 112452, 112456, 112461, 112465, 112469, 112473, - 112478, 112482, 112487, 112491, 112496, 112501, 112506, 112511, 112516, - 112521, 112526, 112531, 0, 112536, 112541, 112546, 112551, 112556, - 112561, 112566, 112571, 112576, 112581, 112586, 112591, 112595, 112599, - 112604, 112609, 112614, 112619, 112623, 112627, 112631, 112635, 112640, - 112644, 112648, 112653, 112659, 112664, 112670, 112675, 112680, 112686, - 112691, 112697, 112702, 112707, 112712, 112717, 112721, 112726, 112732, - 112737, 112743, 112748, 112753, 112758, 112764, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109394, 109401, + 109408, 109415, 109421, 109428, 109434, 109441, 109447, 109453, 109460, + 109466, 109472, 109478, 109484, 109490, 109496, 109502, 109508, 109515, + 109526, 109532, 109538, 109546, 109552, 109558, 109565, 109576, 109582, + 109588, 109594, 109601, 109612, 109617, 109622, 109627, 109632, 109637, + 109643, 109649, 109655, 109662, 109670, 0, 0, 0, 0, 0, 0, 0, 0, 109676, + 109681, 109686, 109691, 109696, 109701, 109706, 109711, 109716, 109721, + 109726, 109731, 109736, 109741, 109746, 109751, 109756, 109761, 109766, + 109771, 109776, 109781, 109787, 109792, 109798, 109803, 109809, 109815, + 109821, 109827, 109833, 109840, 109846, 109852, 109856, 109861, 109866, + 109872, 109880, 109891, 109900, 109910, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109920, 109926, 109932, 109938, 109944, + 109950, 109957, 109963, 109969, 109975, 109981, 109987, 109993, 109999, + 110005, 110011, 110017, 110023, 110029, 110035, 110041, 110048, 110055, + 110061, 110069, 110077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110086, + 110091, 110097, 110102, 110107, 110112, 110117, 110122, 110129, 110134, + 110139, 110144, 110149, 110154, 110159, 110164, 110169, 110174, 110179, + 110184, 110189, 110194, 110198, 110202, 110206, 110210, 110215, 110220, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110226, + 110231, 110236, 110241, 110246, 110251, 110256, 110261, 110266, 110271, + 110276, 110281, 110286, 110291, 110296, 110301, 110306, 110311, 110316, + 110321, 110326, 110331, 110336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110341, + 110345, 110349, 110353, 110357, 110361, 110364, 110368, 110371, 110375, + 110378, 110382, 110386, 110391, 110395, 110400, 110403, 110407, 110410, + 110414, 110417, 110421, 110425, 110429, 110433, 110437, 110441, 110445, + 110449, 110453, 110457, 110461, 110465, 110469, 110473, 110477, 110481, + 110485, 110489, 110492, 110495, 110499, 110503, 110507, 110510, 110513, + 110516, 110519, 110523, 110527, 110531, 110534, 110537, 110541, 110547, + 110553, 110559, 110564, 110571, 110575, 110580, 110584, 110589, 110594, + 110600, 110605, 110611, 110615, 110620, 110624, 110629, 110632, 110635, + 110639, 110644, 110650, 110655, 110661, 0, 0, 0, 0, 110666, 110669, + 110672, 110675, 110678, 110681, 110684, 110687, 110690, 110693, 110697, + 110701, 110705, 110709, 110713, 110717, 110721, 110725, 110729, 110734, + 110738, 110742, 110745, 110748, 110751, 110754, 110757, 110760, 110763, + 110766, 110769, 110775, 110782, 110789, 110797, 110805, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110811, 110815, 110820, 110825, 110830, 110834, 110839, 110843, + 110848, 110852, 110857, 110861, 110866, 110870, 110875, 110879, 110884, + 110889, 110894, 110899, 110904, 110909, 110914, 110919, 110924, 110929, + 110934, 110939, 110944, 110949, 110954, 110959, 110964, 110969, 110974, + 110979, 110983, 110987, 110992, 110997, 111002, 111006, 111010, 111014, + 111018, 111023, 111028, 111033, 111037, 111041, 111047, 111052, 111058, + 111063, 111069, 111074, 111080, 111085, 111091, 111096, 111101, 111106, + 111111, 111115, 111120, 111126, 111130, 111135, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 111141, 0, 0, 111146, 111153, 111160, 111167, 111174, 111181, + 111188, 111195, 111202, 111209, 111216, 111223, 111230, 111237, 111244, + 111251, 111258, 111265, 111272, 111279, 111286, 111293, 111300, 111307, + 111314, 0, 0, 0, 0, 0, 0, 0, 111321, 111328, 111334, 111340, 111346, + 111352, 111358, 111364, 111370, 111376, 0, 0, 0, 0, 0, 0, 111382, 111387, + 111392, 111397, 111402, 111406, 111410, 111414, 111419, 111424, 111429, + 111434, 111439, 111444, 111449, 111454, 111459, 111464, 111469, 111474, + 111479, 111484, 111489, 111494, 111499, 111504, 111509, 111514, 111519, + 111524, 111529, 111534, 111539, 111544, 111549, 111554, 111559, 111564, + 111569, 111574, 111579, 111584, 111590, 111595, 111601, 111606, 111612, + 111617, 111623, 111629, 111633, 111638, 111642, 0, 111646, 111651, + 111655, 111659, 111663, 111667, 111671, 111675, 111679, 111683, 111687, + 111692, 111696, 111701, 111706, 111711, 111717, 111723, 0, 0, 0, 0, 0, 0, + 0, 0, 111728, 111732, 111736, 111740, 111744, 111748, 111752, 111757, + 111762, 111767, 111772, 111777, 111782, 111787, 111792, 111797, 111802, + 111807, 111812, 111817, 111822, 111827, 111832, 111837, 111841, 111845, + 111850, 111855, 111860, 111864, 111868, 111872, 111877, 111881, 111885, + 111890, 111895, 111900, 111905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111910, + 111915, 111920, 111925, 111929, 111934, 111938, 111943, 111947, 111952, + 111957, 111963, 111968, 111974, 111978, 111983, 111987, 111992, 111996, + 112001, 112006, 112011, 112016, 112021, 112026, 112031, 112036, 112041, + 112046, 112051, 112056, 112061, 112066, 112071, 112076, 112081, 112086, + 112090, 112094, 112099, 112104, 112109, 112113, 112117, 112121, 112125, + 112130, 112135, 112140, 112145, 112149, 112153, 112159, 112164, 112170, + 112175, 112181, 112187, 112194, 112200, 112207, 112212, 112218, 112223, + 112229, 112234, 112239, 112244, 112249, 112253, 112257, 112262, 112267, + 112271, 112276, 112281, 112286, 112294, 112299, 112306, 112313, 112318, + 112322, 112326, 112330, 112334, 112338, 112342, 112346, 112350, 112354, + 112358, 112363, 112367, 112372, 112378, 0, 112384, 112389, 112394, + 112399, 112404, 112409, 112414, 112419, 112424, 112429, 112435, 112441, + 112447, 112453, 112459, 112465, 112471, 112477, 112483, 112490, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 112496, 112500, 112505, 112509, 112513, 112517, + 112522, 112526, 112531, 112535, 112540, 112545, 112550, 112555, 112560, + 112565, 112570, 112575, 0, 112580, 112585, 112590, 112595, 112600, + 112605, 112610, 112615, 112620, 112625, 112630, 112635, 112639, 112643, + 112648, 112653, 112658, 112663, 112667, 112671, 112675, 112679, 112684, + 112688, 112692, 112697, 112703, 112708, 112714, 112719, 112724, 112730, + 112735, 112741, 112746, 112751, 112756, 112761, 112765, 112770, 112776, + 112781, 112787, 112792, 112797, 112802, 112808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 112770, 112774, 112778, 112782, 112786, 112790, 112795, - 0, 112800, 0, 112805, 112810, 112815, 112820, 0, 112825, 112830, 112835, - 112840, 112845, 112850, 112855, 112860, 112865, 112870, 112875, 112880, - 112884, 112888, 112893, 0, 112898, 112903, 112907, 112911, 112915, - 112919, 112924, 112928, 112932, 112937, 112942, 0, 0, 0, 0, 0, 0, 112947, - 112951, 112956, 112960, 112965, 112969, 112974, 112978, 112983, 112987, - 112992, 112996, 113001, 113006, 113011, 113016, 113021, 113026, 113031, - 113036, 113041, 113046, 113051, 113056, 113061, 113066, 113071, 113076, - 113081, 113086, 113091, 113096, 113101, 113106, 113110, 113114, 113119, - 113124, 113129, 113134, 113138, 113142, 113146, 113150, 113155, 113160, - 113164, 113168, 113173, 113179, 113184, 113190, 113195, 113201, 113206, - 113212, 113217, 113223, 113228, 0, 0, 0, 0, 0, 113233, 113238, 113242, - 113246, 113250, 113254, 113258, 113262, 113266, 113270, 0, 0, 0, 0, 0, 0, - 113274, 113281, 113286, 113291, 0, 113296, 113300, 113305, 113309, - 113314, 113318, 113323, 113328, 0, 0, 113333, 113338, 0, 0, 113343, - 113348, 113353, 113357, 113362, 113367, 113372, 113377, 113382, 113387, - 113392, 113397, 113402, 113407, 113412, 113417, 113422, 113427, 113432, - 113437, 113442, 113447, 0, 113451, 113455, 113460, 113465, 113470, - 113474, 113478, 0, 113482, 113486, 0, 113491, 113496, 113501, 113506, - 113510, 0, 113514, 113518, 113523, 113528, 113534, 113539, 113545, - 113550, 113556, 113562, 0, 0, 113569, 113575, 0, 0, 113581, 113587, - 113593, 0, 0, 113598, 0, 0, 0, 0, 0, 0, 113602, 0, 0, 0, 0, 0, 113609, - 113614, 113621, 113629, 113635, 113641, 113647, 0, 0, 113654, 113660, - 113665, 113670, 113675, 113680, 113685, 0, 0, 0, 113690, 113695, 113700, - 113705, 113711, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113716, 113720, 113725, - 113729, 113734, 113738, 113743, 113748, 113754, 113759, 113765, 113769, - 113774, 113778, 113783, 113787, 113792, 113797, 113802, 113807, 113812, - 113817, 113822, 113827, 113832, 113837, 113842, 113847, 113852, 113857, - 113862, 113867, 113872, 113877, 113882, 113887, 113891, 113896, 113900, - 113905, 113910, 113915, 113919, 113924, 113928, 113932, 113937, 113941, - 113946, 113951, 113956, 113961, 113965, 113969, 113975, 113980, 113986, - 113991, 113997, 114003, 114010, 114016, 114023, 114028, 114034, 114039, - 114045, 114050, 114055, 114060, 114065, 114070, 114075, 114081, 114085, - 114089, 114093, 114098, 114102, 114108, 114113, 114118, 114122, 114126, - 114130, 114134, 114138, 114142, 114146, 114150, 114154, 114159, 0, - 114164, 114169, 114174, 114181, 114186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114191, 114195, - 114199, 114204, 114208, 114213, 114217, 114222, 114227, 114233, 114238, - 114244, 114248, 114253, 114257, 114262, 114266, 114271, 114276, 114281, - 114286, 114291, 114296, 114301, 114306, 114311, 114316, 114321, 114326, - 114331, 114336, 114341, 114346, 114351, 114356, 114360, 114364, 114369, - 114374, 114379, 114383, 114387, 114391, 114395, 114400, 114405, 114410, - 114414, 114418, 114424, 114429, 114435, 114440, 114446, 114452, 114459, - 114465, 114472, 114477, 114484, 114490, 114495, 114502, 114508, 114513, - 114518, 114523, 114528, 114533, 114538, 114542, 114547, 0, 0, 0, 0, 0, 0, - 0, 0, 114551, 114556, 114560, 114564, 114568, 114572, 114576, 114580, - 114584, 114588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114592, 114596, - 114601, 114605, 114610, 114614, 114619, 114624, 114630, 114635, 114641, - 114645, 114650, 114654, 114659, 114663, 114668, 114673, 114678, 114683, - 114688, 114693, 114698, 114703, 114708, 114713, 114718, 114723, 114728, - 114733, 114738, 114743, 114748, 114753, 114757, 114761, 114766, 114771, - 114776, 114780, 114784, 114788, 114792, 114797, 114802, 114807, 114811, - 114815, 114821, 114826, 114832, 114837, 114843, 114849, 0, 0, 114856, - 114861, 114867, 114872, 114878, 114883, 114888, 114893, 114898, 114903, - 114908, 114912, 114917, 114923, 114928, 114934, 114940, 114946, 114954, - 114967, 114980, 114993, 115007, 115022, 115030, 115041, 115050, 115060, - 115070, 115080, 115091, 115103, 115116, 115124, 115132, 115141, 115147, - 115154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115162, 115166, 115171, 115175, - 115180, 115184, 115189, 115194, 115200, 115205, 115211, 115215, 115220, - 115224, 115229, 115233, 115238, 115243, 115248, 115253, 115258, 115263, - 115268, 115273, 115278, 115283, 115288, 115293, 115298, 115303, 115308, - 115313, 115318, 115323, 115327, 115331, 115336, 115341, 115346, 115350, - 115354, 115358, 115362, 115367, 115372, 115377, 115381, 115385, 115390, - 115396, 115401, 115407, 115412, 115418, 115424, 115431, 115437, 115444, - 115449, 115455, 115460, 115466, 115471, 115476, 115481, 115486, 115490, - 115495, 115500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115505, 115510, 115514, - 115518, 115522, 115526, 115530, 115534, 115538, 115542, 0, 0, 0, 0, 0, 0, - 115546, 115552, 115557, 115564, 115572, 115579, 115587, 115596, 115601, - 115610, 115615, 115623, 115632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115642, 115646, 115651, 115655, 115660, 115664, 115669, - 115673, 115678, 115682, 115687, 115691, 115696, 115701, 115706, 115711, - 115716, 115721, 115726, 115731, 115736, 115741, 115746, 115751, 115756, - 115761, 115766, 115771, 115776, 115781, 115785, 115789, 115794, 115799, - 115804, 115808, 115812, 115816, 115820, 115825, 115830, 115834, 115838, - 115843, 115848, 115853, 115859, 115864, 115870, 115875, 115881, 115886, - 115892, 115897, 115903, 115908, 115913, 115920, 0, 0, 0, 0, 0, 0, 115925, - 115930, 115934, 115938, 115942, 115946, 115950, 115954, 115958, 115962, + 0, 0, 0, 0, 0, 0, 112814, 112818, 112822, 112826, 112830, 112834, 112839, + 0, 112844, 0, 112849, 112854, 112859, 112864, 0, 112869, 112874, 112879, + 112884, 112889, 112894, 112899, 112904, 112909, 112914, 112919, 112924, + 112928, 112932, 112937, 0, 112942, 112947, 112951, 112955, 112959, + 112963, 112968, 112972, 112976, 112981, 112986, 0, 0, 0, 0, 0, 0, 112991, + 112995, 113000, 113004, 113009, 113013, 113018, 113022, 113027, 113031, + 113036, 113040, 113045, 113050, 113055, 113060, 113065, 113070, 113075, + 113080, 113085, 113090, 113095, 113100, 113105, 113110, 113115, 113120, + 113125, 113130, 113135, 113140, 113145, 113150, 113154, 113158, 113163, + 113168, 113173, 113178, 113182, 113186, 113190, 113194, 113199, 113204, + 113208, 113212, 113217, 113223, 113228, 113234, 113239, 113245, 113250, + 113256, 113261, 113267, 113272, 0, 0, 0, 0, 0, 113277, 113282, 113286, + 113290, 113294, 113298, 113302, 113306, 113310, 113314, 0, 0, 0, 0, 0, 0, + 113318, 113325, 113330, 113335, 0, 113340, 113344, 113349, 113353, + 113358, 113362, 113367, 113372, 0, 0, 113377, 113382, 0, 0, 113387, + 113392, 113397, 113401, 113406, 113411, 113416, 113421, 113426, 113431, + 113436, 113441, 113446, 113451, 113456, 113461, 113466, 113471, 113476, + 113481, 113486, 113491, 0, 113495, 113499, 113504, 113509, 113514, + 113518, 113522, 0, 113526, 113530, 0, 113535, 113540, 113545, 113550, + 113554, 0, 113558, 113562, 113567, 113572, 113578, 113583, 113589, + 113594, 113600, 113606, 0, 0, 113613, 113619, 0, 0, 113625, 113631, + 113637, 0, 0, 113642, 0, 0, 0, 0, 0, 0, 113646, 0, 0, 0, 0, 0, 113653, + 113658, 113665, 113673, 113679, 113685, 113691, 0, 0, 113698, 113704, + 113709, 113714, 113719, 113724, 113729, 0, 0, 0, 113734, 113739, 113744, + 113749, 113755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113760, 113764, 113769, + 113773, 113778, 113782, 113787, 113792, 113798, 113803, 113809, 113813, + 113818, 113822, 113827, 113831, 113836, 113841, 113846, 113851, 113856, + 113861, 113866, 113871, 113876, 113881, 113886, 113891, 113896, 113901, + 113906, 113911, 113916, 113921, 113926, 113931, 113935, 113940, 113944, + 113949, 113954, 113959, 113963, 113968, 113972, 113976, 113981, 113985, + 113990, 113995, 114000, 114005, 114009, 114013, 114019, 114024, 114030, + 114035, 114041, 114047, 114054, 114060, 114067, 114072, 114078, 114083, + 114089, 114094, 114099, 114104, 114109, 114114, 114119, 114125, 114129, + 114133, 114137, 114142, 114146, 114152, 114157, 114162, 114166, 114170, + 114174, 114178, 114182, 114186, 114190, 114194, 114198, 114203, 0, + 114208, 114213, 114218, 114225, 114230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114235, 114239, + 114243, 114248, 114252, 114257, 114261, 114266, 114271, 114277, 114282, + 114288, 114292, 114297, 114301, 114306, 114310, 114315, 114320, 114325, + 114330, 114335, 114340, 114345, 114350, 114355, 114360, 114365, 114370, + 114375, 114380, 114385, 114390, 114395, 114400, 114404, 114408, 114413, + 114418, 114423, 114427, 114431, 114435, 114439, 114444, 114449, 114454, + 114458, 114462, 114468, 114473, 114479, 114484, 114490, 114496, 114503, + 114509, 114516, 114521, 114528, 114534, 114539, 114546, 114552, 114557, + 114562, 114567, 114572, 114577, 114582, 114586, 114591, 0, 0, 0, 0, 0, 0, + 0, 0, 114595, 114600, 114604, 114608, 114612, 114616, 114620, 114624, + 114628, 114632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114636, 114640, + 114645, 114649, 114654, 114658, 114663, 114668, 114674, 114679, 114685, + 114689, 114694, 114698, 114703, 114707, 114712, 114717, 114722, 114727, + 114732, 114737, 114742, 114747, 114752, 114757, 114762, 114767, 114772, + 114777, 114782, 114787, 114792, 114797, 114801, 114805, 114810, 114815, + 114820, 114824, 114828, 114832, 114836, 114841, 114846, 114851, 114855, + 114859, 114865, 114870, 114876, 114881, 114887, 114893, 0, 0, 114900, + 114905, 114911, 114916, 114922, 114927, 114932, 114937, 114942, 114947, + 114952, 114956, 114961, 114967, 114972, 114978, 114984, 114990, 114998, + 115011, 115024, 115037, 115051, 115066, 115074, 115085, 115094, 115104, + 115114, 115124, 115135, 115147, 115160, 115168, 115176, 115185, 115191, + 115198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115206, 115210, 115215, 115219, + 115224, 115228, 115233, 115238, 115244, 115249, 115255, 115259, 115264, + 115268, 115273, 115277, 115282, 115287, 115292, 115297, 115302, 115307, + 115312, 115317, 115322, 115327, 115332, 115337, 115342, 115347, 115352, + 115357, 115362, 115367, 115371, 115375, 115380, 115385, 115390, 115394, + 115398, 115402, 115406, 115411, 115416, 115421, 115425, 115429, 115434, + 115440, 115445, 115451, 115456, 115462, 115468, 115475, 115481, 115488, + 115493, 115499, 115504, 115510, 115515, 115520, 115525, 115530, 115534, + 115539, 115544, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115549, 115554, 115558, + 115562, 115566, 115570, 115574, 115578, 115582, 115586, 0, 0, 0, 0, 0, 0, + 115590, 115596, 115601, 115608, 115616, 115623, 115631, 115640, 115645, + 115654, 115659, 115667, 115676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 115686, 115690, 115695, 115699, 115704, 115708, 115713, + 115717, 115722, 115726, 115731, 115735, 115740, 115745, 115750, 115755, + 115760, 115765, 115770, 115775, 115780, 115785, 115790, 115795, 115800, + 115805, 115810, 115815, 115820, 115825, 115829, 115833, 115838, 115843, + 115848, 115852, 115856, 115860, 115864, 115869, 115874, 115878, 115882, + 115887, 115892, 115897, 115903, 115908, 115914, 115919, 115925, 115930, + 115936, 115941, 115947, 115952, 115957, 115964, 0, 0, 0, 0, 0, 0, 115969, + 115974, 115978, 115982, 115986, 115990, 115994, 115998, 116002, 116006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 115966, 115970, 115975, 115980, 115984, 115989, 115996, - 116000, 116005, 116010, 116014, 116019, 116024, 116029, 116033, 116037, - 116041, 116046, 116050, 116054, 116059, 116064, 116069, 116076, 116081, - 116086, 116091, 0, 0, 116098, 116105, 116112, 116121, 116126, 116132, - 116137, 116143, 116148, 116154, 116159, 116165, 116170, 116176, 116182, - 0, 0, 0, 0, 116187, 116192, 116196, 116200, 116204, 116208, 116212, - 116216, 116220, 116224, 116228, 116233, 116238, 116244, 116249, 116254, - 116259, 116264, 116269, 116274, 116279, 116284, 116289, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 116010, 116014, 116019, 116024, 116028, 116033, 116040, + 116044, 116049, 116054, 116058, 116063, 116068, 116073, 116077, 116081, + 116085, 116090, 116094, 116098, 116103, 116108, 116113, 116120, 116125, + 116130, 116135, 0, 0, 116142, 116149, 116156, 116165, 116170, 116176, + 116181, 116187, 116192, 116198, 116203, 116209, 116214, 116220, 116226, + 0, 0, 0, 0, 116231, 116236, 116240, 116244, 116248, 116252, 116256, + 116260, 116264, 116268, 116272, 116277, 116282, 116288, 116293, 116298, + 116303, 116308, 116313, 116318, 116323, 116328, 116333, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 116294, 116298, 116303, 116307, 116312, 116316, 116321, 116325, - 116330, 116334, 116339, 116343, 116348, 116353, 116358, 116363, 116368, - 116373, 116378, 116383, 116388, 116393, 116398, 116403, 116408, 116413, - 116418, 116423, 116428, 116433, 116437, 116441, 116446, 116451, 116456, - 116460, 116464, 116468, 116472, 116477, 116482, 116487, 116491, 116495, - 116500, 116506, 116511, 116517, 116522, 116528, 116534, 116541, 116546, - 116552, 116557, 116563, 116568, 116573, 116578, 116583, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 116338, 116342, 116347, 116351, 116356, 116360, 116365, 116369, + 116374, 116378, 116383, 116387, 116392, 116397, 116402, 116407, 116412, + 116417, 116422, 116427, 116432, 116437, 116442, 116447, 116452, 116457, + 116462, 116467, 116472, 116477, 116481, 116485, 116490, 116495, 116500, + 116504, 116508, 116512, 116516, 116521, 116526, 116531, 116535, 116539, + 116544, 116550, 116555, 116561, 116566, 116572, 116578, 116585, 116590, + 116596, 116601, 116607, 116612, 116617, 116622, 116627, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116588, - 116596, 116603, 116611, 116619, 116626, 116634, 116642, 116650, 116657, - 116664, 116672, 116680, 116688, 116696, 116704, 116712, 116720, 116728, - 116736, 116744, 116752, 116760, 116768, 116776, 116784, 116792, 116800, - 116808, 116816, 116824, 116832, 116840, 116848, 116855, 116863, 116871, - 116878, 116886, 116894, 116902, 116909, 116916, 116924, 116932, 116940, - 116948, 116956, 116964, 116972, 116980, 116988, 116996, 117004, 117012, - 117020, 117028, 117036, 117044, 117052, 117060, 117068, 117076, 117084, - 117092, 117099, 117105, 117111, 117117, 117123, 117129, 117135, 117141, - 117147, 117153, 117160, 117167, 117174, 117181, 117188, 117195, 117202, - 117209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117216, 117222, 117228, - 117235, 117241, 117248, 117254, 117261, 0, 0, 117267, 0, 0, 117273, - 117279, 117286, 117293, 117300, 117307, 117314, 117321, 0, 117328, - 117335, 0, 117342, 117349, 117356, 117363, 117370, 117377, 117384, - 117391, 117397, 117403, 117410, 117417, 117424, 117430, 117436, 117443, - 117449, 117455, 117462, 117469, 117476, 117482, 117488, 117495, 117502, - 117510, 117517, 117525, 117532, 117540, 0, 117547, 117555, 0, 0, 117562, - 117569, 117576, 117583, 117589, 117598, 117605, 117611, 117618, 117625, - 117632, 117640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117650, 117657, 117663, - 117669, 117675, 117681, 117687, 117693, 117699, 117705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116632, + 116640, 116647, 116655, 116663, 116670, 116678, 116686, 116694, 116701, + 116708, 116716, 116724, 116732, 116740, 116748, 116756, 116764, 116772, + 116780, 116788, 116796, 116804, 116812, 116820, 116828, 116836, 116844, + 116852, 116860, 116868, 116876, 116884, 116892, 116899, 116907, 116915, + 116922, 116930, 116938, 116946, 116953, 116960, 116968, 116976, 116984, + 116992, 117000, 117008, 117016, 117024, 117032, 117040, 117048, 117056, + 117064, 117072, 117080, 117088, 117096, 117104, 117112, 117120, 117128, + 117136, 117143, 117149, 117155, 117161, 117167, 117173, 117179, 117185, + 117191, 117197, 117204, 117211, 117218, 117225, 117232, 117239, 117246, + 117253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117260, 117266, 117272, + 117279, 117285, 117292, 117298, 117305, 0, 0, 117311, 0, 0, 117317, + 117323, 117330, 117337, 117344, 117351, 117358, 117365, 0, 117372, + 117379, 0, 117386, 117393, 117400, 117407, 117414, 117421, 117428, + 117435, 117441, 117447, 117454, 117461, 117468, 117474, 117480, 117487, + 117493, 117499, 117506, 117513, 117520, 117526, 117532, 117539, 117546, + 117554, 117561, 117569, 117576, 117584, 0, 117591, 117599, 0, 0, 117606, + 117613, 117620, 117627, 117633, 117642, 117649, 117655, 117662, 117669, + 117676, 117684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117694, 117701, 117707, + 117713, 117719, 117725, 117731, 117737, 117743, 117749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117711, 117715, 117720, - 117724, 117729, 117733, 117738, 117743, 0, 0, 117749, 117753, 117758, - 117762, 117767, 117771, 117776, 117781, 117786, 117791, 117796, 117801, - 117806, 117811, 117816, 117821, 117826, 117831, 117836, 117841, 117846, - 117851, 117856, 117861, 117865, 117869, 117874, 117879, 117884, 117888, - 117892, 117896, 117900, 117905, 117910, 117915, 117919, 117923, 117928, - 117933, 117939, 117944, 117950, 117955, 117961, 117967, 0, 0, 117974, - 117979, 117985, 117990, 117996, 118001, 118006, 118011, 118016, 118021, - 118025, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 118032, 118037, 118043, 118050, 118056, 118062, 118069, - 118075, 118082, 118089, 118097, 118104, 118109, 118115, 118121, 118127, - 118133, 118139, 118145, 118151, 118157, 118163, 118169, 118175, 118181, - 118187, 118193, 118199, 118205, 118211, 118216, 118221, 118227, 118233, - 118239, 118244, 118250, 118256, 118262, 118268, 118274, 118280, 118286, - 118291, 118296, 118301, 118307, 118313, 118319, 118324, 118329, 118335, - 118341, 118347, 118353, 118362, 118371, 118377, 118383, 118390, 118397, - 118404, 118411, 118419, 118426, 118434, 118440, 118446, 118453, 118460, - 118469, 118479, 0, 0, 0, 0, 0, 0, 0, 0, 118484, 118488, 118493, 118499, - 118504, 118509, 118514, 118520, 118526, 118532, 118538, 118544, 118550, - 118554, 118559, 118564, 118569, 118574, 118579, 118584, 118589, 118594, - 118599, 118604, 118609, 118614, 118619, 118624, 118629, 118634, 118639, - 118644, 118648, 118652, 118657, 118662, 118667, 118671, 118676, 118681, - 118686, 118691, 118696, 118701, 118705, 118709, 118713, 118718, 118723, - 118728, 118732, 118736, 118741, 118746, 118751, 118757, 118763, 118770, - 118776, 118783, 118790, 118797, 118804, 118811, 118818, 118825, 118831, - 118837, 118844, 118851, 118858, 118863, 118868, 118873, 118877, 118882, - 118887, 118893, 118898, 118914, 118928, 118939, 118945, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 118951, 118957, 118963, 118969, 118975, 118980, - 118986, 118992, 118998, 119004, 119010, 119016, 119022, 119026, 119030, - 119034, 119038, 119046, 119054, 119062, 119070, 119079, 119088, 119097, - 119106, 119114, 119123, 119132, 119140, 119149, 119158, 119167, 119176, - 119184, 119193, 119201, 119210, 119219, 119227, 119235, 119243, 119251, - 119259, 119268, 119277, 119287, 119297, 119307, 119317, 119327, 119336, - 119346, 119356, 119366, 119377, 119387, 119399, 119411, 119422, 119436, - 119447, 119457, 119469, 119480, 119490, 119502, 119514, 119525, 119536, - 119546, 119556, 119568, 119579, 0, 0, 0, 0, 0, 0, 0, 119591, 119595, - 119602, 119606, 119612, 119618, 119626, 119634, 119642, 119650, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117755, 117759, 117764, + 117768, 117773, 117777, 117782, 117787, 0, 0, 117793, 117797, 117802, + 117806, 117811, 117815, 117820, 117825, 117830, 117835, 117840, 117845, + 117850, 117855, 117860, 117865, 117870, 117875, 117880, 117885, 117890, + 117895, 117900, 117905, 117909, 117913, 117918, 117923, 117928, 117932, + 117936, 117940, 117944, 117949, 117954, 117959, 117963, 117967, 117972, + 117977, 117983, 117988, 117994, 117999, 118005, 118011, 0, 0, 118018, + 118023, 118029, 118034, 118040, 118045, 118050, 118055, 118060, 118065, + 118069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118076, 118081, 118087, 118094, 118100, 118106, 118113, + 118119, 118126, 118133, 118141, 118148, 118153, 118159, 118165, 118171, + 118177, 118183, 118189, 118195, 118201, 118207, 118213, 118219, 118225, + 118231, 118237, 118243, 118249, 118255, 118260, 118265, 118271, 118277, + 118283, 118288, 118294, 118300, 118306, 118312, 118318, 118324, 118330, + 118335, 118340, 118345, 118351, 118357, 118363, 118368, 118373, 118379, + 118385, 118391, 118397, 118406, 118415, 118421, 118427, 118434, 118441, + 118448, 118455, 118463, 118470, 118478, 118484, 118490, 118497, 118504, + 118513, 118523, 0, 0, 0, 0, 0, 0, 0, 0, 118528, 118532, 118537, 118543, + 118548, 118553, 118558, 118564, 118570, 118576, 118582, 118588, 118594, + 118598, 118603, 118608, 118613, 118618, 118623, 118628, 118633, 118638, + 118643, 118648, 118653, 118658, 118663, 118668, 118673, 118678, 118683, + 118688, 118692, 118696, 118701, 118706, 118711, 118715, 118720, 118725, + 118730, 118735, 118740, 118745, 118749, 118753, 118757, 118762, 118767, + 118772, 118776, 118780, 118785, 118790, 118795, 118801, 118807, 118814, + 118820, 118827, 118834, 118841, 118848, 118855, 118862, 118869, 118875, + 118881, 118888, 118895, 118902, 118907, 118912, 118917, 118921, 118926, + 118931, 118937, 118942, 118958, 118972, 118983, 118989, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 118995, 119001, 119007, 119013, 119019, 119024, + 119030, 119036, 119042, 119048, 119054, 119060, 119066, 119070, 119074, + 119078, 119082, 119090, 119098, 119106, 119114, 119123, 119132, 119141, + 119150, 119158, 119167, 119176, 119184, 119193, 119202, 119211, 119220, + 119228, 119237, 119245, 119254, 119263, 119271, 119279, 119287, 119295, + 119303, 119312, 119321, 119331, 119341, 119351, 119361, 119371, 119380, + 119390, 119400, 119410, 119421, 119431, 119443, 119455, 119466, 119480, + 119491, 119501, 119513, 119524, 119534, 119546, 119558, 119569, 119580, + 119590, 119600, 119612, 119623, 0, 0, 0, 0, 0, 0, 0, 119635, 119639, + 119646, 119650, 119656, 119662, 119670, 119678, 119686, 119694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119654, 119658, - 119663, 119667, 119672, 119676, 119681, 119686, 119692, 0, 119697, - 119701, 119706, 119710, 119715, 119719, 119724, 119729, 119734, 119739, - 119744, 119749, 119754, 119759, 119764, 119769, 119774, 119779, 119784, - 119789, 119794, 119799, 119804, 119809, 119813, 119817, 119822, 119827, - 119832, 119836, 119840, 119844, 119848, 119853, 119858, 119863, 119867, - 119871, 119877, 119882, 119888, 119893, 119899, 119905, 119912, 0, - 119918, 119923, 119929, 119934, 119940, 119945, 119950, 119955, 119960, - 119965, 119969, 119974, 119980, 119986, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 119992, 119997, 120001, 120005, 120009, 120013, 120017, 120021, 120025, - 120029, 120033, 120037, 120041, 120045, 120049, 120053, 120057, 120061, - 120065, 120069, 120074, 120079, 120084, 120089, 120094, 120099, 120104, - 120109, 120114, 0, 0, 0, 120121, 120126, 120131, 120135, 120140, 120145, - 120150, 120155, 120160, 120165, 120170, 120175, 120180, 120185, 120189, - 120193, 120198, 120203, 120207, 120212, 120217, 120222, 120227, 120232, - 120237, 120242, 120246, 120250, 120254, 120259, 120263, 120267, 0, 0, - 120271, 120277, 120284, 120291, 120298, 120305, 120312, 120319, 120326, - 120333, 120340, 120347, 120353, 120359, 120366, 120373, 120379, 120386, - 120393, 120400, 120407, 120414, 0, 120421, 120427, 120433, 120439, - 120446, 120452, 120458, 120464, 120470, 120475, 120480, 120485, 120490, - 120495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 119698, 119702, + 119707, 119711, 119716, 119720, 119725, 119730, 119736, 0, 119741, + 119745, 119750, 119754, 119759, 119763, 119768, 119773, 119778, 119783, + 119788, 119793, 119798, 119803, 119808, 119813, 119818, 119823, 119828, + 119833, 119838, 119843, 119848, 119853, 119857, 119861, 119866, 119871, + 119876, 119880, 119884, 119888, 119892, 119897, 119902, 119907, 119911, + 119915, 119921, 119926, 119932, 119937, 119943, 119949, 119956, 0, + 119962, 119967, 119973, 119978, 119984, 119989, 119994, 119999, 120004, + 120009, 120013, 120018, 120024, 120030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 120036, 120041, 120045, 120049, 120053, 120057, 120061, 120065, 120069, + 120073, 120077, 120081, 120085, 120089, 120093, 120097, 120101, 120105, + 120109, 120113, 120118, 120123, 120128, 120133, 120138, 120143, 120148, + 120153, 120158, 0, 0, 0, 120165, 120170, 120175, 120179, 120184, 120189, + 120194, 120199, 120204, 120209, 120214, 120219, 120224, 120229, 120233, + 120237, 120242, 120247, 120251, 120256, 120261, 120266, 120271, 120276, + 120281, 120286, 120290, 120294, 120298, 120303, 120307, 120311, 0, 0, + 120315, 120321, 120328, 120335, 120342, 120349, 120356, 120363, 120370, + 120377, 120384, 120391, 120397, 120403, 120410, 120417, 120423, 120430, + 120437, 120444, 120451, 120458, 0, 120465, 120471, 120477, 120483, + 120490, 120496, 120502, 120508, 120514, 120519, 120524, 120529, 120534, + 120539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 120500, 120505, 120511, 120516, 120522, 120527, 120533, 0, - 120538, 120544, 0, 120549, 120555, 120560, 120566, 120572, 120578, - 120584, 120590, 120596, 120602, 120608, 120614, 120620, 120626, 120632, - 120638, 120644, 120650, 120656, 120662, 120668, 120673, 120678, 120684, - 120690, 120696, 120701, 120706, 120711, 120716, 120722, 120728, 120734, - 120739, 120744, 120750, 120756, 120762, 120768, 120775, 120781, 120788, - 120794, 120801, 0, 0, 0, 120808, 0, 120814, 120821, 0, 120827, 120834, - 120840, 120846, 120852, 120858, 120864, 120869, 120874, 0, 0, 0, 0, 0, 0, - 0, 0, 120879, 120885, 120890, 120895, 120900, 120905, 120910, 120915, - 120920, 120925, 0, 0, 0, 0, 0, 0, 120930, 120935, 120941, 120946, 120952, - 120957, 0, 120963, 120969, 0, 120975, 120981, 120987, 120992, 120998, - 121004, 121010, 121015, 121020, 121026, 121032, 121038, 121043, 121049, - 121055, 121061, 121067, 121072, 121078, 121084, 121090, 121096, 121102, - 121108, 121114, 121120, 121126, 121132, 121137, 121143, 121148, 121153, - 121158, 121165, 121171, 121178, 121184, 0, 121191, 121198, 0, 121205, - 121212, 121219, 121225, 121231, 121236, 0, 0, 0, 0, 0, 0, 0, 121241, - 121247, 121252, 121257, 121262, 121267, 121272, 121277, 121282, 121287, + 0, 0, 0, 120544, 120549, 120555, 120560, 120566, 120571, 120577, 0, + 120582, 120588, 0, 120593, 120599, 120604, 120610, 120616, 120622, + 120628, 120634, 120640, 120646, 120652, 120658, 120664, 120670, 120676, + 120682, 120688, 120694, 120700, 120706, 120712, 120717, 120722, 120728, + 120734, 120740, 120745, 120750, 120755, 120760, 120766, 120772, 120778, + 120783, 120788, 120794, 120800, 120806, 120812, 120819, 120825, 120832, + 120838, 120845, 0, 0, 0, 120852, 0, 120858, 120865, 0, 120871, 120878, + 120884, 120890, 120896, 120902, 120908, 120913, 120918, 0, 0, 0, 0, 0, 0, + 0, 0, 120923, 120929, 120934, 120939, 120944, 120949, 120954, 120959, + 120964, 120969, 0, 0, 0, 0, 0, 0, 120974, 120979, 120985, 120990, 120996, + 121001, 0, 121007, 121013, 0, 121019, 121025, 121031, 121036, 121042, + 121048, 121054, 121059, 121064, 121070, 121076, 121082, 121087, 121093, + 121099, 121105, 121111, 121116, 121122, 121128, 121134, 121140, 121146, + 121152, 121158, 121164, 121170, 121176, 121181, 121187, 121192, 121197, + 121202, 121209, 121215, 121222, 121228, 0, 121235, 121242, 0, 121249, + 121256, 121263, 121269, 121275, 121280, 0, 0, 0, 0, 0, 0, 0, 121285, + 121291, 121296, 121301, 121306, 121311, 121316, 121321, 121326, 121331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -23636,1725 +23642,1725 @@ static const unsigned int phrasebook_offset2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121292, 121296, 121301, 121306, - 121310, 121315, 121319, 121324, 121329, 121333, 121338, 121343, 121348, - 121352, 121356, 121360, 121365, 121369, 121373, 121377, 121382, 121387, - 121392, 121397, 121401, 0, 0, 0, 0, 0, 0, 0, 121408, 121413, 121418, - 121423, 121428, 121432, 121437, 121441, 121446, 121450, 121455, 121460, - 121466, 121471, 121477, 121481, 121486, 0, 121490, 121494, 121499, - 121504, 121509, 121514, 121519, 121524, 121529, 121534, 121539, 121544, - 121549, 121554, 121559, 121564, 121569, 121574, 121579, 121584, 121588, - 121592, 121597, 121602, 121607, 121611, 121615, 121619, 121623, 121628, - 121633, 121638, 121642, 121646, 121651, 121657, 121665, 121670, 121676, - 121681, 121687, 0, 0, 0, 121693, 121698, 121704, 121710, 121715, 121719, - 121723, 121728, 121736, 121746, 121752, 121760, 121766, 121773, 121781, - 121787, 121795, 121801, 121809, 121814, 121818, 121822, 121826, 121830, - 121834, 121838, 121842, 121846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121336, 121340, 121345, 121350, + 121354, 121359, 121363, 121368, 121373, 121377, 121382, 121387, 121392, + 121396, 121400, 121404, 121409, 121413, 121417, 121421, 121426, 121431, + 121436, 121441, 121445, 0, 0, 0, 0, 0, 0, 0, 121452, 121457, 121462, + 121467, 121472, 121476, 121481, 121485, 121490, 121494, 121499, 121504, + 121510, 121515, 121521, 121525, 121530, 0, 121534, 121538, 121543, + 121548, 121553, 121558, 121563, 121568, 121573, 121578, 121583, 121588, + 121593, 121598, 121603, 121608, 121613, 121618, 121623, 121628, 121632, + 121636, 121641, 121646, 121651, 121655, 121659, 121663, 121667, 121672, + 121677, 121682, 121686, 121690, 121695, 121701, 121709, 121714, 121720, + 121725, 121731, 0, 0, 0, 121737, 121742, 121748, 121754, 121759, 121763, + 121767, 121772, 121780, 121790, 121796, 121804, 121810, 121817, 121825, + 121831, 121839, 121845, 121853, 121858, 121862, 121866, 121870, 121874, + 121878, 121882, 121886, 121890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121855, 121861, - 121867, 121873, 121879, 121885, 121891, 121897, 121903, 121909, 121915, - 121921, 121927, 121933, 121939, 121945, 121951, 121957, 121963, 121969, - 121975, 121984, 121988, 121992, 121996, 122000, 122004, 122008, 122012, - 122016, 122020, 122024, 122028, 122032, 122036, 122040, 122044, 122050, - 122056, 122060, 122066, 122072, 122077, 122081, 122086, 122090, 122094, - 122100, 122106, 122110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122114, - 122122, 122125, 122130, 122136, 122144, 122149, 122155, 122163, 122169, - 122175, 122179, 122183, 122190, 122199, 122206, 122215, 122221, 122230, - 122237, 122244, 122251, 122261, 122267, 122271, 122278, 122287, 122297, - 122304, 122311, 122315, 122319, 122326, 122336, 122340, 122347, 122354, - 122361, 122367, 122374, 122381, 122388, 122395, 122399, 122403, 122407, - 122414, 122418, 122425, 122432, 122446, 122455, 122459, 122463, 122467, - 122474, 122478, 122482, 122486, 122494, 122502, 122521, 122531, 122551, - 122555, 122559, 122563, 122567, 122571, 122575, 122579, 122586, 122590, - 122593, 122597, 122601, 122607, 122614, 122623, 122627, 122636, 122645, - 122653, 122657, 122664, 122668, 122672, 122676, 122680, 122691, 122700, - 122709, 122718, 122727, 122739, 122748, 122757, 122766, 122774, 122783, - 122795, 122804, 122812, 122821, 122833, 122842, 122851, 122863, 122872, - 122881, 122893, 122902, 122906, 122910, 122914, 122918, 122922, 122926, - 122930, 122937, 122941, 122945, 122956, 122960, 122964, 122971, 122977, - 122983, 122987, 122994, 122998, 123002, 123006, 123010, 123014, 123018, - 123024, 123032, 123036, 123040, 123043, 123050, 123062, 123066, 123078, - 123085, 123092, 123099, 123106, 123112, 123116, 123120, 123124, 123128, - 123135, 123144, 123151, 123159, 123167, 123173, 123177, 123181, 123185, - 123189, 123195, 123204, 123216, 123223, 123230, 123239, 123250, 123256, - 123265, 123274, 123281, 123290, 123297, 123303, 123313, 123320, 123327, - 123334, 123341, 123345, 123351, 123355, 123366, 123374, 123383, 123395, - 123402, 123409, 123419, 123426, 123435, 123442, 123451, 123458, 123465, - 123475, 123482, 123489, 123498, 123505, 123517, 123526, 123533, 123540, - 123547, 123556, 123566, 123579, 123586, 123595, 123605, 123612, 123621, - 123634, 123641, 123648, 123655, 123665, 123675, 123681, 123691, 123698, - 123705, 123715, 123721, 123728, 123735, 123742, 123752, 123759, 123766, - 123773, 123779, 123786, 123796, 123803, 123807, 123815, 123819, 123831, - 123835, 123849, 123853, 123857, 123861, 123865, 123871, 123878, 123886, - 123890, 123894, 123898, 123902, 123909, 123913, 123919, 123925, 123933, - 123937, 123944, 123952, 123956, 123960, 123966, 123970, 123979, 123988, - 123995, 124005, 124011, 124015, 124019, 124027, 124034, 124041, 124047, - 124051, 124059, 124063, 124070, 124082, 124089, 124099, 124105, 124109, - 124118, 124125, 124134, 124138, 124142, 124149, 124153, 124157, 124161, - 124165, 124168, 124174, 124180, 124184, 124188, 124195, 124202, 124209, - 124216, 124223, 124230, 124237, 124244, 124250, 124254, 124258, 124265, - 124272, 124279, 124286, 124293, 124297, 124300, 124305, 124309, 124313, - 124322, 124331, 124335, 124339, 124345, 124351, 124368, 124374, 124378, - 124387, 124391, 124395, 124402, 124410, 124418, 124424, 124428, 124432, - 124436, 124440, 124443, 124449, 124456, 124466, 124473, 124480, 124487, - 124493, 124500, 124507, 124514, 124521, 124528, 124537, 124544, 124556, - 124563, 124570, 124580, 124591, 124598, 124605, 124612, 124619, 124626, - 124633, 124640, 124647, 124654, 124661, 124671, 124681, 124691, 124698, - 124708, 124715, 124722, 124729, 124736, 124742, 124749, 124756, 124763, - 124770, 124777, 124784, 124791, 124798, 124804, 124811, 124818, 124827, - 124834, 124841, 124845, 124853, 124857, 124861, 124865, 124869, 124873, - 124880, 124884, 124893, 124897, 124904, 124912, 124916, 124920, 124924, - 124937, 124953, 124957, 124961, 124968, 124974, 124981, 124985, 124989, - 124993, 124997, 125001, 125008, 125012, 125030, 125034, 125038, 125045, - 125049, 125053, 125059, 125063, 125067, 125075, 125079, 125083, 125086, - 125090, 125096, 125107, 125116, 125125, 125132, 125139, 125150, 125157, - 125164, 125171, 125178, 125185, 125192, 125199, 125209, 125215, 125222, - 125232, 125241, 125248, 125257, 125267, 125274, 125281, 125288, 125295, - 125307, 125314, 125321, 125328, 125335, 125342, 125352, 125359, 125366, - 125376, 125389, 125401, 125408, 125418, 125425, 125432, 125439, 125453, - 125459, 125467, 125477, 125487, 125494, 125501, 125507, 125511, 125518, - 125528, 125534, 125547, 125551, 125555, 125562, 125566, 125573, 125583, - 125587, 125591, 125595, 125599, 125603, 125610, 125614, 125621, 125628, - 125635, 125644, 125653, 125663, 125670, 125677, 125684, 125694, 125701, - 125711, 125718, 125728, 125735, 125742, 125752, 125762, 125769, 125775, - 125783, 125791, 125797, 125803, 125807, 125811, 125818, 125826, 125832, - 125836, 125840, 125844, 125851, 125863, 125866, 125873, 125879, 125883, - 125887, 125891, 125895, 125899, 125903, 125907, 125911, 125915, 125919, - 125926, 125930, 125936, 125940, 125944, 125948, 125954, 125961, 125968, - 125975, 125986, 125994, 125998, 126004, 126013, 126020, 126026, 126029, - 126033, 126037, 126043, 126052, 126060, 126064, 126070, 126074, 126078, - 126082, 126088, 126095, 126101, 126105, 126111, 126115, 126119, 126128, - 126140, 126144, 126151, 126158, 126168, 126175, 126187, 126194, 126201, - 126208, 126219, 126229, 126242, 126252, 126259, 126263, 126267, 126271, - 126275, 126284, 126293, 126302, 126319, 126328, 126334, 126341, 126349, - 126362, 126366, 126375, 126384, 126393, 126402, 126413, 126422, 126430, - 126439, 126448, 126457, 126466, 126476, 126479, 126483, 126487, 126491, - 126495, 126499, 126505, 126512, 126519, 126526, 126532, 126538, 126545, - 126551, 126558, 126566, 126570, 126577, 126584, 126591, 126599, 126602, - 126606, 126610, 126614, 126617, 126623, 126627, 126633, 126640, 126647, - 126653, 126660, 126667, 126674, 126681, 126688, 126695, 126702, 126709, - 126716, 126723, 126730, 126737, 126744, 126751, 126757, 126761, 126770, - 126774, 126778, 126782, 126786, 126792, 126799, 126806, 126813, 126820, - 126827, 126833, 126841, 126845, 126849, 126853, 126857, 126863, 126880, - 126897, 126901, 126905, 126909, 126913, 126917, 126921, 126927, 126934, - 126938, 126944, 126951, 126958, 126965, 126972, 126979, 126988, 126995, - 127002, 127009, 127016, 127020, 127024, 127030, 127042, 127046, 127050, - 127059, 127063, 127067, 127071, 127077, 127081, 127085, 127094, 127098, - 127102, 127106, 127113, 127117, 127121, 127125, 127129, 127133, 127137, - 127141, 127145, 127151, 127158, 127165, 127171, 127175, 127192, 127198, - 127202, 127209, 127216, 127223, 127230, 127237, 127244, 127248, 127252, - 127256, 127262, 127266, 127272, 127276, 127280, 127287, 127294, 127311, - 127315, 127319, 127323, 127327, 127331, 127343, 127346, 127351, 127356, - 127371, 127381, 127393, 127397, 127401, 127405, 127411, 127418, 127425, - 127435, 127447, 127453, 127459, 127468, 127472, 127476, 127483, 127493, - 127500, 127506, 127510, 127514, 127521, 127527, 127531, 127537, 127541, - 127549, 127555, 127559, 127567, 127575, 127582, 127588, 127595, 127602, - 127612, 127622, 127626, 127630, 127634, 127638, 127644, 127651, 127657, - 127664, 127671, 127678, 127687, 127694, 127701, 127707, 127714, 127721, - 127728, 127735, 127742, 127749, 127755, 127762, 127769, 127776, 127785, - 127792, 127799, 127803, 127809, 127813, 127819, 127826, 127833, 127840, - 127844, 127848, 127852, 127856, 127860, 127867, 127871, 127875, 127881, - 127889, 127893, 127897, 127901, 127905, 127912, 127916, 127920, 127928, - 127932, 127936, 127940, 127944, 127950, 127954, 127958, 127964, 127971, - 127977, 127984, 127996, 128000, 128007, 128014, 128021, 128028, 128040, - 128047, 128051, 128055, 128059, 128066, 128073, 128080, 128087, 128097, - 128104, 128110, 128117, 128124, 128131, 128138, 128147, 128157, 128164, - 128168, 128175, 128179, 128183, 128187, 128194, 128201, 128211, 128217, - 128221, 128230, 128234, 128241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 121894, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121899, 121905, + 121911, 121917, 121923, 121929, 121935, 121941, 121947, 121953, 121959, + 121965, 121971, 121977, 121983, 121989, 121995, 122001, 122007, 122013, + 122019, 122028, 122032, 122036, 122040, 122044, 122048, 122052, 122056, + 122060, 122064, 122068, 122072, 122076, 122080, 122084, 122088, 122094, + 122100, 122104, 122110, 122116, 122121, 122125, 122130, 122134, 122138, + 122144, 122150, 122154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122158, + 122166, 122169, 122174, 122180, 122188, 122193, 122199, 122207, 122213, + 122219, 122223, 122227, 122234, 122243, 122250, 122259, 122265, 122274, + 122281, 122288, 122295, 122305, 122311, 122315, 122322, 122331, 122341, + 122348, 122355, 122359, 122363, 122370, 122380, 122384, 122391, 122398, + 122405, 122411, 122418, 122425, 122432, 122439, 122443, 122447, 122451, + 122458, 122462, 122469, 122476, 122490, 122499, 122503, 122507, 122511, + 122518, 122522, 122526, 122530, 122538, 122546, 122565, 122575, 122595, + 122599, 122603, 122607, 122611, 122615, 122619, 122623, 122630, 122634, + 122637, 122641, 122645, 122651, 122658, 122667, 122671, 122680, 122689, + 122697, 122701, 122708, 122712, 122716, 122720, 122724, 122735, 122744, + 122753, 122762, 122771, 122783, 122792, 122801, 122810, 122818, 122827, + 122839, 122848, 122856, 122865, 122877, 122886, 122895, 122907, 122916, + 122925, 122937, 122946, 122950, 122954, 122958, 122962, 122966, 122970, + 122974, 122981, 122985, 122989, 123000, 123004, 123008, 123015, 123021, + 123027, 123031, 123038, 123042, 123046, 123050, 123054, 123058, 123062, + 123068, 123076, 123080, 123084, 123087, 123094, 123106, 123110, 123122, + 123129, 123136, 123143, 123150, 123156, 123160, 123164, 123168, 123172, + 123179, 123188, 123195, 123203, 123211, 123217, 123221, 123225, 123229, + 123233, 123239, 123248, 123260, 123267, 123274, 123283, 123294, 123300, + 123309, 123318, 123325, 123334, 123341, 123347, 123357, 123364, 123371, + 123378, 123385, 123389, 123395, 123399, 123410, 123418, 123427, 123439, + 123446, 123453, 123463, 123470, 123479, 123486, 123495, 123502, 123509, + 123519, 123526, 123533, 123542, 123549, 123561, 123570, 123577, 123584, + 123591, 123600, 123610, 123623, 123630, 123639, 123649, 123656, 123665, + 123678, 123685, 123692, 123699, 123709, 123719, 123725, 123735, 123742, + 123749, 123759, 123765, 123772, 123779, 123786, 123796, 123803, 123810, + 123817, 123823, 123830, 123840, 123847, 123851, 123859, 123863, 123875, + 123879, 123893, 123897, 123901, 123905, 123909, 123915, 123922, 123930, + 123934, 123938, 123942, 123946, 123953, 123957, 123963, 123969, 123977, + 123981, 123988, 123996, 124000, 124004, 124010, 124014, 124023, 124032, + 124039, 124049, 124055, 124059, 124063, 124071, 124078, 124085, 124091, + 124095, 124103, 124107, 124114, 124126, 124133, 124143, 124149, 124153, + 124162, 124169, 124178, 124182, 124186, 124193, 124197, 124201, 124205, + 124209, 124212, 124218, 124224, 124228, 124232, 124239, 124246, 124253, + 124260, 124267, 124274, 124281, 124288, 124294, 124298, 124302, 124309, + 124316, 124323, 124330, 124337, 124341, 124344, 124349, 124353, 124357, + 124366, 124375, 124379, 124383, 124389, 124395, 124412, 124418, 124422, + 124431, 124435, 124439, 124446, 124454, 124462, 124468, 124472, 124476, + 124480, 124484, 124487, 124493, 124500, 124510, 124517, 124524, 124531, + 124537, 124544, 124551, 124558, 124565, 124572, 124581, 124588, 124600, + 124607, 124614, 124624, 124635, 124642, 124649, 124656, 124663, 124670, + 124677, 124684, 124691, 124698, 124705, 124715, 124725, 124735, 124742, + 124752, 124759, 124766, 124773, 124780, 124786, 124793, 124800, 124807, + 124814, 124821, 124828, 124835, 124842, 124848, 124855, 124862, 124871, + 124878, 124885, 124889, 124897, 124901, 124905, 124909, 124913, 124917, + 124924, 124928, 124937, 124941, 124948, 124956, 124960, 124964, 124968, + 124981, 124997, 125001, 125005, 125012, 125018, 125025, 125029, 125033, + 125037, 125041, 125045, 125052, 125056, 125074, 125078, 125082, 125089, + 125093, 125097, 125103, 125107, 125111, 125119, 125123, 125127, 125130, + 125134, 125140, 125151, 125160, 125169, 125176, 125183, 125194, 125201, + 125208, 125215, 125222, 125229, 125236, 125243, 125253, 125259, 125266, + 125276, 125285, 125292, 125301, 125311, 125318, 125325, 125332, 125339, + 125351, 125358, 125365, 125372, 125379, 125386, 125396, 125403, 125410, + 125420, 125433, 125445, 125452, 125462, 125469, 125476, 125483, 125497, + 125503, 125511, 125521, 125531, 125538, 125545, 125551, 125555, 125562, + 125572, 125578, 125591, 125595, 125599, 125606, 125610, 125617, 125627, + 125631, 125635, 125639, 125643, 125647, 125654, 125658, 125665, 125672, + 125679, 125688, 125697, 125707, 125714, 125721, 125728, 125738, 125745, + 125755, 125762, 125772, 125779, 125786, 125796, 125806, 125813, 125819, + 125827, 125835, 125841, 125847, 125851, 125855, 125862, 125870, 125876, + 125880, 125884, 125888, 125895, 125907, 125910, 125917, 125923, 125927, + 125931, 125935, 125939, 125943, 125947, 125951, 125955, 125959, 125963, + 125970, 125974, 125980, 125984, 125988, 125992, 125998, 126005, 126012, + 126019, 126030, 126038, 126042, 126048, 126057, 126064, 126070, 126073, + 126077, 126081, 126087, 126096, 126104, 126108, 126114, 126118, 126122, + 126126, 126132, 126139, 126145, 126149, 126155, 126159, 126163, 126172, + 126184, 126188, 126195, 126202, 126212, 126219, 126231, 126238, 126245, + 126252, 126263, 126273, 126286, 126296, 126303, 126307, 126311, 126315, + 126319, 126328, 126337, 126346, 126363, 126372, 126378, 126385, 126393, + 126406, 126410, 126419, 126428, 126437, 126446, 126457, 126466, 126474, + 126483, 126492, 126501, 126510, 126520, 126523, 126527, 126531, 126535, + 126539, 126543, 126549, 126556, 126563, 126570, 126576, 126582, 126589, + 126595, 126602, 126610, 126614, 126621, 126628, 126635, 126643, 126646, + 126650, 126654, 126658, 126661, 126667, 126671, 126677, 126684, 126691, + 126697, 126704, 126711, 126718, 126725, 126732, 126739, 126746, 126753, + 126760, 126767, 126774, 126781, 126788, 126795, 126801, 126805, 126814, + 126818, 126822, 126826, 126830, 126836, 126843, 126850, 126857, 126864, + 126871, 126877, 126885, 126889, 126893, 126897, 126901, 126907, 126924, + 126941, 126945, 126949, 126953, 126957, 126961, 126965, 126971, 126978, + 126982, 126988, 126995, 127002, 127009, 127016, 127023, 127032, 127039, + 127046, 127053, 127060, 127064, 127068, 127074, 127086, 127090, 127094, + 127103, 127107, 127111, 127115, 127121, 127125, 127129, 127138, 127142, + 127146, 127150, 127157, 127161, 127165, 127169, 127173, 127177, 127181, + 127185, 127189, 127195, 127202, 127209, 127215, 127219, 127236, 127242, + 127246, 127253, 127260, 127267, 127274, 127281, 127288, 127292, 127296, + 127300, 127306, 127310, 127316, 127320, 127324, 127331, 127338, 127355, + 127359, 127363, 127367, 127371, 127375, 127387, 127390, 127395, 127400, + 127415, 127425, 127437, 127441, 127445, 127449, 127455, 127462, 127469, + 127479, 127491, 127497, 127503, 127512, 127516, 127520, 127527, 127537, + 127544, 127550, 127554, 127558, 127565, 127571, 127575, 127581, 127585, + 127593, 127599, 127603, 127611, 127619, 127626, 127632, 127639, 127646, + 127656, 127666, 127670, 127674, 127678, 127682, 127688, 127695, 127701, + 127708, 127715, 127722, 127731, 127738, 127745, 127751, 127758, 127765, + 127772, 127779, 127786, 127793, 127799, 127806, 127813, 127820, 127829, + 127836, 127843, 127847, 127853, 127857, 127863, 127870, 127877, 127884, + 127888, 127892, 127896, 127900, 127904, 127911, 127915, 127919, 127925, + 127933, 127937, 127941, 127945, 127949, 127956, 127960, 127964, 127972, + 127976, 127980, 127984, 127988, 127994, 127998, 128002, 128008, 128015, + 128021, 128028, 128040, 128044, 128051, 128058, 128065, 128072, 128084, + 128091, 128095, 128099, 128103, 128110, 128117, 128124, 128131, 128141, + 128148, 128154, 128161, 128168, 128175, 128182, 128191, 128201, 128208, + 128212, 128219, 128223, 128227, 128231, 128238, 128245, 128255, 128261, + 128265, 128274, 128278, 128285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128245, 128251, 128257, - 128264, 128271, 128278, 128285, 128292, 128299, 128305, 128312, 128319, - 128326, 128333, 128340, 128347, 128353, 128359, 128365, 128371, 128377, - 128383, 128389, 128395, 128401, 128408, 128415, 128422, 128429, 128436, - 128443, 128449, 128455, 128461, 128468, 128475, 128481, 128487, 128496, - 128503, 128510, 128517, 128524, 128531, 128538, 128544, 128550, 128556, - 128565, 128572, 128579, 128590, 128601, 128607, 128613, 128619, 128628, - 128635, 128642, 128652, 128662, 128673, 128684, 128696, 128709, 128720, - 128731, 128743, 128756, 128767, 128778, 128789, 128800, 128811, 128823, - 128831, 128839, 128848, 128857, 128866, 128872, 128878, 128884, 128891, - 128901, 128908, 128918, 128923, 128928, 128934, 128940, 128948, 128956, - 128965, 128976, 128987, 128995, 129003, 129012, 129021, 129029, 129036, - 129044, 129052, 129059, 129066, 129075, 129084, 129093, 129102, 129111, - 0, 129120, 129131, 129138, 129146, 129154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129162, 129171, 129178, 129185, 129194, 129201, 129208, 129215, - 129225, 129232, 129239, 129246, 129254, 129261, 129268, 129275, 129286, - 129293, 129300, 129307, 129314, 129321, 129330, 129337, 129343, 129350, - 129359, 129366, 129373, 129380, 129390, 129397, 129404, 129414, 129424, - 129431, 129438, 129445, 129452, 129459, 129466, 129475, 129482, 129489, - 129495, 129503, 129512, 129521, 129532, 129540, 129549, 129558, 129567, - 129576, 129583, 129590, 129599, 129611, 129621, 129628, 129635, 129645, - 129655, 129664, 129674, 129681, 129691, 129698, 129705, 129712, 129722, - 129732, 129739, 129746, 129756, 129762, 129773, 129782, 129792, 129800, - 129813, 129820, 129826, 129834, 129841, 129851, 129855, 129859, 129863, - 129867, 129871, 129875, 129879, 129888, 129892, 129899, 129903, 129907, - 129911, 129915, 129919, 129923, 129927, 129931, 129935, 129939, 129943, - 129947, 129951, 129955, 129959, 129963, 129967, 129971, 129975, 129982, - 129989, 129999, 130012, 130022, 130026, 130030, 130034, 130038, 130042, - 130046, 130050, 130054, 130058, 130062, 130066, 130073, 130080, 130091, - 130098, 130104, 130111, 130118, 130125, 130132, 130139, 130143, 130147, - 130154, 130161, 130168, 130177, 130184, 130197, 130207, 130214, 130221, - 130225, 130229, 130238, 130245, 130252, 130259, 130272, 130279, 130286, - 130296, 130306, 130315, 130322, 130329, 130336, 130343, 130350, 130357, - 130367, 130373, 130381, 130388, 130396, 130403, 130414, 130421, 130427, - 130434, 130441, 130448, 130455, 130465, 130475, 130482, 130489, 130498, - 130506, 130512, 130519, 130526, 130533, 130540, 130544, 130554, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128289, 128295, 128301, + 128308, 128315, 128322, 128329, 128336, 128343, 128349, 128356, 128363, + 128370, 128377, 128384, 128391, 128397, 128403, 128409, 128415, 128421, + 128427, 128433, 128439, 128445, 128452, 128459, 128466, 128473, 128480, + 128487, 128493, 128499, 128505, 128512, 128519, 128525, 128531, 128540, + 128547, 128554, 128561, 128568, 128575, 128582, 128588, 128594, 128600, + 128609, 128616, 128623, 128634, 128645, 128651, 128657, 128663, 128672, + 128679, 128686, 128696, 128706, 128717, 128728, 128740, 128753, 128764, + 128775, 128787, 128800, 128811, 128822, 128833, 128844, 128855, 128867, + 128875, 128883, 128892, 128901, 128910, 128916, 128922, 128928, 128935, + 128945, 128952, 128962, 128967, 128972, 128978, 128984, 128992, 129000, + 129009, 129020, 129031, 129039, 129047, 129056, 129065, 129073, 129080, + 129088, 129096, 129103, 129110, 129119, 129128, 129137, 129146, 129155, + 0, 129164, 129175, 129182, 129190, 129198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129206, 129215, 129222, 129229, 129238, 129245, 129252, 129259, + 129269, 129276, 129283, 129290, 129298, 129305, 129312, 129319, 129330, + 129337, 129344, 129351, 129358, 129365, 129374, 129381, 129387, 129394, + 129403, 129410, 129417, 129424, 129434, 129441, 129448, 129458, 129468, + 129475, 129482, 129489, 129496, 129503, 129510, 129519, 129526, 129533, + 129539, 129547, 129556, 129565, 129576, 129584, 129593, 129602, 129611, + 129620, 129627, 129634, 129643, 129655, 129665, 129672, 129679, 129689, + 129699, 129708, 129718, 129725, 129735, 129742, 129749, 129756, 129766, + 129776, 129783, 129790, 129800, 129806, 129817, 129826, 129836, 129844, + 129857, 129864, 129870, 129878, 129885, 129895, 129899, 129903, 129907, + 129911, 129915, 129919, 129923, 129932, 129936, 129943, 129947, 129951, + 129955, 129959, 129963, 129967, 129971, 129975, 129979, 129983, 129987, + 129991, 129995, 129999, 130003, 130007, 130011, 130015, 130019, 130026, + 130033, 130043, 130056, 130066, 130070, 130074, 130078, 130082, 130086, + 130090, 130094, 130098, 130102, 130106, 130110, 130117, 130124, 130135, + 130142, 130148, 130155, 130162, 130169, 130176, 130183, 130187, 130191, + 130198, 130205, 130212, 130221, 130228, 130241, 130251, 130258, 130265, + 130269, 130273, 130282, 130289, 130296, 130303, 130316, 130323, 130330, + 130340, 130350, 130359, 130366, 130373, 130380, 130387, 130394, 130401, + 130411, 130417, 130425, 130432, 130440, 130447, 130458, 130465, 130471, + 130478, 130485, 130492, 130499, 130509, 130519, 130526, 130533, 130542, + 130550, 130556, 130563, 130570, 130577, 130584, 130588, 130598, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 130564, 130569, 130574, 130579, 130584, 130589, 130594, 130599, - 130604, 130609, 130614, 130619, 130624, 130629, 130634, 130639, 130644, - 130649, 130654, 130659, 130664, 130669, 130674, 130679, 130684, 130689, - 130694, 130699, 130704, 130709, 130714, 130719, 130724, 130729, 130734, - 130739, 130744, 130749, 130754, 130759, 130764, 130769, 130774, 130779, - 130784, 130789, 130794, 130799, 130804, 130809, 130814, 130819, 130824, - 130829, 130834, 130839, 130844, 130849, 130854, 130859, 130864, 130869, - 130874, 130879, 130884, 130889, 130894, 130899, 130904, 130909, 130914, - 130919, 130924, 130929, 130934, 130939, 130944, 130949, 130954, 130959, - 130964, 130969, 130974, 130979, 130984, 130989, 130994, 130999, 131004, - 131009, 131014, 131019, 131024, 131029, 131034, 131039, 131044, 131049, - 131054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131059, 131063, 131067, - 131071, 131075, 131079, 131083, 131087, 131091, 131095, 131099, 131103, - 131107, 131111, 131115, 131119, 131123, 131127, 131131, 131135, 131139, - 131143, 131147, 131151, 131155, 131159, 131163, 131167, 131171, 131175, - 131179, 131183, 131187, 131191, 131195, 131199, 131203, 131207, 131211, - 131215, 131219, 131223, 131227, 131231, 131235, 131239, 131243, 131247, - 131251, 131255, 131259, 131263, 131267, 131271, 131275, 131279, 131283, - 131287, 131291, 131295, 131299, 131303, 131307, 131311, 131315, 131319, - 131323, 131327, 131331, 131335, 131339, 131343, 131347, 131351, 131355, - 131359, 131363, 131367, 131371, 131375, 131379, 131383, 131387, 131391, - 131395, 131399, 131403, 131407, 131411, 131415, 131419, 131423, 131427, - 131431, 131435, 131439, 131443, 131447, 131451, 131455, 131459, 131463, - 131467, 131471, 131475, 131479, 131483, 131487, 131491, 131495, 131499, - 131503, 131507, 131511, 131515, 131519, 131523, 131527, 131531, 131535, - 131539, 131543, 131547, 131551, 131555, 131559, 131563, 131567, 131571, - 131575, 131579, 131583, 131587, 131591, 131595, 131599, 131603, 131607, - 131611, 131615, 131619, 131623, 131627, 131631, 131635, 131639, 131643, - 131647, 131651, 131655, 131659, 131663, 131667, 131671, 131675, 131679, - 131683, 131687, 131691, 131695, 131699, 131703, 131707, 131711, 131715, - 131719, 131723, 131727, 131731, 131735, 131739, 131743, 131747, 131751, - 131755, 131759, 131763, 131767, 131771, 131775, 131779, 131783, 131787, - 131791, 131795, 131799, 131803, 131807, 131811, 131815, 131819, 131823, - 131827, 131831, 131835, 131839, 131843, 131847, 131851, 131855, 131859, - 131863, 131867, 131871, 131875, 131879, 131883, 131887, 131891, 131895, - 131899, 131903, 131907, 131911, 131915, 131919, 131923, 131927, 131931, - 131935, 131939, 131943, 131947, 131951, 131955, 131959, 131963, 131967, - 131971, 131975, 131979, 131983, 131987, 131991, 131995, 131999, 132003, - 132007, 132011, 132015, 132019, 132023, 132027, 132031, 132035, 132039, - 132043, 132047, 132051, 132055, 132059, 132063, 132067, 132071, 132075, - 132079, 132083, 132087, 132091, 132095, 132099, 132103, 132107, 132111, - 132115, 132119, 132123, 132127, 132131, 132135, 132139, 132143, 132147, - 132151, 132155, 132159, 132163, 132167, 132171, 132175, 132179, 132183, - 132187, 132191, 132195, 132199, 132203, 132207, 132211, 132215, 132219, - 132223, 132227, 132231, 132235, 132239, 132243, 132247, 132251, 132255, - 132259, 132263, 132267, 132271, 132275, 132279, 132283, 132287, 132291, - 132295, 132299, 132303, 132307, 132311, 132315, 132319, 132323, 132327, - 132331, 132335, 132339, 132343, 132347, 132351, 132355, 132359, 132363, - 132367, 132371, 132375, 132379, 132383, 132387, 132391, 132395, 132399, - 132403, 132407, 132411, 132415, 132419, 132423, 132427, 132431, 132435, - 132439, 132443, 132447, 132451, 132455, 132459, 132463, 132467, 132471, - 132475, 132479, 132483, 132487, 132491, 132495, 132499, 132503, 132507, - 132511, 132515, 132519, 132523, 132527, 132531, 132535, 132539, 132543, - 132547, 132551, 132555, 132559, 132563, 132567, 132571, 132575, 132579, - 132583, 132587, 132591, 132595, 132599, 132603, 132607, 132611, 132615, - 132619, 132623, 132627, 132631, 132635, 132639, 132643, 132647, 132651, - 132655, 132659, 132663, 132667, 132671, 132675, 132679, 132683, 132687, - 132691, 132695, 132699, 132703, 132707, 132711, 132715, 132719, 132723, - 132727, 132731, 132735, 132739, 132743, 132747, 132751, 132755, 132759, - 132763, 132767, 132771, 132775, 132779, 132783, 132787, 132791, 132795, - 132799, 132803, 132807, 132811, 132815, 132819, 132823, 132827, 132831, - 132835, 132839, 132843, 132847, 132851, 132855, 132859, 132863, 132867, - 132871, 132875, 132879, 132883, 132887, 132891, 132895, 132899, 132903, - 132907, 132911, 132915, 132919, 132923, 132927, 132931, 132935, 132939, - 132943, 132947, 132951, 132955, 132959, 132963, 132967, 132971, 132975, - 132979, 132983, 132987, 132991, 132995, 132999, 133003, 133007, 133011, - 133015, 133019, 133023, 133027, 133031, 133035, 133039, 133043, 133047, - 133051, 133055, 133059, 133063, 133067, 133071, 133075, 133079, 133083, - 133087, 133091, 133095, 133099, 133103, 133107, 133111, 133115, 133119, - 133123, 133127, 133131, 133135, 133139, 133143, 133147, 133151, 133155, - 133159, 133163, 133167, 133171, 133175, 133179, 133183, 133187, 133191, - 133195, 133199, 133203, 133207, 133211, 133215, 133219, 133223, 133227, - 133231, 133235, 133239, 133243, 133247, 133251, 133255, 133259, 133263, - 133267, 133271, 133275, 133279, 133283, 133287, 133291, 133295, 133299, - 133303, 133307, 133311, 133315, 133319, 133323, 133327, 133331, 133335, - 133339, 133343, 133347, 133351, 133355, 133359, 133363, 133367, 133371, - 133375, 133379, 133383, 133387, 133391, 133395, 133399, 133403, 133407, - 133411, 133415, 133419, 133423, 133427, 133431, 133435, 133439, 133443, - 133447, 133451, 133455, 133459, 133463, 133467, 133471, 133475, 133479, - 133483, 133487, 133491, 133495, 133499, 133503, 133507, 133511, 133515, - 133519, 133523, 133527, 133531, 133535, 133539, 133543, 133547, 133551, - 133555, 133559, 133563, 133567, 133571, 133575, 133579, 133583, 133587, - 133591, 133595, 133599, 133603, 133607, 133611, 133615, 133619, 133623, - 133627, 133631, 133635, 133639, 133643, 133647, 133651, 133655, 133659, - 133663, 133667, 133671, 133675, 133679, 133683, 133687, 133691, 133695, - 133699, 133703, 133707, 133711, 133715, 133719, 133723, 133727, 133731, - 133735, 133739, 133743, 133747, 133751, 133755, 133759, 133763, 133767, - 133771, 133775, 133779, 133783, 133787, 133791, 133795, 133799, 133803, - 133807, 133811, 133815, 133819, 133823, 133827, 133831, 133835, 133839, - 133843, 133847, 133851, 133855, 133859, 133863, 133867, 133871, 133875, - 133879, 133883, 133887, 133891, 133895, 133899, 133903, 133907, 133911, - 133915, 133919, 133923, 133927, 133931, 133935, 133939, 133943, 133947, - 133951, 133955, 133959, 133963, 133967, 133971, 133975, 133979, 133983, - 133987, 133991, 133995, 133999, 134003, 134007, 134011, 134015, 134019, - 134023, 134027, 134031, 134035, 134039, 134043, 134047, 134051, 134055, - 134059, 134063, 134067, 134071, 134075, 134079, 134083, 134087, 134091, - 134095, 134099, 134103, 134107, 134111, 134115, 134119, 134123, 134127, - 134131, 134135, 134139, 134143, 134147, 134151, 134155, 134159, 134163, - 134167, 134171, 134175, 134179, 134183, 134187, 134191, 134195, 134199, - 134203, 134207, 134211, 134215, 134219, 134223, 134227, 134231, 134235, - 134239, 134243, 134247, 134251, 134255, 134259, 134263, 134267, 134271, - 134275, 134279, 134283, 134287, 134291, 134295, 134299, 134303, 134307, - 134311, 134315, 134319, 134323, 134327, 134331, 134335, 134339, 134343, - 134347, 134351, 134355, 134359, 134363, 134367, 134371, 134375, 134379, - 134383, 134387, 134391, 134395, 134399, 134403, 134407, 134411, 134415, - 134419, 134423, 134427, 134431, 134435, 134439, 134443, 134447, 134451, - 134455, 134459, 134463, 134467, 134471, 134475, 134479, 134483, 134487, - 134491, 134495, 134499, 134503, 134507, 134511, 134515, 134519, 134523, - 134527, 134531, 134535, 134539, 134543, 134547, 134551, 134555, 134559, - 134563, 134567, 134571, 134575, 134579, 134583, 134587, 134591, 134595, - 134599, 134603, 134607, 134611, 134615, 134619, 134623, 134627, 134631, - 134635, 134639, 134643, 134647, 134651, 134655, 134659, 134663, 134667, - 134671, 134675, 134679, 134683, 134687, 134691, 134695, 134699, 134703, - 134707, 134711, 134715, 134719, 134723, 134727, 134731, 134735, 134739, - 134743, 134747, 134751, 134755, 134759, 134763, 134767, 134771, 134775, - 134779, 134783, 134787, 134791, 134795, 134799, 134803, 134807, 134811, - 134815, 134819, 134823, 134827, 134831, 134835, 134839, 134843, 134847, - 134851, 134855, 134859, 134863, 134867, 134871, 134875, 134879, 134883, - 134887, 134891, 134895, 134899, 134903, 134907, 134911, 134915, 134919, - 134923, 134927, 134931, 134935, 134939, 134943, 134947, 134951, 134955, - 134959, 134963, 134967, 134971, 134975, 134979, 134983, 134987, 134991, - 134995, 134999, 135003, 135007, 135011, 135015, 135019, 135023, 135027, - 135031, 135035, 135039, 135043, 135047, 135051, 135055, 135059, 135063, - 135067, 135071, 135075, 135079, 135083, 135087, 135091, 135095, 135099, - 135103, 135107, 135111, 135115, 135119, 135123, 135127, 135131, 135135, - 135139, 135143, 135147, 135151, 135155, 135159, 135163, 135167, 135171, - 135175, 135179, 135183, 135187, 135191, 135195, 135199, 135203, 135207, - 135211, 135215, 135219, 135223, 135227, 135231, 135235, 135239, 135243, - 135247, 135251, 135255, 135259, 135263, 135267, 135271, 135275, 135279, - 135283, 135287, 135291, 135295, 135299, 135303, 135307, 135311, 135315, - 135319, 135323, 135327, 135331, 135335, 135339, 135343, 135347, 135352, - 135358, 135368, 135378, 135388, 135398, 135404, 135410, 135416, 135424, - 135432, 135440, 135446, 135452, 135460, 135468, 135474, 135480, 135485, - 135490, 135496, 135503, 135510, 135521, 135532, 135541, 135552, 135561, - 135577, 135589, 135600, 135616, 135625, 135637, 135646, 135658, 135670, + 0, 130608, 130613, 130618, 130623, 130628, 130633, 130638, 130643, + 130648, 130653, 130658, 130663, 130668, 130673, 130678, 130683, 130688, + 130693, 130698, 130703, 130708, 130713, 130718, 130723, 130728, 130733, + 130738, 130743, 130748, 130753, 130758, 130763, 130768, 130773, 130778, + 130783, 130788, 130793, 130798, 130803, 130808, 130813, 130818, 130823, + 130828, 130833, 130838, 130843, 130848, 130853, 130858, 130863, 130868, + 130873, 130878, 130883, 130888, 130893, 130898, 130903, 130908, 130913, + 130918, 130923, 130928, 130933, 130938, 130943, 130948, 130953, 130958, + 130963, 130968, 130973, 130978, 130983, 130988, 130993, 130998, 131003, + 131008, 131013, 131018, 131023, 131028, 131033, 131038, 131043, 131048, + 131053, 131058, 131063, 131068, 131073, 131078, 131083, 131088, 131093, + 131098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 131103, 131107, 131111, + 131115, 131119, 131123, 131127, 131131, 131135, 131139, 131143, 131147, + 131151, 131155, 131159, 131163, 131167, 131171, 131175, 131179, 131183, + 131187, 131191, 131195, 131199, 131203, 131207, 131211, 131215, 131219, + 131223, 131227, 131231, 131235, 131239, 131243, 131247, 131251, 131255, + 131259, 131263, 131267, 131271, 131275, 131279, 131283, 131287, 131291, + 131295, 131299, 131303, 131307, 131311, 131315, 131319, 131323, 131327, + 131331, 131335, 131339, 131343, 131347, 131351, 131355, 131359, 131363, + 131367, 131371, 131375, 131379, 131383, 131387, 131391, 131395, 131399, + 131403, 131407, 131411, 131415, 131419, 131423, 131427, 131431, 131435, + 131439, 131443, 131447, 131451, 131455, 131459, 131463, 131467, 131471, + 131475, 131479, 131483, 131487, 131491, 131495, 131499, 131503, 131507, + 131511, 131515, 131519, 131523, 131527, 131531, 131535, 131539, 131543, + 131547, 131551, 131555, 131559, 131563, 131567, 131571, 131575, 131579, + 131583, 131587, 131591, 131595, 131599, 131603, 131607, 131611, 131615, + 131619, 131623, 131627, 131631, 131635, 131639, 131643, 131647, 131651, + 131655, 131659, 131663, 131667, 131671, 131675, 131679, 131683, 131687, + 131691, 131695, 131699, 131703, 131707, 131711, 131715, 131719, 131723, + 131727, 131731, 131735, 131739, 131743, 131747, 131751, 131755, 131759, + 131763, 131767, 131771, 131775, 131779, 131783, 131787, 131791, 131795, + 131799, 131803, 131807, 131811, 131815, 131819, 131823, 131827, 131831, + 131835, 131839, 131843, 131847, 131851, 131855, 131859, 131863, 131867, + 131871, 131875, 131879, 131883, 131887, 131891, 131895, 131899, 131903, + 131907, 131911, 131915, 131919, 131923, 131927, 131931, 131935, 131939, + 131943, 131947, 131951, 131955, 131959, 131963, 131967, 131971, 131975, + 131979, 131983, 131987, 131991, 131995, 131999, 132003, 132007, 132011, + 132015, 132019, 132023, 132027, 132031, 132035, 132039, 132043, 132047, + 132051, 132055, 132059, 132063, 132067, 132071, 132075, 132079, 132083, + 132087, 132091, 132095, 132099, 132103, 132107, 132111, 132115, 132119, + 132123, 132127, 132131, 132135, 132139, 132143, 132147, 132151, 132155, + 132159, 132163, 132167, 132171, 132175, 132179, 132183, 132187, 132191, + 132195, 132199, 132203, 132207, 132211, 132215, 132219, 132223, 132227, + 132231, 132235, 132239, 132243, 132247, 132251, 132255, 132259, 132263, + 132267, 132271, 132275, 132279, 132283, 132287, 132291, 132295, 132299, + 132303, 132307, 132311, 132315, 132319, 132323, 132327, 132331, 132335, + 132339, 132343, 132347, 132351, 132355, 132359, 132363, 132367, 132371, + 132375, 132379, 132383, 132387, 132391, 132395, 132399, 132403, 132407, + 132411, 132415, 132419, 132423, 132427, 132431, 132435, 132439, 132443, + 132447, 132451, 132455, 132459, 132463, 132467, 132471, 132475, 132479, + 132483, 132487, 132491, 132495, 132499, 132503, 132507, 132511, 132515, + 132519, 132523, 132527, 132531, 132535, 132539, 132543, 132547, 132551, + 132555, 132559, 132563, 132567, 132571, 132575, 132579, 132583, 132587, + 132591, 132595, 132599, 132603, 132607, 132611, 132615, 132619, 132623, + 132627, 132631, 132635, 132639, 132643, 132647, 132651, 132655, 132659, + 132663, 132667, 132671, 132675, 132679, 132683, 132687, 132691, 132695, + 132699, 132703, 132707, 132711, 132715, 132719, 132723, 132727, 132731, + 132735, 132739, 132743, 132747, 132751, 132755, 132759, 132763, 132767, + 132771, 132775, 132779, 132783, 132787, 132791, 132795, 132799, 132803, + 132807, 132811, 132815, 132819, 132823, 132827, 132831, 132835, 132839, + 132843, 132847, 132851, 132855, 132859, 132863, 132867, 132871, 132875, + 132879, 132883, 132887, 132891, 132895, 132899, 132903, 132907, 132911, + 132915, 132919, 132923, 132927, 132931, 132935, 132939, 132943, 132947, + 132951, 132955, 132959, 132963, 132967, 132971, 132975, 132979, 132983, + 132987, 132991, 132995, 132999, 133003, 133007, 133011, 133015, 133019, + 133023, 133027, 133031, 133035, 133039, 133043, 133047, 133051, 133055, + 133059, 133063, 133067, 133071, 133075, 133079, 133083, 133087, 133091, + 133095, 133099, 133103, 133107, 133111, 133115, 133119, 133123, 133127, + 133131, 133135, 133139, 133143, 133147, 133151, 133155, 133159, 133163, + 133167, 133171, 133175, 133179, 133183, 133187, 133191, 133195, 133199, + 133203, 133207, 133211, 133215, 133219, 133223, 133227, 133231, 133235, + 133239, 133243, 133247, 133251, 133255, 133259, 133263, 133267, 133271, + 133275, 133279, 133283, 133287, 133291, 133295, 133299, 133303, 133307, + 133311, 133315, 133319, 133323, 133327, 133331, 133335, 133339, 133343, + 133347, 133351, 133355, 133359, 133363, 133367, 133371, 133375, 133379, + 133383, 133387, 133391, 133395, 133399, 133403, 133407, 133411, 133415, + 133419, 133423, 133427, 133431, 133435, 133439, 133443, 133447, 133451, + 133455, 133459, 133463, 133467, 133471, 133475, 133479, 133483, 133487, + 133491, 133495, 133499, 133503, 133507, 133511, 133515, 133519, 133523, + 133527, 133531, 133535, 133539, 133543, 133547, 133551, 133555, 133559, + 133563, 133567, 133571, 133575, 133579, 133583, 133587, 133591, 133595, + 133599, 133603, 133607, 133611, 133615, 133619, 133623, 133627, 133631, + 133635, 133639, 133643, 133647, 133651, 133655, 133659, 133663, 133667, + 133671, 133675, 133679, 133683, 133687, 133691, 133695, 133699, 133703, + 133707, 133711, 133715, 133719, 133723, 133727, 133731, 133735, 133739, + 133743, 133747, 133751, 133755, 133759, 133763, 133767, 133771, 133775, + 133779, 133783, 133787, 133791, 133795, 133799, 133803, 133807, 133811, + 133815, 133819, 133823, 133827, 133831, 133835, 133839, 133843, 133847, + 133851, 133855, 133859, 133863, 133867, 133871, 133875, 133879, 133883, + 133887, 133891, 133895, 133899, 133903, 133907, 133911, 133915, 133919, + 133923, 133927, 133931, 133935, 133939, 133943, 133947, 133951, 133955, + 133959, 133963, 133967, 133971, 133975, 133979, 133983, 133987, 133991, + 133995, 133999, 134003, 134007, 134011, 134015, 134019, 134023, 134027, + 134031, 134035, 134039, 134043, 134047, 134051, 134055, 134059, 134063, + 134067, 134071, 134075, 134079, 134083, 134087, 134091, 134095, 134099, + 134103, 134107, 134111, 134115, 134119, 134123, 134127, 134131, 134135, + 134139, 134143, 134147, 134151, 134155, 134159, 134163, 134167, 134171, + 134175, 134179, 134183, 134187, 134191, 134195, 134199, 134203, 134207, + 134211, 134215, 134219, 134223, 134227, 134231, 134235, 134239, 134243, + 134247, 134251, 134255, 134259, 134263, 134267, 134271, 134275, 134279, + 134283, 134287, 134291, 134295, 134299, 134303, 134307, 134311, 134315, + 134319, 134323, 134327, 134331, 134335, 134339, 134343, 134347, 134351, + 134355, 134359, 134363, 134367, 134371, 134375, 134379, 134383, 134387, + 134391, 134395, 134399, 134403, 134407, 134411, 134415, 134419, 134423, + 134427, 134431, 134435, 134439, 134443, 134447, 134451, 134455, 134459, + 134463, 134467, 134471, 134475, 134479, 134483, 134487, 134491, 134495, + 134499, 134503, 134507, 134511, 134515, 134519, 134523, 134527, 134531, + 134535, 134539, 134543, 134547, 134551, 134555, 134559, 134563, 134567, + 134571, 134575, 134579, 134583, 134587, 134591, 134595, 134599, 134603, + 134607, 134611, 134615, 134619, 134623, 134627, 134631, 134635, 134639, + 134643, 134647, 134651, 134655, 134659, 134663, 134667, 134671, 134675, + 134679, 134683, 134687, 134691, 134695, 134699, 134703, 134707, 134711, + 134715, 134719, 134723, 134727, 134731, 134735, 134739, 134743, 134747, + 134751, 134755, 134759, 134763, 134767, 134771, 134775, 134779, 134783, + 134787, 134791, 134795, 134799, 134803, 134807, 134811, 134815, 134819, + 134823, 134827, 134831, 134835, 134839, 134843, 134847, 134851, 134855, + 134859, 134863, 134867, 134871, 134875, 134879, 134883, 134887, 134891, + 134895, 134899, 134903, 134907, 134911, 134915, 134919, 134923, 134927, + 134931, 134935, 134939, 134943, 134947, 134951, 134955, 134959, 134963, + 134967, 134971, 134975, 134979, 134983, 134987, 134991, 134995, 134999, + 135003, 135007, 135011, 135015, 135019, 135023, 135027, 135031, 135035, + 135039, 135043, 135047, 135051, 135055, 135059, 135063, 135067, 135071, + 135075, 135079, 135083, 135087, 135091, 135095, 135099, 135103, 135107, + 135111, 135115, 135119, 135123, 135127, 135131, 135135, 135139, 135143, + 135147, 135151, 135155, 135159, 135163, 135167, 135171, 135175, 135179, + 135183, 135187, 135191, 135195, 135199, 135203, 135207, 135211, 135215, + 135219, 135223, 135227, 135231, 135235, 135239, 135243, 135247, 135251, + 135255, 135259, 135263, 135267, 135271, 135275, 135279, 135283, 135287, + 135291, 135295, 135299, 135303, 135307, 135311, 135315, 135319, 135323, + 135327, 135331, 135335, 135339, 135343, 135347, 135351, 135355, 135359, + 135363, 135367, 135371, 135375, 135379, 135383, 135387, 135391, 135396, + 135402, 135412, 135422, 135432, 135442, 135448, 135454, 135460, 135468, + 135476, 135484, 135490, 135496, 135504, 135512, 135518, 135524, 135529, + 135534, 135540, 135547, 135554, 135565, 135576, 135585, 135596, 135605, + 135621, 135633, 135644, 135660, 135669, 135681, 135690, 135702, 135714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135675, 135679, - 135683, 135687, 135691, 135695, 135699, 135703, 135707, 135711, 135715, - 135719, 135723, 135727, 135731, 135735, 135739, 135743, 135747, 135751, - 135755, 135759, 135763, 135767, 135771, 135775, 135779, 135783, 135787, - 135791, 135795, 135799, 135803, 135807, 135811, 135815, 135819, 135823, - 135827, 135831, 135835, 135839, 135843, 135847, 135851, 135855, 135859, - 135863, 135867, 135871, 135875, 135879, 135883, 135887, 135891, 135895, - 135899, 135903, 135907, 135911, 135915, 135919, 135923, 135927, 135931, - 135935, 135939, 135943, 135947, 135951, 135955, 135959, 135963, 135967, - 135971, 135975, 135979, 135983, 135987, 135991, 135995, 135999, 136003, - 136007, 136011, 136015, 136019, 136023, 136027, 136031, 136035, 136039, - 136043, 136047, 136051, 136055, 136059, 136063, 136067, 136071, 136075, - 136079, 136083, 136087, 136091, 136095, 136099, 136103, 136107, 136111, - 136115, 136119, 136123, 136127, 136131, 136135, 136139, 136143, 136147, - 136151, 136155, 136159, 136163, 136167, 136171, 136175, 136179, 136183, - 136187, 136191, 136195, 136199, 136203, 136207, 136211, 136215, 136219, - 136223, 136227, 136231, 136235, 136239, 136243, 136247, 136251, 136255, - 136259, 136263, 136267, 136271, 136275, 136279, 136283, 136287, 136291, - 136295, 136299, 136303, 136307, 136311, 136315, 136319, 136323, 136327, - 136331, 136335, 136339, 136343, 136347, 136351, 136355, 136359, 136363, - 136367, 136371, 136375, 136379, 136383, 136387, 136391, 136395, 136399, - 136403, 136407, 136411, 136415, 136419, 136423, 136427, 136431, 136435, - 136439, 136443, 136447, 136451, 136455, 136459, 136463, 136467, 136471, - 136475, 136479, 136483, 136487, 136491, 136495, 136499, 136503, 136507, - 136511, 136515, 136519, 136523, 136527, 136531, 136535, 136539, 136543, - 136547, 136551, 136555, 136559, 136563, 136567, 136571, 136575, 136579, - 136583, 136587, 136591, 136595, 136599, 136603, 136607, 136611, 136615, - 136619, 136623, 136627, 136631, 136635, 136639, 136643, 136647, 136651, - 136655, 136659, 136663, 136667, 136671, 136675, 136679, 136683, 136687, - 136691, 136695, 136699, 136703, 136707, 136711, 136715, 136719, 136723, - 136727, 136731, 136735, 136739, 136743, 136747, 136751, 136755, 136759, - 136763, 136767, 136771, 136775, 136779, 136783, 136787, 136791, 136795, - 136799, 136803, 136807, 136811, 136815, 136819, 136823, 136827, 136831, - 136835, 136839, 136843, 136847, 136851, 136855, 136859, 136863, 136867, - 136871, 136875, 136879, 136883, 136887, 136891, 136895, 136899, 136903, - 136907, 136911, 136915, 136919, 136923, 136927, 136931, 136935, 136939, - 136943, 136947, 136951, 136955, 136959, 136963, 136967, 136971, 136975, - 136979, 136983, 136987, 136991, 136995, 136999, 137003, 137007, 137011, - 137015, 137019, 137023, 137027, 137031, 137035, 137039, 137043, 137047, - 137051, 137055, 137059, 137063, 137067, 137071, 137075, 137079, 137083, - 137087, 137091, 137095, 137099, 137103, 137107, 137111, 137115, 137119, - 137123, 137127, 137131, 137135, 137139, 137143, 137147, 137151, 137155, - 137159, 137163, 137167, 137171, 137175, 137179, 137183, 137187, 137191, - 137195, 137199, 137203, 137207, 137211, 137215, 137219, 137223, 137227, - 137231, 137235, 137239, 137243, 137247, 137251, 137255, 137259, 137263, - 137267, 137271, 137275, 137279, 137283, 137287, 137291, 137295, 137299, - 137303, 137307, 137311, 137315, 137319, 137323, 137327, 137331, 137335, - 137339, 137343, 137347, 137351, 137355, 137359, 137363, 137367, 137371, - 137375, 137379, 137383, 137387, 137391, 137395, 137399, 137403, 137407, - 137417, 137421, 137425, 137429, 137433, 137437, 137441, 137445, 137449, - 137453, 137457, 137461, 137466, 137470, 137474, 137478, 137482, 137486, - 137490, 137494, 137498, 137502, 137506, 137510, 137514, 137518, 137522, - 137526, 137530, 137539, 137548, 137552, 137556, 137560, 137564, 137568, - 137572, 137576, 137580, 137584, 137588, 137592, 137596, 137600, 137604, - 137608, 137612, 137616, 137620, 137624, 137628, 137632, 137636, 137640, - 137644, 137648, 137652, 137656, 137660, 137664, 137668, 137672, 137676, - 137680, 137684, 137688, 137692, 137696, 137700, 137704, 137708, 137712, - 137716, 137720, 137724, 137728, 137732, 137736, 137740, 137744, 137748, - 137752, 137756, 137760, 137764, 137768, 137772, 137776, 137780, 137784, - 137788, 137792, 137796, 137800, 137804, 137808, 137812, 137816, 137820, - 137824, 137828, 137832, 137836, 137840, 137844, 137848, 137852, 137856, - 137860, 137864, 137868, 137872, 137876, 137880, 137884, 137888, 137892, - 137896, 137900, 137904, 137908, 137912, 137916, 137920, 137924, 137928, - 137932, 137936, 137940, 137944, 137948, 137952, 137956, 137960, 137964, - 137968, 137972, 137976, 137980, 137984, 137988, 137992, 137996, 138000, - 138004, 138008, 138012, 138016, 138020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135719, 135723, + 135727, 135731, 135735, 135739, 135743, 135747, 135751, 135755, 135759, + 135763, 135767, 135771, 135775, 135779, 135783, 135787, 135791, 135795, + 135799, 135803, 135807, 135811, 135815, 135819, 135823, 135827, 135831, + 135835, 135839, 135843, 135847, 135851, 135855, 135859, 135863, 135867, + 135871, 135875, 135879, 135883, 135887, 135891, 135895, 135899, 135903, + 135907, 135911, 135915, 135919, 135923, 135927, 135931, 135935, 135939, + 135943, 135947, 135951, 135955, 135959, 135963, 135967, 135971, 135975, + 135979, 135983, 135987, 135991, 135995, 135999, 136003, 136007, 136011, + 136015, 136019, 136023, 136027, 136031, 136035, 136039, 136043, 136047, + 136051, 136055, 136059, 136063, 136067, 136071, 136075, 136079, 136083, + 136087, 136091, 136095, 136099, 136103, 136107, 136111, 136115, 136119, + 136123, 136127, 136131, 136135, 136139, 136143, 136147, 136151, 136155, + 136159, 136163, 136167, 136171, 136175, 136179, 136183, 136187, 136191, + 136195, 136199, 136203, 136207, 136211, 136215, 136219, 136223, 136227, + 136231, 136235, 136239, 136243, 136247, 136251, 136255, 136259, 136263, + 136267, 136271, 136275, 136279, 136283, 136287, 136291, 136295, 136299, + 136303, 136307, 136311, 136315, 136319, 136323, 136327, 136331, 136335, + 136339, 136343, 136347, 136351, 136355, 136359, 136363, 136367, 136371, + 136375, 136379, 136383, 136387, 136391, 136395, 136399, 136403, 136407, + 136411, 136415, 136419, 136423, 136427, 136431, 136435, 136439, 136443, + 136447, 136451, 136455, 136459, 136463, 136467, 136471, 136475, 136479, + 136483, 136487, 136491, 136495, 136499, 136503, 136507, 136511, 136515, + 136519, 136523, 136527, 136531, 136535, 136539, 136543, 136547, 136551, + 136555, 136559, 136563, 136567, 136571, 136575, 136579, 136583, 136587, + 136591, 136595, 136599, 136603, 136607, 136611, 136615, 136619, 136623, + 136627, 136631, 136635, 136639, 136643, 136647, 136651, 136655, 136659, + 136663, 136667, 136671, 136675, 136679, 136683, 136687, 136691, 136695, + 136699, 136703, 136707, 136711, 136715, 136719, 136723, 136727, 136731, + 136735, 136739, 136743, 136747, 136751, 136755, 136759, 136763, 136767, + 136771, 136775, 136779, 136783, 136787, 136791, 136795, 136799, 136803, + 136807, 136811, 136815, 136819, 136823, 136827, 136831, 136835, 136839, + 136843, 136847, 136851, 136855, 136859, 136863, 136867, 136871, 136875, + 136879, 136883, 136887, 136891, 136895, 136899, 136903, 136907, 136911, + 136915, 136919, 136923, 136927, 136931, 136935, 136939, 136943, 136947, + 136951, 136955, 136959, 136963, 136967, 136971, 136975, 136979, 136983, + 136987, 136991, 136995, 136999, 137003, 137007, 137011, 137015, 137019, + 137023, 137027, 137031, 137035, 137039, 137043, 137047, 137051, 137055, + 137059, 137063, 137067, 137071, 137075, 137079, 137083, 137087, 137091, + 137095, 137099, 137103, 137107, 137111, 137115, 137119, 137123, 137127, + 137131, 137135, 137139, 137143, 137147, 137151, 137155, 137159, 137163, + 137167, 137171, 137175, 137179, 137183, 137187, 137191, 137195, 137199, + 137203, 137207, 137211, 137215, 137219, 137223, 137227, 137231, 137235, + 137239, 137243, 137247, 137251, 137255, 137259, 137263, 137267, 137271, + 137275, 137279, 137283, 137287, 137291, 137295, 137299, 137303, 137307, + 137311, 137315, 137319, 137323, 137327, 137331, 137335, 137339, 137343, + 137347, 137351, 137355, 137359, 137363, 137367, 137371, 137375, 137379, + 137383, 137387, 137391, 137395, 137399, 137403, 137407, 137411, 137415, + 137419, 137423, 137427, 137431, 137435, 137439, 137443, 137447, 137451, + 137461, 137465, 137469, 137473, 137477, 137481, 137485, 137489, 137493, + 137497, 137501, 137505, 137510, 137514, 137518, 137522, 137526, 137530, + 137534, 137538, 137542, 137546, 137550, 137554, 137558, 137562, 137566, + 137570, 137574, 137583, 137592, 137596, 137600, 137604, 137608, 137612, + 137616, 137620, 137624, 137628, 137632, 137636, 137640, 137644, 137648, + 137652, 137656, 137660, 137664, 137668, 137672, 137676, 137680, 137684, + 137688, 137692, 137696, 137700, 137704, 137708, 137712, 137716, 137720, + 137724, 137728, 137732, 137736, 137740, 137744, 137748, 137752, 137756, + 137760, 137764, 137768, 137772, 137776, 137780, 137784, 137788, 137792, + 137796, 137800, 137804, 137808, 137812, 137816, 137820, 137824, 137828, + 137832, 137836, 137840, 137844, 137848, 137852, 137856, 137860, 137864, + 137868, 137872, 137876, 137880, 137884, 137888, 137892, 137896, 137900, + 137904, 137908, 137912, 137916, 137920, 137924, 137928, 137932, 137936, + 137940, 137944, 137948, 137952, 137956, 137960, 137964, 137968, 137972, + 137976, 137980, 137984, 137988, 137992, 137996, 138000, 138004, 138008, + 138012, 138016, 138020, 138024, 138028, 138032, 138036, 138040, 138044, + 138048, 138052, 138056, 138060, 138064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138024, - 138032, 138040, 138050, 138060, 138068, 138074, 138082, 138090, 138100, - 138112, 138124, 138130, 138138, 138144, 138150, 138156, 138162, 138168, - 138174, 138180, 138186, 138192, 138198, 138204, 138212, 138220, 138226, - 138232, 138238, 138244, 138252, 138260, 138269, 138275, 138283, 138289, - 138295, 138301, 138307, 138313, 138321, 138329, 138335, 138341, 138347, - 138353, 138359, 138365, 138371, 138377, 138383, 138389, 138395, 138401, - 138407, 138413, 138419, 138425, 138431, 138437, 138443, 138451, 138457, - 138463, 138473, 138481, 138487, 138493, 138499, 138505, 138511, 138517, - 138523, 138529, 138535, 138541, 138547, 138553, 138559, 138565, 138571, - 138577, 138583, 138589, 138595, 138601, 138607, 138613, 138621, 138627, - 138635, 138643, 138651, 138657, 138663, 138669, 138675, 138681, 138689, - 138699, 138707, 138715, 138721, 138727, 138735, 138743, 138749, 138757, - 138765, 138773, 138779, 138785, 138791, 138797, 138803, 138809, 138817, - 138825, 138831, 138837, 138843, 138849, 138855, 138863, 138869, 138875, - 138881, 138887, 138893, 138899, 138907, 138913, 138919, 138925, 138931, - 138939, 138947, 138953, 138959, 138965, 138970, 138976, 138982, 138990, - 138996, 139002, 139008, 139014, 139020, 139026, 139032, 139038, 139044, - 139054, 139062, 139068, 139074, 139080, 139088, 139094, 139100, 139106, - 139114, 139120, 139126, 139132, 139138, 139144, 139150, 139156, 139162, - 139168, 139174, 139180, 139188, 139194, 139202, 139208, 139214, 139222, - 139228, 139234, 139240, 139246, 139252, 139258, 139264, 139270, 139276, - 139282, 139288, 139294, 139300, 139306, 139312, 139318, 139324, 139330, - 139336, 139344, 139350, 139356, 139362, 139368, 139374, 139380, 139386, - 139392, 139398, 139404, 139410, 139416, 139422, 139430, 139436, 139442, - 139450, 139456, 139462, 139468, 139474, 139480, 139486, 139492, 139498, - 139504, 139510, 139518, 139524, 139530, 139536, 139542, 139548, 139556, - 139564, 139570, 139576, 139582, 139588, 139594, 139600, 139605, 139610, - 139615, 139620, 139625, 139630, 139635, 139640, 139645, 139650, 139655, - 139660, 139665, 139670, 139675, 139680, 139685, 139690, 139695, 139700, - 139705, 139710, 139715, 139720, 139725, 139730, 139735, 139740, 139745, - 139750, 139757, 139762, 139767, 139772, 139777, 139782, 139787, 139792, - 139797, 139802, 139807, 139812, 139817, 139822, 139827, 139832, 139837, - 139842, 139847, 139852, 139857, 139862, 139867, 139872, 139877, 139882, - 139887, 139892, 139897, 139902, 139907, 139912, 139917, 139922, 139927, - 139932, 139937, 139942, 139947, 139952, 139957, 139962, 139967, 139972, - 139977, 139982, 139987, 139992, 139997, 140002, 140007, 140012, 140017, - 140022, 140027, 140032, 140037, 140042, 140047, 140054, 140059, 140064, - 140069, 140074, 140079, 140084, 140089, 140094, 140099, 140104, 140109, - 140114, 140119, 140124, 140129, 140134, 140139, 140144, 140149, 140154, - 140159, 140166, 140171, 140176, 140182, 140187, 140192, 140197, 140202, - 140207, 140212, 140217, 140222, 140227, 140232, 140237, 140242, 140247, - 140252, 140257, 140262, 140267, 140272, 140277, 140282, 140287, 140292, - 140297, 140302, 140307, 140312, 140317, 140322, 140327, 140332, 140337, - 140342, 140347, 140352, 140357, 140362, 140367, 140372, 140377, 140382, - 140387, 140392, 140397, 140404, 140409, 140414, 140421, 140428, 140433, - 140438, 140443, 140448, 140453, 140458, 140463, 140468, 140473, 140478, - 140483, 140488, 140493, 140498, 140503, 140508, 140513, 140518, 140523, - 140528, 140533, 140538, 140543, 140548, 140553, 140560, 140565, 140570, - 140575, 140580, 140585, 140590, 140595, 140600, 140605, 140610, 140615, - 140620, 140625, 140630, 140635, 140640, 140645, 140650, 140657, 140662, - 140667, 140672, 140677, 140682, 140687, 140692, 140698, 140703, 140708, - 140713, 140718, 140723, 140728, 140733, 140738, 140745, 140752, 140757, - 140762, 140766, 140771, 140775, 140779, 140784, 140791, 140796, 140801, - 140810, 140815, 140820, 140825, 140830, 140837, 140844, 140849, 140854, - 140859, 140864, 140871, 140876, 140881, 140886, 140891, 140896, 140901, - 140906, 140911, 140916, 140921, 140926, 140931, 140938, 140942, 140947, - 140952, 140957, 140962, 140966, 140971, 140976, 140981, 140986, 140991, - 140996, 141001, 141006, 141011, 141017, 141023, 141029, 141035, 141041, - 141046, 141052, 141058, 141064, 141070, 141076, 141082, 141088, 141094, - 141100, 141106, 141112, 141118, 141124, 141130, 141136, 141142, 141148, - 141154, 141159, 141165, 141171, 141177, 141183, 141189, 141195, 141201, - 141207, 141213, 141219, 141225, 141231, 141237, 141243, 141249, 141255, - 141261, 141267, 141273, 141279, 141284, 141290, 141296, 141302, 141308, - 141314, 0, 0, 0, 0, 0, 0, 0, 141320, 141325, 141330, 141335, 141340, - 141345, 141350, 141354, 141359, 141364, 141369, 141374, 141379, 141384, - 141389, 141394, 141399, 141403, 141408, 141412, 141417, 141422, 141427, - 141432, 141437, 141441, 141446, 141451, 141455, 141460, 141465, 0, - 141470, 141475, 141479, 141483, 141487, 141491, 141495, 141499, 141503, - 141507, 0, 0, 0, 0, 141511, 141515, 141520, 141525, 141530, 141535, - 141540, 141545, 141550, 141555, 141560, 141565, 141570, 141575, 141580, - 141585, 141590, 141595, 141600, 141605, 141610, 141615, 141620, 141625, - 141630, 141635, 141640, 141645, 141650, 141655, 141660, 141665, 141670, - 141675, 141680, 141686, 141692, 141699, 141706, 141711, 141716, 141721, - 141726, 141731, 141736, 141741, 141746, 141751, 141756, 141761, 141766, - 141770, 141775, 141780, 141785, 141789, 141793, 141798, 141802, 141807, - 141812, 141817, 141821, 141825, 141829, 141833, 141838, 141843, 141848, - 141852, 141857, 141862, 141867, 141872, 141877, 141882, 141887, 141892, - 141897, 141902, 141907, 0, 141912, 141917, 141921, 141925, 141929, - 141933, 141937, 141941, 141945, 141949, 0, 0, 0, 0, 0, 0, 141953, 141960, - 141966, 141973, 141980, 141987, 141994, 142001, 142008, 142015, 142022, - 142029, 142036, 142043, 142050, 142057, 142064, 142071, 142077, 142084, - 142091, 142098, 142104, 142111, 142117, 142123, 142130, 142136, 142143, - 142149, 0, 0, 142155, 142163, 142171, 142180, 142189, 142198, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 142206, 142211, 142216, 142221, 142226, 142231, 142236, - 142241, 142246, 142251, 142256, 142261, 142266, 142271, 142276, 142281, - 142286, 142291, 142296, 142301, 142306, 142311, 142316, 142321, 142326, - 142331, 142336, 142341, 142346, 142351, 142356, 142361, 142366, 142371, - 142376, 142381, 142386, 142391, 142396, 142401, 142406, 142411, 142416, - 142421, 142426, 142431, 142436, 142441, 142446, 142453, 142460, 142467, - 142474, 142481, 142488, 142495, 142502, 142511, 142518, 142525, 142532, - 142539, 142546, 142553, 142560, 142567, 142574, 142581, 142588, 142593, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142602, 142607, 142611, 142615, 142619, - 142623, 142627, 142631, 142635, 142639, 0, 142643, 142648, 142653, - 142660, 142665, 142672, 142679, 0, 142684, 142691, 142696, 142701, - 142708, 142715, 142720, 142725, 142730, 142735, 142740, 142747, 142754, - 142759, 142764, 142769, 142782, 142791, 142798, 142807, 142816, 0, 0, 0, - 0, 0, 142825, 142832, 142839, 142846, 142853, 142860, 142867, 142874, - 142881, 142888, 142895, 142902, 142909, 142916, 142923, 142930, 142937, - 142944, 142951, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138068, + 138076, 138084, 138094, 138104, 138112, 138118, 138126, 138134, 138144, + 138156, 138168, 138174, 138182, 138188, 138194, 138200, 138206, 138212, + 138218, 138224, 138230, 138236, 138242, 138248, 138256, 138264, 138270, + 138276, 138282, 138288, 138296, 138304, 138313, 138319, 138327, 138333, + 138339, 138345, 138351, 138357, 138365, 138373, 138379, 138385, 138391, + 138397, 138403, 138409, 138415, 138421, 138427, 138433, 138439, 138445, + 138451, 138457, 138463, 138469, 138475, 138481, 138487, 138495, 138501, + 138507, 138517, 138525, 138531, 138537, 138543, 138549, 138555, 138561, + 138567, 138573, 138579, 138585, 138591, 138597, 138603, 138609, 138615, + 138621, 138627, 138633, 138639, 138645, 138651, 138657, 138665, 138671, + 138679, 138687, 138695, 138701, 138707, 138713, 138719, 138725, 138733, + 138743, 138751, 138759, 138765, 138771, 138779, 138787, 138793, 138801, + 138809, 138817, 138823, 138829, 138835, 138841, 138847, 138853, 138861, + 138869, 138875, 138881, 138887, 138893, 138899, 138907, 138913, 138919, + 138925, 138931, 138937, 138943, 138951, 138957, 138963, 138969, 138975, + 138983, 138991, 138997, 139003, 139009, 139014, 139020, 139026, 139034, + 139040, 139046, 139052, 139058, 139064, 139070, 139076, 139082, 139088, + 139098, 139106, 139112, 139118, 139124, 139132, 139138, 139144, 139150, + 139158, 139164, 139170, 139176, 139182, 139188, 139194, 139200, 139206, + 139212, 139218, 139224, 139232, 139238, 139246, 139252, 139258, 139266, + 139272, 139278, 139284, 139290, 139296, 139302, 139308, 139314, 139320, + 139326, 139332, 139338, 139344, 139350, 139356, 139362, 139368, 139374, + 139380, 139388, 139394, 139400, 139406, 139412, 139418, 139424, 139430, + 139436, 139442, 139448, 139454, 139460, 139466, 139474, 139480, 139486, + 139494, 139500, 139506, 139512, 139518, 139524, 139530, 139536, 139542, + 139548, 139554, 139562, 139568, 139574, 139580, 139586, 139592, 139600, + 139608, 139614, 139620, 139626, 139632, 139638, 139644, 139649, 139654, + 139659, 139664, 139669, 139674, 139679, 139684, 139689, 139694, 139699, + 139704, 139709, 139714, 139719, 139724, 139729, 139734, 139739, 139744, + 139749, 139754, 139759, 139764, 139769, 139774, 139779, 139784, 139789, + 139794, 139801, 139806, 139811, 139816, 139821, 139826, 139831, 139836, + 139841, 139846, 139851, 139856, 139861, 139866, 139871, 139876, 139881, + 139886, 139891, 139896, 139901, 139906, 139911, 139916, 139921, 139926, + 139931, 139936, 139941, 139946, 139951, 139956, 139961, 139966, 139971, + 139976, 139981, 139986, 139991, 139996, 140001, 140006, 140011, 140016, + 140021, 140026, 140031, 140036, 140041, 140046, 140051, 140056, 140061, + 140066, 140071, 140076, 140081, 140086, 140091, 140098, 140103, 140108, + 140113, 140118, 140123, 140128, 140133, 140138, 140143, 140148, 140153, + 140158, 140163, 140168, 140173, 140178, 140183, 140188, 140193, 140198, + 140203, 140210, 140215, 140220, 140226, 140231, 140236, 140241, 140246, + 140251, 140256, 140261, 140266, 140271, 140276, 140281, 140286, 140291, + 140296, 140301, 140306, 140311, 140316, 140321, 140326, 140331, 140336, + 140341, 140346, 140351, 140356, 140361, 140366, 140371, 140376, 140381, + 140386, 140391, 140396, 140401, 140406, 140411, 140416, 140421, 140426, + 140431, 140436, 140441, 140448, 140453, 140458, 140465, 140472, 140477, + 140482, 140487, 140492, 140497, 140502, 140507, 140512, 140517, 140522, + 140527, 140532, 140537, 140542, 140547, 140552, 140557, 140562, 140567, + 140572, 140577, 140582, 140587, 140592, 140597, 140604, 140609, 140614, + 140619, 140624, 140629, 140634, 140639, 140644, 140649, 140654, 140659, + 140664, 140669, 140674, 140679, 140684, 140689, 140694, 140701, 140706, + 140711, 140716, 140721, 140726, 140731, 140736, 140742, 140747, 140752, + 140757, 140762, 140767, 140772, 140777, 140782, 140789, 140796, 140801, + 140806, 140810, 140815, 140819, 140823, 140828, 140835, 140840, 140845, + 140854, 140859, 140864, 140869, 140874, 140881, 140888, 140893, 140898, + 140903, 140908, 140915, 140920, 140925, 140930, 140935, 140940, 140945, + 140950, 140955, 140960, 140965, 140970, 140975, 140982, 140986, 140991, + 140996, 141001, 141006, 141010, 141015, 141020, 141025, 141030, 141035, + 141040, 141045, 141050, 141055, 141061, 141067, 141073, 141079, 141085, + 141090, 141096, 141102, 141108, 141114, 141120, 141126, 141132, 141138, + 141144, 141150, 141156, 141162, 141168, 141174, 141180, 141186, 141192, + 141198, 141203, 141209, 141215, 141221, 141227, 141233, 141239, 141245, + 141251, 141257, 141263, 141269, 141275, 141281, 141287, 141293, 141299, + 141305, 141311, 141317, 141323, 141328, 141334, 141340, 141346, 141352, + 141358, 0, 0, 0, 0, 0, 0, 0, 141364, 141369, 141374, 141379, 141384, + 141389, 141394, 141398, 141403, 141408, 141413, 141418, 141423, 141428, + 141433, 141438, 141443, 141447, 141452, 141456, 141461, 141466, 141471, + 141476, 141481, 141485, 141490, 141495, 141499, 141504, 141509, 0, + 141514, 141519, 141523, 141527, 141531, 141535, 141539, 141543, 141547, + 141551, 0, 0, 0, 0, 141555, 141559, 141564, 141569, 141574, 141579, + 141584, 141589, 141594, 141599, 141604, 141609, 141614, 141619, 141624, + 141629, 141634, 141639, 141644, 141649, 141654, 141659, 141664, 141669, + 141674, 141679, 141684, 141689, 141694, 141699, 141704, 141709, 141714, + 141719, 141724, 141730, 141736, 141743, 141750, 141755, 141760, 141765, + 141770, 141775, 141780, 141785, 141790, 141795, 141800, 141805, 141810, + 141814, 141819, 141824, 141829, 141833, 141837, 141842, 141846, 141851, + 141856, 141861, 141865, 141869, 141873, 141877, 141882, 141887, 141892, + 141896, 141901, 141906, 141911, 141916, 141921, 141926, 141931, 141936, + 141941, 141946, 141951, 0, 141956, 141961, 141965, 141969, 141973, + 141977, 141981, 141985, 141989, 141993, 0, 0, 0, 0, 0, 0, 141997, 142004, + 142010, 142017, 142024, 142031, 142038, 142045, 142052, 142059, 142066, + 142073, 142080, 142087, 142094, 142101, 142108, 142115, 142121, 142128, + 142135, 142142, 142148, 142155, 142161, 142167, 142174, 142180, 142187, + 142193, 0, 0, 142199, 142207, 142215, 142224, 142233, 142242, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 142250, 142255, 142260, 142265, 142270, 142275, 142280, + 142285, 142290, 142295, 142300, 142305, 142310, 142315, 142320, 142325, + 142330, 142335, 142340, 142345, 142350, 142355, 142360, 142365, 142370, + 142375, 142380, 142385, 142390, 142395, 142400, 142405, 142410, 142415, + 142420, 142425, 142430, 142435, 142440, 142445, 142450, 142455, 142460, + 142465, 142470, 142475, 142480, 142485, 142490, 142497, 142504, 142511, + 142518, 142525, 142532, 142539, 142546, 142555, 142562, 142569, 142576, + 142583, 142590, 142597, 142604, 142611, 142618, 142625, 142632, 142637, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142646, 142651, 142655, 142659, 142663, + 142667, 142671, 142675, 142679, 142683, 0, 142687, 142692, 142697, + 142704, 142709, 142716, 142723, 0, 142728, 142735, 142740, 142745, + 142752, 142759, 142764, 142769, 142774, 142779, 142784, 142791, 142798, + 142803, 142808, 142813, 142826, 142835, 142842, 142851, 142860, 0, 0, 0, + 0, 0, 142869, 142876, 142883, 142890, 142897, 142904, 142911, 142918, + 142925, 142932, 142939, 142946, 142953, 142960, 142967, 142974, 142981, + 142988, 142995, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142958, 142964, 142970, 142976, - 142982, 142988, 142994, 143000, 143006, 143012, 143018, 143024, 143029, - 143035, 143040, 143046, 143051, 143057, 143063, 143068, 143074, 143079, - 143085, 143091, 143097, 143103, 143109, 143115, 143121, 143126, 143131, - 143137, 143143, 143149, 143155, 143161, 143167, 143173, 143179, 143185, - 143191, 143197, 143203, 143209, 143214, 143220, 143225, 143231, 143236, - 143242, 143248, 143253, 143259, 143264, 143270, 143276, 143282, 143288, - 143294, 143300, 143306, 143311, 143316, 143322, 143328, 143333, 143337, - 143341, 143345, 143349, 143353, 143357, 143361, 143365, 143369, 143374, - 143379, 143384, 143389, 143394, 143399, 143404, 143409, 143414, 143419, - 143426, 143433, 143440, 143444, 143450, 143455, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143002, 143008, 143014, 143020, + 143026, 143032, 143038, 143044, 143050, 143056, 143062, 143068, 143073, + 143079, 143084, 143090, 143095, 143101, 143107, 143112, 143118, 143123, + 143129, 143135, 143141, 143147, 143153, 143159, 143165, 143170, 143175, + 143181, 143187, 143193, 143199, 143205, 143211, 143217, 143223, 143229, + 143235, 143241, 143247, 143253, 143258, 143264, 143269, 143275, 143280, + 143286, 143292, 143297, 143303, 143308, 143314, 143320, 143326, 143332, + 143338, 143344, 143350, 143355, 143360, 143366, 143372, 143377, 143381, + 143385, 143389, 143393, 143397, 143401, 143405, 143409, 143413, 143418, + 143423, 143428, 143433, 143438, 143443, 143448, 143453, 143458, 143463, + 143470, 143477, 143484, 143488, 143494, 143499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143461, - 143464, 143468, 143472, 143476, 143479, 143483, 143488, 143492, 143496, - 143500, 143504, 143508, 143513, 143518, 143522, 143526, 143529, 143533, - 143538, 143543, 143547, 143551, 143554, 143558, 143562, 143566, 143570, - 143574, 143578, 143582, 143585, 143589, 143593, 143597, 143601, 143605, - 143609, 143615, 143618, 143622, 143626, 143630, 143634, 143638, 143642, - 143646, 143650, 143654, 143659, 143664, 143670, 143674, 143678, 143682, - 143686, 143690, 143694, 143699, 143702, 143706, 143710, 143714, 143718, - 143724, 143728, 143732, 143736, 143740, 143744, 143748, 143752, 143756, - 143760, 143764, 0, 0, 0, 0, 143768, 143773, 143777, 143781, 143787, - 143793, 143797, 143802, 143807, 143812, 143817, 143821, 143826, 143831, - 143836, 143840, 143845, 143850, 143855, 143859, 143864, 143869, 143874, - 143879, 143884, 143889, 143894, 143899, 143903, 143908, 143913, 143918, - 143923, 143928, 143933, 143938, 143943, 143948, 143953, 143958, 143965, - 143970, 143977, 143982, 143987, 143992, 143997, 144002, 144007, 144012, - 144017, 144022, 144027, 144032, 144037, 144042, 144047, 0, 0, 0, 0, 0, 0, - 0, 144052, 144055, 144060, 144063, 144066, 144070, 144074, 144078, - 144082, 144086, 144090, 144094, 144100, 144106, 144112, 144118, 144124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143505, + 143508, 143512, 143516, 143520, 143523, 143527, 143532, 143536, 143540, + 143544, 143548, 143552, 143557, 143562, 143566, 143570, 143573, 143577, + 143582, 143587, 143591, 143595, 143598, 143602, 143606, 143610, 143614, + 143618, 143622, 143626, 143629, 143633, 143637, 143641, 143645, 143649, + 143653, 143659, 143662, 143666, 143670, 143674, 143678, 143682, 143686, + 143690, 143694, 143698, 143703, 143708, 143714, 143718, 143722, 143726, + 143730, 143734, 143738, 143743, 143746, 143750, 143754, 143758, 143762, + 143768, 143772, 143776, 143780, 143784, 143788, 143792, 143796, 143800, + 143804, 143808, 0, 0, 0, 0, 143812, 143817, 143821, 143825, 143831, + 143837, 143841, 143846, 143851, 143856, 143861, 143865, 143870, 143875, + 143880, 143884, 143889, 143894, 143899, 143903, 143908, 143913, 143918, + 143923, 143928, 143933, 143938, 143943, 143947, 143952, 143957, 143962, + 143967, 143972, 143977, 143982, 143987, 143992, 143997, 144002, 144009, + 144014, 144021, 144026, 144031, 144036, 144041, 144046, 144051, 144056, + 144061, 144066, 144071, 144076, 144081, 144086, 144091, 0, 0, 0, 0, 0, 0, + 0, 144096, 144099, 144104, 144107, 144110, 144114, 144118, 144122, + 144126, 144130, 144134, 144138, 144144, 144150, 144156, 144162, 144168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144130, 144134, 144138, - 144144, 144150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144155, 144164, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144173, 144176, 144179, 144182, 144185, - 144188, 144191, 144194, 144197, 144200, 144203, 144206, 144209, 144212, - 144215, 144218, 144221, 144224, 144227, 144230, 144233, 144236, 144239, - 144242, 144245, 144248, 144251, 144254, 144257, 144260, 144263, 144266, - 144269, 144272, 144275, 144278, 144281, 144284, 144287, 144290, 144293, - 144296, 144299, 144302, 144305, 144308, 144311, 144314, 144317, 144320, - 144323, 144326, 144329, 144332, 144335, 144338, 144341, 144344, 144347, - 144350, 144353, 144356, 144359, 144362, 144365, 144368, 144371, 144374, - 144377, 144380, 144383, 144386, 144389, 144392, 144395, 144398, 144401, - 144404, 144407, 144410, 144413, 144416, 144419, 144422, 144425, 144428, - 144431, 144434, 144437, 144440, 144443, 144446, 144449, 144452, 144455, - 144458, 144461, 144464, 144467, 144470, 144473, 144476, 144479, 144482, - 144485, 144488, 144491, 144494, 144497, 144500, 144503, 144506, 144509, - 144512, 144515, 144518, 144521, 144524, 144527, 144530, 144533, 144536, - 144539, 144542, 144545, 144548, 144551, 144554, 144557, 144560, 144563, - 144566, 144569, 144572, 144575, 144578, 144581, 144584, 144587, 144590, - 144593, 144596, 144599, 144602, 144605, 144608, 144611, 144614, 144617, - 144620, 144623, 144626, 144629, 144632, 144635, 144638, 144641, 144644, - 144647, 144650, 144653, 144656, 144659, 144662, 144665, 144668, 144671, - 144674, 144677, 144680, 144683, 144686, 144689, 144692, 144695, 144698, - 144701, 144704, 144707, 144710, 144713, 144716, 144719, 144722, 144725, - 144728, 144731, 144734, 144737, 144740, 144743, 144746, 144749, 144752, - 144755, 144758, 144761, 144764, 144767, 144770, 144773, 144776, 144779, - 144782, 144785, 144788, 144791, 144794, 144797, 144800, 144803, 144806, - 144809, 144812, 144815, 144818, 144821, 144824, 144827, 144830, 144833, - 144836, 144839, 144842, 144845, 144848, 144851, 144854, 144857, 144860, - 144863, 144866, 144869, 144872, 144875, 144878, 144881, 144884, 144887, - 144890, 144893, 144896, 144899, 144902, 144905, 144908, 144911, 144914, - 144917, 144920, 144923, 144926, 144929, 144932, 144935, 144938, 144941, - 144944, 144947, 144950, 144953, 144956, 144959, 144962, 144965, 144968, - 144971, 144974, 144977, 144980, 144983, 144986, 144989, 144992, 144995, - 144998, 145001, 145004, 145007, 145010, 145013, 145016, 145019, 145022, - 145025, 145028, 145031, 145034, 145037, 145040, 145043, 145046, 145049, - 145052, 145055, 145058, 145061, 145064, 145067, 145070, 145073, 145076, - 145079, 145082, 145085, 145088, 145091, 145094, 145097, 145100, 145103, - 145106, 145109, 145112, 145115, 145118, 145121, 145124, 145127, 145130, - 145133, 145136, 145139, 145142, 145145, 145148, 145151, 145154, 145157, - 145160, 145163, 145166, 145169, 145172, 145175, 145178, 145181, 145184, - 145187, 145190, 145193, 145196, 145199, 145202, 145205, 145208, 145211, - 145214, 145217, 145220, 145223, 145226, 145229, 145232, 145235, 145238, - 145241, 145244, 145247, 145250, 145253, 145256, 145259, 145262, 145265, - 145268, 145271, 145274, 145277, 145280, 145283, 145286, 145289, 145292, - 145295, 145298, 145301, 145304, 145307, 145310, 145313, 145316, 145319, - 145322, 145325, 145328, 145331, 145334, 145337, 145340, 145343, 145346, - 145349, 145352, 145355, 145358, 145361, 145364, 145367, 145370, 145373, - 145376, 145379, 145382, 145385, 145388, 145391, 145394, 145397, 145400, - 145403, 145406, 145409, 145412, 145415, 145418, 145421, 145424, 145427, - 145430, 145433, 145436, 145439, 145442, 145445, 145448, 145451, 145454, - 145457, 145460, 145463, 145466, 145469, 145472, 145475, 145478, 145481, - 145484, 145487, 145490, 145493, 145496, 145499, 145502, 145505, 145508, - 145511, 145514, 145517, 145520, 145523, 145526, 145529, 145532, 145535, - 145538, 145541, 145544, 145547, 145550, 145553, 145556, 145559, 145562, - 145565, 145568, 145571, 145574, 145577, 145580, 145583, 145586, 145589, - 145592, 145595, 145598, 145601, 145604, 145607, 145610, 145613, 145616, - 145619, 145622, 145625, 145628, 145631, 145634, 145637, 145640, 145643, - 145646, 145649, 145652, 145655, 145658, 145661, 145664, 145667, 145670, - 145673, 145676, 145679, 145682, 145685, 145688, 145691, 145694, 145697, - 145700, 145703, 145706, 145709, 145712, 145715, 145718, 145721, 145724, - 145727, 145730, 145733, 145736, 145739, 145742, 145745, 145748, 145751, - 145754, 145757, 145760, 145763, 145766, 145769, 145772, 145775, 145778, - 145781, 145784, 145787, 145790, 145793, 145796, 145799, 145802, 145805, - 145808, 145811, 145814, 145817, 145820, 145823, 145826, 145829, 145832, - 145835, 145838, 145841, 145844, 145847, 145850, 145853, 145856, 145859, - 145862, 145865, 145868, 145871, 145874, 145877, 145880, 145883, 145886, - 145889, 145892, 145895, 145898, 145901, 145904, 145907, 145910, 145913, - 145916, 145919, 145922, 145925, 145928, 145931, 145934, 145937, 145940, - 145943, 145946, 145949, 145952, 145955, 145958, 145961, 145964, 145967, - 145970, 145973, 145976, 145979, 145982, 145985, 145988, 145991, 145994, - 145997, 146000, 146003, 146006, 146009, 146012, 146015, 146018, 146021, - 146024, 146027, 146030, 146033, 146036, 146039, 146042, 146045, 146048, - 146051, 146054, 146057, 146060, 146063, 146066, 146069, 146072, 146075, - 146078, 146081, 146084, 146087, 146090, 146093, 146096, 146099, 146102, - 146105, 146108, 146111, 146114, 146117, 146120, 146123, 146126, 146129, - 146132, 146135, 146138, 146141, 146144, 146147, 146150, 146153, 146156, - 146159, 146162, 146165, 146168, 146171, 146174, 146177, 146180, 146183, - 146186, 146189, 146192, 146195, 146198, 146201, 146204, 146207, 146210, - 146213, 146216, 146219, 146222, 146225, 146228, 146231, 146234, 146237, - 146240, 146243, 146246, 146249, 146252, 146255, 146258, 146261, 146264, - 146267, 146270, 146273, 146276, 146279, 146282, 146285, 146288, 146291, - 146294, 146297, 146300, 146303, 146306, 146309, 146312, 146315, 146318, - 146321, 146324, 146327, 146330, 146333, 146336, 146339, 146342, 146345, - 146348, 146351, 146354, 146357, 146360, 146363, 146366, 146369, 146372, - 146375, 146378, 146381, 146384, 146387, 146390, 146393, 146396, 146399, - 146402, 146405, 146408, 146411, 146414, 146417, 146420, 146423, 146426, - 146429, 146432, 146435, 146438, 146441, 146444, 146447, 146450, 146453, - 146456, 146459, 146462, 146465, 146468, 146471, 146474, 146477, 146482, - 146487, 146492, 146497, 146502, 146507, 146512, 146517, 146522, 146527, - 146532, 146537, 146542, 146547, 146552, 146557, 146562, 146567, 146572, - 146577, 146582, 146587, 146592, 146597, 146602, 146607, 146612, 146617, - 146622, 146627, 146632, 146637, 146642, 146647, 146652, 146657, 146662, - 146667, 146672, 146677, 146682, 146687, 146692, 146697, 146702, 146707, - 146712, 146717, 146722, 146727, 146732, 146737, 146742, 146747, 146752, - 146757, 146762, 146767, 146772, 146777, 146782, 146787, 146792, 146797, - 146802, 146807, 146812, 146817, 146822, 146827, 146832, 146837, 146842, - 146847, 146852, 146857, 146862, 146867, 146872, 146877, 146882, 146887, - 146892, 146897, 146902, 146907, 146912, 146917, 146922, 146927, 146932, - 146937, 146942, 146947, 146952, 146957, 146962, 146967, 146972, 146977, - 146982, 146987, 146992, 146997, 147002, 147007, 147012, 147017, 147022, - 147027, 147032, 147037, 147042, 147047, 147052, 147057, 147062, 147067, - 147072, 147077, 147082, 147087, 147092, 147097, 147102, 147107, 147112, - 147117, 147122, 147127, 147132, 147137, 147142, 147147, 147152, 147157, - 147162, 147167, 147172, 147177, 147182, 147187, 147192, 147197, 147202, - 147207, 147212, 147217, 147222, 147227, 147232, 147237, 147242, 147247, - 147252, 147257, 147262, 147267, 147272, 147277, 147282, 147287, 147292, - 147297, 147302, 147307, 147312, 147317, 147322, 147327, 147332, 147337, - 147342, 147347, 147352, 147357, 147362, 147367, 147372, 147377, 147382, - 147387, 147392, 147397, 147402, 147407, 147412, 147417, 147422, 147427, - 147432, 147437, 147442, 147447, 147452, 147457, 147462, 147467, 147472, - 147477, 147482, 147487, 147492, 147497, 147502, 147507, 147512, 147517, - 147522, 147527, 147532, 147537, 147542, 147547, 147552, 147557, 147562, - 147567, 147572, 147577, 147582, 147587, 147592, 147597, 147602, 147607, - 147612, 147617, 147622, 147627, 147632, 147637, 147642, 147647, 147652, - 147657, 147662, 147667, 147672, 147677, 147682, 147687, 147692, 147697, - 147702, 147707, 147712, 147717, 147722, 147727, 147732, 147737, 147742, - 147747, 147752, 147757, 147762, 147767, 147772, 147777, 147782, 147787, - 147792, 147797, 147802, 147807, 147812, 147817, 147822, 147827, 147832, - 147837, 147842, 147847, 147852, 147857, 147862, 147867, 147872, 147877, - 147882, 147887, 147892, 147897, 147902, 147907, 147912, 147917, 147922, - 147927, 147932, 147937, 147942, 147947, 147952, 147957, 147962, 147967, - 147972, 147977, 147982, 147987, 147992, 147997, 148002, 148007, 148012, - 148017, 148022, 148027, 148032, 148037, 148042, 148047, 148052, 148057, - 148062, 148067, 148072, 148077, 148082, 148087, 148092, 148097, 148102, - 148107, 148112, 148117, 148122, 148127, 148132, 148137, 148142, 148147, - 148152, 148157, 148162, 148167, 148172, 148177, 148182, 148187, 148192, - 148197, 148202, 148207, 148212, 148217, 148222, 148227, 148232, 148237, - 148242, 148247, 148252, 148257, 148262, 148267, 148272, 148277, 148282, - 148287, 148292, 148297, 148302, 148307, 148312, 148317, 148322, 148327, - 148332, 148337, 148342, 148347, 148352, 148357, 148362, 148367, 148372, - 148377, 148382, 148387, 148392, 148397, 148402, 148407, 148412, 148417, - 148422, 148427, 148432, 148437, 148442, 148447, 148452, 148457, 148462, - 148467, 148472, 148477, 148482, 148487, 148492, 148497, 148502, 148507, - 148512, 148517, 148522, 148527, 148532, 148537, 148542, 148547, 148552, - 148557, 148562, 148567, 148572, 148577, 148582, 148587, 148592, 148597, - 148602, 148607, 148612, 148617, 148622, 148627, 148632, 148637, 148642, - 148647, 148652, 148657, 148662, 148667, 148672, 148677, 148682, 148687, - 148692, 148697, 148702, 148707, 148712, 148717, 148722, 148727, 148732, - 148737, 148742, 148747, 148752, 148757, 148762, 148767, 148772, 148777, - 148782, 148787, 148792, 148797, 148802, 148807, 148812, 148817, 148822, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144174, 144178, 144182, + 144188, 144194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144199, 144208, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144217, 144220, 144223, 144226, 144229, + 144232, 144235, 144238, 144241, 144244, 144247, 144250, 144253, 144256, + 144259, 144262, 144265, 144268, 144271, 144274, 144277, 144280, 144283, + 144286, 144289, 144292, 144295, 144298, 144301, 144304, 144307, 144310, + 144313, 144316, 144319, 144322, 144325, 144328, 144331, 144334, 144337, + 144340, 144343, 144346, 144349, 144352, 144355, 144358, 144361, 144364, + 144367, 144370, 144373, 144376, 144379, 144382, 144385, 144388, 144391, + 144394, 144397, 144400, 144403, 144406, 144409, 144412, 144415, 144418, + 144421, 144424, 144427, 144430, 144433, 144436, 144439, 144442, 144445, + 144448, 144451, 144454, 144457, 144460, 144463, 144466, 144469, 144472, + 144475, 144478, 144481, 144484, 144487, 144490, 144493, 144496, 144499, + 144502, 144505, 144508, 144511, 144514, 144517, 144520, 144523, 144526, + 144529, 144532, 144535, 144538, 144541, 144544, 144547, 144550, 144553, + 144556, 144559, 144562, 144565, 144568, 144571, 144574, 144577, 144580, + 144583, 144586, 144589, 144592, 144595, 144598, 144601, 144604, 144607, + 144610, 144613, 144616, 144619, 144622, 144625, 144628, 144631, 144634, + 144637, 144640, 144643, 144646, 144649, 144652, 144655, 144658, 144661, + 144664, 144667, 144670, 144673, 144676, 144679, 144682, 144685, 144688, + 144691, 144694, 144697, 144700, 144703, 144706, 144709, 144712, 144715, + 144718, 144721, 144724, 144727, 144730, 144733, 144736, 144739, 144742, + 144745, 144748, 144751, 144754, 144757, 144760, 144763, 144766, 144769, + 144772, 144775, 144778, 144781, 144784, 144787, 144790, 144793, 144796, + 144799, 144802, 144805, 144808, 144811, 144814, 144817, 144820, 144823, + 144826, 144829, 144832, 144835, 144838, 144841, 144844, 144847, 144850, + 144853, 144856, 144859, 144862, 144865, 144868, 144871, 144874, 144877, + 144880, 144883, 144886, 144889, 144892, 144895, 144898, 144901, 144904, + 144907, 144910, 144913, 144916, 144919, 144922, 144925, 144928, 144931, + 144934, 144937, 144940, 144943, 144946, 144949, 144952, 144955, 144958, + 144961, 144964, 144967, 144970, 144973, 144976, 144979, 144982, 144985, + 144988, 144991, 144994, 144997, 145000, 145003, 145006, 145009, 145012, + 145015, 145018, 145021, 145024, 145027, 145030, 145033, 145036, 145039, + 145042, 145045, 145048, 145051, 145054, 145057, 145060, 145063, 145066, + 145069, 145072, 145075, 145078, 145081, 145084, 145087, 145090, 145093, + 145096, 145099, 145102, 145105, 145108, 145111, 145114, 145117, 145120, + 145123, 145126, 145129, 145132, 145135, 145138, 145141, 145144, 145147, + 145150, 145153, 145156, 145159, 145162, 145165, 145168, 145171, 145174, + 145177, 145180, 145183, 145186, 145189, 145192, 145195, 145198, 145201, + 145204, 145207, 145210, 145213, 145216, 145219, 145222, 145225, 145228, + 145231, 145234, 145237, 145240, 145243, 145246, 145249, 145252, 145255, + 145258, 145261, 145264, 145267, 145270, 145273, 145276, 145279, 145282, + 145285, 145288, 145291, 145294, 145297, 145300, 145303, 145306, 145309, + 145312, 145315, 145318, 145321, 145324, 145327, 145330, 145333, 145336, + 145339, 145342, 145345, 145348, 145351, 145354, 145357, 145360, 145363, + 145366, 145369, 145372, 145375, 145378, 145381, 145384, 145387, 145390, + 145393, 145396, 145399, 145402, 145405, 145408, 145411, 145414, 145417, + 145420, 145423, 145426, 145429, 145432, 145435, 145438, 145441, 145444, + 145447, 145450, 145453, 145456, 145459, 145462, 145465, 145468, 145471, + 145474, 145477, 145480, 145483, 145486, 145489, 145492, 145495, 145498, + 145501, 145504, 145507, 145510, 145513, 145516, 145519, 145522, 145525, + 145528, 145531, 145534, 145537, 145540, 145543, 145546, 145549, 145552, + 145555, 145558, 145561, 145564, 145567, 145570, 145573, 145576, 145579, + 145582, 145585, 145588, 145591, 145594, 145597, 145600, 145603, 145606, + 145609, 145612, 145615, 145618, 145621, 145624, 145627, 145630, 145633, + 145636, 145639, 145642, 145645, 145648, 145651, 145654, 145657, 145660, + 145663, 145666, 145669, 145672, 145675, 145678, 145681, 145684, 145687, + 145690, 145693, 145696, 145699, 145702, 145705, 145708, 145711, 145714, + 145717, 145720, 145723, 145726, 145729, 145732, 145735, 145738, 145741, + 145744, 145747, 145750, 145753, 145756, 145759, 145762, 145765, 145768, + 145771, 145774, 145777, 145780, 145783, 145786, 145789, 145792, 145795, + 145798, 145801, 145804, 145807, 145810, 145813, 145816, 145819, 145822, + 145825, 145828, 145831, 145834, 145837, 145840, 145843, 145846, 145849, + 145852, 145855, 145858, 145861, 145864, 145867, 145870, 145873, 145876, + 145879, 145882, 145885, 145888, 145891, 145894, 145897, 145900, 145903, + 145906, 145909, 145912, 145915, 145918, 145921, 145924, 145927, 145930, + 145933, 145936, 145939, 145942, 145945, 145948, 145951, 145954, 145957, + 145960, 145963, 145966, 145969, 145972, 145975, 145978, 145981, 145984, + 145987, 145990, 145993, 145996, 145999, 146002, 146005, 146008, 146011, + 146014, 146017, 146020, 146023, 146026, 146029, 146032, 146035, 146038, + 146041, 146044, 146047, 146050, 146053, 146056, 146059, 146062, 146065, + 146068, 146071, 146074, 146077, 146080, 146083, 146086, 146089, 146092, + 146095, 146098, 146101, 146104, 146107, 146110, 146113, 146116, 146119, + 146122, 146125, 146128, 146131, 146134, 146137, 146140, 146143, 146146, + 146149, 146152, 146155, 146158, 146161, 146164, 146167, 146170, 146173, + 146176, 146179, 146182, 146185, 146188, 146191, 146194, 146197, 146200, + 146203, 146206, 146209, 146212, 146215, 146218, 146221, 146224, 146227, + 146230, 146233, 146236, 146239, 146242, 146245, 146248, 146251, 146254, + 146257, 146260, 146263, 146266, 146269, 146272, 146275, 146278, 146281, + 146284, 146287, 146290, 146293, 146296, 146299, 146302, 146305, 146308, + 146311, 146314, 146317, 146320, 146323, 146326, 146329, 146332, 146335, + 146338, 146341, 146344, 146347, 146350, 146353, 146356, 146359, 146362, + 146365, 146368, 146371, 146374, 146377, 146380, 146383, 146386, 146389, + 146392, 146395, 146398, 146401, 146404, 146407, 146410, 146413, 146416, + 146419, 146422, 146425, 146428, 146431, 146434, 146437, 146440, 146443, + 146446, 146449, 146452, 146455, 146458, 146461, 146464, 146467, 146470, + 146473, 146476, 146479, 146482, 146485, 146488, 146491, 146494, 146497, + 146500, 146503, 146506, 146509, 146512, 146515, 146518, 146521, 146526, + 146531, 146536, 146541, 146546, 146551, 146556, 146561, 146566, 146571, + 146576, 146581, 146586, 146591, 146596, 146601, 146606, 146611, 146616, + 146621, 146626, 146631, 146636, 146641, 146646, 146651, 146656, 146661, + 146666, 146671, 146676, 146681, 146686, 146691, 146696, 146701, 146706, + 146711, 146716, 146721, 146726, 146731, 146736, 146741, 146746, 146751, + 146756, 146761, 146766, 146771, 146776, 146781, 146786, 146791, 146796, + 146801, 146806, 146811, 146816, 146821, 146826, 146831, 146836, 146841, + 146846, 146851, 146856, 146861, 146866, 146871, 146876, 146881, 146886, + 146891, 146896, 146901, 146906, 146911, 146916, 146921, 146926, 146931, + 146936, 146941, 146946, 146951, 146956, 146961, 146966, 146971, 146976, + 146981, 146986, 146991, 146996, 147001, 147006, 147011, 147016, 147021, + 147026, 147031, 147036, 147041, 147046, 147051, 147056, 147061, 147066, + 147071, 147076, 147081, 147086, 147091, 147096, 147101, 147106, 147111, + 147116, 147121, 147126, 147131, 147136, 147141, 147146, 147151, 147156, + 147161, 147166, 147171, 147176, 147181, 147186, 147191, 147196, 147201, + 147206, 147211, 147216, 147221, 147226, 147231, 147236, 147241, 147246, + 147251, 147256, 147261, 147266, 147271, 147276, 147281, 147286, 147291, + 147296, 147301, 147306, 147311, 147316, 147321, 147326, 147331, 147336, + 147341, 147346, 147351, 147356, 147361, 147366, 147371, 147376, 147381, + 147386, 147391, 147396, 147401, 147406, 147411, 147416, 147421, 147426, + 147431, 147436, 147441, 147446, 147451, 147456, 147461, 147466, 147471, + 147476, 147481, 147486, 147491, 147496, 147501, 147506, 147511, 147516, + 147521, 147526, 147531, 147536, 147541, 147546, 147551, 147556, 147561, + 147566, 147571, 147576, 147581, 147586, 147591, 147596, 147601, 147606, + 147611, 147616, 147621, 147626, 147631, 147636, 147641, 147646, 147651, + 147656, 147661, 147666, 147671, 147676, 147681, 147686, 147691, 147696, + 147701, 147706, 147711, 147716, 147721, 147726, 147731, 147736, 147741, + 147746, 147751, 147756, 147761, 147766, 147771, 147776, 147781, 147786, + 147791, 147796, 147801, 147806, 147811, 147816, 147821, 147826, 147831, + 147836, 147841, 147846, 147851, 147856, 147861, 147866, 147871, 147876, + 147881, 147886, 147891, 147896, 147901, 147906, 147911, 147916, 147921, + 147926, 147931, 147936, 147941, 147946, 147951, 147956, 147961, 147966, + 147971, 147976, 147981, 147986, 147991, 147996, 148001, 148006, 148011, + 148016, 148021, 148026, 148031, 148036, 148041, 148046, 148051, 148056, + 148061, 148066, 148071, 148076, 148081, 148086, 148091, 148096, 148101, + 148106, 148111, 148116, 148121, 148126, 148131, 148136, 148141, 148146, + 148151, 148156, 148161, 148166, 148171, 148176, 148181, 148186, 148191, + 148196, 148201, 148206, 148211, 148216, 148221, 148226, 148231, 148236, + 148241, 148246, 148251, 148256, 148261, 148266, 148271, 148276, 148281, + 148286, 148291, 148296, 148301, 148306, 148311, 148316, 148321, 148326, + 148331, 148336, 148341, 148346, 148351, 148356, 148361, 148366, 148371, + 148376, 148381, 148386, 148391, 148396, 148401, 148406, 148411, 148416, + 148421, 148426, 148431, 148436, 148441, 148446, 148451, 148456, 148461, + 148466, 148471, 148476, 148481, 148486, 148491, 148496, 148501, 148506, + 148511, 148516, 148521, 148526, 148531, 148536, 148541, 148546, 148551, + 148556, 148561, 148566, 148571, 148576, 148581, 148586, 148591, 148596, + 148601, 148606, 148611, 148616, 148621, 148626, 148631, 148636, 148641, + 148646, 148651, 148656, 148661, 148666, 148671, 148676, 148681, 148686, + 148691, 148696, 148701, 148706, 148711, 148716, 148721, 148726, 148731, + 148736, 148741, 148746, 148751, 148756, 148761, 148766, 148771, 148776, + 148781, 148786, 148791, 148796, 148801, 148806, 148811, 148816, 148821, + 148826, 148831, 148836, 148841, 148846, 148851, 148856, 148861, 148866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148827, 148833, 148839, 148845, 0, 148851, - 148857, 148863, 148871, 148879, 148887, 148895, 0, 148903, 148911, 0, - 148919, 148924, 148931, 148935, 148939, 148943, 148947, 148951, 148955, - 148959, 148963, 148967, 148971, 148975, 148979, 148983, 148987, 148991, - 148995, 148999, 149003, 149007, 149011, 149015, 149019, 149023, 149027, - 149031, 149035, 149039, 149043, 149047, 149051, 149055, 149059, 149063, - 149067, 149071, 149075, 149079, 149083, 149087, 149091, 149095, 149099, - 149103, 149107, 149111, 149115, 149119, 149123, 149127, 149131, 149135, - 149139, 149143, 149147, 149151, 149155, 149159, 149163, 149167, 149171, - 149175, 149179, 149183, 149187, 149191, 149195, 149199, 149203, 149207, - 149211, 149215, 149219, 149223, 149227, 149231, 149235, 149239, 149243, - 149247, 149251, 149255, 149259, 149263, 149267, 149271, 149275, 149279, - 149283, 149287, 149291, 149295, 149299, 149303, 149307, 149311, 149315, - 149319, 149323, 149327, 149331, 149335, 149339, 149343, 149347, 149351, - 149355, 149359, 149363, 149367, 149371, 149375, 149379, 149383, 149387, - 149391, 149395, 149399, 149403, 149407, 149411, 149415, 149419, 149423, - 149427, 149431, 149435, 149439, 149443, 149447, 149451, 149455, 149459, - 149463, 149467, 149471, 149475, 149479, 149483, 149487, 149491, 149495, - 149499, 149503, 149507, 149511, 149515, 149519, 149523, 149527, 149531, - 149535, 149539, 149543, 149547, 149551, 149555, 149559, 149563, 149567, - 149571, 149575, 149579, 149583, 149587, 149591, 149595, 149599, 149603, - 149607, 149611, 149615, 149619, 149623, 149627, 149631, 149635, 149639, - 149643, 149647, 149651, 149655, 149659, 149663, 149667, 149671, 149675, - 149679, 149683, 149687, 149691, 149695, 149699, 149703, 149707, 149711, - 149715, 149719, 149723, 149727, 149731, 149735, 149739, 149743, 149747, - 149751, 149755, 149759, 149763, 149767, 149771, 149775, 149779, 149783, - 149787, 149791, 149795, 149799, 149803, 149807, 149811, 149815, 149819, - 149823, 149827, 149831, 149835, 149839, 149843, 149847, 149851, 149855, - 149859, 149863, 149867, 149871, 149875, 149879, 149883, 149887, 149891, - 149895, 149899, 149903, 149907, 149911, 149915, 149919, 149923, 149927, - 149931, 149935, 149939, 149943, 149947, 149951, 149955, 149959, 149963, - 149967, 149971, 149975, 149979, 149983, 149987, 149991, 149995, 149999, - 150003, 150007, 150011, 150015, 150019, 150023, 150027, 150031, 150035, - 150039, 150043, 150047, 150051, 150055, 150059, 150063, 150067, 150071, - 150078, 150084, 150090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 150096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 150102, 150108, 150114, 0, 0, 150120, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 150125, 150130, 150135, 150140, 0, 0, 0, 0, 0, - 0, 0, 0, 150145, 150148, 150151, 150154, 150157, 150160, 150163, 150166, - 150169, 150172, 150175, 150178, 150181, 150184, 150187, 150190, 150193, - 150196, 150199, 150202, 150205, 150208, 150211, 150214, 150217, 150220, - 150223, 150226, 150229, 150232, 150235, 150238, 150241, 150244, 150247, - 150250, 150253, 150256, 150259, 150262, 150265, 150268, 150271, 150274, - 150277, 150280, 150283, 150286, 150289, 150292, 150295, 150298, 150301, - 150304, 150307, 150310, 150313, 150316, 150319, 150322, 150325, 150328, - 150331, 150334, 150337, 150340, 150343, 150346, 150349, 150352, 150355, - 150358, 150361, 150364, 150367, 150370, 150373, 150376, 150379, 150382, - 150385, 150388, 150391, 150394, 150397, 150400, 150403, 150406, 150409, - 150412, 150415, 150418, 150421, 150424, 150427, 150430, 150433, 150436, - 150439, 150442, 150445, 150448, 150451, 150454, 150457, 150460, 150463, - 150466, 150469, 150472, 150475, 150478, 150481, 150484, 150487, 150490, - 150493, 150496, 150499, 150502, 150505, 150508, 150511, 150514, 150517, - 150520, 150523, 150526, 150529, 150532, 150535, 150538, 150541, 150544, - 150547, 150550, 150553, 150556, 150559, 150562, 150565, 150568, 150571, - 150574, 150577, 150580, 150583, 150586, 150589, 150592, 150595, 150598, - 150601, 150604, 150607, 150610, 150613, 150616, 150619, 150622, 150625, - 150628, 150631, 150634, 150637, 150640, 150643, 150646, 150649, 150652, - 150655, 150658, 150661, 150664, 150667, 150670, 150673, 150676, 150679, - 150682, 150685, 150688, 150691, 150694, 150697, 150700, 150703, 150706, - 150709, 150712, 150715, 150718, 150721, 150724, 150727, 150730, 150733, - 150736, 150739, 150742, 150745, 150748, 150751, 150754, 150757, 150760, - 150763, 150766, 150769, 150772, 150775, 150778, 150781, 150784, 150787, - 150790, 150793, 150796, 150799, 150802, 150805, 150808, 150811, 150814, - 150817, 150820, 150823, 150826, 150829, 150832, 150835, 150838, 150841, - 150844, 150847, 150850, 150853, 150856, 150859, 150862, 150865, 150868, - 150871, 150874, 150877, 150880, 150883, 150886, 150889, 150892, 150895, - 150898, 150901, 150904, 150907, 150910, 150913, 150916, 150919, 150922, - 150925, 150928, 150931, 150934, 150937, 150940, 150943, 150946, 150949, - 150952, 150955, 150958, 150961, 150964, 150967, 150970, 150973, 150976, - 150979, 150982, 150985, 150988, 150991, 150994, 150997, 151000, 151003, - 151006, 151009, 151012, 151015, 151018, 151021, 151024, 151027, 151030, - 151033, 151036, 151039, 151042, 151045, 151048, 151051, 151054, 151057, - 151060, 151063, 151066, 151069, 151072, 151075, 151078, 151081, 151084, - 151087, 151090, 151093, 151096, 151099, 151102, 151105, 151108, 151111, - 151114, 151117, 151120, 151123, 151126, 151129, 151132, 151135, 151138, - 151141, 151144, 151147, 151150, 151153, 151156, 151159, 151162, 151165, - 151168, 151171, 151174, 151177, 151180, 151183, 151186, 151189, 151192, - 151195, 151198, 151201, 151204, 151207, 151210, 151213, 151216, 151219, - 151222, 151225, 151228, 151231, 151234, 151237, 151240, 151243, 151246, - 151249, 151252, 151255, 151258, 151261, 151264, 151267, 151270, 151273, - 151276, 151279, 151282, 151285, 151288, 151291, 151294, 151297, 151300, - 151303, 151306, 151309, 151312, 151315, 151318, 151321, 151324, 151327, - 151330, 0, 0, 0, 0, 151333, 151337, 151341, 151345, 151349, 151353, - 151357, 151360, 151364, 151368, 151372, 151376, 151379, 151385, 151391, - 151397, 151403, 151409, 151413, 151419, 151423, 151427, 151433, 151437, - 151441, 151445, 151449, 151453, 151457, 151461, 151467, 151473, 151479, - 151485, 151492, 151499, 151506, 151516, 151523, 151530, 151536, 151542, - 151548, 151554, 151562, 151570, 151578, 151586, 151595, 151601, 151609, - 151615, 151622, 151628, 151635, 151641, 151649, 151653, 151657, 151662, - 151668, 151674, 151682, 151690, 151696, 151703, 151706, 151712, 151716, - 151719, 151723, 151726, 151729, 151733, 151738, 151742, 151746, 151752, - 151757, 151763, 151767, 151771, 151774, 151778, 151782, 151787, 151791, - 151796, 151800, 151805, 151809, 151813, 151817, 151821, 151825, 151829, - 151833, 151837, 151842, 151847, 151852, 151857, 151863, 151869, 151875, - 151881, 151887, 0, 0, 0, 0, 0, 151892, 151900, 151909, 151917, 151924, - 151932, 151939, 151946, 151955, 151962, 151969, 151977, 151985, 0, 0, 0, - 151993, 151999, 152007, 152013, 152020, 152026, 152032, 152038, 152044, - 0, 0, 0, 0, 0, 0, 0, 152050, 152056, 152064, 152070, 152077, 152083, - 152089, 152095, 152101, 152107, 0, 0, 152112, 152118, 152124, 152127, - 152136, 152143, 152151, 152158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148871, 148877, 148883, 148889, 0, 148895, + 148901, 148907, 148915, 148923, 148931, 148939, 0, 148947, 148955, 0, + 148963, 148968, 148975, 148979, 148983, 148987, 148991, 148995, 148999, + 149003, 149007, 149011, 149015, 149019, 149023, 149027, 149031, 149035, + 149039, 149043, 149047, 149051, 149055, 149059, 149063, 149067, 149071, + 149075, 149079, 149083, 149087, 149091, 149095, 149099, 149103, 149107, + 149111, 149115, 149119, 149123, 149127, 149131, 149135, 149139, 149143, + 149147, 149151, 149155, 149159, 149163, 149167, 149171, 149175, 149179, + 149183, 149187, 149191, 149195, 149199, 149203, 149207, 149211, 149215, + 149219, 149223, 149227, 149231, 149235, 149239, 149243, 149247, 149251, + 149255, 149259, 149263, 149267, 149271, 149275, 149279, 149283, 149287, + 149291, 149295, 149299, 149303, 149307, 149311, 149315, 149319, 149323, + 149327, 149331, 149335, 149339, 149343, 149347, 149351, 149355, 149359, + 149363, 149367, 149371, 149375, 149379, 149383, 149387, 149391, 149395, + 149399, 149403, 149407, 149411, 149415, 149419, 149423, 149427, 149431, + 149435, 149439, 149443, 149447, 149451, 149455, 149459, 149463, 149467, + 149471, 149475, 149479, 149483, 149487, 149491, 149495, 149499, 149503, + 149507, 149511, 149515, 149519, 149523, 149527, 149531, 149535, 149539, + 149543, 149547, 149551, 149555, 149559, 149563, 149567, 149571, 149575, + 149579, 149583, 149587, 149591, 149595, 149599, 149603, 149607, 149611, + 149615, 149619, 149623, 149627, 149631, 149635, 149639, 149643, 149647, + 149651, 149655, 149659, 149663, 149667, 149671, 149675, 149679, 149683, + 149687, 149691, 149695, 149699, 149703, 149707, 149711, 149715, 149719, + 149723, 149727, 149731, 149735, 149739, 149743, 149747, 149751, 149755, + 149759, 149763, 149767, 149771, 149775, 149779, 149783, 149787, 149791, + 149795, 149799, 149803, 149807, 149811, 149815, 149819, 149823, 149827, + 149831, 149835, 149839, 149843, 149847, 149851, 149855, 149859, 149863, + 149867, 149871, 149875, 149879, 149883, 149887, 149891, 149895, 149899, + 149903, 149907, 149911, 149915, 149919, 149923, 149927, 149931, 149935, + 149939, 149943, 149947, 149951, 149955, 149959, 149963, 149967, 149971, + 149975, 149979, 149983, 149987, 149991, 149995, 149999, 150003, 150007, + 150011, 150015, 150019, 150023, 150027, 150031, 150035, 150039, 150043, + 150047, 150051, 150055, 150059, 150063, 150067, 150071, 150075, 150079, + 150083, 150087, 150091, 150095, 150099, 150103, 150107, 150111, 150115, + 150122, 150128, 150134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 150140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 150146, 150152, 150158, 0, 0, 150164, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 150169, 150174, 150179, 150184, 0, 0, 0, 0, 0, + 0, 0, 0, 150189, 150192, 150195, 150198, 150201, 150204, 150207, 150210, + 150213, 150216, 150219, 150222, 150225, 150228, 150231, 150234, 150237, + 150240, 150243, 150246, 150249, 150252, 150255, 150258, 150261, 150264, + 150267, 150270, 150273, 150276, 150279, 150282, 150285, 150288, 150291, + 150294, 150297, 150300, 150303, 150306, 150309, 150312, 150315, 150318, + 150321, 150324, 150327, 150330, 150333, 150336, 150339, 150342, 150345, + 150348, 150351, 150354, 150357, 150360, 150363, 150366, 150369, 150372, + 150375, 150378, 150381, 150384, 150387, 150390, 150393, 150396, 150399, + 150402, 150405, 150408, 150411, 150414, 150417, 150420, 150423, 150426, + 150429, 150432, 150435, 150438, 150441, 150444, 150447, 150450, 150453, + 150456, 150459, 150462, 150465, 150468, 150471, 150474, 150477, 150480, + 150483, 150486, 150489, 150492, 150495, 150498, 150501, 150504, 150507, + 150510, 150513, 150516, 150519, 150522, 150525, 150528, 150531, 150534, + 150537, 150540, 150543, 150546, 150549, 150552, 150555, 150558, 150561, + 150564, 150567, 150570, 150573, 150576, 150579, 150582, 150585, 150588, + 150591, 150594, 150597, 150600, 150603, 150606, 150609, 150612, 150615, + 150618, 150621, 150624, 150627, 150630, 150633, 150636, 150639, 150642, + 150645, 150648, 150651, 150654, 150657, 150660, 150663, 150666, 150669, + 150672, 150675, 150678, 150681, 150684, 150687, 150690, 150693, 150696, + 150699, 150702, 150705, 150708, 150711, 150714, 150717, 150720, 150723, + 150726, 150729, 150732, 150735, 150738, 150741, 150744, 150747, 150750, + 150753, 150756, 150759, 150762, 150765, 150768, 150771, 150774, 150777, + 150780, 150783, 150786, 150789, 150792, 150795, 150798, 150801, 150804, + 150807, 150810, 150813, 150816, 150819, 150822, 150825, 150828, 150831, + 150834, 150837, 150840, 150843, 150846, 150849, 150852, 150855, 150858, + 150861, 150864, 150867, 150870, 150873, 150876, 150879, 150882, 150885, + 150888, 150891, 150894, 150897, 150900, 150903, 150906, 150909, 150912, + 150915, 150918, 150921, 150924, 150927, 150930, 150933, 150936, 150939, + 150942, 150945, 150948, 150951, 150954, 150957, 150960, 150963, 150966, + 150969, 150972, 150975, 150978, 150981, 150984, 150987, 150990, 150993, + 150996, 150999, 151002, 151005, 151008, 151011, 151014, 151017, 151020, + 151023, 151026, 151029, 151032, 151035, 151038, 151041, 151044, 151047, + 151050, 151053, 151056, 151059, 151062, 151065, 151068, 151071, 151074, + 151077, 151080, 151083, 151086, 151089, 151092, 151095, 151098, 151101, + 151104, 151107, 151110, 151113, 151116, 151119, 151122, 151125, 151128, + 151131, 151134, 151137, 151140, 151143, 151146, 151149, 151152, 151155, + 151158, 151161, 151164, 151167, 151170, 151173, 151176, 151179, 151182, + 151185, 151188, 151191, 151194, 151197, 151200, 151203, 151206, 151209, + 151212, 151215, 151218, 151221, 151224, 151227, 151230, 151233, 151236, + 151239, 151242, 151245, 151248, 151251, 151254, 151257, 151260, 151263, + 151266, 151269, 151272, 151275, 151278, 151281, 151284, 151287, 151290, + 151293, 151296, 151299, 151302, 151305, 151308, 151311, 151314, 151317, + 151320, 151323, 151326, 151329, 151332, 151335, 151338, 151341, 151344, + 151347, 151350, 151353, 151356, 151359, 151362, 151365, 151368, 151371, + 151374, 0, 0, 0, 0, 151377, 151381, 151385, 151389, 151393, 151397, + 151401, 151404, 151408, 151412, 151416, 151420, 151423, 151429, 151435, + 151441, 151447, 151453, 151457, 151463, 151467, 151471, 151477, 151481, + 151485, 151489, 151493, 151497, 151501, 151505, 151511, 151517, 151523, + 151529, 151536, 151543, 151550, 151560, 151567, 151574, 151580, 151586, + 151592, 151598, 151606, 151614, 151622, 151630, 151639, 151645, 151653, + 151659, 151666, 151672, 151679, 151685, 151693, 151697, 151701, 151706, + 151712, 151718, 151726, 151734, 151740, 151747, 151750, 151756, 151760, + 151763, 151767, 151770, 151773, 151777, 151782, 151786, 151790, 151796, + 151801, 151807, 151811, 151815, 151818, 151822, 151826, 151831, 151835, + 151840, 151844, 151849, 151853, 151857, 151861, 151865, 151869, 151873, + 151877, 151881, 151886, 151891, 151896, 151901, 151907, 151913, 151919, + 151925, 151931, 0, 0, 0, 0, 0, 151936, 151944, 151953, 151961, 151968, + 151976, 151983, 151990, 151999, 152006, 152013, 152021, 152029, 0, 0, 0, + 152037, 152043, 152051, 152057, 152064, 152070, 152076, 152082, 152088, + 0, 0, 0, 0, 0, 0, 0, 152094, 152100, 152108, 152114, 152121, 152127, + 152133, 152139, 152145, 152151, 0, 0, 152156, 152162, 152168, 152171, + 152180, 152187, 152195, 152202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 152165, 152180, 152193, 152202, 152213, 152222, 152231, - 152242, 152251, 152260, 152275, 152288, 152301, 152315, 152327, 152335, - 152345, 152353, 152361, 152371, 152379, 152387, 152401, 152413, 152425, - 152434, 152445, 152454, 152463, 152470, 152479, 152488, 152495, 152500, - 152505, 152510, 152515, 152520, 152525, 152530, 152535, 152540, 152545, - 152550, 152555, 152560, 0, 0, 152569, 152578, 152587, 152596, 152601, - 152608, 152613, 152618, 152626, 152631, 152638, 152643, 152650, 152655, - 152660, 152667, 152674, 152679, 152688, 152694, 152700, 152708, 152714, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 152720, 152724, 152730, 152734, 152742, - 152746, 152750, 152754, 152762, 152766, 152772, 152781, 152785, 152789, - 152793, 152799, 152805, 152811, 152817, 152823, 152829, 152835, 152841, - 152847, 152855, 152863, 152871, 152879, 152884, 152890, 152894, 152898, - 152902, 152906, 152912, 152918, 152924, 152930, 152936, 152944, 152950, - 152958, 152966, 152974, 152982, 152990, 152994, 153002, 153008, 153016, - 153020, 153024, 153028, 153032, 153036, 153040, 153048, 153056, 153068, - 153080, 153086, 153096, 153104, 153114, 153126, 153130, 153136, 153142, - 153148, 153154, 153160, 153166, 153172, 153178, 153184, 153192, 153198, - 153204, 153210, 153218, 153226, 153237, 153248, 153254, 153260, 153270, - 153276, 153284, 153288, 153294, 153300, 153306, 153312, 153318, 153324, - 153330, 153334, 153340, 153346, 153354, 153362, 153370, 153376, 153384, - 153397, 153410, 153418, 153426, 153438, 153446, 153456, 153464, 153468, - 153472, 153476, 153480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 152209, 152224, 152237, 152246, 152257, 152266, 152275, + 152286, 152295, 152304, 152319, 152332, 152345, 152359, 152371, 152379, + 152389, 152397, 152405, 152415, 152423, 152431, 152445, 152457, 152469, + 152478, 152489, 152498, 152507, 152514, 152523, 152532, 152539, 152544, + 152549, 152554, 152559, 152564, 152569, 152574, 152579, 152584, 152589, + 152594, 152599, 152604, 0, 0, 152613, 152622, 152631, 152640, 152645, + 152652, 152657, 152662, 152670, 152675, 152682, 152687, 152694, 152699, + 152704, 152711, 152718, 152723, 152732, 152738, 152744, 152752, 152758, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 152764, 152768, 152774, 152778, 152786, + 152790, 152794, 152798, 152806, 152810, 152816, 152825, 152829, 152833, + 152837, 152843, 152849, 152855, 152861, 152867, 152873, 152879, 152885, + 152891, 152899, 152907, 152915, 152923, 152928, 152934, 152938, 152942, + 152946, 152950, 152956, 152962, 152968, 152974, 152980, 152988, 152994, + 153002, 153010, 153018, 153026, 153034, 153038, 153046, 153052, 153060, + 153064, 153068, 153072, 153076, 153080, 153084, 153092, 153100, 153112, + 153124, 153130, 153140, 153148, 153158, 153170, 153174, 153180, 153186, + 153192, 153198, 153204, 153210, 153216, 153222, 153228, 153236, 153242, + 153248, 153254, 153262, 153270, 153281, 153292, 153298, 153304, 153314, + 153320, 153328, 153332, 153338, 153344, 153350, 153356, 153362, 153368, + 153374, 153378, 153384, 153390, 153398, 153406, 153414, 153420, 153428, + 153441, 153454, 153462, 153470, 153482, 153490, 153500, 153508, 153512, + 153516, 153520, 153524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153484, - 153489, 153494, 153499, 153506, 153513, 153520, 153527, 153532, 153537, - 153542, 153547, 153554, 153559, 153566, 153573, 153578, 153583, 153588, - 153595, 153600, 153605, 153612, 153619, 153624, 153629, 153634, 153641, - 153648, 153655, 153660, 153665, 153672, 153679, 153686, 153693, 153698, - 153703, 153708, 153715, 153720, 153725, 153730, 153737, 153746, 153753, - 153758, 153763, 153768, 153773, 153778, 153783, 153792, 153799, 153804, - 153811, 153818, 153823, 153828, 153833, 153840, 153845, 153852, 153859, - 153864, 153869, 153874, 153881, 153888, 153893, 153898, 153905, 153912, - 153919, 153924, 153929, 153934, 153939, 153946, 153955, 153964, 153969, - 153976, 153985, 153990, 153995, 154000, 154005, 154012, 154019, 154026, - 154033, 154038, 154043, 154048, 154055, 154062, 154069, 154074, 154079, - 154086, 154091, 154098, 154103, 154110, 154115, 154122, 154129, 154134, - 154139, 154144, 154149, 154154, 154159, 154164, 154169, 154174, 154181, - 154188, 154195, 154202, 154209, 154218, 154223, 154228, 154235, 154242, - 154247, 154254, 154261, 154268, 154275, 154282, 154289, 154294, 154299, - 154304, 154309, 154314, 154323, 154332, 154341, 154350, 154359, 154368, - 154377, 154386, 154391, 154402, 154413, 154422, 154427, 154432, 154437, - 154442, 154451, 154458, 154465, 154472, 154479, 154486, 154493, 154502, - 154511, 154522, 154531, 154542, 154551, 154558, 154567, 154578, 154587, - 154596, 154605, 154614, 154621, 154628, 154635, 154644, 154653, 154664, - 154673, 154682, 154693, 154698, 154703, 154714, 154722, 154731, 154740, - 154749, 154760, 154769, 154778, 154789, 154800, 154811, 154822, 154833, - 154844, 154851, 154858, 154865, 154872, 154883, 154892, 154899, 154906, - 154913, 154924, 154935, 154946, 154957, 154968, 154979, 154990, 155001, - 155008, 155015, 155024, 155033, 155040, 155047, 155054, 155063, 155072, - 155081, 155088, 155097, 155106, 155115, 155122, 155129, 155134, 155140, - 155147, 155154, 155161, 155168, 155175, 155182, 155191, 155200, 155209, - 155218, 155225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155234, 155240, 155245, - 155250, 155257, 155263, 155269, 155275, 155281, 155287, 155293, 155299, - 155303, 155307, 155313, 155319, 155325, 155329, 155334, 155339, 155343, - 155347, 155351, 155357, 155363, 155369, 155375, 155381, 155387, 155393, - 155399, 155405, 155415, 155425, 155431, 155437, 155447, 155457, 155463, - 0, 0, 155469, 155477, 155482, 155487, 155493, 155499, 155505, 155511, - 155517, 155523, 155530, 155537, 155543, 155549, 155555, 155561, 155567, - 155573, 155579, 155585, 155590, 155596, 155602, 155608, 155614, 155620, - 155629, 155635, 155640, 155648, 155655, 155662, 155671, 155680, 155689, - 155698, 155707, 155716, 155725, 155734, 155744, 155754, 155762, 155770, - 155779, 155788, 155794, 155800, 155806, 155812, 155820, 155828, 155832, - 155838, 155843, 155849, 155855, 155861, 155867, 155873, 155882, 155887, - 155894, 155899, 155904, 155909, 155915, 155921, 155927, 155934, 155939, - 155944, 155949, 155954, 155959, 155965, 155971, 155977, 155983, 155989, - 155995, 156001, 156007, 156012, 156017, 156022, 156027, 156032, 156037, - 156042, 156047, 156053, 156059, 156064, 156069, 156074, 156079, 156084, - 156090, 156097, 156101, 156105, 156109, 156113, 156117, 156121, 156125, - 156129, 156137, 156147, 156151, 156155, 156161, 156167, 156173, 156179, - 156185, 156191, 156197, 156203, 156209, 156215, 156221, 156227, 156233, - 156239, 156243, 156247, 156254, 156260, 156266, 156272, 156277, 156284, - 156289, 156295, 156301, 156307, 156313, 156318, 156322, 156328, 156332, - 156336, 156340, 156346, 156352, 156356, 156362, 156368, 156374, 156380, - 156386, 156394, 156402, 156408, 156414, 156420, 156426, 156438, 156450, - 156464, 156476, 156488, 156502, 156516, 156530, 156534, 156542, 156550, - 156555, 156559, 156563, 156567, 156571, 156575, 156579, 156583, 156589, - 156595, 156601, 156607, 156615, 156624, 156631, 156638, 156646, 156653, - 156665, 156677, 156689, 156701, 156708, 156712, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156716, 156723, 156730, 156737, - 156744, 156751, 156758, 156765, 156772, 156779, 156786, 156793, 156800, - 156807, 156814, 156821, 156828, 156835, 156842, 156849, 156856, 156863, - 156870, 156877, 156884, 156891, 156898, 156905, 156912, 156919, 156926, - 156933, 156940, 156947, 156954, 156961, 156968, 156975, 156982, 156989, - 156996, 157003, 157010, 157017, 157024, 157031, 157038, 157045, 157052, - 157059, 157066, 157073, 157080, 157087, 157094, 157101, 157108, 157115, - 157122, 157129, 157136, 157143, 157150, 157157, 157164, 157171, 157178, - 157183, 157188, 157193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153528, + 153533, 153538, 153543, 153550, 153557, 153564, 153571, 153576, 153581, + 153586, 153591, 153598, 153603, 153610, 153617, 153622, 153627, 153632, + 153639, 153644, 153649, 153656, 153663, 153668, 153673, 153678, 153685, + 153692, 153699, 153704, 153709, 153716, 153723, 153730, 153737, 153742, + 153747, 153752, 153759, 153764, 153769, 153774, 153781, 153790, 153797, + 153802, 153807, 153812, 153817, 153822, 153827, 153836, 153843, 153848, + 153855, 153862, 153867, 153872, 153877, 153884, 153889, 153896, 153903, + 153908, 153913, 153918, 153925, 153932, 153937, 153942, 153949, 153956, + 153963, 153968, 153973, 153978, 153983, 153990, 153999, 154008, 154013, + 154020, 154029, 154034, 154039, 154044, 154049, 154056, 154063, 154070, + 154077, 154082, 154087, 154092, 154099, 154106, 154113, 154118, 154123, + 154130, 154135, 154142, 154147, 154154, 154159, 154166, 154173, 154178, + 154183, 154188, 154193, 154198, 154203, 154208, 154213, 154218, 154225, + 154232, 154239, 154246, 154253, 154262, 154267, 154272, 154279, 154286, + 154291, 154298, 154305, 154312, 154319, 154326, 154333, 154338, 154343, + 154348, 154353, 154358, 154367, 154376, 154385, 154394, 154403, 154412, + 154421, 154430, 154435, 154446, 154457, 154466, 154471, 154476, 154481, + 154486, 154495, 154502, 154509, 154516, 154523, 154530, 154537, 154546, + 154555, 154566, 154575, 154586, 154595, 154602, 154611, 154622, 154631, + 154640, 154649, 154658, 154665, 154672, 154679, 154688, 154697, 154708, + 154717, 154726, 154737, 154742, 154747, 154758, 154766, 154775, 154784, + 154793, 154804, 154813, 154822, 154833, 154844, 154855, 154866, 154877, + 154888, 154895, 154902, 154909, 154916, 154927, 154936, 154943, 154950, + 154957, 154968, 154979, 154990, 155001, 155012, 155023, 155034, 155045, + 155052, 155059, 155068, 155077, 155084, 155091, 155098, 155107, 155116, + 155125, 155132, 155141, 155150, 155159, 155166, 155173, 155178, 155184, + 155191, 155198, 155205, 155212, 155219, 155226, 155235, 155244, 155253, + 155262, 155269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155278, 155284, 155289, + 155294, 155301, 155307, 155313, 155319, 155325, 155331, 155337, 155343, + 155347, 155351, 155357, 155363, 155369, 155373, 155378, 155383, 155387, + 155391, 155395, 155401, 155407, 155413, 155419, 155425, 155431, 155437, + 155443, 155449, 155459, 155469, 155475, 155481, 155491, 155501, 155507, + 0, 0, 155513, 155521, 155526, 155531, 155537, 155543, 155549, 155555, + 155561, 155567, 155574, 155581, 155587, 155593, 155599, 155605, 155611, + 155617, 155623, 155629, 155634, 155640, 155646, 155652, 155658, 155664, + 155673, 155679, 155684, 155692, 155699, 155706, 155715, 155724, 155733, + 155742, 155751, 155760, 155769, 155778, 155788, 155798, 155806, 155814, + 155823, 155832, 155838, 155844, 155850, 155856, 155864, 155872, 155876, + 155882, 155887, 155893, 155899, 155905, 155911, 155917, 155926, 155931, + 155938, 155943, 155948, 155953, 155959, 155965, 155971, 155978, 155983, + 155988, 155993, 155998, 156003, 156009, 156015, 156021, 156027, 156033, + 156039, 156045, 156051, 156056, 156061, 156066, 156071, 156076, 156081, + 156086, 156091, 156097, 156103, 156108, 156113, 156118, 156123, 156128, + 156134, 156141, 156145, 156149, 156153, 156157, 156161, 156165, 156169, + 156173, 156181, 156191, 156195, 156199, 156205, 156211, 156217, 156223, + 156229, 156235, 156241, 156247, 156253, 156259, 156265, 156271, 156277, + 156283, 156287, 156291, 156298, 156304, 156310, 156316, 156321, 156328, + 156333, 156339, 156345, 156351, 156357, 156362, 156366, 156372, 156376, + 156380, 156384, 156390, 156396, 156400, 156406, 156412, 156418, 156424, + 156430, 156438, 156446, 156452, 156458, 156464, 156470, 156482, 156494, + 156508, 156520, 156532, 156546, 156560, 156574, 156578, 156586, 156594, + 156599, 156603, 156607, 156611, 156615, 156619, 156623, 156627, 156633, + 156639, 156645, 156651, 156659, 156668, 156675, 156682, 156690, 156697, + 156709, 156721, 156733, 156745, 156752, 156756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156760, 156767, 156774, 156781, + 156788, 156795, 156802, 156809, 156816, 156823, 156830, 156837, 156844, + 156851, 156858, 156865, 156872, 156879, 156886, 156893, 156900, 156907, + 156914, 156921, 156928, 156935, 156942, 156949, 156956, 156963, 156970, + 156977, 156984, 156991, 156998, 157005, 157012, 157019, 157026, 157033, + 157040, 157047, 157054, 157061, 157068, 157075, 157082, 157089, 157096, + 157103, 157110, 157117, 157124, 157131, 157138, 157145, 157152, 157159, + 157166, 157173, 157180, 157187, 157194, 157201, 157208, 157215, 157222, + 157227, 157232, 157237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157197, 157203, 157208, 157213, 157218, - 157223, 157228, 157233, 157238, 157243, 157248, 157254, 157260, 157266, - 157272, 157278, 157284, 157290, 157296, 157302, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 157308, 157314, 157319, 157324, 157329, 157334, 157339, - 157344, 157349, 157354, 157359, 157365, 157371, 157377, 157383, 157389, - 157395, 157401, 157407, 157413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 157419, 157424, 157431, 157438, 157445, 157452, 157457, 157462, 157469, - 157474, 157479, 157486, 157491, 157496, 157501, 157508, 157517, 157522, - 157527, 157532, 157537, 157542, 157547, 157554, 157559, 157564, 157569, - 157574, 157579, 157584, 157589, 157594, 157599, 157604, 157609, 157614, - 157620, 157625, 157630, 157635, 157640, 157645, 157650, 157655, 157660, - 157665, 157674, 157679, 157687, 157692, 157697, 157702, 157707, 157712, - 157717, 157722, 157731, 157736, 157741, 157746, 157751, 157756, 157763, - 157768, 157775, 157780, 157785, 157790, 157795, 157800, 157805, 157810, - 157815, 157820, 157825, 157830, 157835, 157840, 157845, 157850, 157855, - 157860, 157865, 157870, 157879, 157884, 157889, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 157894, 157902, 157910, 157918, 157926, 157934, 157942, 157950, - 157958, 157966, 157974, 157982, 157990, 157998, 158006, 158014, 158022, - 158030, 158038, 158043, 158048, 158053, 158058, 158063, 158067, 0, 0, 0, - 0, 0, 0, 0, 158071, 158075, 158080, 158085, 158090, 158094, 158099, - 158104, 158109, 158113, 158118, 158123, 158127, 158132, 158137, 158141, - 158146, 158151, 158155, 158160, 158165, 158169, 158174, 158179, 158184, - 158189, 158194, 158198, 158203, 158208, 158213, 158217, 158222, 158227, - 158232, 158236, 158241, 158246, 158250, 158255, 158260, 158264, 158269, - 158274, 158278, 158283, 158288, 158292, 158297, 158302, 158307, 158312, - 158317, 158321, 158326, 158331, 158336, 158340, 158345, 158350, 158355, - 158359, 158364, 158369, 158373, 158378, 158383, 158387, 158392, 158397, - 158401, 158406, 158411, 158415, 158420, 158425, 158430, 158435, 158440, - 158444, 158449, 158454, 158459, 158463, 158468, 0, 158473, 158477, - 158482, 158487, 158491, 158496, 158501, 158505, 158510, 158515, 158519, - 158524, 158529, 158533, 158538, 158543, 158548, 158553, 158558, 158563, - 158569, 158575, 158581, 158586, 158592, 158598, 158604, 158609, 158615, - 158621, 158626, 158632, 158638, 158643, 158649, 158655, 158660, 158666, - 158672, 158677, 158683, 158689, 158695, 158701, 158707, 158712, 158718, - 158724, 158730, 158735, 158741, 158747, 158753, 158758, 158764, 158770, - 158775, 158781, 158787, 158792, 158798, 158804, 158809, 158815, 158821, - 158826, 158832, 158838, 158844, 158850, 158856, 0, 158860, 158865, 0, 0, - 158870, 0, 0, 158875, 158880, 0, 0, 158885, 158890, 158894, 158899, 0, - 158904, 158909, 158914, 158918, 158923, 158928, 158933, 158938, 158943, - 158947, 158952, 158957, 0, 158962, 0, 158967, 158972, 158976, 158981, - 158986, 158990, 158995, 0, 159000, 159005, 159010, 159014, 159019, - 159024, 159028, 159033, 159038, 159043, 159048, 159053, 159058, 159064, - 159070, 159076, 159081, 159087, 159093, 159099, 159104, 159110, 159116, - 159121, 159127, 159133, 159138, 159144, 159150, 159155, 159161, 159167, - 159172, 159178, 159184, 159190, 159196, 159202, 159207, 159213, 159219, - 159225, 159230, 159236, 159242, 159248, 159253, 159259, 159265, 159270, - 159276, 159282, 159287, 159293, 159299, 159304, 159310, 159316, 159321, - 159327, 159333, 159339, 159345, 159351, 159356, 0, 159362, 159368, - 159373, 159379, 0, 0, 159385, 159391, 159397, 159402, 159408, 159414, - 159419, 159425, 0, 159431, 159437, 159443, 159448, 159454, 159460, - 159466, 0, 159472, 159477, 159483, 159489, 159495, 159500, 159506, - 159512, 159518, 159523, 159529, 159535, 159540, 159546, 159552, 159557, - 159563, 159569, 159574, 159580, 159586, 159591, 159597, 159603, 159609, - 159615, 159621, 159626, 0, 159632, 159638, 159643, 159649, 0, 159655, - 159660, 159666, 159672, 159677, 0, 159683, 0, 0, 0, 159688, 159694, - 159700, 159705, 159711, 159717, 159723, 0, 159729, 159734, 159740, - 159746, 159752, 159757, 159763, 159769, 159775, 159780, 159786, 159792, - 159797, 159803, 159809, 159814, 159820, 159826, 159831, 159837, 159843, - 159848, 159854, 159860, 159866, 159872, 159878, 159884, 159891, 159898, - 159905, 159911, 159918, 159925, 159932, 159938, 159945, 159952, 159958, - 159965, 159972, 159978, 159985, 159992, 159998, 160005, 160012, 160018, - 160025, 160032, 160039, 160046, 160053, 160059, 160066, 160073, 160080, - 160086, 160093, 160100, 160107, 160113, 160120, 160127, 160133, 160140, - 160147, 160153, 160160, 160167, 160173, 160180, 160187, 160193, 160200, - 160207, 160214, 160221, 160228, 160232, 160237, 160242, 160247, 160251, - 160256, 160261, 160266, 160270, 160275, 160280, 160284, 160289, 160294, - 160298, 160303, 160308, 160312, 160317, 160322, 160326, 160331, 160336, - 160341, 160346, 160351, 160355, 160360, 160365, 160370, 160374, 160379, - 160384, 160389, 160393, 160398, 160403, 160407, 160412, 160417, 160421, - 160426, 160431, 160435, 160440, 160445, 160449, 160454, 160459, 160464, - 160469, 160474, 160479, 160485, 160491, 160497, 160502, 160508, 160514, - 160520, 160525, 160531, 160537, 160542, 160548, 160554, 160559, 160565, - 160571, 160576, 160582, 160588, 160593, 160599, 160605, 160611, 160617, - 160623, 160628, 160634, 160640, 160646, 160651, 160657, 160663, 160669, - 160674, 160680, 160686, 160691, 160697, 160703, 160708, 160714, 160720, - 160725, 160731, 160737, 160742, 160748, 160754, 160760, 160766, 160772, - 160777, 160783, 160789, 160795, 160800, 160806, 160812, 160818, 160823, - 160829, 160835, 160840, 160846, 160852, 160857, 160863, 160869, 160874, - 160880, 160886, 160891, 160897, 160903, 160909, 160915, 160921, 160926, - 160932, 160938, 160944, 160949, 160955, 160961, 160967, 160972, 160978, - 160984, 160989, 160995, 161001, 161006, 161012, 161018, 161023, 161029, - 161035, 161040, 161046, 161052, 161058, 161064, 161070, 161076, 161083, - 161090, 161097, 161103, 161110, 161117, 161124, 161130, 161137, 161144, - 161150, 161157, 161164, 161170, 161177, 161184, 161190, 161197, 161204, - 161210, 161217, 161224, 161231, 161238, 161245, 161251, 161258, 161265, - 161272, 161278, 161285, 161292, 161299, 161305, 161312, 161319, 161325, - 161332, 161339, 161345, 161352, 161359, 161365, 161372, 161379, 161385, - 161392, 161399, 161406, 161413, 161420, 161425, 161431, 161437, 161443, - 161448, 161454, 161460, 161466, 161471, 161477, 161483, 161488, 161494, - 161500, 161505, 161511, 161517, 161522, 161528, 161534, 161539, 161545, - 161551, 161557, 161563, 161569, 161574, 161580, 161586, 161592, 161597, - 161603, 161609, 161615, 161620, 161626, 161632, 161637, 161643, 161649, - 161654, 161660, 161666, 161671, 161677, 161683, 161688, 161694, 161700, - 161706, 161712, 161718, 161724, 0, 0, 161731, 161736, 161741, 161746, - 161751, 161756, 161761, 161766, 161771, 161776, 161781, 161786, 161791, - 161796, 161801, 161806, 161811, 161816, 161822, 161827, 161832, 161837, - 161842, 161847, 161852, 161857, 161861, 161866, 161871, 161876, 161881, - 161886, 161891, 161896, 161901, 161906, 161911, 161916, 161921, 161926, - 161931, 161936, 161941, 161946, 161952, 161957, 161962, 161967, 161972, - 161977, 161982, 161987, 161993, 161998, 162003, 162008, 162013, 162018, - 162023, 162028, 162033, 162038, 162043, 162048, 162053, 162058, 162063, - 162068, 162073, 162078, 162083, 162088, 162093, 162098, 162103, 162108, - 162114, 162119, 162124, 162129, 162134, 162139, 162144, 162149, 162153, - 162158, 162163, 162168, 162173, 162178, 162183, 162188, 162193, 162198, - 162203, 162208, 162213, 162218, 162223, 162228, 162233, 162238, 162244, - 162249, 162254, 162259, 162264, 162269, 162274, 162279, 162285, 162290, - 162295, 162300, 162305, 162310, 162315, 162321, 162327, 162333, 162339, - 162345, 162351, 162357, 162363, 162369, 162375, 162381, 162387, 162393, - 162399, 162405, 162411, 162417, 162424, 162430, 162436, 162442, 162448, - 162454, 162460, 162466, 162471, 162477, 162483, 162489, 162495, 162501, - 162507, 162513, 162519, 162525, 162531, 162537, 162543, 162549, 162555, - 162561, 162567, 162573, 162580, 162586, 162592, 162598, 162604, 162610, - 162616, 162622, 162629, 162635, 162641, 162647, 162653, 162659, 162665, - 162671, 162677, 162683, 162689, 162695, 162701, 162707, 162713, 162719, - 162725, 162731, 162737, 162743, 162749, 162755, 162761, 162767, 162774, - 162780, 162786, 162792, 162798, 162804, 162810, 162816, 162821, 162827, - 162833, 162839, 162845, 162851, 162857, 162863, 162869, 162875, 162881, - 162887, 162893, 162899, 162905, 162911, 162917, 162923, 162930, 162936, - 162942, 162948, 162954, 162960, 162966, 162972, 162979, 162985, 162991, - 162997, 163003, 163009, 163015, 163022, 163029, 163036, 163043, 163050, - 163057, 163064, 163071, 163078, 163085, 163092, 163099, 163106, 163113, - 163120, 163127, 163134, 163142, 163149, 163156, 163163, 163170, 163177, - 163184, 163191, 163197, 163204, 163211, 163218, 163225, 163232, 163239, - 163246, 163253, 163260, 163267, 163274, 163281, 163288, 163295, 163302, - 163309, 163316, 163324, 163331, 163338, 163345, 163352, 163359, 163366, - 163373, 163381, 163388, 163395, 163402, 163409, 163416, 163423, 163428, - 0, 0, 163433, 163438, 163442, 163446, 163450, 163454, 163458, 163462, - 163466, 163470, 163474, 163480, 163485, 163490, 163495, 163500, 163505, - 163510, 163515, 163520, 163525, 163530, 163534, 163538, 163542, 163546, - 163550, 163554, 163558, 163562, 163566, 163572, 163577, 163582, 163587, - 163592, 163597, 163602, 163607, 163612, 163617, 163623, 163628, 163633, - 163638, 163643, 163648, 163653, 163658, 163663, 163668, 163672, 163677, - 163682, 163687, 163692, 163697, 163702, 163708, 163716, 163723, 163728, - 163733, 163740, 163746, 163751, 163757, 163763, 163771, 163777, 163784, - 163792, 163798, 163807, 163816, 163824, 163832, 163838, 163845, 163853, - 163861, 163867, 163874, 163883, 163892, 163899, 163910, 163920, 163930, - 163940, 163950, 163957, 163964, 163971, 163978, 163987, 163996, 164007, - 164018, 164027, 164036, 164047, 164056, 164065, 164076, 164085, 164094, - 164102, 164110, 164121, 164132, 164140, 164149, 164158, 164165, 164176, - 164187, 164196, 164205, 164212, 164221, 164230, 164239, 164250, 164259, - 164269, 164278, 164287, 164298, 164311, 164326, 164337, 164350, 164362, - 164371, 164382, 164393, 164402, 164413, 164427, 164442, 164445, 164454, - 164459, 164465, 164473, 164479, 164485, 164494, 164501, 164511, 164523, - 164530, 164533, 164539, 164546, 164552, 164557, 164560, 164565, 164568, - 164576, 164582, 164591, 164598, 164606, 164612, 164617, 164620, 164623, - 164626, 164632, 164639, 164645, 164650, 164658, 164661, 164666, 164674, - 164680, 164689, 164696, 164706, 164715, 164718, 164724, 164731, 164738, - 164745, 164750, 164758, 164766, 164775, 164781, 164790, 164799, 164808, - 164814, 164823, 164830, 164837, 164844, 164852, 164858, 164866, 164872, - 164879, 164886, 164894, 164905, 164915, 164921, 164928, 164935, 164942, - 164948, 164955, 164962, 164967, 164974, 164982, 164991, 164997, 165009, - 165020, 165026, 165034, 165040, 165047, 165054, 165061, 165067, 165074, - 165083, 165089, 165095, 165102, 165109, 165117, 165127, 165137, 165147, - 165157, 165165, 165173, 165183, 165191, 165196, 165201, 165206, 165212, - 165219, 165226, 165232, 165238, 165243, 165250, 165258, 165268, 165276, - 165284, 165294, 165304, 165312, 165322, 165332, 165344, 165356, 165368, - 165378, 165384, 165390, 165397, 165406, 165415, 165424, 165433, 165443, - 165452, 165461, 165470, 165475, 165481, 165490, 165500, 165509, 165515, - 165521, 165528, 165535, 165542, 165548, 165555, 165562, 165569, 165575, - 165579, 165584, 165591, 165598, 165605, 165610, 165618, 165626, 165635, - 165643, 165650, 165658, 165667, 165677, 165680, 165684, 165689, 165694, - 165699, 165704, 165709, 165714, 165719, 165724, 165729, 165734, 165739, - 165744, 165749, 165754, 165759, 165764, 165769, 165776, 165782, 165789, - 165795, 165800, 165807, 165813, 165820, 165826, 165831, 165838, 165845, - 165852, 165858, 165864, 165873, 165882, 165892, 165899, 165906, 165915, - 165924, 165933, 165942, 165951, 165957, 165965, 165971, 165981, 165986, - 165995, 166004, 166011, 166022, 166029, 166036, 166043, 166050, 166057, - 166064, 166071, 166078, 166085, 166092, 166098, 166104, 166110, 166117, - 166124, 166131, 166138, 166145, 166152, 166159, 166166, 166173, 166180, - 166187, 166194, 166199, 166208, 166217, 166226, 166233, 166240, 166247, - 166254, 166261, 166268, 166275, 166282, 166291, 166300, 166309, 166318, - 166327, 166336, 166345, 166354, 166363, 166372, 166381, 166390, 166399, - 166405, 166413, 166419, 166429, 166434, 166443, 166452, 166461, 166472, - 166477, 166484, 166491, 166498, 166503, 166509, 166515, 166521, 166528, - 166535, 166542, 166549, 166556, 166563, 166570, 166577, 166584, 166591, - 166598, 166605, 166610, 166619, 166628, 166637, 166646, 166655, 166664, - 166673, 166682, 166693, 166704, 166711, 166718, 166725, 166732, 166739, - 166746, 166754, 166764, 166774, 166784, 166795, 166806, 166817, 166826, - 166835, 166844, 166849, 166854, 166859, 166864, 166875, 166886, 166897, - 166908, 166919, 166929, 166940, 166949, 166958, 166967, 166976, 166985, - 166993, 167002, 167013, 167024, 167035, 167046, 167057, 167069, 167082, - 167094, 167107, 167119, 167132, 167144, 167157, 167168, 167179, 167188, - 167196, 167205, 167216, 167227, 167239, 167252, 167266, 167281, 167293, - 167306, 167318, 167331, 167342, 167353, 167362, 167370, 167379, 167386, - 167393, 167400, 167407, 167414, 167421, 167428, 167435, 167442, 167449, - 167454, 167459, 167464, 167471, 167481, 167492, 167502, 167513, 167527, - 167542, 167557, 167571, 167586, 167601, 167612, 167623, 167636, 167649, - 167658, 167667, 167680, 167693, 167700, 167707, 167712, 167717, 167722, - 167727, 167732, 167739, 167748, 167753, 167756, 167761, 167768, 167775, - 167782, 167789, 167796, 167803, 167816, 167830, 167845, 167852, 167859, - 167866, 167875, 167883, 167891, 167900, 167905, 167910, 167915, 167920, - 167925, 167930, 167937, 167944, 167950, 167957, 167963, 167970, 167975, - 167980, 167985, 167990, 167995, 168002, 168009, 168014, 168021, 168028, - 168033, 168038, 168043, 168048, 168053, 168058, 168065, 168072, 168079, - 168082, 168087, 168092, 168097, 168102, 168109, 168116, 168124, 168132, - 168137, 168142, 168149, 168156, 168163, 168168, 168175, 168182, 168187, - 168194, 168201, 168208, 168215, 168222, 168229, 168238, 168247, 168254, - 168263, 168272, 168277, 168284, 168291, 168296, 168303, 168310, 168317, - 168324, 168331, 168336, 168343, 168350, 168359, 168366, 168375, 168386, - 168395, 168404, 168413, 168422, 168425, 168430, 168437, 168446, 168453, - 168462, 168469, 168474, 168479, 168482, 168485, 168488, 168495, 168502, - 168511, 168520, 168529, 168536, 168543, 168548, 168560, 168565, 168570, - 168575, 168580, 168585, 168590, 168595, 168600, 168603, 168608, 168613, - 168618, 168623, 168628, 168635, 168640, 168647, 168650, 168655, 168658, - 168661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168664, 168669, - 168674, 168679, 168684, 0, 168689, 168694, 168699, 168704, 168709, - 168714, 168719, 168724, 168729, 168734, 168739, 168744, 168749, 168754, - 168759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157241, 157247, 157252, 157257, 157262, + 157267, 157272, 157277, 157282, 157287, 157292, 157298, 157304, 157310, + 157316, 157322, 157328, 157334, 157340, 157346, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 157352, 157358, 157363, 157368, 157373, 157378, 157383, + 157388, 157393, 157398, 157403, 157409, 157415, 157421, 157427, 157433, + 157439, 157445, 157451, 157457, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 157463, 157468, 157475, 157482, 157489, 157496, 157501, 157506, 157513, + 157518, 157523, 157530, 157535, 157540, 157545, 157552, 157561, 157566, + 157571, 157576, 157581, 157586, 157591, 157598, 157603, 157608, 157613, + 157618, 157623, 157628, 157633, 157638, 157643, 157648, 157653, 157658, + 157664, 157669, 157674, 157679, 157684, 157689, 157694, 157699, 157704, + 157709, 157718, 157723, 157731, 157736, 157741, 157746, 157751, 157756, + 157761, 157766, 157775, 157780, 157785, 157790, 157795, 157800, 157807, + 157812, 157819, 157824, 157829, 157834, 157839, 157844, 157849, 157854, + 157859, 157864, 157869, 157874, 157879, 157884, 157889, 157894, 157899, + 157904, 157909, 157914, 157923, 157928, 157933, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 157938, 157946, 157954, 157962, 157970, 157978, 157986, 157994, + 158002, 158010, 158018, 158026, 158034, 158042, 158050, 158058, 158066, + 158074, 158082, 158087, 158092, 158097, 158102, 158107, 158111, 0, 0, 0, + 0, 0, 0, 0, 158115, 158119, 158124, 158129, 158134, 158138, 158143, + 158148, 158153, 158157, 158162, 158167, 158171, 158176, 158181, 158185, + 158190, 158195, 158199, 158204, 158209, 158213, 158218, 158223, 158228, + 158233, 158238, 158242, 158247, 158252, 158257, 158261, 158266, 158271, + 158276, 158280, 158285, 158290, 158294, 158299, 158304, 158308, 158313, + 158318, 158322, 158327, 158332, 158336, 158341, 158346, 158351, 158356, + 158361, 158365, 158370, 158375, 158380, 158384, 158389, 158394, 158399, + 158403, 158408, 158413, 158417, 158422, 158427, 158431, 158436, 158441, + 158445, 158450, 158455, 158459, 158464, 158469, 158474, 158479, 158484, + 158488, 158493, 158498, 158503, 158507, 158512, 0, 158517, 158521, + 158526, 158531, 158535, 158540, 158545, 158549, 158554, 158559, 158563, + 158568, 158573, 158577, 158582, 158587, 158592, 158597, 158602, 158607, + 158613, 158619, 158625, 158630, 158636, 158642, 158648, 158653, 158659, + 158665, 158670, 158676, 158682, 158687, 158693, 158699, 158704, 158710, + 158716, 158721, 158727, 158733, 158739, 158745, 158751, 158756, 158762, + 158768, 158774, 158779, 158785, 158791, 158797, 158802, 158808, 158814, + 158819, 158825, 158831, 158836, 158842, 158848, 158853, 158859, 158865, + 158870, 158876, 158882, 158888, 158894, 158900, 0, 158904, 158909, 0, 0, + 158914, 0, 0, 158919, 158924, 0, 0, 158929, 158934, 158938, 158943, 0, + 158948, 158953, 158958, 158962, 158967, 158972, 158977, 158982, 158987, + 158991, 158996, 159001, 0, 159006, 0, 159011, 159016, 159020, 159025, + 159030, 159034, 159039, 0, 159044, 159049, 159054, 159058, 159063, + 159068, 159072, 159077, 159082, 159087, 159092, 159097, 159102, 159108, + 159114, 159120, 159125, 159131, 159137, 159143, 159148, 159154, 159160, + 159165, 159171, 159177, 159182, 159188, 159194, 159199, 159205, 159211, + 159216, 159222, 159228, 159234, 159240, 159246, 159251, 159257, 159263, + 159269, 159274, 159280, 159286, 159292, 159297, 159303, 159309, 159314, + 159320, 159326, 159331, 159337, 159343, 159348, 159354, 159360, 159365, + 159371, 159377, 159383, 159389, 159395, 159400, 0, 159406, 159412, + 159417, 159423, 0, 0, 159429, 159435, 159441, 159446, 159452, 159458, + 159463, 159469, 0, 159475, 159481, 159487, 159492, 159498, 159504, + 159510, 0, 159516, 159521, 159527, 159533, 159539, 159544, 159550, + 159556, 159562, 159567, 159573, 159579, 159584, 159590, 159596, 159601, + 159607, 159613, 159618, 159624, 159630, 159635, 159641, 159647, 159653, + 159659, 159665, 159670, 0, 159676, 159682, 159687, 159693, 0, 159699, + 159704, 159710, 159716, 159721, 0, 159727, 0, 0, 0, 159732, 159738, + 159744, 159749, 159755, 159761, 159767, 0, 159773, 159778, 159784, + 159790, 159796, 159801, 159807, 159813, 159819, 159824, 159830, 159836, + 159841, 159847, 159853, 159858, 159864, 159870, 159875, 159881, 159887, + 159892, 159898, 159904, 159910, 159916, 159922, 159928, 159935, 159942, + 159949, 159955, 159962, 159969, 159976, 159982, 159989, 159996, 160002, + 160009, 160016, 160022, 160029, 160036, 160042, 160049, 160056, 160062, + 160069, 160076, 160083, 160090, 160097, 160103, 160110, 160117, 160124, + 160130, 160137, 160144, 160151, 160157, 160164, 160171, 160177, 160184, + 160191, 160197, 160204, 160211, 160217, 160224, 160231, 160237, 160244, + 160251, 160258, 160265, 160272, 160276, 160281, 160286, 160291, 160295, + 160300, 160305, 160310, 160314, 160319, 160324, 160328, 160333, 160338, + 160342, 160347, 160352, 160356, 160361, 160366, 160370, 160375, 160380, + 160385, 160390, 160395, 160399, 160404, 160409, 160414, 160418, 160423, + 160428, 160433, 160437, 160442, 160447, 160451, 160456, 160461, 160465, + 160470, 160475, 160479, 160484, 160489, 160493, 160498, 160503, 160508, + 160513, 160518, 160523, 160529, 160535, 160541, 160546, 160552, 160558, + 160564, 160569, 160575, 160581, 160586, 160592, 160598, 160603, 160609, + 160615, 160620, 160626, 160632, 160637, 160643, 160649, 160655, 160661, + 160667, 160672, 160678, 160684, 160690, 160695, 160701, 160707, 160713, + 160718, 160724, 160730, 160735, 160741, 160747, 160752, 160758, 160764, + 160769, 160775, 160781, 160786, 160792, 160798, 160804, 160810, 160816, + 160821, 160827, 160833, 160839, 160844, 160850, 160856, 160862, 160867, + 160873, 160879, 160884, 160890, 160896, 160901, 160907, 160913, 160918, + 160924, 160930, 160935, 160941, 160947, 160953, 160959, 160965, 160970, + 160976, 160982, 160988, 160993, 160999, 161005, 161011, 161016, 161022, + 161028, 161033, 161039, 161045, 161050, 161056, 161062, 161067, 161073, + 161079, 161084, 161090, 161096, 161102, 161108, 161114, 161120, 161127, + 161134, 161141, 161147, 161154, 161161, 161168, 161174, 161181, 161188, + 161194, 161201, 161208, 161214, 161221, 161228, 161234, 161241, 161248, + 161254, 161261, 161268, 161275, 161282, 161289, 161295, 161302, 161309, + 161316, 161322, 161329, 161336, 161343, 161349, 161356, 161363, 161369, + 161376, 161383, 161389, 161396, 161403, 161409, 161416, 161423, 161429, + 161436, 161443, 161450, 161457, 161464, 161469, 161475, 161481, 161487, + 161492, 161498, 161504, 161510, 161515, 161521, 161527, 161532, 161538, + 161544, 161549, 161555, 161561, 161566, 161572, 161578, 161583, 161589, + 161595, 161601, 161607, 161613, 161618, 161624, 161630, 161636, 161641, + 161647, 161653, 161659, 161664, 161670, 161676, 161681, 161687, 161693, + 161698, 161704, 161710, 161715, 161721, 161727, 161732, 161738, 161744, + 161750, 161756, 161762, 161768, 0, 0, 161775, 161780, 161785, 161790, + 161795, 161800, 161805, 161810, 161815, 161820, 161825, 161830, 161835, + 161840, 161845, 161850, 161855, 161860, 161866, 161871, 161876, 161881, + 161886, 161891, 161896, 161901, 161905, 161910, 161915, 161920, 161925, + 161930, 161935, 161940, 161945, 161950, 161955, 161960, 161965, 161970, + 161975, 161980, 161985, 161990, 161996, 162001, 162006, 162011, 162016, + 162021, 162026, 162031, 162037, 162042, 162047, 162052, 162057, 162062, + 162067, 162072, 162077, 162082, 162087, 162092, 162097, 162102, 162107, + 162112, 162117, 162122, 162127, 162132, 162137, 162142, 162147, 162152, + 162158, 162163, 162168, 162173, 162178, 162183, 162188, 162193, 162197, + 162202, 162207, 162212, 162217, 162222, 162227, 162232, 162237, 162242, + 162247, 162252, 162257, 162262, 162267, 162272, 162277, 162282, 162288, + 162293, 162298, 162303, 162308, 162313, 162318, 162323, 162329, 162334, + 162339, 162344, 162349, 162354, 162359, 162365, 162371, 162377, 162383, + 162389, 162395, 162401, 162407, 162413, 162419, 162425, 162431, 162437, + 162443, 162449, 162455, 162461, 162468, 162474, 162480, 162486, 162492, + 162498, 162504, 162510, 162515, 162521, 162527, 162533, 162539, 162545, + 162551, 162557, 162563, 162569, 162575, 162581, 162587, 162593, 162599, + 162605, 162611, 162617, 162624, 162630, 162636, 162642, 162648, 162654, + 162660, 162666, 162673, 162679, 162685, 162691, 162697, 162703, 162709, + 162715, 162721, 162727, 162733, 162739, 162745, 162751, 162757, 162763, + 162769, 162775, 162781, 162787, 162793, 162799, 162805, 162811, 162818, + 162824, 162830, 162836, 162842, 162848, 162854, 162860, 162865, 162871, + 162877, 162883, 162889, 162895, 162901, 162907, 162913, 162919, 162925, + 162931, 162937, 162943, 162949, 162955, 162961, 162967, 162974, 162980, + 162986, 162992, 162998, 163004, 163010, 163016, 163023, 163029, 163035, + 163041, 163047, 163053, 163059, 163066, 163073, 163080, 163087, 163094, + 163101, 163108, 163115, 163122, 163129, 163136, 163143, 163150, 163157, + 163164, 163171, 163178, 163186, 163193, 163200, 163207, 163214, 163221, + 163228, 163235, 163241, 163248, 163255, 163262, 163269, 163276, 163283, + 163290, 163297, 163304, 163311, 163318, 163325, 163332, 163339, 163346, + 163353, 163360, 163368, 163375, 163382, 163389, 163396, 163403, 163410, + 163417, 163425, 163432, 163439, 163446, 163453, 163460, 163467, 163472, + 0, 0, 163477, 163482, 163486, 163490, 163494, 163498, 163502, 163506, + 163510, 163514, 163518, 163524, 163529, 163534, 163539, 163544, 163549, + 163554, 163559, 163564, 163569, 163574, 163578, 163582, 163586, 163590, + 163594, 163598, 163602, 163606, 163610, 163616, 163621, 163626, 163631, + 163636, 163641, 163646, 163651, 163656, 163661, 163667, 163672, 163677, + 163682, 163687, 163692, 163697, 163702, 163707, 163712, 163716, 163721, + 163726, 163731, 163736, 163741, 163746, 163752, 163760, 163767, 163772, + 163777, 163784, 163790, 163795, 163801, 163807, 163815, 163821, 163828, + 163836, 163842, 163851, 163860, 163868, 163876, 163882, 163889, 163897, + 163905, 163911, 163918, 163927, 163936, 163943, 163954, 163964, 163974, + 163984, 163994, 164001, 164008, 164015, 164022, 164031, 164040, 164051, + 164062, 164071, 164080, 164091, 164100, 164109, 164120, 164129, 164138, + 164146, 164154, 164165, 164176, 164184, 164193, 164202, 164209, 164220, + 164231, 164240, 164249, 164256, 164265, 164274, 164283, 164294, 164303, + 164313, 164322, 164331, 164342, 164355, 164370, 164381, 164394, 164406, + 164415, 164426, 164437, 164446, 164457, 164471, 164486, 164489, 164498, + 164503, 164509, 164517, 164523, 164529, 164538, 164545, 164555, 164567, + 164574, 164577, 164583, 164590, 164596, 164601, 164604, 164609, 164612, + 164620, 164626, 164635, 164642, 164650, 164656, 164661, 164664, 164667, + 164670, 164676, 164683, 164689, 164694, 164702, 164705, 164710, 164718, + 164724, 164733, 164740, 164750, 164759, 164762, 164768, 164775, 164782, + 164789, 164794, 164802, 164810, 164819, 164825, 164834, 164843, 164852, + 164858, 164867, 164874, 164881, 164888, 164896, 164902, 164910, 164916, + 164923, 164930, 164938, 164949, 164959, 164965, 164972, 164979, 164986, + 164992, 164999, 165006, 165011, 165018, 165026, 165035, 165041, 165053, + 165064, 165070, 165078, 165084, 165091, 165098, 165105, 165111, 165118, + 165127, 165133, 165139, 165146, 165153, 165161, 165171, 165181, 165191, + 165201, 165209, 165217, 165227, 165235, 165240, 165245, 165250, 165256, + 165263, 165270, 165276, 165282, 165287, 165294, 165302, 165312, 165320, + 165328, 165338, 165348, 165356, 165366, 165376, 165388, 165400, 165412, + 165422, 165428, 165434, 165441, 165450, 165459, 165468, 165477, 165487, + 165496, 165505, 165514, 165519, 165525, 165534, 165544, 165553, 165559, + 165565, 165572, 165579, 165586, 165592, 165599, 165606, 165613, 165619, + 165623, 165628, 165635, 165642, 165649, 165654, 165662, 165670, 165679, + 165687, 165694, 165702, 165711, 165721, 165724, 165728, 165733, 165738, + 165743, 165748, 165753, 165758, 165763, 165768, 165773, 165778, 165783, + 165788, 165793, 165798, 165803, 165808, 165813, 165820, 165826, 165833, + 165839, 165844, 165851, 165857, 165864, 165870, 165875, 165882, 165889, + 165896, 165902, 165908, 165917, 165926, 165936, 165943, 165950, 165959, + 165968, 165977, 165986, 165995, 166001, 166009, 166015, 166025, 166030, + 166039, 166048, 166055, 166066, 166073, 166080, 166087, 166094, 166101, + 166108, 166115, 166122, 166129, 166136, 166142, 166148, 166154, 166161, + 166168, 166175, 166182, 166189, 166196, 166203, 166210, 166217, 166224, + 166231, 166238, 166243, 166252, 166261, 166270, 166277, 166284, 166291, + 166298, 166305, 166312, 166319, 166326, 166335, 166344, 166353, 166362, + 166371, 166380, 166389, 166398, 166407, 166416, 166425, 166434, 166443, + 166449, 166457, 166463, 166473, 166478, 166487, 166496, 166505, 166516, + 166521, 166528, 166535, 166542, 166547, 166553, 166559, 166565, 166572, + 166579, 166586, 166593, 166600, 166607, 166614, 166621, 166628, 166635, + 166642, 166649, 166654, 166663, 166672, 166681, 166690, 166699, 166708, + 166717, 166726, 166737, 166748, 166755, 166762, 166769, 166776, 166783, + 166790, 166798, 166808, 166818, 166828, 166839, 166850, 166861, 166870, + 166879, 166888, 166893, 166898, 166903, 166908, 166919, 166930, 166941, + 166952, 166963, 166973, 166984, 166993, 167002, 167011, 167020, 167029, + 167037, 167046, 167057, 167068, 167079, 167090, 167101, 167113, 167126, + 167138, 167151, 167163, 167176, 167188, 167201, 167212, 167223, 167232, + 167240, 167249, 167260, 167271, 167283, 167296, 167310, 167325, 167337, + 167350, 167362, 167375, 167386, 167397, 167406, 167414, 167423, 167430, + 167437, 167444, 167451, 167458, 167465, 167472, 167479, 167486, 167493, + 167498, 167503, 167508, 167515, 167525, 167536, 167546, 167557, 167571, + 167586, 167601, 167615, 167630, 167645, 167656, 167667, 167680, 167693, + 167702, 167711, 167724, 167737, 167744, 167751, 167756, 167761, 167766, + 167771, 167776, 167783, 167792, 167797, 167800, 167805, 167812, 167819, + 167826, 167833, 167840, 167847, 167860, 167874, 167889, 167896, 167903, + 167910, 167919, 167927, 167935, 167944, 167949, 167954, 167959, 167964, + 167969, 167974, 167981, 167988, 167994, 168001, 168007, 168014, 168019, + 168024, 168029, 168034, 168039, 168046, 168053, 168058, 168065, 168072, + 168077, 168082, 168087, 168092, 168097, 168102, 168109, 168116, 168123, + 168126, 168131, 168136, 168141, 168146, 168153, 168160, 168168, 168176, + 168181, 168186, 168193, 168200, 168207, 168212, 168219, 168226, 168231, + 168238, 168245, 168252, 168259, 168266, 168273, 168282, 168291, 168298, + 168307, 168316, 168321, 168328, 168335, 168340, 168347, 168354, 168361, + 168368, 168375, 168380, 168387, 168394, 168403, 168410, 168419, 168430, + 168439, 168448, 168457, 168466, 168469, 168474, 168481, 168490, 168497, + 168506, 168513, 168518, 168523, 168526, 168529, 168532, 168539, 168546, + 168555, 168564, 168573, 168580, 168587, 168592, 168604, 168609, 168614, + 168619, 168624, 168629, 168634, 168639, 168644, 168647, 168652, 168657, + 168662, 168667, 168672, 168679, 168684, 168691, 168694, 168699, 168702, + 168705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168708, 168713, + 168718, 168723, 168728, 0, 168733, 168738, 168743, 168748, 168753, + 168758, 168763, 168768, 168773, 168778, 168783, 168788, 168793, 168798, + 168803, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168764, 168774, 168782, 168789, 168796, - 168805, 168814, 168823, 168830, 168844, 168856, 168866, 168874, 168886, - 168895, 168906, 168915, 168922, 168930, 168941, 168953, 168962, 168972, - 168984, 168995, 169004, 169015, 169027, 169035, 169046, 169055, 0, 0, 0, - 0, 0, 0, 169063, 169073, 169083, 169093, 169103, 169113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168808, 168818, 168826, 168833, 168840, + 168849, 168858, 168867, 168874, 168888, 168900, 168910, 168918, 168930, + 168939, 168950, 168959, 168966, 168974, 168985, 168997, 169006, 169016, + 169028, 169039, 169048, 169059, 169071, 169079, 169090, 169099, 0, 0, 0, + 0, 0, 0, 169107, 169117, 169127, 169137, 169147, 169157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 169123, 169128, 169133, 169138, 169143, 169148, - 169153, 0, 169158, 169163, 169168, 169174, 169178, 169183, 169188, - 169193, 169198, 169203, 169208, 169213, 169218, 169223, 169228, 169233, - 169238, 0, 0, 169243, 169248, 169253, 169258, 169263, 169268, 169273, 0, - 169278, 169283, 0, 169289, 169294, 169302, 169309, 169318, 0, 0, 0, 0, 0, - 169323, 169328, 169334, 169340, 169346, 169352, 169358, 169364, 169370, - 169375, 169380, 169386, 169392, 169397, 169403, 169409, 169415, 169421, - 169426, 169432, 169437, 169443, 169449, 169455, 169461, 169466, 169472, - 169478, 169484, 169491, 169497, 169504, 169511, 169517, 169523, 169530, - 169537, 169544, 169551, 169558, 169565, 169572, 169578, 169584, 169591, - 169597, 169604, 169611, 169617, 169624, 169630, 169637, 169644, 169651, - 169659, 169666, 169676, 169684, 169691, 169698, 169707, 169718, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 169167, 169172, 169177, 169182, 169187, 169192, + 169197, 0, 169202, 169207, 169212, 169218, 169222, 169227, 169232, + 169237, 169242, 169247, 169252, 169257, 169262, 169267, 169272, 169277, + 169282, 0, 0, 169287, 169292, 169297, 169302, 169307, 169312, 169317, 0, + 169322, 169327, 0, 169333, 169338, 169346, 169353, 169362, 0, 0, 0, 0, 0, + 169367, 169372, 169378, 169384, 169390, 169396, 169402, 169408, 169414, + 169419, 169424, 169430, 169436, 169441, 169447, 169453, 169459, 169465, + 169470, 169476, 169481, 169487, 169493, 169499, 169505, 169510, 169516, + 169522, 169528, 169535, 169541, 169548, 169555, 169561, 169567, 169574, + 169581, 169588, 169595, 169602, 169609, 169616, 169622, 169628, 169635, + 169641, 169648, 169655, 169661, 169668, 169674, 169681, 169688, 169695, + 169703, 169710, 169720, 169728, 169735, 169742, 169751, 169762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 169727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 169771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 169734, 169741, 169749, 169757, 169765, 169772, 169779, 169787, 169795, - 169803, 169810, 169817, 169825, 169833, 169841, 169848, 169856, 169864, - 169872, 169880, 169888, 169896, 169904, 169911, 169919, 169926, 169934, - 169941, 169949, 169957, 169965, 169973, 169981, 169989, 169997, 170005, - 170013, 170020, 170028, 170035, 170042, 170049, 170057, 170064, 170072, - 0, 0, 0, 170080, 170087, 170094, 170101, 170108, 170115, 170122, 170129, - 170138, 170147, 170156, 170165, 170174, 170184, 0, 0, 170192, 170200, - 170207, 170214, 170221, 170228, 170235, 170242, 170249, 170256, 0, 0, 0, - 0, 170263, 170272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 169778, 169785, 169793, 169801, 169809, 169816, 169823, 169831, 169839, + 169847, 169854, 169861, 169869, 169877, 169885, 169892, 169900, 169908, + 169916, 169924, 169932, 169940, 169948, 169955, 169963, 169970, 169978, + 169985, 169993, 170001, 170009, 170017, 170025, 170033, 170041, 170049, + 170057, 170064, 170072, 170079, 170086, 170093, 170101, 170108, 170116, + 0, 0, 0, 170124, 170131, 170138, 170145, 170152, 170159, 170166, 170173, + 170182, 170191, 170200, 170209, 170218, 170228, 0, 0, 170236, 170244, + 170251, 170258, 170265, 170272, 170279, 170286, 170293, 170300, 0, 0, 0, + 0, 170307, 170316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170280, - 170284, 170289, 170294, 170299, 170303, 170308, 170312, 170316, 170321, - 170325, 170330, 170334, 170339, 170344, 170348, 170352, 170356, 170360, - 170366, 170371, 170378, 170382, 170386, 170392, 170397, 170404, 170408, - 170413, 170420, 170424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 170431, 170436, 170440, 170445, 170450, 170455, 170460, 170464, - 170469, 170473, 170477, 170481, 170486, 170491, 170496, 170500, 170505, - 170510, 170515, 170520, 170525, 170529, 170533, 170538, 170542, 170546, - 170551, 170555, 170559, 170563, 170568, 170572, 170577, 170582, 170587, - 170592, 170597, 170602, 170607, 170612, 170617, 170622, 170627, 170632, - 170637, 170642, 170647, 170652, 170657, 170662, 170666, 170670, 170674, - 170678, 170682, 170686, 170690, 170694, 0, 0, 0, 0, 0, 170698, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170324, + 170328, 170333, 170338, 170343, 170347, 170352, 170356, 170360, 170365, + 170369, 170374, 170378, 170383, 170388, 170392, 170396, 170400, 170404, + 170410, 170415, 170422, 170426, 170430, 170436, 170441, 170448, 170452, + 170457, 170464, 170468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 170475, 170480, 170484, 170489, 170494, 170499, 170504, 170508, + 170513, 170517, 170521, 170525, 170530, 170535, 170540, 170544, 170549, + 170554, 170559, 170564, 170569, 170573, 170577, 170582, 170586, 170590, + 170595, 170599, 170603, 170607, 170612, 170616, 170621, 170626, 170631, + 170636, 170641, 170646, 170651, 170656, 170661, 170666, 170671, 170676, + 170681, 170686, 170691, 170696, 170701, 170706, 170710, 170714, 170718, + 170722, 170726, 170730, 170734, 170738, 0, 0, 0, 0, 0, 170742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 170703, 170709, 170716, 170723, 170730, 170737, 170743, - 170750, 170757, 170764, 170771, 170777, 170784, 170791, 170798, 170805, - 170811, 170818, 170825, 170832, 170839, 170845, 170852, 170859, 170866, - 170873, 170880, 170887, 170894, 170901, 170908, 170915, 170922, 170929, - 170935, 170941, 170947, 170953, 170959, 170965, 170971, 170977, 0, 0, 0, + 0, 0, 0, 0, 0, 170747, 170753, 170760, 170767, 170774, 170781, 170787, + 170794, 170801, 170808, 170815, 170821, 170828, 170835, 170842, 170849, + 170855, 170862, 170869, 170876, 170883, 170889, 170896, 170903, 170910, + 170917, 170924, 170931, 170938, 170945, 170952, 170959, 170966, 170973, + 170979, 170985, 170991, 170997, 171003, 171009, 171015, 171021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 170983, 170987, 170991, 170995, 170999, 171003, 171007, 0, - 171011, 171017, 171021, 171025, 0, 171029, 171035, 0, 171041, 171047, - 171053, 171059, 171065, 171071, 171077, 171083, 171089, 171095, 171101, - 171107, 171113, 171119, 171125, 0, 171131, 171138, 171144, 171151, - 171158, 171165, 171172, 171179, 171186, 171193, 171200, 171207, 171214, - 171221, 171228, 171235, 171242, 171249, 171256, 171263, 171270, 171277, - 171284, 171291, 171298, 171305, 171312, 171319, 171326, 171333, 171340, - 171347, 171354, 171361, 171368, 171374, 171380, 171386, 171393, 171399, - 171406, 171412, 171419, 171426, 171433, 171440, 171447, 171454, 171460, - 171467, 171474, 171481, 171488, 171495, 171502, 171509, 171515, 171522, - 171529, 171536, 171543, 171550, 171558, 171565, 171572, 171579, 171586, - 171593, 171600, 171607, 171614, 171621, 171628, 171635, 171642, 171648, - 171655, 171662, 171669, 171676, 171683, 171690, 171697, 171705, 171712, - 171718, 171725, 171732, 171739, 171746, 171753, 171760, 171767, 171774, - 171781, 171788, 171795, 171802, 171809, 171816, 171823, 171830, 171837, - 171844, 171851, 171858, 171864, 171871, 171878, 171885, 171892, 171899, - 171906, 171913, 171920, 171927, 171934, 171941, 171948, 171955, 171962, - 171969, 171976, 171983, 171990, 171997, 172004, 172011, 172018, 172026, - 172034, 172042, 172049, 172056, 172063, 172070, 172077, 172084, 172091, - 172098, 172105, 172112, 172118, 172125, 172132, 172139, 172146, 172153, - 172160, 172167, 172174, 172181, 172188, 172195, 172202, 172209, 172216, - 172224, 172232, 172240, 172247, 172254, 172261, 172268, 172275, 172282, - 172289, 172296, 172303, 172310, 172317, 172324, 172331, 172338, 172344, - 172351, 172358, 172365, 172372, 172379, 172386, 172393, 172400, 172407, - 172414, 172421, 172428, 172435, 172442, 172449, 172456, 172463, 172470, - 172477, 172484, 172491, 172498, 0, 0, 172505, 172509, 172513, 172517, - 172521, 172525, 172529, 172533, 172537, 172541, 172547, 172553, 172559, - 172565, 172573, 172581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 171027, 171031, 171035, 171039, 171043, 171047, 171051, 0, + 171055, 171061, 171065, 171069, 0, 171073, 171079, 0, 171085, 171091, + 171097, 171103, 171109, 171115, 171121, 171127, 171133, 171139, 171145, + 171151, 171157, 171163, 171169, 0, 171175, 171182, 171188, 171195, + 171202, 171209, 171216, 171223, 171230, 171237, 171244, 171251, 171258, + 171265, 171272, 171279, 171286, 171293, 171300, 171307, 171314, 171321, + 171328, 171335, 171342, 171349, 171356, 171363, 171370, 171377, 171384, + 171391, 171398, 171405, 171412, 171418, 171424, 171430, 171437, 171443, + 171450, 171456, 171463, 171470, 171477, 171484, 171491, 171498, 171504, + 171511, 171518, 171525, 171532, 171539, 171546, 171553, 171559, 171566, + 171573, 171580, 171587, 171594, 171602, 171609, 171616, 171623, 171630, + 171637, 171644, 171651, 171658, 171665, 171672, 171679, 171686, 171692, + 171699, 171706, 171713, 171720, 171727, 171734, 171741, 171749, 171756, + 171762, 171769, 171776, 171783, 171790, 171797, 171804, 171811, 171818, + 171825, 171832, 171839, 171846, 171853, 171860, 171867, 171874, 171881, + 171888, 171895, 171902, 171908, 171915, 171922, 171929, 171936, 171943, + 171950, 171957, 171964, 171971, 171978, 171985, 171992, 171999, 172006, + 172013, 172020, 172027, 172034, 172041, 172048, 172055, 172062, 172070, + 172078, 172086, 172093, 172100, 172107, 172114, 172121, 172128, 172135, + 172142, 172149, 172156, 172162, 172169, 172176, 172183, 172190, 172197, + 172204, 172211, 172218, 172225, 172232, 172239, 172246, 172253, 172260, + 172268, 172276, 172284, 172291, 172298, 172305, 172312, 172319, 172326, + 172333, 172340, 172347, 172354, 172361, 172368, 172375, 172382, 172388, + 172395, 172402, 172409, 172416, 172423, 172430, 172437, 172444, 172451, + 172458, 172465, 172472, 172479, 172486, 172493, 172500, 172507, 172514, + 172521, 172528, 172535, 172542, 0, 0, 172549, 172553, 172557, 172561, + 172565, 172569, 172573, 172577, 172581, 172585, 172591, 172597, 172603, + 172609, 172617, 172625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 172587, 172593, 172599, 172605, 172611, 172617, 172623, 172629, - 172635, 172640, 172645, 172651, 172656, 172661, 172667, 172673, 172679, - 172685, 172691, 172696, 172701, 172707, 172713, 172718, 172724, 172730, - 172736, 172742, 172748, 172754, 172760, 172766, 172772, 172778, 172784, - 172790, 172796, 172802, 172808, 172814, 172820, 172826, 172832, 172837, - 172842, 172848, 172853, 172858, 172864, 172870, 172876, 172882, 172888, - 172893, 172898, 172904, 172910, 172915, 172921, 172927, 172933, 172939, - 172945, 172951, 172957, 172963, 172969, 172975, 172981, 172987, 172992, - 172997, 173001, 173006, 173013, 173017, 0, 0, 0, 0, 173022, 173027, - 173031, 173035, 173039, 173043, 173047, 173051, 173055, 173059, 0, 0, 0, - 0, 173063, 173069, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 172631, 172637, 172643, 172649, 172655, 172661, 172667, 172673, + 172679, 172684, 172689, 172695, 172700, 172705, 172711, 172717, 172723, + 172729, 172735, 172740, 172745, 172751, 172757, 172762, 172768, 172774, + 172780, 172786, 172792, 172798, 172804, 172810, 172816, 172822, 172828, + 172834, 172840, 172846, 172852, 172858, 172864, 172870, 172876, 172881, + 172886, 172892, 172897, 172902, 172908, 172914, 172920, 172926, 172932, + 172937, 172942, 172948, 172954, 172959, 172965, 172971, 172977, 172983, + 172989, 172995, 173001, 173007, 173013, 173019, 173025, 173031, 173036, + 173041, 173045, 173050, 173057, 173061, 0, 0, 0, 0, 173066, 173071, + 173075, 173079, 173083, 173087, 173091, 173095, 173099, 173103, 0, 0, 0, + 0, 173107, 173113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 173075, 173080, 173085, 173090, 173095, 173100, - 173105, 173110, 173115, 173120, 173126, 173132, 173138, 173144, 173150, - 173156, 173162, 173168, 173174, 173181, 173188, 173195, 173203, 173211, - 173219, 173227, 173235, 173243, 173249, 173255, 173261, 173268, 173275, - 173282, 173289, 173296, 173303, 173310, 173317, 173324, 173331, 173338, - 173345, 173352, 173359, 173366, 173372, 173378, 173384, 173390, 173396, - 173403, 173410, 173417, 173424, 173431, 173438, 173445, 173452, 173459, - 173464, 173472, 173480, 173488, 173494, 173501, 173508, 173517, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 173119, 173124, 173129, 173134, 173139, 173144, + 173149, 173154, 173159, 173164, 173170, 173176, 173182, 173188, 173194, + 173200, 173206, 173212, 173218, 173225, 173232, 173239, 173247, 173255, + 173263, 173271, 173279, 173287, 173293, 173299, 173305, 173312, 173319, + 173326, 173333, 173340, 173347, 173354, 173361, 173368, 173375, 173382, + 173389, 173396, 173403, 173410, 173416, 173422, 173428, 173434, 173440, + 173447, 173454, 173461, 173468, 173475, 173482, 173489, 173496, 173503, + 173508, 173516, 173524, 173532, 173538, 173545, 173552, 173561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 173525, 173530, 173535, 173540, 173545, 173550, 173555, 173560, - 173565, 173570, 173576, 173582, 173588, 173594, 173600, 173606, 173612, - 173618, 173624, 173631, 173638, 173645, 173653, 173661, 173669, 173677, - 173685, 173693, 173699, 173705, 173711, 173718, 173725, 173732, 173739, - 173746, 173753, 173760, 173767, 173774, 173781, 173788, 173795, 173802, - 173809, 173816, 173821, 173828, 173835, 173842, 173849, 173856, 173863, - 173870, 173877, 173885, 173895, 173905, 173913, 173922, 173930, 0, 0, 0, + 0, 173569, 173574, 173579, 173584, 173589, 173594, 173599, 173604, + 173609, 173614, 173620, 173626, 173632, 173638, 173644, 173650, 173656, + 173662, 173668, 173675, 173682, 173689, 173697, 173705, 173713, 173721, + 173729, 173737, 173743, 173749, 173755, 173762, 173769, 173776, 173783, + 173790, 173797, 173804, 173811, 173818, 173825, 173832, 173839, 173846, + 173853, 173860, 173865, 173872, 173879, 173886, 173893, 173900, 173907, + 173914, 173921, 173929, 173939, 173949, 173957, 173966, 173974, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173938, 173942, 173946, - 173950, 0, 173954, 173958, 173962, 173966, 173970, 173974, 173978, - 173982, 173986, 173990, 173994, 173998, 174002, 174006, 174010, 174014, - 174018, 174022, 174026, 174030, 174034, 174038, 174042, 174046, 174052, - 174058, 174064, 0, 174070, 174075, 0, 174080, 0, 0, 174085, 0, 174090, - 174095, 174100, 174105, 174110, 174115, 174120, 174125, 174130, 174135, - 0, 174140, 174145, 174150, 174155, 0, 174160, 0, 174165, 0, 0, 0, 0, 0, - 0, 174170, 0, 0, 0, 0, 174176, 0, 174182, 0, 174188, 0, 174194, 174200, - 174206, 0, 174212, 174218, 0, 174224, 0, 0, 174230, 0, 174236, 0, 174242, - 0, 174248, 0, 174256, 0, 174264, 174270, 0, 174276, 0, 0, 174282, 174288, - 174294, 174300, 0, 174306, 174312, 174318, 174324, 174330, 174336, - 174342, 0, 174348, 174354, 174360, 174366, 0, 174372, 174378, 174384, - 174390, 0, 174398, 0, 174406, 174412, 174418, 174424, 174430, 174436, - 174442, 174448, 174454, 174460, 0, 174466, 174472, 174478, 174484, - 174490, 174496, 174502, 174508, 174514, 174520, 174526, 174532, 174538, - 174544, 174550, 174556, 174562, 0, 0, 0, 0, 0, 174568, 174574, 174580, 0, - 174586, 174592, 174598, 174604, 174610, 0, 174616, 174622, 174628, - 174634, 174640, 174646, 174652, 174658, 174664, 174670, 174676, 174682, - 174688, 174694, 174700, 174706, 174712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173982, 173986, 173990, + 173994, 0, 173998, 174002, 174006, 174010, 174014, 174018, 174022, + 174026, 174030, 174034, 174038, 174042, 174046, 174050, 174054, 174058, + 174062, 174066, 174070, 174074, 174078, 174082, 174086, 174090, 174096, + 174102, 174108, 0, 174114, 174119, 0, 174124, 0, 0, 174129, 0, 174134, + 174139, 174144, 174149, 174154, 174159, 174164, 174169, 174174, 174179, + 0, 174184, 174189, 174194, 174199, 0, 174204, 0, 174209, 0, 0, 0, 0, 0, + 0, 174214, 0, 0, 0, 0, 174220, 0, 174226, 0, 174232, 0, 174238, 174244, + 174250, 0, 174256, 174262, 0, 174268, 0, 0, 174274, 0, 174280, 0, 174286, + 0, 174292, 0, 174300, 0, 174308, 174314, 0, 174320, 0, 0, 174326, 174332, + 174338, 174344, 0, 174350, 174356, 174362, 174368, 174374, 174380, + 174386, 0, 174392, 174398, 174404, 174410, 0, 174416, 174422, 174428, + 174434, 0, 174442, 0, 174450, 174456, 174462, 174468, 174474, 174480, + 174486, 174492, 174498, 174504, 0, 174510, 174516, 174522, 174528, + 174534, 174540, 174546, 174552, 174558, 174564, 174570, 174576, 174582, + 174588, 174594, 174600, 174606, 0, 0, 0, 0, 0, 174612, 174618, 174624, 0, + 174630, 174636, 174642, 174648, 174654, 0, 174660, 174666, 174672, + 174678, 174684, 174690, 174696, 174702, 174708, 174714, 174720, 174726, + 174732, 174738, 174744, 174750, 174756, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174718, 174728, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174736, 174743, 174750, 174757, - 174763, 174770, 174777, 174783, 174790, 174797, 174804, 174812, 174820, - 174828, 174836, 174844, 174852, 174859, 174866, 174873, 174881, 174889, - 174897, 174905, 174913, 174921, 174928, 174935, 174942, 174950, 174958, - 174966, 174974, 174982, 174990, 174995, 175000, 175005, 175010, 175015, - 175020, 175025, 175030, 175035, 0, 0, 0, 0, 175040, 175047, 175052, - 175057, 175062, 175067, 175072, 175077, 175082, 175087, 175092, 175097, - 175102, 175107, 175112, 175117, 175122, 175127, 175132, 175137, 175142, - 175147, 175152, 175157, 175162, 175167, 175172, 175177, 175182, 175187, - 175192, 175197, 175202, 175207, 175212, 175217, 175222, 175227, 175232, - 175237, 175242, 175247, 175252, 175257, 175262, 175267, 175272, 175277, - 175282, 175287, 175292, 175298, 175303, 175308, 175313, 175318, 175323, - 175328, 175333, 175338, 175343, 175348, 175353, 175358, 175363, 175368, - 175373, 175378, 175383, 175388, 175393, 175398, 175403, 175408, 175413, - 175418, 175423, 175428, 175433, 175438, 175443, 175448, 175453, 175458, - 175463, 175468, 175473, 175478, 175483, 175488, 175493, 175498, 175503, - 175508, 175513, 175518, 175523, 175528, 175533, 175538, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 175543, 175549, 175558, 175566, 175574, 175583, 175592, - 175601, 175610, 175619, 175628, 175637, 175646, 175655, 175664, 0, 0, - 175673, 175682, 175690, 175698, 175707, 175716, 175725, 175734, 175743, - 175752, 175761, 175770, 175779, 175788, 175797, 0, 175805, 175814, - 175822, 175830, 175839, 175848, 175857, 175866, 175875, 175884, 175893, - 175902, 175911, 175920, 175929, 0, 175936, 175945, 175953, 175961, - 175970, 175979, 175988, 175997, 176006, 176015, 176024, 176033, 176042, - 176051, 176060, 176067, 176073, 176079, 176085, 176091, 176097, 176103, - 176109, 176115, 176121, 176127, 176133, 176139, 176145, 176151, 176157, - 176163, 176169, 176175, 176181, 176187, 176193, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176199, 176206, 176211, 176215, 176219, 176223, 176228, 176233, - 176238, 176243, 176248, 176253, 176260, 176269, 176275, 176279, 176288, - 176293, 176299, 176305, 176311, 176316, 176322, 176328, 176334, 176339, - 176345, 176351, 176356, 176362, 176368, 176373, 176379, 176385, 176390, - 176396, 176402, 176407, 176413, 176419, 176425, 176431, 176437, 176448, - 176455, 176461, 176464, 176467, 176470, 176475, 176481, 176487, 176493, - 176498, 176504, 176510, 176516, 176521, 176527, 176533, 176538, 176544, - 176550, 176555, 176561, 176567, 176572, 176578, 176584, 176589, 176595, - 176601, 176607, 176613, 176619, 176622, 176625, 176628, 176631, 176634, - 176637, 176644, 176652, 176660, 176668, 176675, 176683, 176691, 176699, - 176706, 176714, 176722, 176729, 176737, 176745, 176752, 176760, 176768, - 176775, 176783, 176791, 176798, 176806, 176814, 176822, 176830, 176838, - 176843, 176848, 176853, 176856, 176864, 176869, 176876, 176884, 176892, - 176900, 176907, 176915, 176923, 176931, 176938, 176946, 176954, 176961, - 176969, 176977, 176984, 176992, 177000, 177007, 177015, 177023, 177030, - 177038, 177046, 177054, 177062, 177070, 177080, 177085, 177089, 177093, - 177098, 177103, 177106, 177109, 177112, 177115, 177118, 177121, 177124, - 177127, 177130, 177136, 177139, 177143, 177148, 177152, 177157, 177162, - 177168, 177174, 177180, 177185, 177193, 177199, 177202, 177205, 177208, - 177211, 177214, 177217, 177220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174762, 174772, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174780, 174787, 174794, 174801, + 174807, 174814, 174821, 174827, 174834, 174841, 174848, 174856, 174864, + 174872, 174880, 174888, 174896, 174903, 174910, 174917, 174925, 174933, + 174941, 174949, 174957, 174965, 174972, 174979, 174986, 174994, 175002, + 175010, 175018, 175026, 175034, 175039, 175044, 175049, 175054, 175059, + 175064, 175069, 175074, 175079, 0, 0, 0, 0, 175084, 175091, 175096, + 175101, 175106, 175111, 175116, 175121, 175126, 175131, 175136, 175141, + 175146, 175151, 175156, 175161, 175166, 175171, 175176, 175181, 175186, + 175191, 175196, 175201, 175206, 175211, 175216, 175221, 175226, 175231, + 175236, 175241, 175246, 175251, 175256, 175261, 175266, 175271, 175276, + 175281, 175286, 175291, 175296, 175301, 175306, 175311, 175316, 175321, + 175326, 175331, 175336, 175342, 175347, 175352, 175357, 175362, 175367, + 175372, 175377, 175382, 175387, 175392, 175397, 175402, 175407, 175412, + 175417, 175422, 175427, 175432, 175437, 175442, 175447, 175452, 175457, + 175462, 175467, 175472, 175477, 175482, 175487, 175492, 175497, 175502, + 175507, 175512, 175517, 175522, 175527, 175532, 175537, 175542, 175547, + 175552, 175557, 175562, 175567, 175572, 175577, 175582, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 175587, 175593, 175602, 175610, 175618, 175627, 175636, + 175645, 175654, 175663, 175672, 175681, 175690, 175699, 175708, 0, 0, + 175717, 175726, 175734, 175742, 175751, 175760, 175769, 175778, 175787, + 175796, 175805, 175814, 175823, 175832, 175841, 0, 175849, 175858, + 175866, 175874, 175883, 175892, 175901, 175910, 175919, 175928, 175937, + 175946, 175955, 175964, 175973, 0, 175980, 175989, 175997, 176005, + 176014, 176023, 176032, 176041, 176050, 176059, 176068, 176077, 176086, + 176095, 176104, 176111, 176117, 176123, 176129, 176135, 176141, 176147, + 176153, 176159, 176165, 176171, 176177, 176183, 176189, 176195, 176201, + 176207, 176213, 176219, 176225, 176231, 176237, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 176243, 176250, 176255, 176259, 176263, 176267, 176272, 176277, + 176282, 176287, 176292, 176297, 176304, 176313, 176319, 176323, 176332, + 176337, 176343, 176349, 176355, 176360, 176366, 176372, 176378, 176383, + 176389, 176395, 176400, 176406, 176412, 176417, 176423, 176429, 176434, + 176440, 176446, 176451, 176457, 176463, 176469, 176475, 176481, 176492, + 176499, 176505, 176508, 176511, 176514, 176519, 176525, 176531, 176537, + 176542, 176548, 176554, 176560, 176565, 176571, 176577, 176582, 176588, + 176594, 176599, 176605, 176611, 176616, 176622, 176628, 176633, 176639, + 176645, 176651, 176657, 176663, 176666, 176669, 176672, 176675, 176678, + 176681, 176688, 176696, 176704, 176712, 176719, 176727, 176735, 176743, + 176750, 176758, 176766, 176773, 176781, 176789, 176796, 176804, 176812, + 176819, 176827, 176835, 176842, 176850, 176858, 176866, 176874, 176882, + 176887, 176892, 176897, 176900, 176908, 176913, 176920, 176928, 176936, + 176944, 176951, 176959, 176967, 176975, 176982, 176990, 176998, 177005, + 177013, 177021, 177028, 177036, 177044, 177051, 177059, 177067, 177074, + 177082, 177090, 177098, 177106, 177114, 177124, 177129, 177133, 177137, + 177142, 177147, 177150, 177153, 177156, 177159, 177162, 177165, 177168, + 177171, 177174, 177180, 177183, 177187, 177192, 177196, 177201, 177206, + 177212, 177218, 177224, 177229, 177237, 177243, 177246, 177249, 177252, + 177255, 177258, 177261, 177264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177225, 177232, - 177240, 177248, 177256, 177263, 177271, 177279, 177287, 177294, 177302, - 177310, 177317, 177325, 177333, 177340, 177348, 177356, 177363, 177371, - 177379, 177386, 177394, 177402, 177410, 177418, 177426, 177431, 177435, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177438, 177444, 177450, 177456, - 177460, 177466, 177472, 177478, 177484, 177490, 177496, 177502, 177508, - 177514, 177520, 177526, 177532, 177538, 177544, 177550, 177556, 177562, - 177568, 177574, 177580, 177586, 177592, 177598, 177604, 177610, 177616, - 177622, 177628, 177634, 177640, 177646, 177652, 177658, 177664, 177670, - 177676, 177682, 177688, 177694, 0, 0, 0, 0, 177700, 177711, 177722, - 177733, 177744, 177755, 177766, 177777, 177788, 0, 0, 0, 0, 0, 0, 0, - 177799, 177804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177809, 177815, - 177821, 177827, 177833, 177839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177845, 177847, 177849, 177853, - 177858, 177863, 177865, 177871, 177876, 177878, 177884, 177888, 177890, - 177894, 177900, 177906, 177912, 177917, 177922, 177929, 177936, 177943, - 177948, 177955, 177962, 177969, 177973, 177980, 177989, 177998, 178005, - 178010, 178014, 178018, 178020, 178023, 178026, 178033, 178040, 178050, - 178055, 178060, 178065, 178070, 178072, 178078, 178082, 178084, 178086, - 178088, 178090, 178094, 178098, 178102, 178104, 178108, 178110, 178114, - 178116, 178118, 178120, 178122, 178127, 178132, 178134, 178140, 178144, - 178148, 178156, 178158, 178160, 178162, 178164, 178166, 178168, 178170, - 178172, 178174, 178176, 178180, 178184, 178186, 178188, 178190, 178192, - 178194, 178199, 178205, 178209, 178213, 178217, 178221, 178226, 178230, - 178232, 178234, 178238, 178244, 178246, 178248, 178250, 178254, 178263, - 178269, 178273, 178277, 178279, 178281, 178284, 178286, 178288, 178290, - 178294, 178296, 178300, 178305, 178307, 178312, 178318, 178325, 178329, - 178333, 178337, 178341, 178347, 178351, 178359, 178366, 178368, 178370, - 178374, 178378, 178380, 178384, 178388, 178390, 178394, 178396, 178400, - 178404, 178408, 178412, 178416, 178420, 178424, 178428, 178434, 178438, - 178442, 178453, 178458, 178462, 178466, 178472, 178476, 178480, 178484, - 178491, 178498, 178502, 178506, 178510, 178514, 178518, 178525, 178527, - 178531, 178533, 178535, 178539, 178543, 178547, 178549, 178553, 178557, - 178561, 178565, 178569, 178571, 178575, 178577, 178583, 178586, 178591, - 178593, 178595, 178598, 178600, 178602, 178605, 178612, 178619, 178626, - 178631, 178635, 178637, 178639, 178641, 178645, 178647, 178651, 178655, - 178659, 178661, 178665, 178667, 178671, 178675, 178682, 178684, 178693, - 178702, 178711, 178717, 178719, 178724, 178728, 178732, 178734, 178740, - 178744, 178746, 178750, 178754, 178756, 178760, 178765, 178769, 178775, - 178781, 178783, 178785, 178791, 178793, 178797, 178801, 178803, 178807, - 178809, 178813, 178817, 178821, 178824, 178827, 178832, 178837, 178839, - 178842, 178844, 178851, 178855, 178857, 178864, 178871, 178878, 178885, - 178892, 178894, 178896, 178898, 178902, 178904, 178906, 178908, 178910, - 178912, 178914, 178916, 178918, 178920, 178922, 178924, 178926, 178928, - 178930, 178932, 178934, 178936, 178938, 178940, 178942, 178944, 178946, - 178950, 178952, 178954, 178956, 178960, 178962, 178966, 178968, 178970, - 178974, 178978, 178984, 178986, 178988, 178990, 178992, 178996, 179000, - 179002, 179006, 179010, 179014, 179018, 179022, 179026, 179030, 179034, - 179038, 179042, 179046, 179050, 179054, 179058, 179062, 179066, 179070, - 179074, 179076, 179078, 179080, 179082, 179084, 179086, 179088, 179096, - 179104, 179112, 179120, 179125, 179130, 179135, 179139, 179143, 179148, - 179153, 179155, 179159, 179161, 179163, 179165, 179167, 179169, 179171, - 179173, 179177, 179179, 179181, 179183, 179187, 179191, 179195, 179199, - 179203, 179205, 179211, 179217, 179219, 179221, 179223, 179225, 179227, - 179236, 179243, 179250, 179254, 179261, 179266, 179273, 179282, 179287, - 179291, 179295, 179297, 179301, 179303, 179307, 179311, 179313, 179317, - 179321, 179325, 179327, 179329, 179335, 179337, 179339, 179341, 179345, - 179349, 179351, 179355, 179357, 179359, 179362, 179366, 179368, 179372, - 179374, 179376, 179381, 179383, 179387, 179391, 179394, 179398, 179402, - 179406, 179410, 179414, 179418, 179422, 179427, 179431, 179435, 179444, - 179449, 179452, 179454, 179457, 179460, 179465, 179467, 179470, 179475, - 179479, 179482, 179486, 179490, 179493, 179498, 179502, 179506, 179510, - 179514, 179520, 179526, 179532, 179538, 179543, 179554, 179556, 179560, - 179562, 179564, 179568, 179572, 179574, 179578, 179584, 179589, 179595, - 179597, 179601, 179605, 179612, 179619, 179623, 179625, 179627, 179631, - 179633, 179637, 179641, 179645, 179647, 179649, 179656, 179660, 179664, - 179668, 179672, 179676, 179678, 179682, 179684, 179686, 179690, 179692, - 179696, 179700, 179706, 179710, 179714, 179718, 179720, 179723, 179727, - 179734, 179743, 179752, 179761, 179770, 179772, 179776, 179778, 179782, - 179793, 179797, 179803, 179809, 179814, 179816, 179821, 179825, 179827, - 179829, 179831, 179835, 179839, 179843, 179848, 179859, 179875, 179888, - 179901, 179905, 179909, 179915, 179917, 179925, 179933, 179935, 179939, - 179945, 179951, 179958, 179965, 179967, 179969, 179973, 179975, 179981, - 179983, 179986, 179990, 179996, 180002, 180013, 180019, 180026, 180034, - 180038, 180046, 180054, 180060, 180066, 180073, 180075, 180079, 180081, - 180083, 180088, 180090, 180092, 180094, 180096, 180100, 180110, 180116, - 180120, 180124, 180128, 180134, 180140, 180146, 180152, 180157, 180162, - 180168, 180174, 180181, 180188, 180195, 180202, 180207, 180215, 180219, - 180228, 180237, 180243, 180247, 180251, 180255, 180258, 180263, 180265, - 180267, 180269, 180276, 180281, 180288, 180295, 180302, 180310, 180318, - 180326, 180334, 180342, 180350, 180358, 180366, 180374, 180380, 180386, - 180392, 180398, 180404, 180410, 180416, 180422, 180428, 180434, 180440, - 180446, 180449, 180458, 180467, 180469, 180476, 180480, 180482, 180484, - 180488, 180494, 180498, 180500, 180510, 180516, 180520, 180522, 180526, - 180528, 180532, 180539, 180546, 180553, 180558, 180563, 180572, 180578, - 180583, 180587, 180592, 180596, 180603, 180607, 180610, 180614, 180620, - 180626, 180630, 180634, 180639, 180645, 180654, 180665, 180671, 180677, - 180683, 180693, 180708, 180717, 180725, 180733, 180741, 180749, 180757, - 180765, 180773, 180781, 180789, 180797, 180805, 180813, 180816, 180820, - 180825, 180830, 180832, 180836, 180845, 180854, 180862, 180866, 180870, - 180875, 180880, 180885, 180887, 180892, 180896, 180898, 180902, 180906, - 180912, 180917, 180925, 180930, 180935, 180940, 180947, 180950, 180952, - 180956, 180961, 180967, 180971, 180975, 180981, 180987, 180989, 180993, - 180997, 181001, 181005, 181009, 181011, 181013, 181015, 181017, 181023, - 181029, 181033, 181035, 181037, 181039, 181048, 181052, 181059, 181066, - 181068, 181071, 181075, 181081, 181085, 181089, 181091, 181099, 181103, - 181107, 181112, 181116, 181121, 181126, 181131, 181136, 181141, 181146, - 181151, 181156, 181160, 181166, 181170, 181176, 181181, 181188, 181194, - 181202, 181206, 181213, 181217, 181221, 181225, 181230, 181235, 181237, - 181241, 181250, 181258, 181267, 181281, 181295, 181309, 181316, 181323, - 181327, 181336, 181344, 181348, 181357, 181364, 181368, 181372, 181376, - 181380, 181387, 181391, 181395, 181399, 181403, 181410, 181419, 181428, - 181435, 181447, 181459, 181463, 181467, 181471, 181475, 181479, 181483, - 181491, 181499, 181508, 181512, 181516, 181520, 181524, 181528, 181532, - 181538, 181545, 181549, 181561, 181569, 181573, 181577, 181581, 181585, - 181591, 181598, 181609, 181619, 181630, 181641, 181650, 181661, 181667, - 181673, 181679, 181685, 181691, 181695, 181702, 181711, 181718, 181724, - 181728, 181732, 181736, 181745, 181757, 181761, 181768, 181775, 181782, - 181790, 181797, 181805, 181813, 181822, 181830, 181839, 181848, 181858, - 181867, 181877, 181887, 181898, 181908, 181919, 181926, 181934, 181941, - 181949, 181957, 181966, 181974, 181983, 181990, 182002, 182009, 182021, - 182024, 182028, 182031, 182035, 182041, 182048, 182055, 182063, 182068, - 182074, 182085, 182095, 182106, 182111, 182116, 182122, 182127, 182134, - 182138, 182144, 182146, 182148, 182152, 182156, 182160, 182169, 182171, - 182173, 182176, 182178, 182180, 182184, 182186, 182190, 182192, 182196, - 182198, 182200, 182204, 182208, 182214, 182216, 182220, 182222, 182226, - 182230, 182234, 182238, 182240, 182242, 182246, 182250, 182254, 182258, - 182260, 182262, 182264, 182270, 182275, 182278, 182286, 182294, 182296, - 182301, 182304, 182309, 182320, 182327, 182332, 182337, 182339, 182343, - 182345, 182349, 182351, 182355, 182359, 182362, 182365, 182367, 182370, - 182372, 182376, 182378, 182380, 182382, 182386, 182388, 182392, 182395, - 182402, 182405, 182410, 182413, 182416, 182421, 182425, 182429, 182433, - 182435, 182440, 182443, 182447, 182449, 182451, 182455, 182457, 0, 0, 0, - 0, 182459, 182461, 182465, 182467, 182471, 182476, 182478, 182482, - 182484, 182488, 182492, 182498, 182502, 182507, 182510, 182514, 182518, - 0, 0, 0, 182522, 182524, 182530, 182534, 182538, 182540, 182544, 182546, - 182548, 182552, 182554, 182558, 182562, 0, 0, 0, 182566, 182571, 182576, - 182581, 182586, 182591, 182596, 182603, 182610, 182617, 182624, 182629, - 182634, 182639, 182644, 182651, 182657, 182664, 182671, 182678, 182683, - 182688, 182693, 182698, 182703, 182710, 182717, 182722, 182727, 182734, - 182741, 182749, 182757, 182764, 182771, 182779, 182787, 182795, 182802, - 182812, 182823, 182828, 182835, 182842, 182849, 182857, 182865, 182876, - 182884, 182892, 182900, 182905, 182910, 182915, 182920, 182925, 182930, - 182935, 182940, 182945, 182950, 182955, 182960, 182967, 182972, 182977, - 182984, 182989, 182994, 182999, 183004, 183009, 183014, 183019, 183024, - 183029, 183034, 183039, 183044, 183051, 183059, 183064, 183069, 183076, - 183081, 183086, 183091, 183098, 183103, 183110, 183115, 183122, 183127, - 183136, 183145, 183150, 183155, 183160, 183165, 183170, 183175, 183180, - 183185, 183190, 183195, 183200, 183205, 183210, 183218, 183226, 183231, - 183236, 183241, 183246, 183251, 183257, 183263, 183268, 183270, 0, 0, 0, - 0, 183274, 183276, 183278, 183280, 183282, 183284, 183292, 183300, - 183308, 183316, 183322, 183328, 183332, 183336, 183342, 183348, 183357, - 183361, 183366, 183372, 183376, 183381, 183385, 183389, 183395, 183401, - 183411, 183420, 183423, 183428, 183434, 183440, 183451, 183461, 183465, - 183470, 183476, 183482, 183491, 183496, 183500, 183505, 183509, 183515, - 183521, 183527, 183531, 183534, 183538, 183541, 183544, 183549, 183554, - 183561, 183569, 183576, 183583, 183592, 183601, 183608, 183616, 183623, - 183630, 183639, 183648, 183655, 183663, 183670, 183677, 183686, 183693, - 183701, 183707, 183716, 183724, 183733, 183740, 183750, 183761, 183769, - 183777, 183786, 183794, 183802, 183811, 183819, 183829, 183838, 183846, - 183854, 183863, 183866, 183871, 183874, 183879, 0, 0, 0, 0, 0, 0, 183886, - 183892, 183898, 183904, 183910, 183916, 183922, 183928, 183934, 183940, - 183946, 183952, 0, 0, 0, 0, 183958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 183962, 183970, 183979, 183987, 183996, 184005, 184015, 184024, - 184034, 184043, 184053, 184062, 0, 0, 0, 0, 184072, 184080, 184089, - 184097, 184106, 184113, 184121, 184128, 184136, 184144, 184153, 184161, - 184170, 184180, 184191, 184201, 184212, 184221, 184231, 184240, 184250, - 184259, 184269, 184278, 184288, 184296, 184305, 184313, 184322, 184330, - 184339, 184347, 184356, 184366, 184377, 184387, 184398, 184402, 184407, - 184411, 184416, 184419, 184423, 184426, 184430, 184434, 184439, 184443, - 184448, 184453, 184459, 184464, 184470, 184473, 184477, 184480, 0, 0, 0, - 0, 0, 0, 0, 0, 184484, 184487, 184491, 184494, 184498, 184503, 184508, - 184514, 184520, 184524, 0, 0, 0, 0, 0, 0, 184528, 184534, 184541, 184547, - 184554, 184562, 184570, 184579, 184588, 184593, 184599, 184604, 184610, - 184617, 184624, 184632, 184640, 184647, 184655, 184662, 184670, 184679, - 184688, 184698, 184708, 184714, 184721, 184727, 184734, 184742, 184750, - 184759, 184768, 184776, 184785, 184793, 184802, 184812, 184822, 184833, - 0, 0, 0, 0, 0, 0, 0, 0, 184844, 184849, 184855, 184860, 184866, 184875, - 184885, 184894, 184904, 184911, 184919, 184926, 184934, 184941, 184950, - 184959, 184968, 184973, 184980, 184987, 184994, 184999, 185004, 185009, - 185014, 185021, 185028, 185035, 185042, 185049, 0, 0, 185058, 185068, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177269, 177276, + 177284, 177292, 177300, 177307, 177315, 177323, 177331, 177338, 177346, + 177354, 177361, 177369, 177377, 177384, 177392, 177400, 177407, 177415, + 177423, 177430, 177438, 177446, 177454, 177462, 177470, 177475, 177479, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177482, 177488, 177494, 177500, + 177504, 177510, 177516, 177522, 177528, 177534, 177540, 177546, 177552, + 177558, 177564, 177570, 177576, 177582, 177588, 177594, 177600, 177606, + 177612, 177618, 177624, 177630, 177636, 177642, 177648, 177654, 177660, + 177666, 177672, 177678, 177684, 177690, 177696, 177702, 177708, 177714, + 177720, 177726, 177732, 177738, 0, 0, 0, 0, 177744, 177755, 177766, + 177777, 177788, 177799, 177810, 177821, 177832, 0, 0, 0, 0, 0, 0, 0, + 177843, 177848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177853, 177859, + 177865, 177871, 177877, 177883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177889, 177891, 177893, 177897, + 177902, 177907, 177909, 177915, 177920, 177922, 177928, 177932, 177934, + 177938, 177944, 177950, 177956, 177961, 177966, 177973, 177980, 177987, + 177992, 177999, 178006, 178013, 178017, 178024, 178033, 178042, 178049, + 178054, 178058, 178062, 178064, 178067, 178070, 178077, 178084, 178094, + 178099, 178104, 178109, 178114, 178116, 178122, 178126, 178128, 178130, + 178132, 178134, 178138, 178142, 178146, 178148, 178152, 178154, 178158, + 178160, 178162, 178164, 178166, 178171, 178176, 178178, 178184, 178188, + 178192, 178200, 178202, 178204, 178206, 178208, 178210, 178212, 178214, + 178216, 178218, 178220, 178224, 178228, 178230, 178232, 178234, 178236, + 178238, 178243, 178249, 178253, 178257, 178261, 178265, 178270, 178274, + 178276, 178278, 178282, 178288, 178290, 178292, 178294, 178298, 178307, + 178313, 178317, 178321, 178323, 178325, 178328, 178330, 178332, 178334, + 178338, 178340, 178344, 178349, 178351, 178356, 178362, 178369, 178373, + 178377, 178381, 178385, 178391, 178395, 178403, 178410, 178412, 178414, + 178418, 178422, 178424, 178428, 178432, 178434, 178438, 178440, 178444, + 178448, 178452, 178456, 178460, 178464, 178468, 178472, 178478, 178482, + 178486, 178497, 178502, 178506, 178510, 178516, 178520, 178524, 178528, + 178535, 178542, 178546, 178550, 178554, 178558, 178562, 178569, 178571, + 178575, 178577, 178579, 178583, 178587, 178591, 178593, 178597, 178601, + 178605, 178609, 178613, 178615, 178619, 178621, 178627, 178630, 178635, + 178637, 178639, 178642, 178644, 178646, 178649, 178656, 178663, 178670, + 178675, 178679, 178681, 178683, 178685, 178689, 178691, 178695, 178699, + 178703, 178705, 178709, 178711, 178715, 178719, 178726, 178728, 178737, + 178746, 178755, 178761, 178763, 178768, 178772, 178776, 178778, 178784, + 178788, 178790, 178794, 178798, 178800, 178804, 178809, 178813, 178819, + 178825, 178827, 178829, 178835, 178837, 178841, 178845, 178847, 178851, + 178853, 178857, 178861, 178865, 178868, 178871, 178876, 178881, 178883, + 178886, 178888, 178895, 178899, 178901, 178908, 178915, 178922, 178929, + 178936, 178938, 178940, 178942, 178946, 178948, 178950, 178952, 178954, + 178956, 178958, 178960, 178962, 178964, 178966, 178968, 178970, 178972, + 178974, 178976, 178978, 178980, 178982, 178984, 178986, 178988, 178990, + 178994, 178996, 178998, 179000, 179004, 179006, 179010, 179012, 179014, + 179018, 179022, 179028, 179030, 179032, 179034, 179036, 179040, 179044, + 179046, 179050, 179054, 179058, 179062, 179066, 179070, 179074, 179078, + 179082, 179086, 179090, 179094, 179098, 179102, 179106, 179110, 179114, + 179118, 179120, 179122, 179124, 179126, 179128, 179130, 179132, 179140, + 179148, 179156, 179164, 179169, 179174, 179179, 179183, 179187, 179192, + 179197, 179199, 179203, 179205, 179207, 179209, 179211, 179213, 179215, + 179217, 179221, 179223, 179225, 179227, 179231, 179235, 179239, 179243, + 179247, 179249, 179255, 179261, 179263, 179265, 179267, 179269, 179271, + 179280, 179287, 179294, 179298, 179305, 179310, 179317, 179326, 179331, + 179335, 179339, 179341, 179345, 179347, 179351, 179355, 179357, 179361, + 179365, 179369, 179371, 179373, 179379, 179381, 179383, 179385, 179389, + 179393, 179395, 179399, 179401, 179403, 179406, 179410, 179412, 179416, + 179418, 179420, 179425, 179427, 179431, 179435, 179438, 179442, 179446, + 179450, 179454, 179458, 179462, 179466, 179471, 179475, 179479, 179488, + 179493, 179496, 179498, 179501, 179504, 179509, 179511, 179514, 179519, + 179523, 179526, 179530, 179534, 179537, 179542, 179546, 179550, 179554, + 179558, 179564, 179570, 179576, 179582, 179587, 179598, 179600, 179604, + 179606, 179608, 179612, 179616, 179618, 179622, 179628, 179633, 179639, + 179641, 179645, 179649, 179656, 179663, 179667, 179669, 179671, 179675, + 179677, 179681, 179685, 179689, 179691, 179693, 179700, 179704, 179708, + 179712, 179716, 179720, 179722, 179726, 179728, 179730, 179734, 179736, + 179740, 179744, 179750, 179754, 179758, 179762, 179764, 179767, 179771, + 179778, 179787, 179796, 179805, 179814, 179816, 179820, 179822, 179826, + 179837, 179841, 179847, 179853, 179858, 179860, 179865, 179869, 179871, + 179873, 179875, 179879, 179883, 179887, 179892, 179903, 179919, 179932, + 179945, 179949, 179953, 179959, 179961, 179969, 179977, 179979, 179983, + 179989, 179995, 180002, 180009, 180011, 180013, 180017, 180019, 180025, + 180027, 180030, 180034, 180040, 180046, 180057, 180063, 180070, 180078, + 180082, 180090, 180098, 180104, 180110, 180117, 180119, 180123, 180125, + 180127, 180132, 180134, 180136, 180138, 180140, 180144, 180154, 180160, + 180164, 180168, 180172, 180178, 180184, 180190, 180196, 180201, 180206, + 180212, 180218, 180225, 180232, 180239, 180246, 180251, 180259, 180263, + 180272, 180281, 180287, 180291, 180295, 180299, 180302, 180307, 180309, + 180311, 180313, 180320, 180325, 180332, 180339, 180346, 180354, 180362, + 180370, 180378, 180386, 180394, 180402, 180410, 180418, 180424, 180430, + 180436, 180442, 180448, 180454, 180460, 180466, 180472, 180478, 180484, + 180490, 180493, 180502, 180511, 180513, 180520, 180524, 180526, 180528, + 180532, 180538, 180542, 180544, 180554, 180560, 180564, 180566, 180570, + 180572, 180576, 180583, 180590, 180597, 180602, 180607, 180616, 180622, + 180627, 180631, 180636, 180640, 180647, 180651, 180654, 180658, 180664, + 180670, 180674, 180678, 180683, 180689, 180698, 180709, 180715, 180721, + 180727, 180737, 180752, 180761, 180769, 180777, 180785, 180793, 180801, + 180809, 180817, 180825, 180833, 180841, 180849, 180857, 180860, 180864, + 180869, 180874, 180876, 180880, 180889, 180898, 180906, 180910, 180914, + 180919, 180924, 180929, 180931, 180936, 180940, 180942, 180946, 180950, + 180956, 180961, 180969, 180974, 180979, 180984, 180991, 180994, 180996, + 181000, 181005, 181011, 181015, 181019, 181025, 181031, 181033, 181037, + 181041, 181045, 181049, 181053, 181055, 181057, 181059, 181061, 181067, + 181073, 181077, 181079, 181081, 181083, 181092, 181096, 181103, 181110, + 181112, 181115, 181119, 181125, 181129, 181133, 181135, 181143, 181147, + 181151, 181156, 181160, 181165, 181170, 181175, 181180, 181185, 181190, + 181195, 181200, 181204, 181210, 181214, 181220, 181225, 181232, 181238, + 181246, 181250, 181257, 181261, 181265, 181269, 181274, 181279, 181281, + 181285, 181294, 181302, 181311, 181325, 181339, 181353, 181360, 181367, + 181371, 181380, 181388, 181392, 181401, 181408, 181412, 181416, 181420, + 181424, 181431, 181435, 181439, 181443, 181447, 181454, 181463, 181472, + 181479, 181491, 181503, 181507, 181511, 181515, 181519, 181523, 181527, + 181535, 181543, 181552, 181556, 181560, 181564, 181568, 181572, 181576, + 181582, 181589, 181593, 181605, 181613, 181617, 181621, 181625, 181629, + 181635, 181642, 181653, 181663, 181674, 181685, 181694, 181705, 181711, + 181717, 181723, 181729, 181735, 181739, 181746, 181755, 181762, 181768, + 181772, 181776, 181780, 181789, 181801, 181805, 181812, 181819, 181826, + 181834, 181841, 181849, 181857, 181866, 181874, 181883, 181892, 181902, + 181911, 181921, 181931, 181942, 181952, 181963, 181970, 181978, 181985, + 181993, 182001, 182010, 182018, 182027, 182034, 182046, 182053, 182065, + 182068, 182072, 182075, 182079, 182085, 182092, 182099, 182107, 182112, + 182118, 182129, 182139, 182150, 182155, 182160, 182166, 182171, 182178, + 182182, 182188, 182190, 182192, 182196, 182200, 182204, 182213, 182215, + 182217, 182220, 182222, 182224, 182228, 182230, 182234, 182236, 182240, + 182242, 182244, 182248, 182252, 182258, 182260, 182264, 182266, 182270, + 182274, 182278, 182282, 182284, 182286, 182290, 182294, 182298, 182302, + 182304, 182306, 182308, 182314, 182319, 182322, 182330, 182338, 182340, + 182345, 182348, 182353, 182364, 182371, 182376, 182381, 182383, 182387, + 182389, 182393, 182395, 182399, 182403, 182406, 182409, 182411, 182414, + 182416, 182420, 182422, 182424, 182426, 182430, 182432, 182436, 182439, + 182446, 182449, 182454, 182457, 182460, 182465, 182469, 182473, 182477, + 182479, 182484, 182487, 182491, 182493, 182495, 182499, 182501, 0, 0, 0, + 0, 182503, 182505, 182509, 182511, 182515, 182520, 182522, 182526, + 182528, 182532, 182536, 182542, 182546, 182551, 182554, 182558, 182562, + 0, 0, 0, 182566, 182568, 182574, 182578, 182582, 182584, 182588, 182590, + 182592, 182596, 182598, 182602, 182606, 0, 0, 0, 182610, 182615, 182620, + 182625, 182630, 182635, 182640, 182647, 182654, 182661, 182668, 182673, + 182678, 182683, 182688, 182695, 182701, 182708, 182715, 182722, 182727, + 182732, 182737, 182742, 182747, 182754, 182761, 182766, 182771, 182778, + 182785, 182793, 182801, 182808, 182815, 182823, 182831, 182839, 182846, + 182856, 182867, 182872, 182879, 182886, 182893, 182901, 182909, 182920, + 182928, 182936, 182944, 182949, 182954, 182959, 182964, 182969, 182974, + 182979, 182984, 182989, 182994, 182999, 183004, 183011, 183016, 183021, + 183028, 183033, 183038, 183043, 183048, 183053, 183058, 183063, 183068, + 183073, 183078, 183083, 183088, 183095, 183103, 183108, 183113, 183120, + 183125, 183130, 183135, 183142, 183147, 183154, 183159, 183166, 183171, + 183180, 183189, 183194, 183199, 183204, 183209, 183214, 183219, 183224, + 183229, 183234, 183239, 183244, 183249, 183254, 183262, 183270, 183275, + 183280, 183285, 183290, 183295, 183301, 183307, 183312, 183314, 0, 0, 0, + 0, 183318, 183320, 183322, 183324, 183326, 183328, 183336, 183344, + 183352, 183360, 183366, 183372, 183376, 183380, 183386, 183392, 183401, + 183405, 183410, 183416, 183420, 183425, 183429, 183433, 183439, 183445, + 183455, 183464, 183467, 183472, 183478, 183484, 183495, 183505, 183509, + 183514, 183520, 183526, 183535, 183540, 183544, 183549, 183553, 183559, + 183565, 183571, 183575, 183578, 183582, 183585, 183588, 183593, 183598, + 183605, 183613, 183620, 183627, 183636, 183645, 183652, 183660, 183667, + 183674, 183683, 183692, 183699, 183707, 183714, 183721, 183730, 183737, + 183745, 183751, 183760, 183768, 183777, 183784, 183794, 183805, 183813, + 183821, 183830, 183838, 183846, 183855, 183863, 183873, 183882, 183890, + 183898, 183907, 183910, 183915, 183918, 183923, 0, 0, 0, 0, 0, 0, 183930, + 183936, 183942, 183948, 183954, 183960, 183966, 183972, 183978, 183984, + 183990, 183996, 0, 0, 0, 0, 184002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 184006, 184014, 184023, 184031, 184040, 184049, 184059, 184068, + 184078, 184087, 184097, 184106, 0, 0, 0, 0, 184116, 184124, 184133, + 184141, 184150, 184157, 184165, 184172, 184180, 184188, 184197, 184205, + 184214, 184224, 184235, 184245, 184256, 184265, 184275, 184284, 184294, + 184303, 184313, 184322, 184332, 184340, 184349, 184357, 184366, 184374, + 184383, 184391, 184400, 184410, 184421, 184431, 184442, 184446, 184451, + 184455, 184460, 184463, 184467, 184470, 184474, 184478, 184483, 184487, + 184492, 184497, 184503, 184508, 184514, 184517, 184521, 184524, 0, 0, 0, + 0, 0, 0, 0, 0, 184528, 184531, 184535, 184538, 184542, 184547, 184552, + 184558, 184564, 184568, 0, 0, 0, 0, 0, 0, 184572, 184578, 184585, 184591, + 184598, 184606, 184614, 184623, 184632, 184637, 184643, 184648, 184654, + 184661, 184668, 184676, 184684, 184691, 184699, 184706, 184714, 184723, + 184732, 184742, 184752, 184758, 184765, 184771, 184778, 184786, 184794, + 184803, 184812, 184820, 184829, 184837, 184846, 184856, 184866, 184877, + 0, 0, 0, 0, 0, 0, 0, 0, 184888, 184893, 184899, 184904, 184910, 184919, + 184929, 184938, 184948, 184955, 184963, 184970, 184978, 184985, 184994, + 185003, 185012, 185017, 185024, 185031, 185038, 185043, 185048, 185053, + 185058, 185065, 185072, 185079, 185086, 185093, 0, 0, 185102, 185112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185080, 185090, 185099, 185104, 185113, 185121, 185129, - 185136, 185140, 185145, 185152, 185161, 185172, 185176, 185179, 185183, - 185187, 185191, 185195, 185200, 185204, 185208, 185213, 185217, 185221, - 185227, 185233, 185240, 185244, 185248, 185250, 185260, 185269, 185276, - 185280, 185284, 185294, 185298, 185302, 185306, 185310, 185318, 185327, - 185340, 185351, 185362, 185378, 185387, 185396, 185400, 185402, 185407, - 185409, 185411, 185417, 185421, 185423, 185429, 185431, 185433, 185437, - 185439, 185443, 185445, 185449, 185453, 185458, 185462, 185466, 185468, - 185472, 185474, 185480, 185486, 185492, 185496, 185502, 185506, 185513, - 185515, 185519, 185521, 185523, 185525, 185527, 185529, 185531, 185535, - 185539, 185546, 185550, 185552, 185557, 185559, 185561, 185563, 185565, - 185569, 185573, 185575, 185580, 185585, 185587, 185589, 185591, 185593, - 185598, 185600, 185604, 185608, 185610, 185614, 185616, 185629, 185633, - 185640, 185652, 185664, 185668, 185672, 185674, 185678, 185686, 185693, - 185695, 185699, 185701, 185705, 185709, 185711, 185715, 185717, 185719, - 185723, 185725, 185727, 185729, 185731, 185733, 185737, 185739, 185741, - 185743, 185745, 185747, 185749, 185751, 185755, 185759, 185761, 185763, - 185765, 185767, 185769, 185771, 185773, 185775, 185777, 185779, 185781, - 185783, 185785, 185787, 185789, 185791, 185793, 185795, 185797, 185799, - 185801, 185803, 185805, 185807, 185809, 185811, 185815, 185819, 185827, - 185835, 185841, 185848, 185850, 185852, 185854, 185856, 185858, 185860, - 185864, 185871, 185875, 185879, 185883, 185887, 185891, 185893, 185897, - 185901, 185903, 185905, 185907, 185909, 185911, 185915, 185919, 185923, - 185925, 185929, 185933, 185937, 185942, 185944, 185946, 185950, 185954, - 185959, 185967, 185971, 185979, 185981, 185983, 185985, 185987, 185989, - 185991, 185993, 185995, 185999, 186003, 186005, 186007, 186009, 186011, - 186017, 186019, 186025, 186029, 186033, 186038, 186040, 186042, 186046, - 186048, 186050, 186052, 186054, 186058, 186063, 186068, 186072, 186076, - 186078, 186080, 186085, 186090, 186092, 186094, 186098, 186104, 186110, - 186116, 186122, 186128, 186134, 186145, 186156, 186168, 186179, 186190, - 186201, 186212, 186223, 186234, 186245, 186256, 186267, 186278, 186289, - 186300, 186312, 186324, 186336, 186348, 186360, 186372, 186386, 186400, - 186415, 186421, 186427, 186433, 186439, 186445, 186451, 186457, 186463, - 186469, 186475, 186481, 186487, 186494, 186501, 186508, 186515, 186522, - 186529, 186543, 186557, 186572, 186586, 186600, 186614, 186628, 186642, - 186656, 186670, 186684, 186698, 186712, 186726, 186740, 186755, 186770, - 186785, 186800, 186815, 186830, 186844, 186858, 186873, 186878, 186883, - 186889, 186900, 186911, 186923, 186928, 186933, 186938, 186943, 186948, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186953, 186959, 186965, 186971, - 186977, 186983, 186989, 186995, 187000, 187005, 187010, 187015, 187020, - 187025, 0, 0, 187030, 187034, 187038, 187040, 187042, 187046, 187051, - 187055, 187059, 187064, 187068, 187070, 187072, 0, 0, 0, 187074, 187076, - 187078, 187080, 187082, 187086, 187088, 187092, 187094, 0, 0, 0, 0, 0, 0, - 0, 187096, 187100, 187102, 187104, 187106, 187110, 187112, 187116, - 187118, 187121, 187123, 187127, 187129, 187131, 187132, 187134, 187136, - 187138, 187142, 187144, 187146, 187150, 187152, 187154, 187156, 187158, - 187162, 187166, 187169, 187171, 187177, 187181, 187183, 187185, 187187, - 187189, 187191, 187195, 187197, 187199, 187201, 187203, 187207, 187212, - 187214, 187216, 0, 187218, 187220, 187224, 187226, 187230, 187234, - 187238, 0, 0, 0, 0, 0, 0, 0, 0, 187243, 187245, 187247, 187249, 187253, - 187255, 187257, 187259, 187261, 187263, 187267, 187269, 187271, 187275, - 0, 0, 0, 0, 187279, 187283, 187287, 187300, 187307, 187314, 187320, - 187324, 187326, 0, 0, 0, 0, 0, 0, 0, 187330, 187340, 187343, 187346, - 187351, 187356, 187365, 187369, 187374, 0, 0, 0, 0, 0, 0, 0, 187379, - 187382, 187385, 187388, 187391, 187394, 187397, 187400, 187403, 187406, - 187409, 187412, 187415, 187418, 187421, 187424, 187427, 187430, 187433, - 187436, 187439, 187442, 187445, 187448, 187451, 187454, 187457, 187460, - 187463, 187466, 187469, 187472, 187475, 187478, 187481, 187484, 187487, - 187490, 187493, 187496, 187499, 187502, 187505, 187508, 187511, 187514, - 187517, 187520, 187523, 187526, 187529, 187532, 187535, 187538, 187541, - 187544, 187547, 187550, 187553, 187556, 187559, 187571, 187582, 187594, - 187605, 187616, 187628, 187639, 187651, 187662, 187673, 187685, 187697, - 187708, 187720, 187731, 187742, 187754, 187765, 187777, 187788, 187799, - 187811, 187823, 187834, 187846, 187857, 187868, 187880, 187891, 187903, - 187914, 187925, 187937, 187949, 187960, 187972, 187983, 187994, 188006, - 188017, 188029, 188040, 188051, 188063, 188075, 188087, 188099, 188111, - 188119, 188127, 188135, 188143, 188149, 188155, 188161, 188167, 188173, - 188179, 188186, 188193, 188200, 188207, 188214, 188221, 188229, 188237, - 188245, 188253, 188261, 188268, 188274, 188280, 188287, 188293, 188300, - 188306, 188312, 188319, 188325, 188332, 188338, 188344, 188350, 188356, - 188362, 188374, 0, 188387, 188400, 188406, 188414, 188419, 188426, - 188433, 188441, 188449, 188457, 188465, 188473, 188481, 188493, 188504, - 188515, 188526, 188541, 188556, 188570, 188584, 188602, 188620, 188639, - 188657, 188675, 188693, 188700, 188708, 188712, 188717, 188723, 188729, - 188739, 188750, 188761, 188771, 188781, 188785, 188789, 188794, 188800, - 188806, 188816, 188822, 188831, 188840, 188849, 188858, 188864, 188868, - 188877, 188885, 188892, 188899, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185124, 185134, 185143, 185148, 185157, 185165, 185173, + 185180, 185184, 185189, 185196, 185205, 185216, 185220, 185223, 185227, + 185231, 185235, 185239, 185244, 185248, 185252, 185257, 185261, 185265, + 185271, 185277, 185284, 185288, 185292, 185294, 185304, 185313, 185320, + 185324, 185328, 185338, 185342, 185346, 185350, 185354, 185362, 185371, + 185384, 185395, 185406, 185422, 185431, 185440, 185444, 185446, 185451, + 185453, 185455, 185461, 185465, 185467, 185473, 185475, 185477, 185481, + 185483, 185487, 185489, 185493, 185497, 185502, 185506, 185510, 185512, + 185516, 185518, 185524, 185530, 185536, 185540, 185546, 185550, 185557, + 185559, 185563, 185565, 185567, 185569, 185571, 185573, 185575, 185579, + 185583, 185590, 185594, 185596, 185601, 185603, 185605, 185607, 185609, + 185613, 185617, 185619, 185624, 185629, 185631, 185633, 185635, 185637, + 185642, 185644, 185648, 185652, 185654, 185658, 185660, 185673, 185677, + 185684, 185696, 185708, 185712, 185716, 185718, 185722, 185730, 185737, + 185739, 185743, 185745, 185749, 185753, 185755, 185759, 185761, 185763, + 185767, 185769, 185771, 185773, 185775, 185777, 185781, 185783, 185785, + 185787, 185789, 185791, 185793, 185795, 185799, 185803, 185805, 185807, + 185809, 185811, 185813, 185815, 185817, 185819, 185821, 185823, 185825, + 185827, 185829, 185831, 185833, 185835, 185837, 185839, 185841, 185843, + 185845, 185847, 185849, 185851, 185853, 185855, 185859, 185863, 185871, + 185879, 185885, 185892, 185894, 185896, 185898, 185900, 185902, 185904, + 185908, 185915, 185919, 185923, 185927, 185931, 185935, 185937, 185941, + 185945, 185947, 185949, 185951, 185953, 185955, 185959, 185963, 185967, + 185969, 185973, 185977, 185981, 185986, 185988, 185990, 185994, 185998, + 186003, 186011, 186015, 186023, 186025, 186027, 186029, 186031, 186033, + 186035, 186037, 186039, 186043, 186047, 186049, 186051, 186053, 186055, + 186061, 186063, 186069, 186073, 186077, 186082, 186084, 186086, 186090, + 186092, 186094, 186096, 186098, 186102, 186107, 186112, 186116, 186120, + 186122, 186124, 186129, 186134, 186136, 186138, 186142, 186148, 186154, + 186160, 186166, 186172, 186178, 186189, 186200, 186212, 186223, 186234, + 186245, 186256, 186267, 186278, 186289, 186300, 186311, 186322, 186333, + 186344, 186356, 186368, 186380, 186392, 186404, 186416, 186430, 186444, + 186459, 186465, 186471, 186477, 186483, 186489, 186495, 186501, 186507, + 186513, 186519, 186525, 186531, 186538, 186545, 186552, 186559, 186566, + 186573, 186587, 186601, 186616, 186630, 186644, 186658, 186672, 186686, + 186700, 186714, 186728, 186742, 186756, 186770, 186784, 186799, 186814, + 186829, 186844, 186859, 186874, 186888, 186902, 186917, 186922, 186927, + 186933, 186944, 186955, 186967, 186972, 186977, 186982, 186987, 186992, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186997, 187003, 187009, 187015, + 187021, 187027, 187033, 187039, 187044, 187049, 187054, 187059, 187064, + 187069, 0, 0, 187074, 187078, 187082, 187084, 187086, 187090, 187095, + 187099, 187103, 187108, 187112, 187114, 187116, 0, 0, 0, 187118, 187120, + 187122, 187124, 187126, 187130, 187132, 187136, 187138, 0, 0, 0, 0, 0, 0, + 0, 187140, 187144, 187146, 187148, 187150, 187154, 187156, 187160, + 187162, 187165, 187167, 187171, 187173, 187175, 187176, 187178, 187180, + 187182, 187186, 187188, 187190, 187194, 187196, 187198, 187200, 187202, + 187206, 187210, 187213, 187215, 187221, 187225, 187227, 187229, 187231, + 187233, 187235, 187239, 187241, 187243, 187245, 187247, 187251, 187256, + 187258, 187260, 0, 187262, 187264, 187268, 187270, 187274, 187278, + 187282, 0, 0, 0, 0, 0, 0, 0, 0, 187287, 187289, 187291, 187293, 187297, + 187299, 187301, 187303, 187305, 187307, 187311, 187313, 187315, 187319, + 0, 0, 0, 0, 187323, 187327, 187331, 187344, 187351, 187358, 187364, + 187368, 187370, 0, 0, 0, 0, 0, 0, 0, 187374, 187384, 187387, 187390, + 187395, 187400, 187409, 187413, 187418, 0, 0, 0, 0, 0, 0, 0, 187423, + 187426, 187429, 187432, 187435, 187438, 187441, 187444, 187447, 187450, + 187453, 187456, 187459, 187462, 187465, 187468, 187471, 187474, 187477, + 187480, 187483, 187486, 187489, 187492, 187495, 187498, 187501, 187504, + 187507, 187510, 187513, 187516, 187519, 187522, 187525, 187528, 187531, + 187534, 187537, 187540, 187543, 187546, 187549, 187552, 187555, 187558, + 187561, 187564, 187567, 187570, 187573, 187576, 187579, 187582, 187585, + 187588, 187591, 187594, 187597, 187600, 187603, 187615, 187626, 187638, + 187649, 187660, 187672, 187683, 187695, 187706, 187717, 187729, 187741, + 187752, 187764, 187775, 187786, 187798, 187809, 187821, 187832, 187843, + 187855, 187867, 187878, 187890, 187901, 187912, 187924, 187935, 187947, + 187958, 187969, 187981, 187993, 188004, 188016, 188027, 188038, 188050, + 188061, 188073, 188084, 188095, 188107, 188119, 188131, 188143, 188155, + 188163, 188171, 188179, 188187, 188193, 188199, 188205, 188211, 188217, + 188223, 188230, 188237, 188244, 188251, 188258, 188265, 188273, 188281, + 188289, 188297, 188305, 188312, 188318, 188324, 188331, 188337, 188344, + 188350, 188356, 188363, 188369, 188376, 188382, 188388, 188394, 188400, + 188406, 188418, 0, 188431, 188444, 188450, 188458, 188463, 188470, + 188477, 188485, 188493, 188501, 188509, 188517, 188525, 188537, 188548, + 188559, 188570, 188585, 188600, 188614, 188628, 188646, 188664, 188683, + 188701, 188719, 188737, 188744, 188752, 188756, 188761, 188767, 188773, + 188783, 188794, 188805, 188815, 188825, 188829, 188833, 188838, 188844, + 188850, 188860, 188866, 188875, 188884, 188893, 188902, 188908, 188912, + 188921, 188929, 188936, 188943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 188904, 188909, 188913, 188917, 188921, 188925, 188929, 188933, 188937, - 188941, 0, 0, 0, 0, 0, 0, 188945, 188949, 188953, 188957, 188961, 188965, - 188969, 188973, 188977, 188981, 188985, 188989, 188993, 188997, 189001, - 189005, 189009, 189013, 189017, 189021, 189025, 189029, 189033, 189037, - 189041, 189045, 189049, 189053, 189057, 189061, 189065, 189069, 189073, - 189077, 189081, 189085, 189089, 189093, 189097, 189101, 189105, 189109, - 189113, 189117, 189121, 189125, 189129, 189133, 189137, 189141, 189145, - 189149, 189153, 189157, 189161, 189165, 189169, 189173, 189177, 189181, - 189185, 189189, 189193, 189197, 189201, 189205, 189209, 189213, 189217, - 189221, 189225, 189229, 189233, 189237, 189241, 189245, 189249, 189253, - 189257, 189261, 189265, 189269, 189273, 189277, 189281, 189285, 189289, - 189293, 189297, 189301, 189305, 189309, 189313, 189317, 189321, 189325, - 189329, 189333, 189337, 189341, 189345, 189349, 189353, 189357, 189361, - 189365, 189369, 189373, 189377, 189381, 189385, 189389, 189393, 189397, - 189401, 189405, 189409, 189413, 189417, 189421, 189425, 189429, 189433, - 189437, 189441, 189445, 189449, 189453, 189457, 189461, 189465, 189469, - 189473, 189477, 189481, 189485, 189489, 189493, 189497, 189501, 189505, - 189509, 189513, 189517, 189521, 189525, 189529, 189533, 189537, 189541, - 189545, 189549, 189553, 189557, 189561, 189565, 189569, 189573, 189577, - 189581, 189585, 189589, 189593, 189597, 189601, 189605, 189609, 189613, - 189617, 189621, 189625, 189629, 189633, 189637, 189641, 189645, 189649, - 189653, 189657, 189661, 189665, 189669, 189673, 189677, 189681, 189685, - 189689, 189693, 189697, 189701, 189705, 189709, 189713, 189717, 189721, - 189725, 189729, 189733, 189737, 189741, 189745, 189749, 189753, 189757, - 189761, 189765, 189769, 189773, 189777, 189781, 189785, 189789, 189793, - 189797, 189801, 189805, 189809, 189813, 189817, 189821, 189825, 189829, - 189833, 189837, 189841, 189845, 189849, 189853, 189857, 189861, 189865, - 189869, 189873, 189877, 189881, 189885, 189889, 189893, 189897, 189901, - 189905, 189909, 189913, 189917, 189921, 189925, 189929, 189933, 189937, - 189941, 189945, 189949, 189953, 189957, 189961, 189965, 189969, 189973, - 189977, 189981, 189985, 189989, 189993, 189997, 190001, 190005, 190009, - 190013, 190017, 190021, 190025, 190029, 190033, 190037, 190041, 190045, - 190049, 190053, 190057, 190061, 190065, 190069, 190073, 190077, 190081, - 190085, 190089, 190093, 190097, 190101, 190105, 190109, 190113, 190117, - 190121, 190125, 190129, 190133, 190137, 190141, 190145, 190149, 190153, - 190157, 190161, 190165, 190169, 190173, 190177, 190181, 190185, 190189, - 190193, 190197, 190201, 190205, 190209, 190213, 190217, 190221, 190225, - 190229, 190233, 190237, 190241, 190245, 190249, 190253, 190257, 190261, - 190265, 190269, 190273, 190277, 190281, 190285, 190289, 190293, 190297, - 190301, 190305, 190309, 190313, 190317, 190321, 190325, 190329, 190333, - 190337, 190341, 190345, 190349, 190353, 190357, 190361, 190365, 190369, - 190373, 190377, 190381, 190385, 190389, 190393, 190397, 190401, 190405, - 190409, 190413, 190417, 190421, 190425, 190429, 190433, 190437, 190441, - 190445, 190449, 190453, 190457, 190461, 190465, 190469, 190473, 190477, - 190481, 190485, 190489, 190493, 190497, 190501, 190505, 190509, 190513, - 190517, 190521, 190525, 190529, 190533, 190537, 190541, 190545, 190549, - 190553, 190557, 190561, 190565, 190569, 190573, 190577, 190581, 190585, - 190589, 190593, 190597, 190601, 190605, 190609, 190613, 190617, 190621, - 190625, 190629, 190633, 190637, 190641, 190645, 190649, 190653, 190657, - 190661, 190665, 190669, 190673, 190677, 190681, 190685, 190689, 190693, - 190697, 190701, 190705, 190709, 190713, 190717, 190721, 190725, 190729, - 190733, 190737, 190741, 190745, 190749, 190753, 190757, 190761, 190765, - 190769, 190773, 190777, 190781, 190785, 190789, 190793, 190797, 190801, - 190805, 190809, 190813, 190817, 190821, 190825, 190829, 190833, 190837, - 190841, 190845, 190849, 190853, 190857, 190861, 190865, 190869, 190873, - 190877, 190881, 190885, 190889, 190893, 190897, 190901, 190905, 190909, - 190913, 190917, 190921, 190925, 190929, 190933, 190937, 190941, 190945, - 190949, 190953, 190957, 190961, 190965, 190969, 190973, 190977, 190981, - 190985, 190989, 190993, 190997, 191001, 191005, 191009, 191013, 191017, - 191021, 191025, 191029, 191033, 191037, 191041, 191045, 191049, 191053, - 191057, 191061, 191065, 191069, 191073, 191077, 191081, 191085, 191089, - 191093, 191097, 191101, 191105, 191109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 188948, 188953, 188957, 188961, 188965, 188969, 188973, 188977, 188981, + 188985, 0, 0, 0, 0, 0, 0, 188989, 188993, 188997, 189001, 189005, 189009, + 189013, 189017, 189021, 189025, 189029, 189033, 189037, 189041, 189045, + 189049, 189053, 189057, 189061, 189065, 189069, 189073, 189077, 189081, + 189085, 189089, 189093, 189097, 189101, 189105, 189109, 189113, 189117, + 189121, 189125, 189129, 189133, 189137, 189141, 189145, 189149, 189153, + 189157, 189161, 189165, 189169, 189173, 189177, 189181, 189185, 189189, + 189193, 189197, 189201, 189205, 189209, 189213, 189217, 189221, 189225, + 189229, 189233, 189237, 189241, 189245, 189249, 189253, 189257, 189261, + 189265, 189269, 189273, 189277, 189281, 189285, 189289, 189293, 189297, + 189301, 189305, 189309, 189313, 189317, 189321, 189325, 189329, 189333, + 189337, 189341, 189345, 189349, 189353, 189357, 189361, 189365, 189369, + 189373, 189377, 189381, 189385, 189389, 189393, 189397, 189401, 189405, + 189409, 189413, 189417, 189421, 189425, 189429, 189433, 189437, 189441, + 189445, 189449, 189453, 189457, 189461, 189465, 189469, 189473, 189477, + 189481, 189485, 189489, 189493, 189497, 189501, 189505, 189509, 189513, + 189517, 189521, 189525, 189529, 189533, 189537, 189541, 189545, 189549, + 189553, 189557, 189561, 189565, 189569, 189573, 189577, 189581, 189585, + 189589, 189593, 189597, 189601, 189605, 189609, 189613, 189617, 189621, + 189625, 189629, 189633, 189637, 189641, 189645, 189649, 189653, 189657, + 189661, 189665, 189669, 189673, 189677, 189681, 189685, 189689, 189693, + 189697, 189701, 189705, 189709, 189713, 189717, 189721, 189725, 189729, + 189733, 189737, 189741, 189745, 189749, 189753, 189757, 189761, 189765, + 189769, 189773, 189777, 189781, 189785, 189789, 189793, 189797, 189801, + 189805, 189809, 189813, 189817, 189821, 189825, 189829, 189833, 189837, + 189841, 189845, 189849, 189853, 189857, 189861, 189865, 189869, 189873, + 189877, 189881, 189885, 189889, 189893, 189897, 189901, 189905, 189909, + 189913, 189917, 189921, 189925, 189929, 189933, 189937, 189941, 189945, + 189949, 189953, 189957, 189961, 189965, 189969, 189973, 189977, 189981, + 189985, 189989, 189993, 189997, 190001, 190005, 190009, 190013, 190017, + 190021, 190025, 190029, 190033, 190037, 190041, 190045, 190049, 190053, + 190057, 190061, 190065, 190069, 190073, 190077, 190081, 190085, 190089, + 190093, 190097, 190101, 190105, 190109, 190113, 190117, 190121, 190125, + 190129, 190133, 190137, 190141, 190145, 190149, 190153, 190157, 190161, + 190165, 190169, 190173, 190177, 190181, 190185, 190189, 190193, 190197, + 190201, 190205, 190209, 190213, 190217, 190221, 190225, 190229, 190233, + 190237, 190241, 190245, 190249, 190253, 190257, 190261, 190265, 190269, + 190273, 190277, 190281, 190285, 190289, 190293, 190297, 190301, 190305, + 190309, 190313, 190317, 190321, 190325, 190329, 190333, 190337, 190341, + 190345, 190349, 190353, 190357, 190361, 190365, 190369, 190373, 190377, + 190381, 190385, 190389, 190393, 190397, 190401, 190405, 190409, 190413, + 190417, 190421, 190425, 190429, 190433, 190437, 190441, 190445, 190449, + 190453, 190457, 190461, 190465, 190469, 190473, 190477, 190481, 190485, + 190489, 190493, 190497, 190501, 190505, 190509, 190513, 190517, 190521, + 190525, 190529, 190533, 190537, 190541, 190545, 190549, 190553, 190557, + 190561, 190565, 190569, 190573, 190577, 190581, 190585, 190589, 190593, + 190597, 190601, 190605, 190609, 190613, 190617, 190621, 190625, 190629, + 190633, 190637, 190641, 190645, 190649, 190653, 190657, 190661, 190665, + 190669, 190673, 190677, 190681, 190685, 190689, 190693, 190697, 190701, + 190705, 190709, 190713, 190717, 190721, 190725, 190729, 190733, 190737, + 190741, 190745, 190749, 190753, 190757, 190761, 190765, 190769, 190773, + 190777, 190781, 190785, 190789, 190793, 190797, 190801, 190805, 190809, + 190813, 190817, 190821, 190825, 190829, 190833, 190837, 190841, 190845, + 190849, 190853, 190857, 190861, 190865, 190869, 190873, 190877, 190881, + 190885, 190889, 190893, 190897, 190901, 190905, 190909, 190913, 190917, + 190921, 190925, 190929, 190933, 190937, 190941, 190945, 190949, 190953, + 190957, 190961, 190965, 190969, 190973, 190977, 190981, 190985, 190989, + 190993, 190997, 191001, 191005, 191009, 191013, 191017, 191021, 191025, + 191029, 191033, 191037, 191041, 191045, 191049, 191053, 191057, 191061, + 191065, 191069, 191073, 191077, 191081, 191085, 191089, 191093, 191097, + 191101, 191105, 191109, 191113, 191117, 191121, 191125, 191129, 191133, + 191137, 191141, 191145, 191149, 191153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191113, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 191117, 191121, 191126, 191131, 191135, 191140, 191145, 191149, 191153, - 191158, 191163, 191167, 191171, 191175, 191179, 191185, 191189, 191194, - 191198, 191202, 191206, 191210, 191214, 191218, 191222, 191226, 191230, - 191234, 191238, 191243, 191248, 191253, 191258, 191264, 191270, 191277, - 191284, 191291, 191297, 191304, 191311, 191318, 191324, 191331, 191338, - 191344, 191351, 191358, 191364, 191371, 191378, 191384, 191391, 191398, - 191404, 191411, 191418, 191425, 191432, 191439, 191445, 191451, 191457, - 191463, 191468, 191474, 191480, 191487, 191494, 191501, 191507, 191514, - 191521, 191528, 191534, 191541, 191548, 191554, 191561, 191568, 191574, - 191581, 191588, 191594, 191601, 191608, 191614, 191621, 191628, 191635, - 191642, 191649, 191656, 191661, 191668, 191672, 191676, 191679, 191682, - 191685, 191688, 191691, 191694, 191697, 191700, 191703, 191706, 191709, - 191712, 191715, 191718, 191721, 191724, 191727, 191730, 191733, 191736, - 191739, 191742, 191745, 191748, 191751, 191754, 191757, 191760, 191763, - 191766, 191769, 191772, 191775, 191778, 191781, 191784, 191787, 191790, - 191793, 191796, 191799, 191802, 191805, 191808, 191811, 191814, 191817, - 191820, 191823, 191826, 191829, 191832, 191835, 191838, 191841, 191844, - 191847, 191850, 191853, 191856, 191859, 191862, 191865, 191868, 191871, - 191874, 191877, 191880, 191883, 191886, 191889, 191892, 191895, 191898, - 191901, 191904, 191907, 191910, 191913, 191916, 191919, 191922, 191925, - 191928, 191931, 191934, 191937, 191940, 191943, 191946, 191949, 191952, - 191955, 191958, 191961, 191964, 191967, 191970, 191973, 191976, 191979, - 191982, 191985, 191988, 191991, 191994, 191997, 192000, 192003, 192006, - 192009, 192012, 192015, 192018, 192021, 192024, 192027, 192030, 192033, - 192036, 192039, 192042, 192045, 192048, 192051, 192054, 192057, 192060, - 192063, 192066, 192069, 192072, 192075, 192078, 192081, 192084, 192087, - 192090, 192093, 192096, 192099, 192102, 192105, 192108, 192111, 192114, - 192117, 192120, 192123, 192126, 192129, 192132, 192135, 192138, 192141, - 192144, 192147, 192150, 192153, 192156, 192159, 192162, 192165, 192168, - 192171, 192174, 192177, 192180, 192183, 192186, 192189, 192192, 192195, - 192198, 192201, 192204, 192207, 192210, 192213, 192216, 192219, 192222, - 192225, 192228, 192231, 192234, 192237, 192240, 192243, 192246, 192249, - 192252, 192255, 192258, 192261, 192264, 192267, 192270, 192273, 192276, - 192279, 192282, 192285, 192288, 192291, 192294, 192297, 192300, 192303, - 192306, 192309, 192312, 192315, 192318, 192321, 192324, 192327, 192330, - 192333, 192336, 192339, 192342, 192345, 192348, 192351, 192354, 192357, - 192360, 192363, 192366, 192369, 192372, 192375, 192378, 192381, 192384, - 192387, 192390, 192393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 192396, 192398, 192400, 192405, 192407, 192412, 192414, 192419, 192421, - 192426, 192428, 192430, 192432, 192434, 192436, 192438, 192440, 192442, - 192444, 192448, 192452, 192454, 192456, 192460, 192464, 192469, 192471, - 192473, 192475, 192479, 192482, 192484, 192488, 192490, 192494, 192496, - 192500, 192503, 192505, 192509, 192513, 192515, 192521, 192523, 192528, - 192530, 192535, 192537, 192542, 192544, 192549, 192551, 192555, 192557, - 192561, 192563, 192570, 192572, 192574, 192576, 192581, 192583, 192585, - 192587, 192589, 192591, 192593, 192598, 192602, 192604, 192609, 192613, - 192615, 192620, 192624, 192626, 192631, 192635, 192637, 192639, 192641, - 192643, 192647, 192649, 192654, 192656, 192662, 192664, 192670, 192672, - 192674, 192676, 192680, 192682, 192689, 192691, 192698, 192700, 192706, - 192712, 192714, 192721, 192728, 192730, 192736, 192741, 192743, 192749, - 192755, 192757, 192763, 192769, 192771, 192777, 192781, 192783, 192788, - 192790, 192792, 192797, 192799, 192801, 192807, 192809, 192814, 192818, - 192820, 192825, 192829, 192831, 192837, 192839, 192843, 192845, 192849, - 192851, 192858, 192865, 192867, 192874, 192881, 192883, 192888, 192890, - 192898, 192900, 192906, 192908, 192914, 192916, 192920, 192922, 192928, - 192930, 192934, 192936, 192942, 192944, 192946, 192948, 192953, 192958, - 192960, 192969, 192971, 192981, 192986, 192993, 193000, 193005, 193010, - 193022, 193026, 193030, 193034, 193038, 193040, 193042, 193044, 193046, - 193048, 193054, 193056, 193058, 193060, 193062, 193064, 193066, 193068, - 193070, 193072, 193074, 193076, 193078, 193080, 193082, 193084, 193086, - 193088, 193094, 193101, 193106, 193114, 193122, 193127, 193133, 193135, - 193137, 193139, 193141, 193143, 193145, 193147, 193149, 193151, 193153, - 193155, 193157, 193159, 193161, 193163, 193165, 193177, 193182, 193184, - 193186, 193192, 193204, 193210, 193216, 193222, 193228, 193232, 193243, - 193245, 193247, 193249, 193251, 193253, 193255, 193257, 193259, 193261, - 193263, 193265, 193267, 193269, 193271, 193273, 193275, 193277, 193279, - 193281, 193283, 193285, 193287, 193289, 193291, 193293, 193295, 193297, - 193299, 193301, 193303, 193305, 193307, 193309, 193311, 193313, 193315, - 193317, 193319, 193321, 193323, 193325, 193327, 193329, 193331, 193333, - 193335, 193337, 193339, 193341, 193343, 193345, 193347, 193349, 193351, - 193353, 193355, 193357, 193359, 193361, 193363, 193365, 193367, 193369, - 193371, 193373, 193375, 193377, 193379, 193381, 193383, 193385, 193387, - 193389, 193391, 193393, 193395, 193397, 193399, 193401, 193403, 193405, - 193407, 193409, 193411, 193413, 193415, 193417, 193419, 193421, 193423, - 193425, 193427, 193429, 193431, 193433, 193435, 193437, 193439, 193441, - 193443, 193445, 193447, 193449, 193451, 193453, 193455, 193457, 193459, - 193461, 193463, 193465, 193467, 193469, 193471, 193473, 193475, 193477, - 193479, 193481, 193483, 193485, 193487, 193489, 193491, 193493, 193495, - 193497, 193499, 193501, 193503, 193505, 193507, 193509, 193511, 193513, - 193515, 193517, 193519, 193521, 193523, 193525, 193527, 193529, 193531, - 193533, 193535, 193537, 193539, 193541, 193543, 193545, 193547, 193549, - 193551, 193553, 193555, 193557, 193559, 193561, 193563, 193565, 193567, - 193569, 193571, 193573, 193575, 193577, 193579, 193581, 193583, 193585, - 193587, 193589, 193591, 193593, 193595, 193597, 193599, 193601, 193603, - 193605, 193607, 193609, 193611, 193613, 193615, 193617, 193619, 193621, - 193623, 193625, 193627, 193629, 193631, 193633, 193635, 193637, 193639, - 193641, 193643, 193645, 193647, 193649, 193651, 193653, 193655, 193657, - 193659, 193661, 193663, 193665, 193667, 193669, 193671, 193673, 193675, - 193677, 193679, 193681, 193683, 193685, 193687, 193689, 193691, 193693, - 193695, 193697, 193699, 193701, 193703, 193705, 193707, 193709, 193711, - 193713, 193715, 193717, 193719, 193721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 191161, 191165, 191170, 191175, 191179, 191184, 191189, 191193, 191197, + 191202, 191207, 191211, 191215, 191219, 191223, 191229, 191233, 191238, + 191242, 191246, 191250, 191254, 191258, 191262, 191266, 191270, 191274, + 191278, 191282, 191287, 191292, 191297, 191302, 191308, 191314, 191321, + 191328, 191335, 191341, 191348, 191355, 191362, 191368, 191375, 191382, + 191388, 191395, 191402, 191408, 191415, 191422, 191428, 191435, 191442, + 191448, 191455, 191462, 191469, 191476, 191483, 191489, 191495, 191501, + 191507, 191512, 191518, 191524, 191531, 191538, 191545, 191551, 191558, + 191565, 191572, 191578, 191585, 191592, 191598, 191605, 191612, 191618, + 191625, 191632, 191638, 191645, 191652, 191658, 191665, 191672, 191679, + 191686, 191693, 191700, 191705, 191712, 191716, 191720, 191723, 191726, + 191729, 191732, 191735, 191738, 191741, 191744, 191747, 191750, 191753, + 191756, 191759, 191762, 191765, 191768, 191771, 191774, 191777, 191780, + 191783, 191786, 191789, 191792, 191795, 191798, 191801, 191804, 191807, + 191810, 191813, 191816, 191819, 191822, 191825, 191828, 191831, 191834, + 191837, 191840, 191843, 191846, 191849, 191852, 191855, 191858, 191861, + 191864, 191867, 191870, 191873, 191876, 191879, 191882, 191885, 191888, + 191891, 191894, 191897, 191900, 191903, 191906, 191909, 191912, 191915, + 191918, 191921, 191924, 191927, 191930, 191933, 191936, 191939, 191942, + 191945, 191948, 191951, 191954, 191957, 191960, 191963, 191966, 191969, + 191972, 191975, 191978, 191981, 191984, 191987, 191990, 191993, 191996, + 191999, 192002, 192005, 192008, 192011, 192014, 192017, 192020, 192023, + 192026, 192029, 192032, 192035, 192038, 192041, 192044, 192047, 192050, + 192053, 192056, 192059, 192062, 192065, 192068, 192071, 192074, 192077, + 192080, 192083, 192086, 192089, 192092, 192095, 192098, 192101, 192104, + 192107, 192110, 192113, 192116, 192119, 192122, 192125, 192128, 192131, + 192134, 192137, 192140, 192143, 192146, 192149, 192152, 192155, 192158, + 192161, 192164, 192167, 192170, 192173, 192176, 192179, 192182, 192185, + 192188, 192191, 192194, 192197, 192200, 192203, 192206, 192209, 192212, + 192215, 192218, 192221, 192224, 192227, 192230, 192233, 192236, 192239, + 192242, 192245, 192248, 192251, 192254, 192257, 192260, 192263, 192266, + 192269, 192272, 192275, 192278, 192281, 192284, 192287, 192290, 192293, + 192296, 192299, 192302, 192305, 192308, 192311, 192314, 192317, 192320, + 192323, 192326, 192329, 192332, 192335, 192338, 192341, 192344, 192347, + 192350, 192353, 192356, 192359, 192362, 192365, 192368, 192371, 192374, + 192377, 192380, 192383, 192386, 192389, 192392, 192395, 192398, 192401, + 192404, 192407, 192410, 192413, 192416, 192419, 192422, 192425, 192428, + 192431, 192434, 192437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 192440, 192442, 192444, 192449, 192451, 192456, 192458, 192463, 192465, + 192470, 192472, 192474, 192476, 192478, 192480, 192482, 192484, 192486, + 192488, 192492, 192496, 192498, 192500, 192504, 192508, 192513, 192515, + 192517, 192519, 192523, 192526, 192528, 192532, 192534, 192538, 192540, + 192544, 192547, 192549, 192553, 192557, 192559, 192565, 192567, 192572, + 192574, 192579, 192581, 192586, 192588, 192593, 192595, 192599, 192601, + 192605, 192607, 192614, 192616, 192618, 192620, 192625, 192627, 192629, + 192631, 192633, 192635, 192637, 192642, 192646, 192648, 192653, 192657, + 192659, 192664, 192668, 192670, 192675, 192679, 192681, 192683, 192685, + 192687, 192691, 192693, 192698, 192700, 192706, 192708, 192714, 192716, + 192718, 192720, 192724, 192726, 192733, 192735, 192742, 192744, 192750, + 192756, 192758, 192765, 192772, 192774, 192780, 192785, 192787, 192793, + 192799, 192801, 192807, 192813, 192815, 192821, 192825, 192827, 192832, + 192834, 192836, 192841, 192843, 192845, 192851, 192853, 192858, 192862, + 192864, 192869, 192873, 192875, 192881, 192883, 192887, 192889, 192893, + 192895, 192902, 192909, 192911, 192918, 192925, 192927, 192932, 192934, + 192942, 192944, 192950, 192952, 192958, 192960, 192964, 192966, 192972, + 192974, 192978, 192980, 192986, 192988, 192990, 192992, 192997, 193002, + 193004, 193013, 193015, 193025, 193030, 193037, 193044, 193049, 193054, + 193066, 193070, 193074, 193078, 193082, 193084, 193086, 193088, 193090, + 193092, 193098, 193100, 193102, 193104, 193106, 193108, 193110, 193112, + 193114, 193116, 193118, 193120, 193122, 193124, 193126, 193128, 193130, + 193132, 193138, 193145, 193150, 193158, 193166, 193171, 193177, 193179, + 193181, 193183, 193185, 193187, 193189, 193191, 193193, 193195, 193197, + 193199, 193201, 193203, 193205, 193207, 193209, 193221, 193226, 193228, + 193230, 193236, 193248, 193254, 193260, 193266, 193272, 193276, 193287, + 193289, 193291, 193293, 193295, 193297, 193299, 193301, 193303, 193305, + 193307, 193309, 193311, 193313, 193315, 193317, 193319, 193321, 193323, + 193325, 193327, 193329, 193331, 193333, 193335, 193337, 193339, 193341, + 193343, 193345, 193347, 193349, 193351, 193353, 193355, 193357, 193359, + 193361, 193363, 193365, 193367, 193369, 193371, 193373, 193375, 193377, + 193379, 193381, 193383, 193385, 193387, 193389, 193391, 193393, 193395, + 193397, 193399, 193401, 193403, 193405, 193407, 193409, 193411, 193413, + 193415, 193417, 193419, 193421, 193423, 193425, 193427, 193429, 193431, + 193433, 193435, 193437, 193439, 193441, 193443, 193445, 193447, 193449, + 193451, 193453, 193455, 193457, 193459, 193461, 193463, 193465, 193467, + 193469, 193471, 193473, 193475, 193477, 193479, 193481, 193483, 193485, + 193487, 193489, 193491, 193493, 193495, 193497, 193499, 193501, 193503, + 193505, 193507, 193509, 193511, 193513, 193515, 193517, 193519, 193521, + 193523, 193525, 193527, 193529, 193531, 193533, 193535, 193537, 193539, + 193541, 193543, 193545, 193547, 193549, 193551, 193553, 193555, 193557, + 193559, 193561, 193563, 193565, 193567, 193569, 193571, 193573, 193575, + 193577, 193579, 193581, 193583, 193585, 193587, 193589, 193591, 193593, + 193595, 193597, 193599, 193601, 193603, 193605, 193607, 193609, 193611, + 193613, 193615, 193617, 193619, 193621, 193623, 193625, 193627, 193629, + 193631, 193633, 193635, 193637, 193639, 193641, 193643, 193645, 193647, + 193649, 193651, 193653, 193655, 193657, 193659, 193661, 193663, 193665, + 193667, 193669, 193671, 193673, 193675, 193677, 193679, 193681, 193683, + 193685, 193687, 193689, 193691, 193693, 193695, 193697, 193699, 193701, + 193703, 193705, 193707, 193709, 193711, 193713, 193715, 193717, 193719, + 193721, 193723, 193725, 193727, 193729, 193731, 193733, 193735, 193737, + 193739, 193741, 193743, 193745, 193747, 193749, 193751, 193753, 193755, + 193757, 193759, 193761, 193763, 193765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 193723, 193727, 193731, 193736, 193740, 193744, 193748, - 193752, 193756, 193760, 193764, 193768, 193772, 193782, 193792, 193803, - 193814, 193824, 193834, 193844, 193854, 193868, 193882, 193896, 193910, - 193919, 193928, 193941, 193954, 193967, 193980, 193990, 194000, 194011, - 194022, 194033, 194044, 194055, 194064, 194074, 194084, 194094, 194104, - 194115, 194126, 194137, 194148, 194159, 194170, 194181, 194192, 194203, - 194214, 194225, 194239, 194250, 194264, 194272, 194283, 194291, 194299, - 194307, 194315, 194323, 194331, 194341, 194351, 194361, 194371, 194381, - 194391, 194401, 194411, 194419, 194428, 194437, 194446, 194455, 194463, - 194471, 194481, 194491, 194502, 194513, 194525, 194536, 194546, 194557, - 194567, 194578, 194586, 194593, 194600, 194607, 194614, 194621, 194628, - 194635, 194642, 194650, 194658, 194666, 194674, 194682, 194690, 194698, - 194706, 194714, 194722, 194730, 194735, 194739, 194743, 194747, 194751, - 194755, 194759, 194763, 194767, 194771, 194775, 194779, 194782, 194785, - 194789, 194793, 194797, 194801, 194805, 194809, 194813, 194817, 194821, - 194825, 194829, 194833, 194837, 194841, 194845, 194849, 194853, 194857, - 194861, 194865, 194869, 194873, 194877, 194881, 194885, 194889, 194893, - 194897, 194901, 194905, 194909, 194913, 194917, 194921, 194925, 194929, - 194933, 194937, 194941, 194945, 194949, 194953, 194957, 194961, 194965, - 194969, 194973, 194977, 194981, 194985, 194989, 194993, 194997, 195001, - 195005, 195009, 195013, 195017, 195021, 195025, 195029, 195033, 195037, - 195041, 195045, 195049, 195053, 195057, 195061, 195065, 195069, 195073, - 195077, 195081, 195085, 195089, 195093, 195097, 195101, 195105, 195109, - 195113, 195117, 195121, 195125, 195128, 195132, 195136, 195140, 195144, - 195148, 195152, 195156, 195160, 195164, 195168, 195172, 195176, 195180, - 195184, 195188, 195192, 195196, 195200, 195204, 195208, 195212, 195216, - 195220, 195224, 195228, 195232, 195236, 195240, 195244, 195248, 195252, - 195256, 195260, 195264, 195268, 195272, 195276, 195280, 195284, 195288, - 195292, 195296, 195300, 195304, 195308, 195312, 195316, 195320, 195324, - 195328, 195332, 195336, 195340, 195344, 195348, 195352, 195356, 195360, - 195364, 195368, 195372, 195376, 195380, 195384, 195388, 195392, 195396, - 195400, 195404, 195408, 195412, 195416, 195420, 195424, 195428, 195432, - 195436, 195440, 195444, 195448, 195452, 195456, 195460, 195464, 195468, - 195472, 195476, 195480, 195484, 195488, 195492, 195496, 195500, 195504, - 195508, 195512, 195516, 195520, 195524, 195528, 195532, 195536, 195540, - 195544, 195548, 195552, 195556, 195560, 195564, 195568, 195572, 195576, - 195580, 195584, 195588, 195592, 195596, 195600, 195604, 195608, 195612, - 195616, 195620, 195624, 195628, 195632, 195636, 195640, 195644, 195648, - 195652, 195656, 195660, 195664, 195668, 195672, 195676, 195680, 195684, - 195688, 195692, 195696, 195700, 195704, 195708, 195712, 195716, 195720, - 195724, 195728, 195732, 195736, 195740, 195744, 195748, 195752, 195756, - 195760, 195764, 195768, 195772, 195776, 195780, 195784, 195788, 195792, - 195796, 195800, 195804, 195808, 195812, 195816, 195820, 195824, 195828, - 195832, 195836, 195840, 195844, 195848, 195852, 195856, 195860, 195864, - 195868, 195872, 195876, 195880, 195884, 195888, 195892, 195897, 195902, - 195907, 195911, 195917, 195924, 195931, 195938, 195945, 195952, 195959, - 195966, 195973, 195980, 195987, 195994, 196001, 196008, 196014, 196021, - 196028, 196034, 196041, 196048, 196055, 196062, 196069, 196076, 196083, - 196090, 196097, 196104, 196111, 196118, 196125, 196131, 196137, 196143, - 196150, 196159, 196168, 196177, 196186, 196191, 196196, 196203, 196210, - 196217, 196224, 196231, 196237, 196243, 196249, 196255, 196261, 196267, - 196273, 196278, 196284, 196294, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 193767, 193771, 193775, 193780, 193784, 193788, 193792, + 193796, 193800, 193804, 193808, 193812, 193816, 193826, 193836, 193847, + 193858, 193868, 193878, 193888, 193898, 193912, 193926, 193940, 193954, + 193963, 193972, 193985, 193998, 194011, 194024, 194034, 194044, 194055, + 194066, 194077, 194088, 194099, 194108, 194118, 194128, 194138, 194148, + 194159, 194170, 194181, 194192, 194203, 194214, 194225, 194236, 194247, + 194258, 194269, 194283, 194294, 194308, 194316, 194327, 194335, 194343, + 194351, 194359, 194367, 194375, 194385, 194395, 194405, 194415, 194425, + 194435, 194445, 194455, 194463, 194472, 194481, 194490, 194499, 194507, + 194515, 194525, 194535, 194546, 194557, 194569, 194580, 194590, 194601, + 194611, 194622, 194630, 194637, 194644, 194651, 194658, 194665, 194672, + 194679, 194686, 194694, 194702, 194710, 194718, 194726, 194734, 194742, + 194750, 194758, 194766, 194774, 194779, 194783, 194787, 194791, 194795, + 194799, 194803, 194807, 194811, 194815, 194819, 194823, 194826, 194829, + 194833, 194837, 194841, 194845, 194849, 194853, 194857, 194861, 194865, + 194869, 194873, 194877, 194881, 194885, 194889, 194893, 194897, 194901, + 194905, 194909, 194913, 194917, 194921, 194925, 194929, 194933, 194937, + 194941, 194945, 194949, 194953, 194957, 194961, 194965, 194969, 194973, + 194977, 194981, 194985, 194989, 194993, 194997, 195001, 195005, 195009, + 195013, 195017, 195021, 195025, 195029, 195033, 195037, 195041, 195045, + 195049, 195053, 195057, 195061, 195065, 195069, 195073, 195077, 195081, + 195085, 195089, 195093, 195097, 195101, 195105, 195109, 195113, 195117, + 195121, 195125, 195129, 195133, 195137, 195141, 195145, 195149, 195153, + 195157, 195161, 195165, 195169, 195172, 195176, 195180, 195184, 195188, + 195192, 195196, 195200, 195204, 195208, 195212, 195216, 195220, 195224, + 195228, 195232, 195236, 195240, 195244, 195248, 195252, 195256, 195260, + 195264, 195268, 195272, 195276, 195280, 195284, 195288, 195292, 195296, + 195300, 195304, 195308, 195312, 195316, 195320, 195324, 195328, 195332, + 195336, 195340, 195344, 195348, 195352, 195356, 195360, 195364, 195368, + 195372, 195376, 195380, 195384, 195388, 195392, 195396, 195400, 195404, + 195408, 195412, 195416, 195420, 195424, 195428, 195432, 195436, 195440, + 195444, 195448, 195452, 195456, 195460, 195464, 195468, 195472, 195476, + 195480, 195484, 195488, 195492, 195496, 195500, 195504, 195508, 195512, + 195516, 195520, 195524, 195528, 195532, 195536, 195540, 195544, 195548, + 195552, 195556, 195560, 195564, 195568, 195572, 195576, 195580, 195584, + 195588, 195592, 195596, 195600, 195604, 195608, 195612, 195616, 195620, + 195624, 195628, 195632, 195636, 195640, 195644, 195648, 195652, 195656, + 195660, 195664, 195668, 195672, 195676, 195680, 195684, 195688, 195692, + 195696, 195700, 195704, 195708, 195712, 195716, 195720, 195724, 195728, + 195732, 195736, 195740, 195744, 195748, 195752, 195756, 195760, 195764, + 195768, 195772, 195776, 195780, 195784, 195788, 195792, 195796, 195800, + 195804, 195808, 195812, 195816, 195820, 195824, 195828, 195832, 195836, + 195840, 195844, 195848, 195852, 195856, 195860, 195864, 195868, 195872, + 195876, 195880, 195884, 195888, 195892, 195896, 195900, 195904, 195908, + 195912, 195916, 195920, 195924, 195928, 195932, 195936, 195941, 195946, + 195951, 195955, 195961, 195968, 195975, 195982, 195989, 195996, 196003, + 196010, 196017, 196024, 196031, 196038, 196045, 196052, 196058, 196065, + 196072, 196078, 196085, 196092, 196099, 196106, 196113, 196120, 196127, + 196134, 196141, 196148, 196155, 196162, 196169, 196175, 196181, 196187, + 196194, 196203, 196212, 196221, 196230, 196235, 196240, 196247, 196254, + 196261, 196268, 196275, 196281, 196287, 196293, 196299, 196305, 196311, + 196317, 196322, 196328, 196338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; @@ -25771,7 +25777,7 @@ static const unsigned int code_hash[] = { 64721, 0, 0, 0, 0, 0, 983789, 0, 0, 5311, 0, 965, 0, 11993, 78055, 11278, 128787, 0, 0, 0, 121076, 120705, 0, 6294, 3144, 0, 0, 65019, 0, 0, 0, 0, 118721, 63966, 2330, 535, 3148, 12375, 110774, 0, 10556, 2475, 12388, - 4889, 0, 67863, 120404, 0, 72750, 2342, 0, 0, 0, 4894, 0, 4890, 0, 0, 0, + 4889, 0, 67863, 120404, 0, 12287, 2342, 0, 0, 0, 4894, 0, 4890, 0, 0, 0, 4893, 128426, 6571, 118581, 4888, 4157, 78048, 78049, 78046, 11263, 0, 78045, 64895, 121437, 0, 0, 0, 0, 0, 119041, 2332, 78063, 78060, 78061, 64932, 78059, 65125, 121098, 0, 0, 129991, 73941, 78066, 12203, 78064, @@ -26147,7 +26153,7 @@ static const unsigned int code_hash[] = { 72720, 72020, 11386, 1009, 70405, 66871, 2333, 0, 0, 0, 0, 0, 70407, 128121, 0, 0, 0, 0, 983657, 66949, 0, 74968, 0, 0, 110601, 0, 0, 41261, 0, 0, 0, 0, 118989, 6736, 917883, 124132, 43010, 66952, 0, 69635, 73011, - 983716, 0, 0, 7293, 0, 0, 0, 0, 111332, 0, 128245, 69928, 127071, 0, + 983716, 72750, 0, 7293, 0, 0, 0, 0, 111332, 0, 128245, 69928, 127071, 0, 127072, 64445, 111336, 6635, 0, 0, 72707, 74936, 0, 0, 917876, 0, 93025, 66948, 0, 111329, 0, 129887, 128045, 65219, 11925, 0, 92434, 0, 0, 9845, 101317, 7546, 0, 0, 11230, 4985, 13288, 672, 8098, 0, 0, 0, 128126, @@ -27037,7 +27043,7 @@ static const unsigned int code_hash[] = { 0, 64260, 0, 12606, 0, 0, 0, 0, 562, 983614, 0, 129648, 66455, 127533, 3219, 0, 0, 0, 1037, 0, 64491, 0, 78579, 78572, 78580, 4568, 549, 0, 0, 0, 0, 0, 128095, 70851, 2205, 0, 0, 0, 0, 129716, 0, 10825, 8079, 118962, - 0, 0, 0, 128855, 0, 13071, 0, 0, 41049, 42840, 43614, 129341, 74881, + 12285, 0, 0, 128855, 0, 13071, 0, 0, 41049, 42840, 43614, 129341, 74881, 74596, 127191, 5212, 0, 66402, 119191, 0, 9747, 0, 0, 129778, 984008, 41047, 1668, 0, 0, 0, 1187, 0, 74416, 0, 0, 0, 0, 3240, 128518, 9213, 0, 0, 0, 127174, 69822, 0, 0, 0, 0, 1623, 0, 0, 0, 0, 0, 0, 11272, 0, 73914, @@ -28020,7 +28026,7 @@ static const unsigned int code_hash[] = { 0, 0, 0, 4843, 0, 74772, 4098, 0, 0, 0, 3436, 0, 127279, 12817, 0, 126607, 118678, 0, 0, 0, 74433, 0, 0, 71962, 0, 121296, 65916, 0, 0, 121458, 0, 129107, 93815, 0, 73743, 0, 0, 983133, 67676, 0, 0, 74627, - 128928, 0, 127892, 0, 71326, 67222, 0, 75013, 92435, 0, 128500, 0, 0, + 128928, 0, 127892, 0, 71326, 67222, 0, 75013, 92435, 12284, 128500, 0, 0, 9613, 43425, 4526, 121415, 0, 64520, 71336, 0, 0, 55278, 10228, 64957, 0, 0, 3807, 2081, 66640, 0, 0, 0, 0, 119269, 0, 128688, 0, 128142, 1451, 0, 0, 4134, 0, 74847, 0, 74793, 0, 78913, 74295, 9960, 1201, 0, 12846, @@ -28492,12 +28498,12 @@ static const unsigned int code_hash[] = { 78726, 0, 724, 0, 113675, 78749, 9975, 78746, 78747, 78744, 4175, 78741, 78743, 78751, 939, 0, 128799, 983120, 0, 0, 0, 78763, 78764, 78760, 78761, 78758, 78759, 78755, 8425, 0, 0, 0, 8188, 0, 0, 0, 0, 0, 6370, 0, - 7827, 68441, 75008, 0, 917943, 0, 118863, 0, 0, 0, 0, 121243, 73988, 0, - 113668, 0, 11012, 0, 43764, 178, 12972, 74620, 113671, 0, 113735, 0, - 66764, 0, 0, 65690, 72339, 0, 0, 917950, 9252, 0, 4652, 74259, 0, 917947, - 0, 0, 0, 10806, 0, 0, 70016, 0, 6723, 0, 0, 6993, 0, 0, 12855, 0, 0, - 11390, 0, 0, 0, 92503, 0, 0, 983162, 125270, 92627, 8278, 0, 4034, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12750, 9350, 66037, 0, 0, 73700, 12747, 0, 0, + 7827, 68441, 75008, 0, 917943, 0, 118863, 0, 0, 0, 0, 121243, 73988, + 12286, 113668, 0, 11012, 0, 43764, 178, 12972, 74620, 113671, 0, 113735, + 0, 66764, 0, 0, 65690, 72339, 0, 0, 917950, 9252, 0, 4652, 74259, 0, + 917947, 0, 0, 0, 10806, 0, 0, 70016, 0, 6723, 0, 0, 6993, 0, 0, 12855, 0, + 0, 11390, 0, 0, 0, 92503, 0, 0, 983162, 125270, 92627, 8278, 0, 4034, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12750, 9350, 66037, 0, 0, 73700, 12747, 0, 0, 128064, 8922, 74640, 0, 0, 43150, 0, 983090, 983088, 66779, 66777, 10813, 2592, 43139, 0, 0, 118612, 0, 0, 71891, 0, 0, 0, 0, 0, 0, 71697, 0, 128825, 1596, 0, 0, 0, 0, 6838, 66572, 0, 126574, 120627, 8092, 12805, @@ -29642,7 +29648,7 @@ static const unsigned int code_hash[] = { 100884, 0, 0, 0, 123564, 0, 5134, 69980, 322, 4643, 5132, 0, 194942, 0, 5143, 0, 72309, 119628, 0, 0, 72112, 0, 129964, 0, 0, 0, 0, 0, 0, 73097, 0, 0, 0, 127923, 0, 0, 0, 0, 0, 3234, 0, 100886, 0, 100889, 118924, 0, 0, - 100875, 68231, 74489, 100872, 120746, 0, 100876, 0, 12714, 0, 64585, + 100875, 68231, 74489, 100872, 120746, 12783, 100876, 0, 12714, 0, 64585, 93775, 0, 0, 0, 129428, 0, 11027, 0, 10059, 0, 64524, 9767, 789, 1749, 0, 66766, 984010, 320, 0, 0, 0, 3049, 0, 6471, 0, 74479, 9925, 127356, 127355, 127358, 4960, 5549, 127359, 127346, 127345, 127348, 5418, 127350, diff --git a/Modules/xxsubtype.c b/Modules/xxsubtype.c index 63b22268c597b6..560f43e5b3a643 100644 --- a/Modules/xxsubtype.c +++ b/Modules/xxsubtype.c @@ -1,5 +1,7 @@ #include "Python.h" + #include // offsetof() +#include // clock() PyDoc_STRVAR(xxsubtype__doc__, diff --git a/Objects/abstract.c b/Objects/abstract.c index c113364a88a26a..55d3b3ada296be 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -9,9 +9,8 @@ #include "pycore_pyerrors.h" // _PyErr_Occurred() #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_unionobject.h" // _PyUnion_Check() -#include -#include // offsetof() +#include // offsetof() /* Shorthands to return certain errors */ @@ -2394,11 +2393,13 @@ int PyMapping_GetOptionalItemString(PyObject *obj, const char *key, PyObject **result) { if (key == NULL) { + *result = NULL; null_error(); return -1; } PyObject *okey = PyUnicode_FromString(key); if (okey == NULL) { + *result = NULL; return -1; } int rc = PyMapping_GetOptionalItem(obj, okey, result); @@ -2425,6 +2426,24 @@ PyMapping_SetItemString(PyObject *o, const char *key, PyObject *value) return r; } +int +PyMapping_HasKeyStringWithError(PyObject *obj, const char *key) +{ + PyObject *res; + int rc = PyMapping_GetOptionalItemString(obj, key, &res); + Py_XDECREF(res); + return rc; +} + +int +PyMapping_HasKeyWithError(PyObject *obj, PyObject *key) +{ + PyObject *res; + int rc = PyMapping_GetOptionalItem(obj, key, &res); + Py_XDECREF(res); + return rc; +} + int PyMapping_HasKeyString(PyObject *o, const char *key) { diff --git a/Objects/clinic/unicodeobject.c.h b/Objects/clinic/unicodeobject.c.h index cfee9b8aa1fa8c..42b8a3c69cad8a 100644 --- a/Objects/clinic/unicodeobject.c.h +++ b/Objects/clinic/unicodeobject.c.h @@ -950,7 +950,7 @@ PyDoc_STRVAR(unicode_split__doc__, " The separator used to split the string.\n" "\n" " When set to None (the default value), will split on any whitespace\n" -" character (including \\\\n \\\\r \\\\t \\\\f and spaces) and will discard\n" +" character (including \\n \\r \\t \\f and spaces) and will discard\n" " empty strings from the result.\n" " maxsplit\n" " Maximum number of splits (starting from the left).\n" @@ -1074,7 +1074,7 @@ PyDoc_STRVAR(unicode_rsplit__doc__, " The separator used to split the string.\n" "\n" " When set to None (the default value), will split on any whitespace\n" -" character (including \\\\n \\\\r \\\\t \\\\f and spaces) and will discard\n" +" character (including \\n \\r \\t \\f and spaces) and will discard\n" " empty strings from the result.\n" " maxsplit\n" " Maximum number of splits (starting from the left).\n" @@ -1504,4 +1504,4 @@ unicode_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) exit: return return_value; } -/*[clinic end generated code: output=8d08dfbb814c4393 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4acdcfdc93f2a0f6 input=a9049054013a1b77]*/ diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 70a0c2ebd66b24..f662b8e354bb1e 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -427,9 +427,10 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con) co->co_framesize = nlocalsplus + con->stacksize + FRAME_SPECIALS_SIZE; co->co_ncellvars = ncellvars; co->co_nfreevars = nfreevars; - co->co_version = _Py_next_func_version; - if (_Py_next_func_version != 0) { - _Py_next_func_version++; + PyInterpreterState *interp = _PyInterpreterState_GET(); + co->co_version = interp->next_func_version; + if (interp->next_func_version != 0) { + interp->next_func_version++; } co->_co_monitoring = NULL; co->_co_instrumentation_version = 0; @@ -1479,6 +1480,23 @@ clear_executors(PyCodeObject *co) co->co_executors = NULL; } +void +_PyCode_Clear_Executors(PyCodeObject *code) { + int code_len = (int)Py_SIZE(code); + for (int i = 0; i < code_len; i += _PyInstruction_GetLength(code, i)) { + _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; + uint8_t opcode = instr->op.code; + uint8_t oparg = instr->op.arg; + if (opcode == ENTER_EXECUTOR) { + _PyExecutorObject *exec = code->co_executors->executors[oparg]; + assert(exec->vm_data.opcode != ENTER_EXECUTOR); + instr->op.code = exec->vm_data.opcode; + instr->op.arg = exec->vm_data.oparg; + } + } + clear_executors(code); +} + static void deopt_code(PyCodeObject *code, _Py_CODEUNIT *instructions) { @@ -1487,7 +1505,7 @@ deopt_code(PyCodeObject *code, _Py_CODEUNIT *instructions) int opcode = _Py_GetBaseOpcode(code, i); if (opcode == ENTER_EXECUTOR) { _PyExecutorObject *exec = code->co_executors->executors[instructions[i].op.arg]; - opcode = exec->vm_data.opcode; + opcode = _PyOpcode_Deopt[exec->vm_data.opcode]; instructions[i].op.arg = exec->vm_data.oparg; } assert(opcode != ENTER_EXECUTOR); @@ -1780,28 +1798,26 @@ code_richcompare(PyObject *self, PyObject *other, int op) for (int i = 0; i < Py_SIZE(co); i++) { _Py_CODEUNIT co_instr = _PyCode_CODE(co)[i]; _Py_CODEUNIT cp_instr = _PyCode_CODE(cp)[i]; - uint8_t co_code = co_instr.op.code; + uint8_t co_code = _Py_GetBaseOpcode(co, i); uint8_t co_arg = co_instr.op.arg; - uint8_t cp_code = cp_instr.op.code; + uint8_t cp_code = _Py_GetBaseOpcode(cp, i); uint8_t cp_arg = cp_instr.op.arg; if (co_code == ENTER_EXECUTOR) { const int exec_index = co_arg; _PyExecutorObject *exec = co->co_executors->executors[exec_index]; - co_code = exec->vm_data.opcode; + co_code = _PyOpcode_Deopt[exec->vm_data.opcode]; co_arg = exec->vm_data.oparg; } assert(co_code != ENTER_EXECUTOR); - co_code = _PyOpcode_Deopt[co_code]; if (cp_code == ENTER_EXECUTOR) { const int exec_index = cp_arg; _PyExecutorObject *exec = cp->co_executors->executors[exec_index]; - cp_code = exec->vm_data.opcode; + cp_code = _PyOpcode_Deopt[exec->vm_data.opcode]; cp_arg = exec->vm_data.oparg; } assert(cp_code != ENTER_EXECUTOR); - cp_code = _PyOpcode_Deopt[cp_code]; if (co_code != cp_code || co_arg != cp_arg) { goto unequal; @@ -2145,6 +2161,7 @@ static struct PyMethodDef code_methods[] = { {"co_positions", (PyCFunction)code_positionsiterator, METH_NOARGS}, CODE_REPLACE_METHODDEF CODE__VARNAME_FROM_OPARG_METHODDEF + {"__replace__", _PyCFunction_CAST(code_replace), METH_FASTCALL|METH_KEYWORDS}, {NULL, NULL} /* sentinel */ }; diff --git a/Objects/descrobject.c b/Objects/descrobject.c index a744c3d1e58658..56ce34f80ca8e9 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -4,6 +4,7 @@ #include "pycore_abstract.h" // _PyObject_RealIsSubclass() #include "pycore_call.h" // _PyStack_AsDict() #include "pycore_ceval.h" // _Py_EnterRecursiveCallTstate() +#include "pycore_emscripten_trampoline.h" // descr_set_trampoline_call(), descr_get_trampoline_call() #include "pycore_descrobject.h" // _PyMethodWrapper_Type #include "pycore_object.h" // _PyObject_GC_UNTRACK() #include "pycore_pystate.h" // _PyThreadState_GET() @@ -16,25 +17,6 @@ class property "propertyobject *" "&PyProperty_Type" [clinic start generated code]*/ /*[clinic end generated code: output=da39a3ee5e6b4b0d input=556352653fd4c02e]*/ -// see pycore_object.h -#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) -#include -EM_JS(int, descr_set_trampoline_call, (setter set, PyObject *obj, PyObject *value, void *closure), { - return wasmTable.get(set)(obj, value, closure); -}); - -EM_JS(PyObject*, descr_get_trampoline_call, (getter get, PyObject *obj, void *closure), { - return wasmTable.get(get)(obj, closure); -}); -#else -#define descr_set_trampoline_call(set, obj, value, closure) \ - (set)((obj), (value), (closure)) - -#define descr_get_trampoline_call(get, obj, closure) \ - (get)((obj), (closure)) - -#endif // __EMSCRIPTEN__ && PY_CALL_TRAMPOLINE - static void descr_dealloc(PyDescrObject *descr) { diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 7cbc49f96994f7..1fb795f5097897 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -2688,12 +2688,11 @@ dict_update_arg(PyObject *self, PyObject *arg) if (PyDict_CheckExact(arg)) { return PyDict_Merge(self, arg, 1); } - PyObject *func; - if (PyObject_GetOptionalAttr(arg, &_Py_ID(keys), &func) < 0) { + int has_keys = PyObject_HasAttrWithError(arg, &_Py_ID(keys)); + if (has_keys < 0) { return -1; } - if (func != NULL) { - Py_DECREF(func); + if (has_keys) { return PyDict_Merge(self, arg, 1); } return PyDict_MergeFromSeq2(self, arg, 1); @@ -4643,7 +4642,7 @@ dictview_mapping(PyObject *view, void *Py_UNUSED(ignored)) { static PyGetSetDef dictview_getset[] = { {"mapping", dictview_mapping, (setter)NULL, - "dictionary that this view refers to", NULL}, + PyDoc_STR("dictionary that this view refers to"), NULL}, {0} }; diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 9c240250218838..0cf2b47c3b3ae7 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -529,6 +529,18 @@ PyFile_OpenCode(const char *utf8path) } +int +_PyFile_Flush(PyObject *file) +{ + PyObject *tmp = PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); + if (tmp == NULL) { + return -1; + } + Py_DECREF(tmp); + return 0; +} + + #ifdef __cplusplus } #endif diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 1c5078bdda6871..776c7092edd057 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -16,8 +16,7 @@ #include "pycore_pystate.h" // _PyInterpreterState_GET() #include "pycore_structseq.h" // _PyStructSequence_FiniBuiltin() -#include -#include +#include // DBL_MAX #include // strtol() /*[clinic input] diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 28f5a5a1222806..d75444393f3697 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -25,10 +25,16 @@ static PyMemberDef frame_memberlist[] = { static PyObject * frame_getlocals(PyFrameObject *f, void *closure) { - if (PyFrame_FastToLocalsWithError(f) < 0) + if (f == NULL) { + PyErr_BadInternalCall(); return NULL; - PyObject *locals = f->f_frame->f_locals; - return Py_NewRef(locals); + } + assert(!_PyFrame_IsIncomplete(f->f_frame)); + PyObject *locals = _PyFrame_GetLocals(f->f_frame, 1); + if (locals) { + f->f_fast_as_locals = 1; + } + return locals; } int @@ -405,10 +411,10 @@ mark_stacks(PyCodeObject *code_obj, int len) case LOAD_GLOBAL: { int j = oparg; + next_stack = push_value(next_stack, Object); if (j & 1) { next_stack = push_value(next_stack, Null); } - next_stack = push_value(next_stack, Object); stacks[next_i] = next_stack; break; } @@ -418,22 +424,12 @@ mark_stacks(PyCodeObject *code_obj, int len) int j = oparg; if (j & 1) { next_stack = pop_value(next_stack); - next_stack = push_value(next_stack, Null); next_stack = push_value(next_stack, Object); + next_stack = push_value(next_stack, Null); } stacks[next_i] = next_stack; break; } - case CALL: - { - int args = oparg; - for (int j = 0; j < args+2; j++) { - next_stack = pop_value(next_stack); - } - next_stack = push_value(next_stack, Object); - stacks[next_i] = next_stack; - break; - } case SWAP: { int n = oparg; @@ -591,39 +587,28 @@ first_line_not_before(int *lines, int len, int line) return result; } -static PyFrameState -_PyFrame_GetState(PyFrameObject *frame) +static bool +frame_is_cleared(PyFrameObject *frame) { assert(!_PyFrame_IsIncomplete(frame->f_frame)); if (frame->f_frame->stacktop == 0) { - return FRAME_CLEARED; + return true; } - switch(frame->f_frame->owner) { - case FRAME_OWNED_BY_GENERATOR: - { - PyGenObject *gen = _PyFrame_GetGenerator(frame->f_frame); - return gen->gi_frame_state; - } - case FRAME_OWNED_BY_THREAD: - { - if (_PyInterpreterFrame_LASTI(frame->f_frame) < 0) { - return FRAME_CREATED; - } - switch (frame->f_frame->prev_instr->op.code) - { - case COPY_FREE_VARS: - case MAKE_CELL: - case RETURN_GENERATOR: - /* Frame not fully initialized */ - return FRAME_CREATED; - default: - return FRAME_EXECUTING; - } - } - case FRAME_OWNED_BY_FRAME_OBJECT: - return FRAME_COMPLETED; + if (frame->f_frame->owner == FRAME_OWNED_BY_GENERATOR) { + PyGenObject *gen = _PyFrame_GetGenerator(frame->f_frame); + return gen->gi_frame_state == FRAME_CLEARED; } - Py_UNREACHABLE(); + return false; +} + +static bool frame_is_suspended(PyFrameObject *frame) +{ + assert(!_PyFrame_IsIncomplete(frame->f_frame)); + if (frame->f_frame->owner == FRAME_OWNED_BY_GENERATOR) { + PyGenObject *gen = _PyFrame_GetGenerator(frame->f_frame); + return gen->gi_frame_state == FRAME_SUSPENDED; + } + return false; } /* Setter for f_lineno - you can set f_lineno from within a trace function in @@ -655,7 +640,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore return -1; } - PyFrameState state = _PyFrame_GetState(f); + bool is_suspended = frame_is_suspended(f); /* * This code preserves the historical restrictions on * setting the line number of a frame. @@ -811,7 +796,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore } assert(unbound == 0); } - if (state == FRAME_SUSPENDED) { + if (is_suspended) { /* Account for value popped by yield */ start_stack = pop_value(start_stack); } @@ -1353,11 +1338,11 @@ PyFrame_GetVarString(PyFrameObject *frame, const char *name) int PyFrame_FastToLocalsWithError(PyFrameObject *f) { - assert(!_PyFrame_IsIncomplete(f->f_frame)); if (f == NULL) { PyErr_BadInternalCall(); return -1; } + assert(!_PyFrame_IsIncomplete(f->f_frame)); int err = _PyFrame_FastToLocalsWithError(f->f_frame); if (err == 0) { f->f_fast_as_locals = 1; @@ -1455,7 +1440,7 @@ void PyFrame_LocalsToFast(PyFrameObject *f, int clear) { assert(!_PyFrame_IsIncomplete(f->f_frame)); - if (f && f->f_fast_as_locals && _PyFrame_GetState(f) != FRAME_CLEARED) { + if (f && f->f_fast_as_locals && !frame_is_cleared(f)) { _PyFrame_LocalsToFast(f->f_frame, clear); f->f_fast_as_locals = 0; } diff --git a/Objects/funcobject.c b/Objects/funcobject.c index 648b660859c04d..231a9c141d0c0b 100644 --- a/Objects/funcobject.c +++ b/Objects/funcobject.c @@ -3,7 +3,6 @@ #include "Python.h" #include "pycore_ceval.h" // _PyEval_BuiltinsFromGlobals() -#include "pycore_code.h" // _Py_next_func_version #include "pycore_object.h" // _PyObject_GC_UNTRACK() #include "pycore_pyerrors.h" // _PyErr_Occurred() @@ -252,11 +251,9 @@ When the function version is 0, the `CALL` bytecode is not specialized. Code object versions -------------------- -So where to code objects get their `co_version`? There is a single -static global counter, `_Py_next_func_version`. This is initialized in -the generated (!) file `Python/deepfreeze/deepfreeze.c`, to 1 plus the -number of deep-frozen function objects in that file. -(In `_bootstrap_python.c` and `freeze_module.c` it is initialized to 1.) +So where to code objects get their `co_version`? +There is a per-interpreter counter, `next_func_version`. +This is initialized to 1 when the interpreter is created. Code objects get a new `co_version` allocated from this counter upon creation. Since code objects are nominally immutable, `co_version` can diff --git a/Objects/genericaliasobject.c b/Objects/genericaliasobject.c index bb50537461040b..bf13ed3650bac5 100644 --- a/Objects/genericaliasobject.c +++ b/Objects/genericaliasobject.c @@ -55,8 +55,7 @@ ga_repr_item(_PyUnicodeWriter *writer, PyObject *p) PyObject *qualname = NULL; PyObject *module = NULL; PyObject *r = NULL; - PyObject *tmp; - int err; + int rc; if (p == Py_Ellipsis) { // The Ellipsis object @@ -64,19 +63,14 @@ ga_repr_item(_PyUnicodeWriter *writer, PyObject *p) goto done; } - if (PyObject_GetOptionalAttr(p, &_Py_ID(__origin__), &tmp) < 0) { - goto done; + if ((rc = PyObject_HasAttrWithError(p, &_Py_ID(__origin__))) > 0 && + (rc = PyObject_HasAttrWithError(p, &_Py_ID(__args__))) > 0) + { + // It looks like a GenericAlias + goto use_repr; } - if (tmp != NULL) { - Py_DECREF(tmp); - if (PyObject_GetOptionalAttr(p, &_Py_ID(__args__), &tmp) < 0) { - goto done; - } - if (tmp != NULL) { - Py_DECREF(tmp); - // It looks like a GenericAlias - goto use_repr; - } + if (rc < 0) { + goto done; } if (PyObject_GetOptionalAttr(p, &_Py_ID(__qualname__), &qualname) < 0) { @@ -113,13 +107,13 @@ ga_repr_item(_PyUnicodeWriter *writer, PyObject *p) Py_XDECREF(module); if (r == NULL) { // error if any of the above PyObject_Repr/PyUnicode_From* fail - err = -1; + rc = -1; } else { - err = _PyUnicodeWriter_WriteStr(writer, r); + rc = _PyUnicodeWriter_WriteStr(writer, r); Py_DECREF(r); } - return err; + return rc; } static int @@ -253,18 +247,17 @@ _Py_make_parameters(PyObject *args) Py_ssize_t iparam = 0; for (Py_ssize_t iarg = 0; iarg < nargs; iarg++) { PyObject *t = PyTuple_GET_ITEM(args, iarg); - PyObject *subst; // We don't want __parameters__ descriptor of a bare Python class. if (PyType_Check(t)) { continue; } - if (PyObject_GetOptionalAttr(t, &_Py_ID(__typing_subst__), &subst) < 0) { + int rc = PyObject_HasAttrWithError(t, &_Py_ID(__typing_subst__)); + if (rc < 0) { Py_DECREF(parameters); return NULL; } - if (subst) { + if (rc) { iparam += tuple_add(parameters, iparam, t); - Py_DECREF(subst); } else { PyObject *subparams; @@ -814,7 +807,7 @@ ga_unpacked_tuple_args(PyObject *self, void *unused) } static PyGetSetDef ga_properties[] = { - {"__parameters__", ga_parameters, (setter)NULL, "Type variables in the GenericAlias.", NULL}, + {"__parameters__", ga_parameters, (setter)NULL, PyDoc_STR("Type variables in the GenericAlias."), NULL}, {"__typing_unpacked_tuple_args__", ga_unpacked_tuple_args, (setter)NULL, NULL}, {0} }; diff --git a/Objects/genobject.c b/Objects/genobject.c index 10c55efb1b1e9b..40033d10bea9ee 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -333,7 +333,11 @@ gen_close_iter(PyObject *yf) static inline bool is_resume(_Py_CODEUNIT *instr) { - return instr->op.code == RESUME || instr->op.code == INSTRUMENTED_RESUME; + return ( + instr->op.code == RESUME || + instr->op.code == RESUME_CHECK || + instr->op.code == INSTRUMENTED_RESUME + ); } static inline bool diff --git a/Objects/longobject.c b/Objects/longobject.c index d20ef412367bb7..e73de742229005 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -10,10 +10,8 @@ #include "pycore_runtime.h" // _PY_NSMALLPOSINTS #include "pycore_structseq.h" // _PyStructSequence_FiniBuiltin() -#include -#include -#include -#include // abs() +#include // DBL_MANT_DIG +#include // offsetof #include "clinic/longobject.c.h" /*[clinic input] diff --git a/Objects/methodobject.c b/Objects/methodobject.c index 521c9059770acb..b40b2821c3880d 100644 --- a/Objects/methodobject.c +++ b/Objects/methodobject.c @@ -553,10 +553,3 @@ cfunction_call(PyObject *func, PyObject *args, PyObject *kwargs) return _Py_CheckFunctionResult(tstate, func, result, NULL); } -#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) -#include - -EM_JS(PyObject*, _PyCFunctionWithKeywords_TrampolineCall, (PyCFunctionWithKeywords func, PyObject *self, PyObject *args, PyObject *kw), { - return wasmTable.get(func)(self, args, kw); -}); -#endif diff --git a/Objects/namespaceobject.c b/Objects/namespaceobject.c index 11cf859add3ab8..204c114fd9de2d 100644 --- a/Objects/namespaceobject.c +++ b/Objects/namespaceobject.c @@ -189,9 +189,37 @@ namespace_reduce(_PyNamespaceObject *ns, PyObject *Py_UNUSED(ignored)) } +static PyObject * +namespace_replace(PyObject *self, PyObject *args, PyObject *kwargs) +{ + if (!_PyArg_NoPositional("__replace__", args)) { + return NULL; + } + + PyObject *result = PyObject_CallNoArgs((PyObject *)Py_TYPE(self)); + if (!result) { + return NULL; + } + if (PyDict_Update(((_PyNamespaceObject*)result)->ns_dict, + ((_PyNamespaceObject*)self)->ns_dict) < 0) + { + Py_DECREF(result); + return NULL; + } + if (kwargs) { + if (PyDict_Update(((_PyNamespaceObject*)result)->ns_dict, kwargs) < 0) { + Py_DECREF(result); + return NULL; + } + } + return result; +} + + static PyMethodDef namespace_methods[] = { {"__reduce__", (PyCFunction)namespace_reduce, METH_NOARGS, namespace_reduce__doc__}, + {"__replace__", _PyCFunction_CAST(namespace_replace), METH_VARARGS|METH_KEYWORDS, NULL}, {NULL, NULL} // sentinel }; diff --git a/Objects/object.c b/Objects/object.c index 7aeda50e9b2757..15c2bf65de6acf 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -911,26 +911,24 @@ PyObject_GetAttrString(PyObject *v, const char *name) } int -PyObject_HasAttrString(PyObject *v, const char *name) +PyObject_HasAttrStringWithError(PyObject *obj, const char *name) { - if (Py_TYPE(v)->tp_getattr != NULL) { - PyObject *res = (*Py_TYPE(v)->tp_getattr)(v, (char*)name); - if (res != NULL) { - Py_DECREF(res); - return 1; - } - PyErr_Clear(); - return 0; - } + PyObject *res; + int rc = PyObject_GetOptionalAttrString(obj, name, &res); + Py_XDECREF(res); + return rc; +} + - PyObject *attr_name = PyUnicode_FromString(name); - if (attr_name == NULL) { +int +PyObject_HasAttrString(PyObject *obj, const char *name) +{ + int rc = PyObject_HasAttrStringWithError(obj, name); + if (rc < 0) { PyErr_Clear(); return 0; } - int ok = PyObject_HasAttr(v, attr_name); - Py_DECREF(attr_name); - return ok; + return rc; } int @@ -1149,18 +1147,23 @@ PyObject_GetOptionalAttrString(PyObject *obj, const char *name, PyObject **resul } int -PyObject_HasAttr(PyObject *v, PyObject *name) +PyObject_HasAttrWithError(PyObject *obj, PyObject *name) { PyObject *res; - if (PyObject_GetOptionalAttr(v, name, &res) < 0) { + int rc = PyObject_GetOptionalAttr(obj, name, &res); + Py_XDECREF(res); + return rc; +} + +int +PyObject_HasAttr(PyObject *obj, PyObject *name) +{ + int rc = PyObject_HasAttrWithError(obj, name); + if (rc < 0) { PyErr_Clear(); return 0; } - if (res == NULL) { - return 0; - } - Py_DECREF(res); - return 1; + return rc; } int diff --git a/Objects/object_layout.md b/Objects/object_layout.md index 4430790f4f0f36..3f7d72eb22f224 100644 --- a/Objects/object_layout.md +++ b/Objects/object_layout.md @@ -36,7 +36,7 @@ and the ``dict`` field points to the dictionary. ## 3.12 pre-header -In 3.12 the the pointer to the list of weak references is added to the +In 3.12 the pointer to the list of weak references is added to the pre-header. In order to make space for it, the ``dict`` and ``values`` pointers are combined into a single tagged pointer: diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 67e059c3f74b77..893d8420bba4c4 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -19,8 +19,6 @@ #include "pycore_weakref.h" // _PyWeakref_GET_REF() #include "opcode.h" // MAKE_CELL - -#include #include // ptrdiff_t /*[clinic input] @@ -3881,16 +3879,14 @@ type_new_get_bases(type_new_ctx *ctx, PyObject **type) if (PyType_Check(base)) { continue; } - PyObject *mro_entries; - if (PyObject_GetOptionalAttr(base, &_Py_ID(__mro_entries__), - &mro_entries) < 0) { + int rc = PyObject_HasAttrWithError(base, &_Py_ID(__mro_entries__)); + if (rc < 0) { return -1; } - if (mro_entries != NULL) { + if (rc) { PyErr_SetString(PyExc_TypeError, "type() doesn't support MRO entry resolution; " "use types.new_class()"); - Py_DECREF(mro_entries); return -1; } } diff --git a/Objects/typevarobject.c b/Objects/typevarobject.c index 3adae3e14c9103..0f04523b0032ed 100644 --- a/Objects/typevarobject.c +++ b/Objects/typevarobject.c @@ -806,8 +806,8 @@ paramspec_kwargs(PyObject *self, void *unused) } static PyGetSetDef paramspec_getset[] = { - {"args", (getter)paramspec_args, NULL, "Represents positional arguments.", NULL}, - {"kwargs", (getter)paramspec_kwargs, NULL, "Represents keyword arguments.", NULL}, + {"args", (getter)paramspec_args, NULL, PyDoc_STR("Represents positional arguments."), NULL}, + {"kwargs", (getter)paramspec_kwargs, NULL, PyDoc_STR("Represents keyword arguments."), NULL}, {0}, }; diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 045b48c526a958..aca28e4842d645 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -40,7 +40,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "Python.h" #include "pycore_abstract.h" // _PyIndex_Check() -#include "pycore_atomic_funcs.h" // _Py_atomic_size_get() #include "pycore_bytes_methods.h" // _Py_bytes_lower() #include "pycore_bytesobject.h" // _PyBytes_Repeat() #include "pycore_ceval.h" // _PyEval_GetBuiltin() @@ -1906,19 +1905,19 @@ _PyUnicode_FromId(_Py_Identifier *id) PyInterpreterState *interp = _PyInterpreterState_GET(); struct _Py_unicode_ids *ids = &interp->unicode.ids; - Py_ssize_t index = _Py_atomic_size_get(&id->index); + Py_ssize_t index = _Py_atomic_load_ssize(&id->index); if (index < 0) { struct _Py_unicode_runtime_ids *rt_ids = &interp->runtime->unicode_state.ids; PyThread_acquire_lock(rt_ids->lock, WAIT_LOCK); // Check again to detect concurrent access. Another thread can have // initialized the index while this thread waited for the lock. - index = _Py_atomic_size_get(&id->index); + index = _Py_atomic_load_ssize(&id->index); if (index < 0) { assert(rt_ids->next_index < PY_SSIZE_T_MAX); index = rt_ids->next_index; rt_ids->next_index++; - _Py_atomic_size_set(&id->index, index); + _Py_atomic_store_ssize(&id->index, index); } PyThread_release_lock(rt_ids->lock); } @@ -12402,7 +12401,7 @@ str.split as unicode_split The separator used to split the string. When set to None (the default value), will split on any whitespace - character (including \\n \\r \\t \\f and spaces) and will discard + character (including \n \r \t \f and spaces) and will discard empty strings from the result. maxsplit: Py_ssize_t = -1 Maximum number of splits (starting from the left). @@ -12418,7 +12417,7 @@ the regular expression module. static PyObject * unicode_split_impl(PyObject *self, PyObject *sep, Py_ssize_t maxsplit) -/*[clinic end generated code: output=3a65b1db356948dc input=906d953b44efc43b]*/ +/*[clinic end generated code: output=3a65b1db356948dc input=07b9040d98c5fe8d]*/ { if (sep == Py_None) return split(self, NULL, maxsplit); diff --git a/Objects/unicodetype_db.h b/Objects/unicodetype_db.h index 22f8243eaec1b7..39a567dc46e89a 100644 --- a/Objects/unicodetype_db.h +++ b/Objects/unicodetype_db.h @@ -360,6 +360,7 @@ const _PyUnicode_TypeRecord _PyUnicode_TypeRecords[] = { {0, -128, 0, 0, 0, 10113}, {0, -126, 0, 0, 0, 10113}, {33555335, 18875268, 16778121, 0, 0, 26433}, + {0, 0, 0, 0, 0, 4608}, {0, 0, 0, 0, 0, 3076}, {0, 0, 0, 0, 4, 3076}, {0, 0, 0, 0, 5, 3076}, @@ -1760,603 +1761,603 @@ static const unsigned short index1[] = { 76, 64, 77, 78, 79, 80, 81, 82, 83, 64, 64, 84, 85, 34, 34, 34, 34, 34, 34, 86, 34, 34, 34, 34, 34, 87, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 88, 89, 90, 91, 34, 34, 34, 92, 34, 34, - 34, 93, 94, 34, 34, 34, 34, 34, 95, 34, 34, 34, 96, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 97, 98, 99, 34, 34, 34, 34, 34, 34, 100, 101, 34, 34, - 34, 34, 34, 34, 34, 34, 102, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 34, 34, 104, 34, 34, 34, 34, - 100, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 103, 34, 34, 34, 34, 34, 34, 105, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 106, 107, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 108, 109, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 110, 34, 34, 34, 34, 34, - 34, 34, 34, 111, 34, 34, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 88, 89, 90, 91, 92, 93, 34, 94, 34, 34, + 34, 95, 96, 34, 34, 34, 34, 34, 97, 34, 34, 34, 98, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 99, 100, 101, 34, 34, 34, 34, 34, 34, 102, 103, 34, + 34, 34, 34, 34, 34, 34, 34, 104, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 105, 34, 34, 34, 93, 34, 34, 34, 34, 34, 34, 34, 34, 106, 34, 34, 34, 34, + 107, 108, 34, 34, 34, 34, 34, 109, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 93, 34, 34, 34, 34, 34, 34, 110, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 111, 112, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 113, 34, 34, 34, 34, 114, 34, 34, 115, 116, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 117, 34, 34, 34, + 34, 34, 34, 34, 34, 118, 34, 34, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 127, 128, - 129, 130, 131, 132, 34, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 125, 143, 144, 145, 146, 147, 148, 149, 34, 34, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 125, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 125, 174, 175, 125, 176, 177, 178, 179, - 125, 180, 181, 182, 183, 184, 185, 186, 125, 187, 188, 189, 190, 125, - 191, 192, 193, 34, 34, 34, 34, 34, 34, 34, 194, 195, 34, 196, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 197, 34, 34, 34, 34, 34, 34, 34, 34, 198, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 34, 34, 34, 34, 199, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 34, 34, 34, 34, 200, 201, 202, 203, 125, 125, 125, 125, 204, - 205, 206, 207, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 134, + 135, 136, 137, 138, 139, 34, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 132, 150, 151, 152, 153, 154, 155, 156, 34, 34, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 132, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 132, 181, 182, 132, 183, 184, 185, + 186, 132, 187, 188, 189, 190, 191, 192, 193, 132, 194, 195, 196, 197, + 132, 198, 199, 200, 34, 34, 34, 34, 34, 34, 34, 201, 202, 34, 203, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 204, 34, 34, 34, 34, 34, 34, 34, 34, 205, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 34, 34, 34, 34, 206, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 34, 34, 34, 34, 207, 208, 209, 210, 132, 132, 132, 132, + 211, 212, 213, 214, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 208, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 209, 210, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 211, 34, 34, 212, 34, 34, 213, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 214, 215, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 216, 217, 64, 218, - 219, 220, 221, 222, 223, 125, 224, 225, 226, 227, 228, 229, 230, 231, 64, - 64, 64, 64, 232, 233, 125, 125, 125, 125, 125, 125, 125, 125, 234, 125, - 235, 236, 237, 125, 125, 238, 125, 125, 125, 239, 125, 125, 125, 125, - 125, 240, 34, 241, 242, 125, 125, 125, 125, 125, 243, 244, 245, 125, 246, - 247, 125, 125, 248, 249, 250, 251, 252, 125, 64, 253, 64, 64, 64, 64, 64, - 254, 255, 256, 257, 258, 64, 64, 259, 260, 64, 261, 125, 125, 125, 125, - 125, 125, 125, 125, 262, 263, 264, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 86, 265, 34, 266, 267, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 215, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 216, 217, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 218, 34, 34, 219, 34, 34, 220, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 221, 222, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 223, 224, 64, + 225, 226, 227, 228, 229, 230, 132, 231, 232, 233, 234, 235, 236, 237, + 238, 64, 64, 64, 64, 239, 240, 132, 132, 132, 132, 132, 132, 132, 132, + 241, 132, 242, 243, 244, 132, 132, 245, 132, 132, 132, 246, 132, 132, + 132, 132, 132, 247, 34, 248, 249, 132, 132, 132, 132, 132, 250, 251, 252, + 132, 253, 254, 132, 132, 255, 256, 257, 258, 259, 132, 64, 260, 64, 64, + 64, 64, 64, 261, 262, 263, 264, 265, 64, 64, 266, 267, 64, 268, 132, 132, + 132, 132, 132, 132, 132, 132, 269, 270, 271, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 86, 272, 34, 273, 274, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 268, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 269, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 270, + 34, 34, 34, 34, 34, 34, 34, 34, 275, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 276, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 277, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 271, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 109, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 272, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 273, 34, 274, 34, 34, + 278, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 279, 34, 280, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 275, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 281, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 276, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 34, 268, 34, 34, 277, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 282, 34, 34, 34, 34, 283, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 34, 275, 34, 34, 284, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 278, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 285, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 279, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 280, 125, 281, 282, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, + 34, 34, 34, 34, 34, 34, 286, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 287, 132, 288, 289, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, }; static const unsigned short index2[] = { @@ -2777,27 +2778,27 @@ static const unsigned short index2[] = { 342, 265, 265, 343, 343, 0, 5, 5, 5, 264, 264, 344, 345, 346, 126, 347, 348, 265, 265, 349, 349, 130, 5, 5, 5, 0, 0, 350, 351, 352, 0, 353, 354, 355, 355, 356, 356, 357, 5, 5, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, - 20, 20, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 5, 4, 4, 5, 2, 2, 20, 20, 20, 20, 20, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 17, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 20, 20, 20, 20, 20, 0, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 358, 101, 0, 0, 359, 360, 361, 362, 363, - 364, 4, 4, 4, 4, 4, 101, 358, 25, 21, 22, 359, 360, 361, 362, 363, 364, - 4, 4, 4, 4, 4, 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 5, - 5, 5, 5, 24, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 120, 4, 4, 4, 4, 120, 4, - 4, 19, 120, 120, 120, 19, 19, 120, 120, 120, 19, 4, 120, 4, 4, 365, 120, - 120, 120, 120, 120, 4, 4, 4, 4, 4, 4, 120, 4, 366, 4, 120, 4, 367, 368, - 120, 120, 365, 19, 120, 120, 369, 120, 19, 54, 54, 54, 54, 19, 4, 4, 19, - 19, 120, 120, 4, 4, 4, 4, 4, 120, 19, 19, 19, 19, 4, 4, 4, 4, 370, 4, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 371, 371, - 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, + 358, 358, 20, 20, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 5, 4, 4, 5, 2, 2, 20, 20, 20, 20, 20, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 17, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 20, 20, 20, 20, 20, 0, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 359, 101, 0, 0, 360, 361, 362, 363, + 364, 365, 4, 4, 4, 4, 4, 101, 359, 25, 21, 22, 360, 361, 362, 363, 364, + 365, 4, 4, 4, 4, 4, 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 5, 5, 5, 5, 24, 5, 5, 5, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 120, 4, 4, 4, 4, + 120, 4, 4, 19, 120, 120, 120, 19, 19, 120, 120, 120, 19, 4, 120, 4, 4, + 366, 120, 120, 120, 120, 120, 4, 4, 4, 4, 4, 4, 120, 4, 367, 4, 120, 4, + 368, 369, 120, 120, 366, 19, 120, 120, 370, 120, 19, 54, 54, 54, 54, 19, + 4, 4, 19, 19, 120, 120, 4, 4, 4, 4, 4, 120, 19, 19, 19, 19, 4, 4, 4, 4, + 371, 4, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, - 372, 372, 242, 242, 242, 29, 30, 242, 242, 242, 242, 26, 4, 4, 0, 0, 0, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 372, 372, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, + 373, 373, 373, 373, 242, 242, 242, 29, 30, 242, 242, 242, 242, 26, 4, 4, + 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -2808,26 +2809,26 @@ static const unsigned short index2[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 373, 373, 373, 373, 373, 374, 374, 374, 374, 374, 374, 374, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, 21, 22, 360, 361, 362, 363, 364, + 365, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, - 374, 374, 374, 374, 374, 358, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 25, - 21, 22, 359, 360, 361, 362, 363, 364, 26, 358, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 374, 374, 374, 374, 374, 374, 374, 374, 375, 375, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 375, 359, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 359, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 25, 21, 22, 359, 360, 361, 362, - 363, 364, 26, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, 25, 21, 22, - 359, 360, 361, 362, 363, 364, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 25, 21, 22, 360, 361, + 362, 363, 364, 365, 26, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 25, + 21, 22, 360, 361, 362, 363, 364, 365, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -2836,85 +2837,85 @@ static const unsigned short index2[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 135, 135, 135, 135, 135, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 29, 30, 375, 376, 377, 378, 379, 29, - 30, 29, 30, 29, 30, 380, 381, 382, 383, 19, 29, 30, 19, 29, 30, 19, 19, - 19, 19, 19, 101, 101, 384, 384, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 19, 4, 4, 4, 4, 4, 4, 29, 30, 29, 30, 24, 24, 24, 29, 30, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 26, 4, 4, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 0, - 385, 0, 0, 0, 0, 0, 385, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 102, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, - 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, - 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, - 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 24, 24, 24, 24, 24, 24, 24, + 136, 136, 136, 136, 136, 136, 136, 136, 29, 30, 376, 377, 378, 379, 380, + 29, 30, 29, 30, 29, 30, 381, 382, 383, 384, 19, 29, 30, 19, 29, 30, 19, + 19, 19, 19, 19, 101, 101, 385, 385, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 19, 4, 4, 4, 4, 4, 4, 29, 30, 29, 30, 24, 24, 24, 29, 30, 0, 0, 0, 0, + 0, 4, 4, 4, 4, 26, 4, 4, 386, 386, 386, 386, 386, 386, 386, 386, 386, + 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, + 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, + 386, 0, 386, 0, 0, 0, 0, 0, 386, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 102, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, + 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, + 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, + 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 386, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 387, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 0, 0, 0, 0, 1, 4, 4, 4, 4, 102, 54, 242, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 24, 24, 24, 24, 17, 17, 4, 102, 102, 102, - 102, 102, 4, 4, 242, 242, 242, 102, 54, 4, 4, 4, 0, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 4, 4, 4, 4, 102, 54, 242, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 24, 24, 24, 24, 17, 17, 4, 102, 102, + 102, 102, 102, 4, 4, 242, 242, 242, 102, 54, 4, 4, 4, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 24, 24, 5, 5, 102, 102, 54, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 24, 24, 5, 5, 102, 102, 54, + 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 4, 102, 102, 102, 54, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 17, 102, 102, 102, 54, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 0, 4, 4, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, + 54, 54, 54, 54, 0, 4, 4, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 4, 4, 4, 4, 4, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, + 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, @@ -2927,14 +2928,14 @@ static const unsigned short index2[] = { 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, 54, - 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -2943,7 +2944,7 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -2952,7 +2953,7 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -2961,501 +2962,551 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 387, 54, 54, 387, 54, 54, 54, 387, - 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 388, 54, 54, 388, 54, 54, 54, 388, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 388, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 387, 54, 387, + 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 388, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 388, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 387, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 387, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 387, 54, - 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 387, 387, 387, - 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 387, - 387, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 388, 54, 388, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, + 54, 388, 388, 388, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 388, 388, 388, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, - 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 387, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 387, 387, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 388, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 388, 388, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 387, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, + 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, - 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 102, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, - 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, - 102, 102, 102, 102, 102, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 102, 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 54, 54, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, - 29, 30, 54, 24, 5, 5, 5, 4, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 4, - 102, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, - 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 101, 101, 24, 24, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 24, 24, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 102, 102, 102, 102, 102, 102, 102, 102, 102, 5, 5, 29, 30, 29, 30, 29, - 30, 29, 30, 29, 30, 29, 30, 29, 30, 19, 19, 29, 30, 29, 30, 29, 30, 29, - 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, - 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, + 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 388, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 102, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, 102, 102, + 102, 102, 102, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, + 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, - 30, 101, 19, 19, 19, 19, 19, 19, 19, 19, 29, 30, 29, 30, 388, 29, 30, 29, - 30, 29, 30, 29, 30, 29, 30, 102, 5, 5, 29, 30, 389, 19, 54, 29, 30, 29, - 30, 390, 19, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, - 30, 29, 30, 29, 30, 391, 392, 393, 394, 391, 19, 395, 396, 397, 398, 29, - 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 399, 400, - 401, 29, 30, 29, 30, 0, 0, 0, 0, 0, 29, 30, 0, 19, 0, 19, 29, 30, 29, 30, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 101, 101, 29, 30, 54, 101, 101, 19, 54, 54, 54, 54, 54, 54, 54, 24, - 54, 54, 54, 24, 54, 54, 54, 54, 24, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 17, 17, 24, 24, - 17, 4, 4, 4, 4, 24, 0, 0, 0, 26, 26, 26, 26, 26, 26, 4, 4, 4, 4, 0, 0, 0, - 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 54, + 24, 5, 5, 5, 4, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 4, 102, 29, 30, + 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, + 29, 30, 29, 30, 29, 30, 29, 30, 101, 101, 24, 24, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 24, 24, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 5, 5, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 19, 19, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 101, + 19, 19, 19, 19, 19, 19, 19, 19, 29, 30, 29, 30, 389, 29, 30, 29, 30, 29, + 30, 29, 30, 29, 30, 102, 5, 5, 29, 30, 390, 19, 54, 29, 30, 29, 30, 391, + 19, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, + 30, 29, 30, 392, 393, 394, 395, 392, 19, 396, 397, 398, 399, 29, 30, 29, + 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 400, 401, 402, 29, + 30, 29, 30, 0, 0, 0, 0, 0, 29, 30, 0, 19, 0, 19, 29, 30, 29, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 101, + 101, 29, 30, 54, 101, 101, 19, 54, 54, 54, 54, 54, 54, 54, 24, 54, 54, + 54, 24, 54, 54, 54, 54, 24, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 17, 17, 24, 24, 17, 4, 4, + 4, 4, 24, 0, 0, 0, 26, 26, 26, 26, 26, 26, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 54, 54, 54, 54, 54, 54, 4, 4, 4, 54, - 4, 54, 54, 24, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 4, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 17, 17, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 24, - 24, 24, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, 17, 17, 24, - 24, 24, 24, 17, 17, 24, 24, 17, 17, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 0, 102, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 4, 4, 54, - 54, 54, 54, 54, 24, 102, 54, 54, 54, 54, 54, 54, 54, 54, 54, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 54, 54, 54, 54, 54, 54, 4, 4, 4, 54, 4, 54, + 54, 24, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, - 24, 24, 24, 24, 24, 17, 17, 24, 24, 17, 17, 24, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 54, 54, 24, 54, 54, 54, 54, 54, 54, 54, 54, 24, 17, 0, 0, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 4, 4, 4, 4, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, 54, 54, 54, 54, 54, 54, 4, - 4, 4, 54, 17, 24, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 24, 54, 24, 24, 24, 54, 54, 24, 24, 54, 54, 54, 54, 54, 24, 24, 54, - 24, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 54, 102, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 17, - 24, 24, 17, 17, 4, 4, 54, 102, 102, 17, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, - 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, - 54, 54, 54, 54, 54, 54, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 402, 19, 19, 19, 19, 19, 19, 19, 5, 101, 101, - 101, 101, 19, 19, 19, 19, 19, 19, 19, 19, 19, 101, 5, 5, 0, 0, 0, 0, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 480, 481, 482, 54, 54, 54, 54, 54, 54, 54, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 24, 24, + 24, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 17, 17, 24, 17, 17, 24, 17, 17, - 4, 17, 24, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, 17, 17, 24, 24, + 24, 24, 17, 17, 24, 24, 17, 17, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 0, 102, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 4, 4, 54, 54, + 54, 54, 54, 24, 102, 54, 54, 54, 54, 54, 54, 54, 54, 54, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, 24, + 24, 24, 24, 24, 17, 17, 24, 24, 17, 17, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 54, 54, 24, 54, 54, 54, 54, 54, 54, 54, 54, 24, 17, 0, 0, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 0, 0, 4, 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, 54, 54, 54, 54, 54, 54, 4, 4, 4, + 54, 17, 24, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 24, 54, 24, 24, 24, 54, 54, 24, 24, 54, 54, 54, 54, 54, 24, 24, 54, 24, + 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 54, 102, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 17, 24, + 24, 17, 17, 4, 4, 54, 102, 102, 17, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, + 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, + 54, 54, 54, 54, 54, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 403, 19, 19, 19, 19, 19, 19, 19, 5, 101, 101, 101, + 101, 19, 19, 19, 19, 19, 19, 19, 19, 19, 101, 5, 5, 0, 0, 0, 0, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, + 476, 477, 478, 479, 480, 481, 482, 483, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 17, 17, 24, 17, 17, 24, 17, 17, 4, + 17, 24, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 387, 54, + 388, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 387, + 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 483, 484, 485, 486, 487, 488, 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 490, 491, 492, 493, 494, 0, 0, 0, 0, 0, 54, 24, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 0, 54, 54, 54, 54, 54, 0, 54, 0, 54, 54, 0, 54, 54, 0, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 484, + 485, 486, 487, 488, 489, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, + 492, 493, 494, 495, 0, 0, 0, 0, 0, 54, 24, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, + 54, 54, 54, 54, 0, 54, 0, 54, 54, 0, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 495, - 495, 495, 495, 495, 495, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 496, 496, 496, + 496, 496, 496, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 4, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 495, 495, - 4, 4, 4, 4, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, 4, 17, 17, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 17, 17, 17, - 4, 4, 5, 0, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, - 4, 4, 4, 4, 0, 0, 0, 0, 495, 54, 495, 54, 495, 0, 495, 54, 495, 54, 495, - 54, 495, 54, 495, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 496, 496, 4, 4, 4, + 4, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, + 4, 5, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, 4, 17, 17, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 17, 17, 17, 4, 4, 5, 0, + 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, + 0, 0, 0, 0, 496, 54, 496, 54, 496, 0, 496, 54, 496, 54, 496, 54, 496, 54, + 496, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 0, 0, 20, 0, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 5, 4, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, + 54, 0, 0, 20, 0, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 5, 4, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 5, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 4, 4, 4, 5, 17, 5, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, + 16, 4, 4, 4, 5, 17, 5, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 102, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 496, 496, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 497, 497, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 0, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, - 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 0, 0, 0, - 4, 4, 4, 5, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 20, 20, 4, 4, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 0, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, + 54, 54, 54, 0, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, + 54, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 0, 0, 0, 4, 4, 4, 5, + 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, + 20, 4, 4, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 0, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 4, 4, - 4, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, + 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 26, - 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 26, 4, - 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 26, 26, 26, 26, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 26, 26, 4, 4, 4, 0, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24, 0, 0, 54, 54, 54, 54, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 26, 26, + 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, + 26, 26, 26, 26, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 54, 54, 54, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 242, 54, + 54, 54, 54, 54, 54, 54, 54, 242, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 242, 54, 54, 54, 54, 54, 54, 54, 54, 242, 0, 0, 0, 0, 0, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, - 24, 24, 24, 24, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, 24, 24, 24, + 24, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 0, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 4, 242, 242, 242, - 242, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, 498, + 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 4, 242, 242, 242, 242, 242, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 54, 54, 54, 54, 54, 54, 54, 54, + 498, 498, 498, 498, 498, 498, 498, 498, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 0, 0, 0, 0, 498, 498, 498, 498, 498, 498, 498, 498, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 0, - 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 0, 0, 0, 0, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 0, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 0, 499, - 499, 499, 499, 499, 499, 499, 0, 499, 499, 0, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 500, 0, 500, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 500, 500, 0, 500, 500, 500, 500, 500, 500, 500, - 0, 500, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 0, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 0, 500, 500, 500, 500, + 500, 500, 500, 0, 500, 500, 0, 501, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 501, 0, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, + 501, 501, 501, 501, 0, 501, 501, 501, 501, 501, 501, 501, 0, 501, 501, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 102, 102, 101, 101, 101, 0, 101, 101, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, + 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 102, 102, 101, 101, 101, 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 0, 54, 54, 54, + 0, 0, 0, 54, 54, 54, 54, 54, 54, 0, 0, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 0, 54, 54, 0, 0, 0, 54, 0, 0, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 4, - 26, 26, 26, 26, 26, 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 26, 26, 26, 26, - 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, - 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, + 54, 0, 54, 54, 0, 0, 0, 54, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 4, 26, 26, 26, 26, + 26, 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 4, 4, 26, 26, 26, 26, 26, 26, 26, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 0, 0, - 0, 0, 0, 26, 26, 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 26, 26, 26, 26, 26, 26, 0, 0, - 0, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 0, 0, 0, 0, 0, 26, 26, + 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 26, 26, 26, 26, 26, 26, 0, 0, 0, 4, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 26, 26, 54, 54, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, + 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 26, 26, 54, 54, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 54, 24, 24, 24, 0, 24, 24, 0, 0, 0, 0, 0, 24, - 24, 24, 24, 54, 54, 54, 54, 0, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, + 26, 26, 26, 26, 54, 24, 24, 24, 0, 24, 24, 0, 0, 0, 0, 0, 24, 24, 24, 24, + 54, 54, 54, 54, 0, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 0, 0, 24, 24, 24, 0, 0, 0, 0, 24, 25, 21, 22, 359, 26, - 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, - 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 26, 26, 4, 54, + 54, 0, 0, 24, 24, 24, 0, 0, 0, 0, 24, 25, 21, 22, 360, 26, 26, 26, 26, + 26, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 54, 54, 54, 54, 54, 54, 54, 54, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 26, 26, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 24, 24, 0, 0, 0, 0, 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, + 54, 54, 54, 54, 54, 54, 4, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, + 24, 0, 0, 0, 0, 26, 26, 26, 26, 26, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 26, 26, - 26, 26, 26, 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, - 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 26, 26, 26, + 26, 26, 26, 26, 26, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, + 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3473,7 +3524,7 @@ static const unsigned short index2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -3498,7 +3549,7 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 4, 4, 4, 4, - 4, 4, 4, 0, 0, 0, 0, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, 26, + 4, 4, 4, 0, 0, 0, 0, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 24, 54, 54, 24, 24, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 17, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -3974,12 +4025,12 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, 501, 501, 501, - 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 501, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 502, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, 24, 24, 24, 24, 24, 24, 24, 102, + 502, 502, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 24, 24, 24, 24, 24, 24, 24, 102, 0, 0, 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4023,15 +4074,15 @@ static const unsigned short index2[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 358, 358, 25, 21, 22, 359, 360, 361, 362, 363, 364, 26, 26, 4, 4, + 0, 0, 359, 359, 25, 21, 22, 360, 361, 362, 363, 364, 365, 26, 26, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 4, 4, 4, 4, 4, 4, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 4, 4, 4, 4, 4, 4, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 4, 4, 4, 4, 4, 4, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 4, 4, 4, 4, 4, 4, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4089,30 +4140,30 @@ static const unsigned short index2[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 54, 387, 54, 54, 54, 54, + 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -4124,23 +4175,23 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, + 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -4148,7 +4199,7 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 387, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 388, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, @@ -4159,68 +4210,68 @@ static const unsigned short index2[] = { 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 387, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 54, 54, 54, + 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, - 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 20, 20, 20, 20, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, @@ -4233,8 +4284,8 @@ static const unsigned short index2[] = { 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, }; /* Returns the numeric value as double for Unicode characters @@ -4282,6 +4333,7 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x24EA: case 0x24FF: case 0x3007: + case 0x6D1E: case 0x96F6: case 0xA620: case 0xA6EF: @@ -4713,6 +4765,7 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x1ECA0: case 0x1ECB4: return (double) 100000.0; + case 0x5146: case 0x16B5E: return (double) 1000000.0; case 0x1ECA1: @@ -4721,11 +4774,14 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x5104: case 0x16B5F: return (double) 100000000.0; + case 0x79ED: + return (double) 1000000000.0; case 0x16B60: return (double) 10000000000.0; - case 0x5146: case 0x16B61: return (double) 1000000000000.0; + case 0x4EAC: + return (double) 1e+16; case 0x216A: case 0x217A: case 0x246A: @@ -4865,7 +4921,10 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x3221: case 0x3281: case 0x3483: + case 0x4E24: case 0x4E8C: + case 0x4FE9: + case 0x5006: case 0x5169: case 0x5F0D: case 0x5F10: @@ -5008,6 +5067,7 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x1EC7B: case 0x1ED0B: return (double) 20.0; + case 0x7695: case 0x1011A: case 0x102F4: case 0x109D3: @@ -5894,6 +5954,7 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x3286: case 0x3B4D: case 0x4E03: + case 0x62D0: case 0x67D2: case 0x6F06: case 0xA627: @@ -6198,6 +6259,8 @@ double _PyUnicode_ToNumeric(Py_UCS4 ch) case 0x4E5D: case 0x5EFE: case 0x7396: + case 0x920E: + case 0x94A9: case 0xA629: case 0xA6EE: case 0xA8D9: diff --git a/Objects/unionobject.c b/Objects/unionobject.c index 347945a4c45972..bf5605686f8df7 100644 --- a/Objects/unionobject.c +++ b/Objects/unionobject.c @@ -186,28 +186,21 @@ union_repr_item(_PyUnicodeWriter *writer, PyObject *p) { PyObject *qualname = NULL; PyObject *module = NULL; - PyObject *tmp; PyObject *r = NULL; - int err; + int rc; if (p == (PyObject *)&_PyNone_Type) { return _PyUnicodeWriter_WriteASCIIString(writer, "None", 4); } - if (PyObject_GetOptionalAttr(p, &_Py_ID(__origin__), &tmp) < 0) { - goto exit; + if ((rc = PyObject_HasAttrWithError(p, &_Py_ID(__origin__))) > 0 && + (rc = PyObject_HasAttrWithError(p, &_Py_ID(__args__))) > 0) + { + // It looks like a GenericAlias + goto use_repr; } - - if (tmp) { - Py_DECREF(tmp); - if (PyObject_GetOptionalAttr(p, &_Py_ID(__args__), &tmp) < 0) { - goto exit; - } - if (tmp) { - // It looks like a GenericAlias - Py_DECREF(tmp); - goto use_repr; - } + if (rc < 0) { + goto exit; } if (PyObject_GetOptionalAttr(p, &_Py_ID(__qualname__), &qualname) < 0) { @@ -244,9 +237,9 @@ union_repr_item(_PyUnicodeWriter *writer, PyObject *p) if (r == NULL) { return -1; } - err = _PyUnicodeWriter_WriteStr(writer, r); + rc = _PyUnicodeWriter_WriteStr(writer, r); Py_DECREF(r); - return err; + return rc; } static PyObject * @@ -331,7 +324,8 @@ union_parameters(PyObject *self, void *Py_UNUSED(unused)) } static PyGetSetDef union_properties[] = { - {"__parameters__", union_parameters, (setter)NULL, "Type variables in the types.UnionType.", NULL}, + {"__parameters__", union_parameters, (setter)NULL, + PyDoc_STR("Type variables in the types.UnionType."), NULL}, {0} }; diff --git a/PC/_testconsole.c b/PC/_testconsole.c index 3221b985d01ba0..5e5a771b96bfec 100644 --- a/PC/_testconsole.c +++ b/PC/_testconsole.c @@ -35,6 +35,23 @@ PyModuleDef_Slot testconsole_slots[] = { {0, NULL}, }; +/*[python input] +class HANDLE_converter(CConverter): + type = 'void *' + format_unit = '"_Py_PARSE_UINTPTR"' + + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" + {paramname} = PyLong_AsVoidPtr({argname}); + if (!{paramname} && PyErr_Occurred()) {{{{ + goto exit; + }}}} + """, + argname=argname) +[python start generated code]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=380aa5c91076742b]*/ +/*[python end generated code:]*/ + /*[clinic input] module _testconsole @@ -116,11 +133,31 @@ _testconsole_read_output_impl(PyObject *module, PyObject *file) Py_RETURN_NONE; } +/*[clinic input] +_testconsole.flush_console_input_buffer + handle: HANDLE + +Flushes the console input buffer. + +All input records currently in the input buffer are discarded. +[clinic start generated code]*/ + +static PyObject * +_testconsole_flush_console_input_buffer_impl(PyObject *module, void *handle) +/*[clinic end generated code: output=1f923a81331465ce input=be8203ae84a288f5]*/ +/*[clinic end generated code:]*/ +{ + FlushConsoleInputBuffer(handle); + + Py_RETURN_NONE; +} + #include "clinic\_testconsole.c.h" PyMethodDef testconsole_methods[] = { _TESTCONSOLE_WRITE_INPUT_METHODDEF _TESTCONSOLE_READ_OUTPUT_METHODDEF + _TESTCONSOLE_FLUSH_CONSOLE_INPUT_BUFFER_METHODDEF {NULL, NULL} }; diff --git a/PC/clinic/_testconsole.c.h b/PC/clinic/_testconsole.c.h index 99cd302ff34698..b76588909782ea 100644 --- a/PC/clinic/_testconsole.c.h +++ b/PC/clinic/_testconsole.c.h @@ -132,6 +132,70 @@ _testconsole_read_output(PyObject *module, PyObject *const *args, Py_ssize_t nar #endif /* defined(MS_WINDOWS) */ +#if defined(MS_WINDOWS) + +PyDoc_STRVAR(_testconsole_flush_console_input_buffer__doc__, +"flush_console_input_buffer($module, /, handle)\n" +"--\n" +"\n" +"Flushes the console input buffer.\n" +"\n" +"All input records currently in the input buffer are discarded."); + +#define _TESTCONSOLE_FLUSH_CONSOLE_INPUT_BUFFER_METHODDEF \ + {"flush_console_input_buffer", _PyCFunction_CAST(_testconsole_flush_console_input_buffer), METH_FASTCALL|METH_KEYWORDS, _testconsole_flush_console_input_buffer__doc__}, + +static PyObject * +_testconsole_flush_console_input_buffer_impl(PyObject *module, void *handle); + +static PyObject * +_testconsole_flush_console_input_buffer(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) +{ + PyObject *return_value = NULL; + #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) + + #define NUM_KEYWORDS 1 + static struct { + PyGC_Head _this_is_not_used; + PyObject_VAR_HEAD + PyObject *ob_item[NUM_KEYWORDS]; + } _kwtuple = { + .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) + .ob_item = { &_Py_ID(handle), }, + }; + #undef NUM_KEYWORDS + #define KWTUPLE (&_kwtuple.ob_base.ob_base) + + #else // !Py_BUILD_CORE + # define KWTUPLE NULL + #endif // !Py_BUILD_CORE + + static const char * const _keywords[] = {"handle", NULL}; + static _PyArg_Parser _parser = { + .keywords = _keywords, + .fname = "flush_console_input_buffer", + .kwtuple = KWTUPLE, + }; + #undef KWTUPLE + PyObject *argsbuf[1]; + void *handle; + + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); + if (!args) { + goto exit; + } + handle = PyLong_AsVoidPtr(args[0]); + if (!handle && PyErr_Occurred()) { + goto exit; + } + return_value = _testconsole_flush_console_input_buffer_impl(module, handle); + +exit: + return return_value; +} + +#endif /* defined(MS_WINDOWS) */ + #ifndef _TESTCONSOLE_WRITE_INPUT_METHODDEF #define _TESTCONSOLE_WRITE_INPUT_METHODDEF #endif /* !defined(_TESTCONSOLE_WRITE_INPUT_METHODDEF) */ @@ -139,4 +203,8 @@ _testconsole_read_output(PyObject *module, PyObject *const *args, Py_ssize_t nar #ifndef _TESTCONSOLE_READ_OUTPUT_METHODDEF #define _TESTCONSOLE_READ_OUTPUT_METHODDEF #endif /* !defined(_TESTCONSOLE_READ_OUTPUT_METHODDEF) */ -/*[clinic end generated code: output=f59fe72cd4e73704 input=a9049054013a1b77]*/ + +#ifndef _TESTCONSOLE_FLUSH_CONSOLE_INPUT_BUFFER_METHODDEF + #define _TESTCONSOLE_FLUSH_CONSOLE_INPUT_BUFFER_METHODDEF +#endif /* !defined(_TESTCONSOLE_FLUSH_CONSOLE_INPUT_BUFFER_METHODDEF) */ +/*[clinic end generated code: output=5d488564f2500dd9 input=a9049054013a1b77]*/ diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h index e2959a0fda1c52..54ae61bd4f10a9 100644 --- a/PC/clinic/msvcrtmodule.c.h +++ b/PC/clinic/msvcrtmodule.c.h @@ -201,7 +201,7 @@ PyDoc_STRVAR(msvcrt_kbhit__doc__, "kbhit($module, /)\n" "--\n" "\n" -"Return true if a keypress is waiting to be read."); +"Returns a nonzero value if a keypress is waiting to be read. Otherwise, return 0."); #define MSVCRT_KBHIT_METHODDEF \ {"kbhit", (PyCFunction)msvcrt_kbhit, METH_NOARGS, msvcrt_kbhit__doc__}, @@ -695,4 +695,4 @@ msvcrt_SetErrorMode(PyObject *module, PyObject *arg) #ifndef MSVCRT_GETERRORMODE_METHODDEF #define MSVCRT_GETERRORMODE_METHODDEF #endif /* !defined(MSVCRT_GETERRORMODE_METHODDEF) */ -/*[clinic end generated code: output=97e00f191821d4c0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=525ec6ac4e3cb4f2 input=a9049054013a1b77]*/ diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c index afc810adcf7499..5ff703217b421f 100644 --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -38,13 +38,14 @@ class HANDLE_converter(CConverter): type = 'void *' format_unit = '"_Py_PARSE_UINTPTR"' - def parse_arg(self, argname, displayname): - return """ + def parse_arg(self, argname, displayname, *, limited_capi): + return self.format_code(""" {paramname} = PyLong_AsVoidPtr({argname}); if (!{paramname} && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) class HANDLE_return_converter(CReturnConverter): type = 'void *' @@ -74,7 +75,7 @@ class wchar_t_return_converter(CReturnConverter): data.return_conversion.append( 'return_value = PyUnicode_FromOrdinal(_return_value);\n') [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=1e8e9fa3538ec08f]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=ff031be44ab3250d]*/ /*[clinic input] module msvcrt @@ -219,12 +220,12 @@ msvcrt_get_osfhandle_impl(PyObject *module, int fd) /*[clinic input] msvcrt.kbhit -> long -Return true if a keypress is waiting to be read. +Returns a nonzero value if a keypress is waiting to be read. Otherwise, return 0. [clinic start generated code]*/ static long msvcrt_kbhit_impl(PyObject *module) -/*[clinic end generated code: output=940dfce6587c1890 input=e70d678a5c2f6acc]*/ +/*[clinic end generated code: output=940dfce6587c1890 input=d0f4cb3289ff51e2]*/ { return _kbhit(); } @@ -614,6 +615,10 @@ exec_module(PyObject* m) INSERTPTR(m, "CRTDBG_FILE_STDERR", _CRTDBG_FILE_STDERR); INSERTPTR(m, "CRTDBG_FILE_STDOUT", _CRTDBG_FILE_STDOUT); INSERTPTR(m, "CRTDBG_REPORT_FILE", _CRTDBG_REPORT_FILE); + INSERTINT(m, "OUT_TO_DEFAULT", _OUT_TO_DEFAULT); + INSERTINT(m, "OUT_TO_STDERR", _OUT_TO_STDERR); + INSERTINT(m, "OUT_TO_MSGBOX", _OUT_TO_MSGBOX); + INSERTINT(m, "REPORT_ERRMODE", _REPORT_ERRMODE); #endif #undef INSERTINT diff --git a/PC/python3dll.c b/PC/python3dll.c index ee3a7d7b4e5be1..2c1cc8098ce856 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -359,6 +359,8 @@ EXPORT_FUNC(PyMapping_GetOptionalItem) EXPORT_FUNC(PyMapping_GetOptionalItemString) EXPORT_FUNC(PyMapping_HasKey) EXPORT_FUNC(PyMapping_HasKeyString) +EXPORT_FUNC(PyMapping_HasKeyStringWithError) +EXPORT_FUNC(PyMapping_HasKeyWithError) EXPORT_FUNC(PyMapping_Items) EXPORT_FUNC(PyMapping_Keys) EXPORT_FUNC(PyMapping_Length) @@ -480,6 +482,8 @@ EXPORT_FUNC(PyObject_GetOptionalAttrString) EXPORT_FUNC(PyObject_GetTypeData) EXPORT_FUNC(PyObject_HasAttr) EXPORT_FUNC(PyObject_HasAttrString) +EXPORT_FUNC(PyObject_HasAttrStringWithError) +EXPORT_FUNC(PyObject_HasAttrWithError) EXPORT_FUNC(PyObject_Hash) EXPORT_FUNC(PyObject_HashNotImplemented) EXPORT_FUNC(PyObject_Init) diff --git a/PC/winreg.c b/PC/winreg.c index 767127d34cab1b..77b80217ac0ab1 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -222,13 +222,15 @@ class HKEY_converter(CConverter): converter = 'clinic_HKEY_converter' broken_limited_capi = True - def parse_arg(self, argname, displayname): - return """ - if (!{converter}(_PyModule_GetState(module), {argname}, &{paramname})) {{{{ - goto exit; - }}}} - """.format(argname=argname, paramname=self.parser_name, - converter=self.converter) + def parse_arg(self, argname, displayname, *, limited_capi): + assert not limited_capi + return self.format_code(""" + if (!{converter}(_PyModule_GetState(module), {argname}, &{paramname})) {{{{ + goto exit; + }}}} + """, + argname=argname, + converter=self.converter) class HKEY_return_converter(CReturnConverter): type = 'HKEY' @@ -250,7 +252,7 @@ class self_return_converter(CReturnConverter): data.return_conversion.append( 'return_value = (PyObject *)_return_value;\n') [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=f8cb7034338aeaba]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=4979f33998ffb6f8]*/ #include "clinic/winreg.c.h" diff --git a/PCbuild/_testinternalcapi.vcxproj b/PCbuild/_testinternalcapi.vcxproj index 59491c644b6655..fb474f06f38fe8 100644 --- a/PCbuild/_testinternalcapi.vcxproj +++ b/PCbuild/_testinternalcapi.vcxproj @@ -95,6 +95,7 @@ + diff --git a/PCbuild/_testinternalcapi.vcxproj.filters b/PCbuild/_testinternalcapi.vcxproj.filters index 21a66a2aa79f76..9c8a5d793ee0f4 100644 --- a/PCbuild/_testinternalcapi.vcxproj.filters +++ b/PCbuild/_testinternalcapi.vcxproj.filters @@ -15,6 +15,9 @@ Source Files + + Source Files + diff --git a/PCbuild/build.bat b/PCbuild/build.bat index d333ceabd2e53a..e61267b5852a8f 100644 --- a/PCbuild/build.bat +++ b/PCbuild/build.bat @@ -33,6 +33,7 @@ echo. -k Attempt to kill any running Pythons before building (usually done echo. automatically by the pythoncore project) echo. --pgo Build with Profile-Guided Optimization. This flag echo. overrides -c and -d +echo. --disable-gil Enable experimental support for running without the GIL. echo. --test-marker Enable the test marker within the build. echo. --regen Regenerate all opcodes, grammar and tokens. echo. @@ -80,6 +81,7 @@ if "%~1"=="-q" (set verbose=/v:q /nologo /clp:summary) & shift & goto CheckOpts if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts +if "%~1"=="--disable-gil" (set UseDisableGil=true) & shift & goto CheckOpts if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts if "%~1"=="-V" shift & goto Version if "%~1"=="--regen" (set Regen=true) & shift & goto CheckOpts @@ -172,6 +174,7 @@ echo on /p:IncludeExternals=%IncludeExternals%^ /p:IncludeCTypes=%IncludeCTypes%^ /p:IncludeSSL=%IncludeSSL% /p:IncludeTkinter=%IncludeTkinter%^ + /p:DisableGil=%UseDisableGil%^ /p:UseTestMarker=%UseTestMarker% %GITProperty%^ %1 %2 %3 %4 %5 %6 %7 %8 %9 diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat index 257b360ba3506f..1d3abcc3def1fa 100644 --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -53,7 +53,7 @@ echo.Fetching external libraries... set libraries= set libraries=%libraries% bzip2-1.0.8 if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.4.4 -if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.0.9 +if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-3.0.10 set libraries=%libraries% sqlite-3.42.0.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.13.0 if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.13.0 @@ -76,7 +76,7 @@ echo.Fetching external binaries... set binaries= if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi-3.4.4 -if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.0.9 +if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-3.0.10 if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.13.0 if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06 diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props index fd928cafd77aaa..9db400eebae388 100644 --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -40,6 +40,7 @@ $(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories) WIN32;$(_Py3NamePreprocessorDefinition);$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions) + Py_NOGIL=1;%(PreprocessorDefinitions) MaxSpeed true diff --git a/PCbuild/python.props b/PCbuild/python.props index d3586235c82652..94faa8221eac5a 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -74,8 +74,8 @@ $(ExternalsDir)libffi-3.4.4\ $(libffiDir)$(ArchName)\ $(libffiOutDir)include - $(ExternalsDir)openssl-3.0.9\ - $(ExternalsDir)openssl-bin-3.0.9\$(ArchName)\ + $(ExternalsDir)openssl-3.0.10\ + $(ExternalsDir)openssl-bin-3.0.10\$(ArchName)\ $(opensslOutDir)include $(ExternalsDir)\nasm-2.11.06\ $(ExternalsDir)\zlib-1.2.13\ diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index 4cd095b28e510f..1ec106777db56d 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -176,6 +176,7 @@ + @@ -203,7 +204,6 @@ - @@ -244,6 +244,8 @@ + + @@ -253,6 +255,7 @@ + @@ -261,12 +264,14 @@ + + @@ -305,6 +310,7 @@ + @@ -550,12 +556,14 @@ + + diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters index af1669209a9049..f381120c9b035a 100644 --- a/PCbuild/pythoncore.vcxproj.filters +++ b/PCbuild/pythoncore.vcxproj.filters @@ -144,6 +144,9 @@ Include + + Include + Include @@ -492,6 +495,9 @@ Include\cpython + + Include\cpython + Include\cpython @@ -525,9 +531,6 @@ Include\internal - - Include - Include\internal @@ -642,6 +645,12 @@ Include\internal + + Include\internal + + + Include\internal + Include\internal @@ -669,6 +678,9 @@ Include\internal + + Include\internal + Include\internal @@ -693,6 +705,9 @@ Include\internal + + Include\internal + Include\internal @@ -711,6 +726,9 @@ Include\internal + + Include\internal + Include\internal @@ -1235,6 +1253,9 @@ Source Files + + Source Files + Python @@ -1253,6 +1274,9 @@ Python + + Python + Python diff --git a/PCbuild/rt.bat b/PCbuild/rt.bat index 29813c5a87fca7..33f4212e14567d 100644 --- a/PCbuild/rt.bat +++ b/PCbuild/rt.bat @@ -32,7 +32,7 @@ set pcbuild=%~dp0 set suffix= set qmode= set dashO= -set regrtestargs= +set regrtestargs=--fail-env-changed --fail-rerun set exe= :CheckOpts diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index ca259c8cd1f3ba..f61099b97055ad 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -1401,8 +1401,8 @@ class PartingShots(StaticVisitor): if (!tstate) { return 0; } - state->recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; - int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; + state->recursion_limit = Py_C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + int recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; state->recursion_depth = starting_recursion_depth; diff --git a/Parser/parser.c b/Parser/parser.c index 95cbef4a64a10f..24f67f4dedfb1f 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -84,159 +84,159 @@ static char *soft_keywords[] = { #define interactive_type 1001 #define eval_type 1002 #define func_type_type 1003 -#define fstring_type 1004 -#define statements_type 1005 -#define statement_type 1006 -#define statement_newline_type 1007 -#define simple_stmts_type 1008 -#define simple_stmt_type 1009 -#define compound_stmt_type 1010 -#define assignment_type 1011 -#define annotated_rhs_type 1012 -#define augassign_type 1013 -#define return_stmt_type 1014 -#define raise_stmt_type 1015 -#define global_stmt_type 1016 -#define nonlocal_stmt_type 1017 -#define del_stmt_type 1018 -#define yield_stmt_type 1019 -#define assert_stmt_type 1020 -#define import_stmt_type 1021 -#define import_name_type 1022 -#define import_from_type 1023 -#define import_from_targets_type 1024 -#define import_from_as_names_type 1025 -#define import_from_as_name_type 1026 -#define dotted_as_names_type 1027 -#define dotted_as_name_type 1028 -#define dotted_name_type 1029 // Left-recursive -#define block_type 1030 -#define decorators_type 1031 -#define class_def_type 1032 -#define class_def_raw_type 1033 -#define function_def_type 1034 -#define function_def_raw_type 1035 -#define params_type 1036 -#define parameters_type 1037 -#define slash_no_default_type 1038 -#define slash_with_default_type 1039 -#define star_etc_type 1040 -#define kwds_type 1041 -#define param_no_default_type 1042 -#define param_no_default_star_annotation_type 1043 -#define param_with_default_type 1044 -#define param_maybe_default_type 1045 -#define param_type 1046 -#define param_star_annotation_type 1047 -#define annotation_type 1048 -#define star_annotation_type 1049 -#define default_type 1050 -#define if_stmt_type 1051 -#define elif_stmt_type 1052 -#define else_block_type 1053 -#define while_stmt_type 1054 -#define for_stmt_type 1055 -#define with_stmt_type 1056 -#define with_item_type 1057 -#define try_stmt_type 1058 -#define except_block_type 1059 -#define except_star_block_type 1060 -#define finally_block_type 1061 -#define match_stmt_type 1062 -#define subject_expr_type 1063 -#define case_block_type 1064 -#define guard_type 1065 -#define patterns_type 1066 -#define pattern_type 1067 -#define as_pattern_type 1068 -#define or_pattern_type 1069 -#define closed_pattern_type 1070 -#define literal_pattern_type 1071 -#define literal_expr_type 1072 -#define complex_number_type 1073 -#define signed_number_type 1074 -#define signed_real_number_type 1075 -#define real_number_type 1076 -#define imaginary_number_type 1077 -#define capture_pattern_type 1078 -#define pattern_capture_target_type 1079 -#define wildcard_pattern_type 1080 -#define value_pattern_type 1081 -#define attr_type 1082 // Left-recursive -#define name_or_attr_type 1083 // Left-recursive -#define group_pattern_type 1084 -#define sequence_pattern_type 1085 -#define open_sequence_pattern_type 1086 -#define maybe_sequence_pattern_type 1087 -#define maybe_star_pattern_type 1088 -#define star_pattern_type 1089 -#define mapping_pattern_type 1090 -#define items_pattern_type 1091 -#define key_value_pattern_type 1092 -#define double_star_pattern_type 1093 -#define class_pattern_type 1094 -#define positional_patterns_type 1095 -#define keyword_patterns_type 1096 -#define keyword_pattern_type 1097 -#define type_alias_type 1098 -#define type_params_type 1099 -#define type_param_seq_type 1100 -#define type_param_type 1101 -#define type_param_bound_type 1102 -#define expressions_type 1103 -#define expression_type 1104 -#define yield_expr_type 1105 -#define star_expressions_type 1106 -#define star_expression_type 1107 -#define star_named_expressions_type 1108 -#define star_named_expression_type 1109 -#define assignment_expression_type 1110 -#define named_expression_type 1111 -#define disjunction_type 1112 -#define conjunction_type 1113 -#define inversion_type 1114 -#define comparison_type 1115 -#define compare_op_bitwise_or_pair_type 1116 -#define eq_bitwise_or_type 1117 -#define noteq_bitwise_or_type 1118 -#define lte_bitwise_or_type 1119 -#define lt_bitwise_or_type 1120 -#define gte_bitwise_or_type 1121 -#define gt_bitwise_or_type 1122 -#define notin_bitwise_or_type 1123 -#define in_bitwise_or_type 1124 -#define isnot_bitwise_or_type 1125 -#define is_bitwise_or_type 1126 -#define bitwise_or_type 1127 // Left-recursive -#define bitwise_xor_type 1128 // Left-recursive -#define bitwise_and_type 1129 // Left-recursive -#define shift_expr_type 1130 // Left-recursive -#define sum_type 1131 // Left-recursive -#define term_type 1132 // Left-recursive -#define factor_type 1133 -#define power_type 1134 -#define await_primary_type 1135 -#define primary_type 1136 // Left-recursive -#define slices_type 1137 -#define slice_type 1138 -#define atom_type 1139 -#define group_type 1140 -#define lambdef_type 1141 -#define lambda_params_type 1142 -#define lambda_parameters_type 1143 -#define lambda_slash_no_default_type 1144 -#define lambda_slash_with_default_type 1145 -#define lambda_star_etc_type 1146 -#define lambda_kwds_type 1147 -#define lambda_param_no_default_type 1148 -#define lambda_param_with_default_type 1149 -#define lambda_param_maybe_default_type 1150 -#define lambda_param_type 1151 -#define fstring_middle_type 1152 -#define fstring_replacement_field_type 1153 -#define fstring_conversion_type 1154 -#define fstring_full_format_spec_type 1155 -#define fstring_format_spec_type 1156 +#define statements_type 1004 +#define statement_type 1005 +#define statement_newline_type 1006 +#define simple_stmts_type 1007 +#define simple_stmt_type 1008 +#define compound_stmt_type 1009 +#define assignment_type 1010 +#define annotated_rhs_type 1011 +#define augassign_type 1012 +#define return_stmt_type 1013 +#define raise_stmt_type 1014 +#define global_stmt_type 1015 +#define nonlocal_stmt_type 1016 +#define del_stmt_type 1017 +#define yield_stmt_type 1018 +#define assert_stmt_type 1019 +#define import_stmt_type 1020 +#define import_name_type 1021 +#define import_from_type 1022 +#define import_from_targets_type 1023 +#define import_from_as_names_type 1024 +#define import_from_as_name_type 1025 +#define dotted_as_names_type 1026 +#define dotted_as_name_type 1027 +#define dotted_name_type 1028 // Left-recursive +#define block_type 1029 +#define decorators_type 1030 +#define class_def_type 1031 +#define class_def_raw_type 1032 +#define function_def_type 1033 +#define function_def_raw_type 1034 +#define params_type 1035 +#define parameters_type 1036 +#define slash_no_default_type 1037 +#define slash_with_default_type 1038 +#define star_etc_type 1039 +#define kwds_type 1040 +#define param_no_default_type 1041 +#define param_no_default_star_annotation_type 1042 +#define param_with_default_type 1043 +#define param_maybe_default_type 1044 +#define param_type 1045 +#define param_star_annotation_type 1046 +#define annotation_type 1047 +#define star_annotation_type 1048 +#define default_type 1049 +#define if_stmt_type 1050 +#define elif_stmt_type 1051 +#define else_block_type 1052 +#define while_stmt_type 1053 +#define for_stmt_type 1054 +#define with_stmt_type 1055 +#define with_item_type 1056 +#define try_stmt_type 1057 +#define except_block_type 1058 +#define except_star_block_type 1059 +#define finally_block_type 1060 +#define match_stmt_type 1061 +#define subject_expr_type 1062 +#define case_block_type 1063 +#define guard_type 1064 +#define patterns_type 1065 +#define pattern_type 1066 +#define as_pattern_type 1067 +#define or_pattern_type 1068 +#define closed_pattern_type 1069 +#define literal_pattern_type 1070 +#define literal_expr_type 1071 +#define complex_number_type 1072 +#define signed_number_type 1073 +#define signed_real_number_type 1074 +#define real_number_type 1075 +#define imaginary_number_type 1076 +#define capture_pattern_type 1077 +#define pattern_capture_target_type 1078 +#define wildcard_pattern_type 1079 +#define value_pattern_type 1080 +#define attr_type 1081 // Left-recursive +#define name_or_attr_type 1082 // Left-recursive +#define group_pattern_type 1083 +#define sequence_pattern_type 1084 +#define open_sequence_pattern_type 1085 +#define maybe_sequence_pattern_type 1086 +#define maybe_star_pattern_type 1087 +#define star_pattern_type 1088 +#define mapping_pattern_type 1089 +#define items_pattern_type 1090 +#define key_value_pattern_type 1091 +#define double_star_pattern_type 1092 +#define class_pattern_type 1093 +#define positional_patterns_type 1094 +#define keyword_patterns_type 1095 +#define keyword_pattern_type 1096 +#define type_alias_type 1097 +#define type_params_type 1098 +#define type_param_seq_type 1099 +#define type_param_type 1100 +#define type_param_bound_type 1101 +#define expressions_type 1102 +#define expression_type 1103 +#define yield_expr_type 1104 +#define star_expressions_type 1105 +#define star_expression_type 1106 +#define star_named_expressions_type 1107 +#define star_named_expression_type 1108 +#define assignment_expression_type 1109 +#define named_expression_type 1110 +#define disjunction_type 1111 +#define conjunction_type 1112 +#define inversion_type 1113 +#define comparison_type 1114 +#define compare_op_bitwise_or_pair_type 1115 +#define eq_bitwise_or_type 1116 +#define noteq_bitwise_or_type 1117 +#define lte_bitwise_or_type 1118 +#define lt_bitwise_or_type 1119 +#define gte_bitwise_or_type 1120 +#define gt_bitwise_or_type 1121 +#define notin_bitwise_or_type 1122 +#define in_bitwise_or_type 1123 +#define isnot_bitwise_or_type 1124 +#define is_bitwise_or_type 1125 +#define bitwise_or_type 1126 // Left-recursive +#define bitwise_xor_type 1127 // Left-recursive +#define bitwise_and_type 1128 // Left-recursive +#define shift_expr_type 1129 // Left-recursive +#define sum_type 1130 // Left-recursive +#define term_type 1131 // Left-recursive +#define factor_type 1132 +#define power_type 1133 +#define await_primary_type 1134 +#define primary_type 1135 // Left-recursive +#define slices_type 1136 +#define slice_type 1137 +#define atom_type 1138 +#define group_type 1139 +#define lambdef_type 1140 +#define lambda_params_type 1141 +#define lambda_parameters_type 1142 +#define lambda_slash_no_default_type 1143 +#define lambda_slash_with_default_type 1144 +#define lambda_star_etc_type 1145 +#define lambda_kwds_type 1146 +#define lambda_param_no_default_type 1147 +#define lambda_param_with_default_type 1148 +#define lambda_param_maybe_default_type 1149 +#define lambda_param_type 1150 +#define fstring_middle_type 1151 +#define fstring_replacement_field_type 1152 +#define fstring_conversion_type 1153 +#define fstring_full_format_spec_type 1154 +#define fstring_format_spec_type 1155 +#define fstring_type 1156 #define string_type 1157 #define strings_type 1158 #define list_type 1159 @@ -326,10 +326,10 @@ static char *soft_keywords[] = { #define invalid_conversion_character_type 1243 #define _loop0_1_type 1244 #define _loop0_2_type 1245 -#define _loop0_3_type 1246 -#define _loop1_4_type 1247 -#define _loop0_6_type 1248 -#define _gather_5_type 1249 +#define _loop1_3_type 1246 +#define _loop0_5_type 1247 +#define _gather_4_type 1248 +#define _tmp_6_type 1249 #define _tmp_7_type 1250 #define _tmp_8_type 1251 #define _tmp_9_type 1252 @@ -337,106 +337,106 @@ static char *soft_keywords[] = { #define _tmp_11_type 1254 #define _tmp_12_type 1255 #define _tmp_13_type 1256 -#define _tmp_14_type 1257 -#define _loop1_15_type 1258 +#define _loop1_14_type 1257 +#define _tmp_15_type 1258 #define _tmp_16_type 1259 #define _tmp_17_type 1260 -#define _tmp_18_type 1261 -#define _loop0_20_type 1262 -#define _gather_19_type 1263 -#define _loop0_22_type 1264 -#define _gather_21_type 1265 +#define _loop0_19_type 1261 +#define _gather_18_type 1262 +#define _loop0_21_type 1263 +#define _gather_20_type 1264 +#define _tmp_22_type 1265 #define _tmp_23_type 1266 -#define _tmp_24_type 1267 -#define _loop0_25_type 1268 -#define _loop1_26_type 1269 -#define _loop0_28_type 1270 -#define _gather_27_type 1271 -#define _tmp_29_type 1272 -#define _loop0_31_type 1273 -#define _gather_30_type 1274 -#define _tmp_32_type 1275 -#define _loop1_33_type 1276 +#define _loop0_24_type 1267 +#define _loop1_25_type 1268 +#define _loop0_27_type 1269 +#define _gather_26_type 1270 +#define _tmp_28_type 1271 +#define _loop0_30_type 1272 +#define _gather_29_type 1273 +#define _tmp_31_type 1274 +#define _loop1_32_type 1275 +#define _tmp_33_type 1276 #define _tmp_34_type 1277 #define _tmp_35_type 1278 -#define _tmp_36_type 1279 +#define _loop0_36_type 1279 #define _loop0_37_type 1280 #define _loop0_38_type 1281 -#define _loop0_39_type 1282 -#define _loop1_40_type 1283 -#define _loop0_41_type 1284 +#define _loop1_39_type 1282 +#define _loop0_40_type 1283 +#define _loop1_41_type 1284 #define _loop1_42_type 1285 #define _loop1_43_type 1286 -#define _loop1_44_type 1287 -#define _loop0_45_type 1288 -#define _loop1_46_type 1289 -#define _loop0_47_type 1290 -#define _loop1_48_type 1291 +#define _loop0_44_type 1287 +#define _loop1_45_type 1288 +#define _loop0_46_type 1289 +#define _loop1_47_type 1290 +#define _loop0_48_type 1291 #define _loop0_49_type 1292 -#define _loop0_50_type 1293 -#define _loop1_51_type 1294 -#define _loop0_53_type 1295 -#define _gather_52_type 1296 -#define _loop0_55_type 1297 -#define _gather_54_type 1298 -#define _loop0_57_type 1299 -#define _gather_56_type 1300 -#define _loop0_59_type 1301 -#define _gather_58_type 1302 -#define _tmp_60_type 1303 +#define _loop1_50_type 1293 +#define _loop0_52_type 1294 +#define _gather_51_type 1295 +#define _loop0_54_type 1296 +#define _gather_53_type 1297 +#define _loop0_56_type 1298 +#define _gather_55_type 1299 +#define _loop0_58_type 1300 +#define _gather_57_type 1301 +#define _tmp_59_type 1302 +#define _loop1_60_type 1303 #define _loop1_61_type 1304 -#define _loop1_62_type 1305 +#define _tmp_62_type 1305 #define _tmp_63_type 1306 -#define _tmp_64_type 1307 -#define _loop1_65_type 1308 -#define _loop0_67_type 1309 -#define _gather_66_type 1310 +#define _loop1_64_type 1307 +#define _loop0_66_type 1308 +#define _gather_65_type 1309 +#define _tmp_67_type 1310 #define _tmp_68_type 1311 #define _tmp_69_type 1312 #define _tmp_70_type 1313 -#define _tmp_71_type 1314 -#define _loop0_73_type 1315 -#define _gather_72_type 1316 -#define _loop0_75_type 1317 -#define _gather_74_type 1318 -#define _tmp_76_type 1319 -#define _loop0_78_type 1320 -#define _gather_77_type 1321 -#define _loop0_80_type 1322 -#define _gather_79_type 1323 -#define _loop0_82_type 1324 -#define _gather_81_type 1325 +#define _loop0_72_type 1314 +#define _gather_71_type 1315 +#define _loop0_74_type 1316 +#define _gather_73_type 1317 +#define _tmp_75_type 1318 +#define _loop0_77_type 1319 +#define _gather_76_type 1320 +#define _loop0_79_type 1321 +#define _gather_78_type 1322 +#define _loop0_81_type 1323 +#define _gather_80_type 1324 +#define _loop1_82_type 1325 #define _loop1_83_type 1326 -#define _loop1_84_type 1327 -#define _loop0_86_type 1328 -#define _gather_85_type 1329 +#define _loop0_85_type 1327 +#define _gather_84_type 1328 +#define _loop1_86_type 1329 #define _loop1_87_type 1330 #define _loop1_88_type 1331 -#define _loop1_89_type 1332 -#define _tmp_90_type 1333 -#define _loop0_92_type 1334 -#define _gather_91_type 1335 +#define _tmp_89_type 1332 +#define _loop0_91_type 1333 +#define _gather_90_type 1334 +#define _tmp_92_type 1335 #define _tmp_93_type 1336 #define _tmp_94_type 1337 #define _tmp_95_type 1338 #define _tmp_96_type 1339 #define _tmp_97_type 1340 -#define _tmp_98_type 1341 +#define _loop0_98_type 1341 #define _loop0_99_type 1342 #define _loop0_100_type 1343 -#define _loop0_101_type 1344 -#define _loop1_102_type 1345 -#define _loop0_103_type 1346 +#define _loop1_101_type 1344 +#define _loop0_102_type 1345 +#define _loop1_103_type 1346 #define _loop1_104_type 1347 #define _loop1_105_type 1348 -#define _loop1_106_type 1349 -#define _loop0_107_type 1350 -#define _loop1_108_type 1351 -#define _loop0_109_type 1352 -#define _loop1_110_type 1353 -#define _loop0_111_type 1354 -#define _loop1_112_type 1355 -#define _tmp_113_type 1356 +#define _loop0_106_type 1349 +#define _loop1_107_type 1350 +#define _loop0_108_type 1351 +#define _loop1_109_type 1352 +#define _loop0_110_type 1353 +#define _loop1_111_type 1354 +#define _tmp_112_type 1355 +#define _loop0_113_type 1356 #define _loop0_114_type 1357 #define _loop1_115_type 1358 #define _tmp_116_type 1359 @@ -483,65 +483,65 @@ static char *soft_keywords[] = { #define _tmp_157_type 1400 #define _tmp_158_type 1401 #define _tmp_159_type 1402 -#define _tmp_160_type 1403 +#define _loop0_160_type 1403 #define _loop0_161_type 1404 #define _loop0_162_type 1405 -#define _loop0_163_type 1406 +#define _tmp_163_type 1406 #define _tmp_164_type 1407 #define _tmp_165_type 1408 #define _tmp_166_type 1409 #define _tmp_167_type 1410 -#define _tmp_168_type 1411 +#define _loop0_168_type 1411 #define _loop0_169_type 1412 #define _loop0_170_type 1413 -#define _loop0_171_type 1414 -#define _loop1_172_type 1415 -#define _tmp_173_type 1416 -#define _loop0_174_type 1417 -#define _tmp_175_type 1418 -#define _loop0_176_type 1419 -#define _loop1_177_type 1420 +#define _loop1_171_type 1414 +#define _tmp_172_type 1415 +#define _loop0_173_type 1416 +#define _tmp_174_type 1417 +#define _loop0_175_type 1418 +#define _loop1_176_type 1419 +#define _tmp_177_type 1420 #define _tmp_178_type 1421 #define _tmp_179_type 1422 -#define _tmp_180_type 1423 -#define _loop0_181_type 1424 +#define _loop0_180_type 1423 +#define _tmp_181_type 1424 #define _tmp_182_type 1425 -#define _tmp_183_type 1426 -#define _loop1_184_type 1427 -#define _tmp_185_type 1428 +#define _loop1_183_type 1426 +#define _tmp_184_type 1427 +#define _loop0_185_type 1428 #define _loop0_186_type 1429 #define _loop0_187_type 1430 -#define _loop0_188_type 1431 -#define _loop0_190_type 1432 -#define _gather_189_type 1433 -#define _tmp_191_type 1434 -#define _loop0_192_type 1435 -#define _tmp_193_type 1436 -#define _loop0_194_type 1437 +#define _loop0_189_type 1431 +#define _gather_188_type 1432 +#define _tmp_190_type 1433 +#define _loop0_191_type 1434 +#define _tmp_192_type 1435 +#define _loop0_193_type 1436 +#define _loop1_194_type 1437 #define _loop1_195_type 1438 -#define _loop1_196_type 1439 +#define _tmp_196_type 1439 #define _tmp_197_type 1440 -#define _tmp_198_type 1441 -#define _loop0_199_type 1442 +#define _loop0_198_type 1441 +#define _tmp_199_type 1442 #define _tmp_200_type 1443 #define _tmp_201_type 1444 -#define _tmp_202_type 1445 -#define _loop0_204_type 1446 -#define _gather_203_type 1447 -#define _loop0_206_type 1448 -#define _gather_205_type 1449 -#define _loop0_208_type 1450 -#define _gather_207_type 1451 -#define _loop0_210_type 1452 -#define _gather_209_type 1453 -#define _loop0_212_type 1454 -#define _gather_211_type 1455 -#define _tmp_213_type 1456 -#define _loop0_214_type 1457 -#define _loop1_215_type 1458 -#define _tmp_216_type 1459 -#define _loop0_217_type 1460 -#define _loop1_218_type 1461 +#define _loop0_203_type 1445 +#define _gather_202_type 1446 +#define _loop0_205_type 1447 +#define _gather_204_type 1448 +#define _loop0_207_type 1449 +#define _gather_206_type 1450 +#define _loop0_209_type 1451 +#define _gather_208_type 1452 +#define _loop0_211_type 1453 +#define _gather_210_type 1454 +#define _tmp_212_type 1455 +#define _loop0_213_type 1456 +#define _loop1_214_type 1457 +#define _tmp_215_type 1458 +#define _loop0_216_type 1459 +#define _loop1_217_type 1460 +#define _tmp_218_type 1461 #define _tmp_219_type 1462 #define _tmp_220_type 1463 #define _tmp_221_type 1464 @@ -551,9 +551,9 @@ static char *soft_keywords[] = { #define _tmp_225_type 1468 #define _tmp_226_type 1469 #define _tmp_227_type 1470 -#define _tmp_228_type 1471 -#define _loop0_230_type 1472 -#define _gather_229_type 1473 +#define _loop0_229_type 1471 +#define _gather_228_type 1472 +#define _tmp_230_type 1473 #define _tmp_231_type 1474 #define _tmp_232_type 1475 #define _tmp_233_type 1476 @@ -566,8 +566,8 @@ static char *soft_keywords[] = { #define _tmp_240_type 1483 #define _tmp_241_type 1484 #define _tmp_242_type 1485 -#define _tmp_243_type 1486 -#define _loop0_244_type 1487 +#define _loop0_243_type 1486 +#define _tmp_244_type 1487 #define _tmp_245_type 1488 #define _tmp_246_type 1489 #define _tmp_247_type 1490 @@ -599,13 +599,11 @@ static char *soft_keywords[] = { #define _tmp_273_type 1516 #define _tmp_274_type 1517 #define _tmp_275_type 1518 -#define _tmp_276_type 1519 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); static mod_ty eval_rule(Parser *p); static mod_ty func_type_rule(Parser *p); -static expr_ty fstring_rule(Parser *p); static asdl_stmt_seq* statements_rule(Parser *p); static asdl_stmt_seq* statement_rule(Parser *p); static asdl_stmt_seq* statement_newline_rule(Parser *p); @@ -758,6 +756,7 @@ static expr_ty fstring_replacement_field_rule(Parser *p); static ResultTokenWithMetadata* fstring_conversion_rule(Parser *p); static ResultTokenWithMetadata* fstring_full_format_spec_rule(Parser *p); static expr_ty fstring_format_spec_rule(Parser *p); +static expr_ty fstring_rule(Parser *p); static expr_ty string_rule(Parser *p); static expr_ty strings_rule(Parser *p); static expr_ty list_rule(Parser *p); @@ -847,10 +846,10 @@ static void *invalid_replacement_field_rule(Parser *p); static void *invalid_conversion_character_rule(Parser *p); static asdl_seq *_loop0_1_rule(Parser *p); static asdl_seq *_loop0_2_rule(Parser *p); -static asdl_seq *_loop0_3_rule(Parser *p); -static asdl_seq *_loop1_4_rule(Parser *p); -static asdl_seq *_loop0_6_rule(Parser *p); -static asdl_seq *_gather_5_rule(Parser *p); +static asdl_seq *_loop1_3_rule(Parser *p); +static asdl_seq *_loop0_5_rule(Parser *p); +static asdl_seq *_gather_4_rule(Parser *p); +static void *_tmp_6_rule(Parser *p); static void *_tmp_7_rule(Parser *p); static void *_tmp_8_rule(Parser *p); static void *_tmp_9_rule(Parser *p); @@ -858,106 +857,106 @@ static void *_tmp_10_rule(Parser *p); static void *_tmp_11_rule(Parser *p); static void *_tmp_12_rule(Parser *p); static void *_tmp_13_rule(Parser *p); -static void *_tmp_14_rule(Parser *p); -static asdl_seq *_loop1_15_rule(Parser *p); +static asdl_seq *_loop1_14_rule(Parser *p); +static void *_tmp_15_rule(Parser *p); static void *_tmp_16_rule(Parser *p); static void *_tmp_17_rule(Parser *p); -static void *_tmp_18_rule(Parser *p); -static asdl_seq *_loop0_20_rule(Parser *p); -static asdl_seq *_gather_19_rule(Parser *p); -static asdl_seq *_loop0_22_rule(Parser *p); -static asdl_seq *_gather_21_rule(Parser *p); +static asdl_seq *_loop0_19_rule(Parser *p); +static asdl_seq *_gather_18_rule(Parser *p); +static asdl_seq *_loop0_21_rule(Parser *p); +static asdl_seq *_gather_20_rule(Parser *p); +static void *_tmp_22_rule(Parser *p); static void *_tmp_23_rule(Parser *p); -static void *_tmp_24_rule(Parser *p); -static asdl_seq *_loop0_25_rule(Parser *p); -static asdl_seq *_loop1_26_rule(Parser *p); -static asdl_seq *_loop0_28_rule(Parser *p); -static asdl_seq *_gather_27_rule(Parser *p); -static void *_tmp_29_rule(Parser *p); -static asdl_seq *_loop0_31_rule(Parser *p); -static asdl_seq *_gather_30_rule(Parser *p); -static void *_tmp_32_rule(Parser *p); -static asdl_seq *_loop1_33_rule(Parser *p); +static asdl_seq *_loop0_24_rule(Parser *p); +static asdl_seq *_loop1_25_rule(Parser *p); +static asdl_seq *_loop0_27_rule(Parser *p); +static asdl_seq *_gather_26_rule(Parser *p); +static void *_tmp_28_rule(Parser *p); +static asdl_seq *_loop0_30_rule(Parser *p); +static asdl_seq *_gather_29_rule(Parser *p); +static void *_tmp_31_rule(Parser *p); +static asdl_seq *_loop1_32_rule(Parser *p); +static void *_tmp_33_rule(Parser *p); static void *_tmp_34_rule(Parser *p); static void *_tmp_35_rule(Parser *p); -static void *_tmp_36_rule(Parser *p); +static asdl_seq *_loop0_36_rule(Parser *p); static asdl_seq *_loop0_37_rule(Parser *p); static asdl_seq *_loop0_38_rule(Parser *p); -static asdl_seq *_loop0_39_rule(Parser *p); -static asdl_seq *_loop1_40_rule(Parser *p); -static asdl_seq *_loop0_41_rule(Parser *p); +static asdl_seq *_loop1_39_rule(Parser *p); +static asdl_seq *_loop0_40_rule(Parser *p); +static asdl_seq *_loop1_41_rule(Parser *p); static asdl_seq *_loop1_42_rule(Parser *p); static asdl_seq *_loop1_43_rule(Parser *p); -static asdl_seq *_loop1_44_rule(Parser *p); -static asdl_seq *_loop0_45_rule(Parser *p); -static asdl_seq *_loop1_46_rule(Parser *p); -static asdl_seq *_loop0_47_rule(Parser *p); -static asdl_seq *_loop1_48_rule(Parser *p); +static asdl_seq *_loop0_44_rule(Parser *p); +static asdl_seq *_loop1_45_rule(Parser *p); +static asdl_seq *_loop0_46_rule(Parser *p); +static asdl_seq *_loop1_47_rule(Parser *p); +static asdl_seq *_loop0_48_rule(Parser *p); static asdl_seq *_loop0_49_rule(Parser *p); -static asdl_seq *_loop0_50_rule(Parser *p); -static asdl_seq *_loop1_51_rule(Parser *p); -static asdl_seq *_loop0_53_rule(Parser *p); -static asdl_seq *_gather_52_rule(Parser *p); -static asdl_seq *_loop0_55_rule(Parser *p); -static asdl_seq *_gather_54_rule(Parser *p); -static asdl_seq *_loop0_57_rule(Parser *p); -static asdl_seq *_gather_56_rule(Parser *p); -static asdl_seq *_loop0_59_rule(Parser *p); -static asdl_seq *_gather_58_rule(Parser *p); -static void *_tmp_60_rule(Parser *p); +static asdl_seq *_loop1_50_rule(Parser *p); +static asdl_seq *_loop0_52_rule(Parser *p); +static asdl_seq *_gather_51_rule(Parser *p); +static asdl_seq *_loop0_54_rule(Parser *p); +static asdl_seq *_gather_53_rule(Parser *p); +static asdl_seq *_loop0_56_rule(Parser *p); +static asdl_seq *_gather_55_rule(Parser *p); +static asdl_seq *_loop0_58_rule(Parser *p); +static asdl_seq *_gather_57_rule(Parser *p); +static void *_tmp_59_rule(Parser *p); +static asdl_seq *_loop1_60_rule(Parser *p); static asdl_seq *_loop1_61_rule(Parser *p); -static asdl_seq *_loop1_62_rule(Parser *p); +static void *_tmp_62_rule(Parser *p); static void *_tmp_63_rule(Parser *p); -static void *_tmp_64_rule(Parser *p); -static asdl_seq *_loop1_65_rule(Parser *p); -static asdl_seq *_loop0_67_rule(Parser *p); -static asdl_seq *_gather_66_rule(Parser *p); +static asdl_seq *_loop1_64_rule(Parser *p); +static asdl_seq *_loop0_66_rule(Parser *p); +static asdl_seq *_gather_65_rule(Parser *p); +static void *_tmp_67_rule(Parser *p); static void *_tmp_68_rule(Parser *p); static void *_tmp_69_rule(Parser *p); static void *_tmp_70_rule(Parser *p); -static void *_tmp_71_rule(Parser *p); -static asdl_seq *_loop0_73_rule(Parser *p); -static asdl_seq *_gather_72_rule(Parser *p); -static asdl_seq *_loop0_75_rule(Parser *p); -static asdl_seq *_gather_74_rule(Parser *p); -static void *_tmp_76_rule(Parser *p); -static asdl_seq *_loop0_78_rule(Parser *p); -static asdl_seq *_gather_77_rule(Parser *p); -static asdl_seq *_loop0_80_rule(Parser *p); -static asdl_seq *_gather_79_rule(Parser *p); -static asdl_seq *_loop0_82_rule(Parser *p); -static asdl_seq *_gather_81_rule(Parser *p); +static asdl_seq *_loop0_72_rule(Parser *p); +static asdl_seq *_gather_71_rule(Parser *p); +static asdl_seq *_loop0_74_rule(Parser *p); +static asdl_seq *_gather_73_rule(Parser *p); +static void *_tmp_75_rule(Parser *p); +static asdl_seq *_loop0_77_rule(Parser *p); +static asdl_seq *_gather_76_rule(Parser *p); +static asdl_seq *_loop0_79_rule(Parser *p); +static asdl_seq *_gather_78_rule(Parser *p); +static asdl_seq *_loop0_81_rule(Parser *p); +static asdl_seq *_gather_80_rule(Parser *p); +static asdl_seq *_loop1_82_rule(Parser *p); static asdl_seq *_loop1_83_rule(Parser *p); -static asdl_seq *_loop1_84_rule(Parser *p); -static asdl_seq *_loop0_86_rule(Parser *p); -static asdl_seq *_gather_85_rule(Parser *p); +static asdl_seq *_loop0_85_rule(Parser *p); +static asdl_seq *_gather_84_rule(Parser *p); +static asdl_seq *_loop1_86_rule(Parser *p); static asdl_seq *_loop1_87_rule(Parser *p); static asdl_seq *_loop1_88_rule(Parser *p); -static asdl_seq *_loop1_89_rule(Parser *p); -static void *_tmp_90_rule(Parser *p); -static asdl_seq *_loop0_92_rule(Parser *p); -static asdl_seq *_gather_91_rule(Parser *p); +static void *_tmp_89_rule(Parser *p); +static asdl_seq *_loop0_91_rule(Parser *p); +static asdl_seq *_gather_90_rule(Parser *p); +static void *_tmp_92_rule(Parser *p); static void *_tmp_93_rule(Parser *p); static void *_tmp_94_rule(Parser *p); static void *_tmp_95_rule(Parser *p); static void *_tmp_96_rule(Parser *p); static void *_tmp_97_rule(Parser *p); -static void *_tmp_98_rule(Parser *p); +static asdl_seq *_loop0_98_rule(Parser *p); static asdl_seq *_loop0_99_rule(Parser *p); static asdl_seq *_loop0_100_rule(Parser *p); -static asdl_seq *_loop0_101_rule(Parser *p); -static asdl_seq *_loop1_102_rule(Parser *p); -static asdl_seq *_loop0_103_rule(Parser *p); +static asdl_seq *_loop1_101_rule(Parser *p); +static asdl_seq *_loop0_102_rule(Parser *p); +static asdl_seq *_loop1_103_rule(Parser *p); static asdl_seq *_loop1_104_rule(Parser *p); static asdl_seq *_loop1_105_rule(Parser *p); -static asdl_seq *_loop1_106_rule(Parser *p); -static asdl_seq *_loop0_107_rule(Parser *p); -static asdl_seq *_loop1_108_rule(Parser *p); -static asdl_seq *_loop0_109_rule(Parser *p); -static asdl_seq *_loop1_110_rule(Parser *p); -static asdl_seq *_loop0_111_rule(Parser *p); -static asdl_seq *_loop1_112_rule(Parser *p); -static void *_tmp_113_rule(Parser *p); +static asdl_seq *_loop0_106_rule(Parser *p); +static asdl_seq *_loop1_107_rule(Parser *p); +static asdl_seq *_loop0_108_rule(Parser *p); +static asdl_seq *_loop1_109_rule(Parser *p); +static asdl_seq *_loop0_110_rule(Parser *p); +static asdl_seq *_loop1_111_rule(Parser *p); +static void *_tmp_112_rule(Parser *p); +static asdl_seq *_loop0_113_rule(Parser *p); static asdl_seq *_loop0_114_rule(Parser *p); static asdl_seq *_loop1_115_rule(Parser *p); static void *_tmp_116_rule(Parser *p); @@ -1004,65 +1003,65 @@ static void *_tmp_156_rule(Parser *p); static void *_tmp_157_rule(Parser *p); static void *_tmp_158_rule(Parser *p); static void *_tmp_159_rule(Parser *p); -static void *_tmp_160_rule(Parser *p); +static asdl_seq *_loop0_160_rule(Parser *p); static asdl_seq *_loop0_161_rule(Parser *p); static asdl_seq *_loop0_162_rule(Parser *p); -static asdl_seq *_loop0_163_rule(Parser *p); +static void *_tmp_163_rule(Parser *p); static void *_tmp_164_rule(Parser *p); static void *_tmp_165_rule(Parser *p); static void *_tmp_166_rule(Parser *p); static void *_tmp_167_rule(Parser *p); -static void *_tmp_168_rule(Parser *p); +static asdl_seq *_loop0_168_rule(Parser *p); static asdl_seq *_loop0_169_rule(Parser *p); static asdl_seq *_loop0_170_rule(Parser *p); -static asdl_seq *_loop0_171_rule(Parser *p); -static asdl_seq *_loop1_172_rule(Parser *p); -static void *_tmp_173_rule(Parser *p); -static asdl_seq *_loop0_174_rule(Parser *p); -static void *_tmp_175_rule(Parser *p); -static asdl_seq *_loop0_176_rule(Parser *p); -static asdl_seq *_loop1_177_rule(Parser *p); +static asdl_seq *_loop1_171_rule(Parser *p); +static void *_tmp_172_rule(Parser *p); +static asdl_seq *_loop0_173_rule(Parser *p); +static void *_tmp_174_rule(Parser *p); +static asdl_seq *_loop0_175_rule(Parser *p); +static asdl_seq *_loop1_176_rule(Parser *p); +static void *_tmp_177_rule(Parser *p); static void *_tmp_178_rule(Parser *p); static void *_tmp_179_rule(Parser *p); -static void *_tmp_180_rule(Parser *p); -static asdl_seq *_loop0_181_rule(Parser *p); +static asdl_seq *_loop0_180_rule(Parser *p); +static void *_tmp_181_rule(Parser *p); static void *_tmp_182_rule(Parser *p); -static void *_tmp_183_rule(Parser *p); -static asdl_seq *_loop1_184_rule(Parser *p); -static void *_tmp_185_rule(Parser *p); +static asdl_seq *_loop1_183_rule(Parser *p); +static void *_tmp_184_rule(Parser *p); +static asdl_seq *_loop0_185_rule(Parser *p); static asdl_seq *_loop0_186_rule(Parser *p); static asdl_seq *_loop0_187_rule(Parser *p); -static asdl_seq *_loop0_188_rule(Parser *p); -static asdl_seq *_loop0_190_rule(Parser *p); -static asdl_seq *_gather_189_rule(Parser *p); -static void *_tmp_191_rule(Parser *p); -static asdl_seq *_loop0_192_rule(Parser *p); -static void *_tmp_193_rule(Parser *p); -static asdl_seq *_loop0_194_rule(Parser *p); +static asdl_seq *_loop0_189_rule(Parser *p); +static asdl_seq *_gather_188_rule(Parser *p); +static void *_tmp_190_rule(Parser *p); +static asdl_seq *_loop0_191_rule(Parser *p); +static void *_tmp_192_rule(Parser *p); +static asdl_seq *_loop0_193_rule(Parser *p); +static asdl_seq *_loop1_194_rule(Parser *p); static asdl_seq *_loop1_195_rule(Parser *p); -static asdl_seq *_loop1_196_rule(Parser *p); +static void *_tmp_196_rule(Parser *p); static void *_tmp_197_rule(Parser *p); -static void *_tmp_198_rule(Parser *p); -static asdl_seq *_loop0_199_rule(Parser *p); +static asdl_seq *_loop0_198_rule(Parser *p); +static void *_tmp_199_rule(Parser *p); static void *_tmp_200_rule(Parser *p); static void *_tmp_201_rule(Parser *p); -static void *_tmp_202_rule(Parser *p); -static asdl_seq *_loop0_204_rule(Parser *p); -static asdl_seq *_gather_203_rule(Parser *p); -static asdl_seq *_loop0_206_rule(Parser *p); -static asdl_seq *_gather_205_rule(Parser *p); -static asdl_seq *_loop0_208_rule(Parser *p); -static asdl_seq *_gather_207_rule(Parser *p); -static asdl_seq *_loop0_210_rule(Parser *p); -static asdl_seq *_gather_209_rule(Parser *p); -static asdl_seq *_loop0_212_rule(Parser *p); -static asdl_seq *_gather_211_rule(Parser *p); -static void *_tmp_213_rule(Parser *p); -static asdl_seq *_loop0_214_rule(Parser *p); -static asdl_seq *_loop1_215_rule(Parser *p); -static void *_tmp_216_rule(Parser *p); -static asdl_seq *_loop0_217_rule(Parser *p); -static asdl_seq *_loop1_218_rule(Parser *p); +static asdl_seq *_loop0_203_rule(Parser *p); +static asdl_seq *_gather_202_rule(Parser *p); +static asdl_seq *_loop0_205_rule(Parser *p); +static asdl_seq *_gather_204_rule(Parser *p); +static asdl_seq *_loop0_207_rule(Parser *p); +static asdl_seq *_gather_206_rule(Parser *p); +static asdl_seq *_loop0_209_rule(Parser *p); +static asdl_seq *_gather_208_rule(Parser *p); +static asdl_seq *_loop0_211_rule(Parser *p); +static asdl_seq *_gather_210_rule(Parser *p); +static void *_tmp_212_rule(Parser *p); +static asdl_seq *_loop0_213_rule(Parser *p); +static asdl_seq *_loop1_214_rule(Parser *p); +static void *_tmp_215_rule(Parser *p); +static asdl_seq *_loop0_216_rule(Parser *p); +static asdl_seq *_loop1_217_rule(Parser *p); +static void *_tmp_218_rule(Parser *p); static void *_tmp_219_rule(Parser *p); static void *_tmp_220_rule(Parser *p); static void *_tmp_221_rule(Parser *p); @@ -1072,9 +1071,9 @@ static void *_tmp_224_rule(Parser *p); static void *_tmp_225_rule(Parser *p); static void *_tmp_226_rule(Parser *p); static void *_tmp_227_rule(Parser *p); -static void *_tmp_228_rule(Parser *p); -static asdl_seq *_loop0_230_rule(Parser *p); -static asdl_seq *_gather_229_rule(Parser *p); +static asdl_seq *_loop0_229_rule(Parser *p); +static asdl_seq *_gather_228_rule(Parser *p); +static void *_tmp_230_rule(Parser *p); static void *_tmp_231_rule(Parser *p); static void *_tmp_232_rule(Parser *p); static void *_tmp_233_rule(Parser *p); @@ -1087,8 +1086,8 @@ static void *_tmp_239_rule(Parser *p); static void *_tmp_240_rule(Parser *p); static void *_tmp_241_rule(Parser *p); static void *_tmp_242_rule(Parser *p); -static void *_tmp_243_rule(Parser *p); -static asdl_seq *_loop0_244_rule(Parser *p); +static asdl_seq *_loop0_243_rule(Parser *p); +static void *_tmp_244_rule(Parser *p); static void *_tmp_245_rule(Parser *p); static void *_tmp_246_rule(Parser *p); static void *_tmp_247_rule(Parser *p); @@ -1120,7 +1119,6 @@ static void *_tmp_272_rule(Parser *p); static void *_tmp_273_rule(Parser *p); static void *_tmp_274_rule(Parser *p); static void *_tmp_275_rule(Parser *p); -static void *_tmp_276_rule(Parser *p); // file: statements? $ @@ -1322,55 +1320,6 @@ func_type_rule(Parser *p) return _res; } -// fstring: FSTRING_START fstring_middle* FSTRING_END -static expr_ty -fstring_rule(Parser *p) -{ - if (p->level++ == MAXSTACK) { - _Pypegen_stack_overflow(p); - } - if (p->error_indicator) { - p->level--; - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - { // FSTRING_START fstring_middle* FSTRING_END - if (p->error_indicator) { - p->level--; - return NULL; - } - D(fprintf(stderr, "%*c> fstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END")); - Token * a; - asdl_seq * b; - Token * c; - if ( - (a = _PyPegen_expect_token(p, FSTRING_START)) // token='FSTRING_START' - && - (b = _loop0_3_rule(p)) // fstring_middle* - && - (c = _PyPegen_expect_token(p, FSTRING_END)) // token='FSTRING_END' - ) - { - D(fprintf(stderr, "%*c+ fstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END")); - _res = _PyPegen_joined_str ( p , a , ( asdl_expr_seq* ) b , c ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - p->level--; - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s fstring[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END")); - } - _res = NULL; - done: - p->level--; - return _res; -} - // statements: statement+ static asdl_stmt_seq* statements_rule(Parser *p) @@ -1392,7 +1341,7 @@ statements_rule(Parser *p) D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+")); asdl_seq * a; if ( - (a = _loop1_4_rule(p)) // statement+ + (a = _loop1_3_rule(p)) // statement+ ) { D(fprintf(stderr, "%*c+ statements[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement+")); @@ -1665,7 +1614,7 @@ simple_stmts_rule(Parser *p) asdl_stmt_seq* a; Token * newline_var; if ( - (a = (asdl_stmt_seq*)_gather_5_rule(p)) // ';'.simple_stmt+ + (a = (asdl_stmt_seq*)_gather_4_rule(p)) // ';'.simple_stmt+ && (_opt_var = _PyPegen_expect_token(p, 13), !p->error_indicator) // ';'? && @@ -1833,7 +1782,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt")); stmt_ty import_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_7_rule, p) + _PyPegen_lookahead(1, _tmp_6_rule, p) && (import_stmt_var = import_stmt_rule(p)) // import_stmt ) @@ -2107,7 +2056,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | 'async') function_def")); stmt_ty function_def_var; if ( - _PyPegen_lookahead(1, _tmp_8_rule, p) + _PyPegen_lookahead(1, _tmp_7_rule, p) && (function_def_var = function_def_rule(p)) // function_def ) @@ -2149,7 +2098,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def")); stmt_ty class_def_var; if ( - _PyPegen_lookahead(1, _tmp_9_rule, p) + _PyPegen_lookahead(1, _tmp_8_rule, p) && (class_def_var = class_def_rule(p)) // class_def ) @@ -2170,7 +2119,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | 'async') with_stmt")); stmt_ty with_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_10_rule, p) + _PyPegen_lookahead(1, _tmp_9_rule, p) && (with_stmt_var = with_stmt_rule(p)) // with_stmt ) @@ -2191,7 +2140,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | 'async') for_stmt")); stmt_ty for_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_11_rule, p) + _PyPegen_lookahead(1, _tmp_10_rule, p) && (for_stmt_var = for_stmt_rule(p)) // for_stmt ) @@ -2315,7 +2264,7 @@ assignment_rule(Parser *p) && (b = expression_rule(p)) // expression && - (c = _tmp_12_rule(p), !p->error_indicator) // ['=' annotated_rhs] + (c = _tmp_11_rule(p), !p->error_indicator) // ['=' annotated_rhs] ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]")); @@ -2351,13 +2300,13 @@ assignment_rule(Parser *p) expr_ty b; void *c; if ( - (a = _tmp_13_rule(p)) // '(' single_target ')' | single_subscript_attribute_target + (a = _tmp_12_rule(p)) // '(' single_target ')' | single_subscript_attribute_target && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = expression_rule(p)) // expression && - (c = _tmp_14_rule(p), !p->error_indicator) // ['=' annotated_rhs] + (c = _tmp_13_rule(p), !p->error_indicator) // ['=' annotated_rhs] ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]")); @@ -2392,9 +2341,9 @@ assignment_rule(Parser *p) void *b; void *tc; if ( - (a = (asdl_expr_seq*)_loop1_15_rule(p)) // ((star_targets '='))+ + (a = (asdl_expr_seq*)_loop1_14_rule(p)) // ((star_targets '='))+ && - (b = _tmp_16_rule(p)) // yield_expr | star_expressions + (b = _tmp_15_rule(p)) // yield_expr | star_expressions && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' && @@ -2440,7 +2389,7 @@ assignment_rule(Parser *p) && (_cut_var = 1) && - (c = _tmp_17_rule(p)) // yield_expr | star_expressions + (c = _tmp_16_rule(p)) // yield_expr | star_expressions ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)")); @@ -2995,7 +2944,7 @@ raise_stmt_rule(Parser *p) && (a = expression_rule(p)) // expression && - (b = _tmp_18_rule(p), !p->error_indicator) // ['from' expression] + (b = _tmp_17_rule(p), !p->error_indicator) // ['from' expression] ) { D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]")); @@ -3092,7 +3041,7 @@ global_stmt_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 526)) // token='global' && - (a = (asdl_expr_seq*)_gather_19_rule(p)) // ','.NAME+ + (a = (asdl_expr_seq*)_gather_18_rule(p)) // ','.NAME+ ) { D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+")); @@ -3156,7 +3105,7 @@ nonlocal_stmt_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 527)) // token='nonlocal' && - (a = (asdl_expr_seq*)_gather_21_rule(p)) // ','.NAME+ + (a = (asdl_expr_seq*)_gather_20_rule(p)) // ','.NAME+ ) { D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+")); @@ -3222,7 +3171,7 @@ del_stmt_rule(Parser *p) && (a = del_targets_rule(p)) // del_targets && - _PyPegen_lookahead(1, _tmp_23_rule, p) + _PyPegen_lookahead(1, _tmp_22_rule, p) ) { D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)")); @@ -3369,7 +3318,7 @@ assert_stmt_rule(Parser *p) && (a = expression_rule(p)) // expression && - (b = _tmp_24_rule(p), !p->error_indicator) // [',' expression] + (b = _tmp_23_rule(p), !p->error_indicator) // [',' expression] ) { D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]")); @@ -3578,7 +3527,7 @@ import_from_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 618)) // token='from' && - (a = _loop0_25_rule(p)) // (('.' | '...'))* + (a = _loop0_24_rule(p)) // (('.' | '...'))* && (b = dotted_name_rule(p)) // dotted_name && @@ -3622,7 +3571,7 @@ import_from_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 618)) // token='from' && - (a = _loop1_26_rule(p)) // (('.' | '...'))+ + (a = _loop1_25_rule(p)) // (('.' | '...'))+ && (_keyword_1 = _PyPegen_expect_token(p, 617)) // token='import' && @@ -3817,7 +3766,7 @@ import_from_as_names_rule(Parser *p) D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+")); asdl_alias_seq* a; if ( - (a = (asdl_alias_seq*)_gather_27_rule(p)) // ','.import_from_as_name+ + (a = (asdl_alias_seq*)_gather_26_rule(p)) // ','.import_from_as_name+ ) { D(fprintf(stderr, "%*c+ import_from_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+")); @@ -3872,7 +3821,7 @@ import_from_as_name_rule(Parser *p) if ( (a = _PyPegen_name_token(p)) // NAME && - (b = _tmp_29_rule(p), !p->error_indicator) // ['as' NAME] + (b = _tmp_28_rule(p), !p->error_indicator) // ['as' NAME] ) { D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]")); @@ -3924,7 +3873,7 @@ dotted_as_names_rule(Parser *p) D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+")); asdl_alias_seq* a; if ( - (a = (asdl_alias_seq*)_gather_30_rule(p)) // ','.dotted_as_name+ + (a = (asdl_alias_seq*)_gather_29_rule(p)) // ','.dotted_as_name+ ) { D(fprintf(stderr, "%*c+ dotted_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+")); @@ -3979,7 +3928,7 @@ dotted_as_name_rule(Parser *p) if ( (a = dotted_name_rule(p)) // dotted_name && - (b = _tmp_32_rule(p), !p->error_indicator) // ['as' NAME] + (b = _tmp_31_rule(p), !p->error_indicator) // ['as' NAME] ) { D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]")); @@ -4230,7 +4179,7 @@ decorators_rule(Parser *p) D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_loop1_33_rule(p)) // (('@' named_expression NEWLINE))+ + (a = (asdl_expr_seq*)_loop1_32_rule(p)) // (('@' named_expression NEWLINE))+ ) { D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); @@ -4379,7 +4328,7 @@ class_def_raw_rule(Parser *p) && (t = type_params_rule(p), !p->error_indicator) // type_params? && - (b = _tmp_34_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (b = _tmp_33_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -4552,7 +4501,7 @@ function_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (a = _tmp_35_rule(p), !p->error_indicator) // ['->' expression] + (a = _tmp_34_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && @@ -4615,7 +4564,7 @@ function_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (a = _tmp_36_rule(p), !p->error_indicator) // ['->' expression] + (a = _tmp_35_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && @@ -4740,9 +4689,9 @@ parameters_rule(Parser *p) if ( (a = slash_no_default_rule(p)) // slash_no_default && - (b = (asdl_arg_seq*)_loop0_37_rule(p)) // param_no_default* + (b = (asdl_arg_seq*)_loop0_36_rule(p)) // param_no_default* && - (c = _loop0_38_rule(p)) // param_with_default* + (c = _loop0_37_rule(p)) // param_with_default* && (d = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4772,7 +4721,7 @@ parameters_rule(Parser *p) if ( (a = slash_with_default_rule(p)) // slash_with_default && - (b = _loop0_39_rule(p)) // param_with_default* + (b = _loop0_38_rule(p)) // param_with_default* && (c = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4800,9 +4749,9 @@ parameters_rule(Parser *p) asdl_seq * b; void *c; if ( - (a = (asdl_arg_seq*)_loop1_40_rule(p)) // param_no_default+ + (a = (asdl_arg_seq*)_loop1_39_rule(p)) // param_no_default+ && - (b = _loop0_41_rule(p)) // param_with_default* + (b = _loop0_40_rule(p)) // param_with_default* && (c = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4829,7 +4778,7 @@ parameters_rule(Parser *p) asdl_seq * a; void *b; if ( - (a = _loop1_42_rule(p)) // param_with_default+ + (a = _loop1_41_rule(p)) // param_with_default+ && (b = star_etc_rule(p), !p->error_indicator) // star_etc? ) @@ -4900,7 +4849,7 @@ slash_no_default_rule(Parser *p) Token * _literal_1; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_43_rule(p)) // param_no_default+ + (a = (asdl_arg_seq*)_loop1_42_rule(p)) // param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -4929,7 +4878,7 @@ slash_no_default_rule(Parser *p) Token * _literal; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_44_rule(p)) // param_no_default+ + (a = (asdl_arg_seq*)_loop1_43_rule(p)) // param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -4981,9 +4930,9 @@ slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_45_rule(p)) // param_no_default* + (a = _loop0_44_rule(p)) // param_no_default* && - (b = _loop1_46_rule(p)) // param_with_default+ + (b = _loop1_45_rule(p)) // param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -5013,9 +4962,9 @@ slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_47_rule(p)) // param_no_default* + (a = _loop0_46_rule(p)) // param_no_default* && - (b = _loop1_48_rule(p)) // param_with_default+ + (b = _loop1_47_rule(p)) // param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -5093,7 +5042,7 @@ star_etc_rule(Parser *p) && (a = param_no_default_rule(p)) // param_no_default && - (b = _loop0_49_rule(p)) // param_maybe_default* + (b = _loop0_48_rule(p)) // param_maybe_default* && (c = kwds_rule(p), !p->error_indicator) // kwds? ) @@ -5126,7 +5075,7 @@ star_etc_rule(Parser *p) && (a = param_no_default_star_annotation_rule(p)) // param_no_default_star_annotation && - (b = _loop0_50_rule(p)) // param_maybe_default* + (b = _loop0_49_rule(p)) // param_maybe_default* && (c = kwds_rule(p), !p->error_indicator) // kwds? ) @@ -5159,7 +5108,7 @@ star_etc_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _loop1_51_rule(p)) // param_maybe_default+ + (b = _loop1_50_rule(p)) // param_maybe_default+ && (c = kwds_rule(p), !p->error_indicator) // kwds? ) @@ -6586,7 +6535,7 @@ with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = (asdl_withitem_seq*)_gather_52_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_51_rule(p)) // ','.with_item+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -6633,7 +6582,7 @@ with_stmt_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 629)) // token='with' && - (a = (asdl_withitem_seq*)_gather_54_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_53_rule(p)) // ','.with_item+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -6686,7 +6635,7 @@ with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = (asdl_withitem_seq*)_gather_56_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_55_rule(p)) // ','.with_item+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -6736,7 +6685,7 @@ with_stmt_rule(Parser *p) && (_keyword_1 = _PyPegen_expect_token(p, 629)) // token='with' && - (a = (asdl_withitem_seq*)_gather_58_rule(p)) // ','.with_item+ + (a = (asdl_withitem_seq*)_gather_57_rule(p)) // ','.with_item+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -6824,7 +6773,7 @@ with_item_rule(Parser *p) && (t = star_target_rule(p)) // star_target && - _PyPegen_lookahead(1, _tmp_60_rule, p) + _PyPegen_lookahead(1, _tmp_59_rule, p) ) { D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); @@ -6995,7 +6944,7 @@ try_stmt_rule(Parser *p) && (b = block_rule(p)) // block && - (ex = (asdl_excepthandler_seq*)_loop1_61_rule(p)) // except_block+ + (ex = (asdl_excepthandler_seq*)_loop1_60_rule(p)) // except_block+ && (el = else_block_rule(p), !p->error_indicator) // else_block? && @@ -7043,7 +6992,7 @@ try_stmt_rule(Parser *p) && (b = block_rule(p)) // block && - (ex = (asdl_excepthandler_seq*)_loop1_62_rule(p)) // except_star_block+ + (ex = (asdl_excepthandler_seq*)_loop1_61_rule(p)) // except_star_block+ && (el = else_block_rule(p), !p->error_indicator) // else_block? && @@ -7139,7 +7088,7 @@ except_block_rule(Parser *p) && (e = expression_rule(p)) // expression && - (t = _tmp_63_rule(p), !p->error_indicator) // ['as' NAME] + (t = _tmp_62_rule(p), !p->error_indicator) // ['as' NAME] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -7295,7 +7244,7 @@ except_star_block_rule(Parser *p) && (e = expression_rule(p)) // expression && - (t = _tmp_64_rule(p), !p->error_indicator) // ['as' NAME] + (t = _tmp_63_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -7465,7 +7414,7 @@ match_stmt_rule(Parser *p) && (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' && - (cases = (asdl_match_case_seq*)_loop1_65_rule(p)) // case_block+ + (cases = (asdl_match_case_seq*)_loop1_64_rule(p)) // case_block+ && (dedent_var = _PyPegen_expect_token(p, DEDENT)) // token='DEDENT' ) @@ -7976,7 +7925,7 @@ or_pattern_rule(Parser *p) D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); asdl_pattern_seq* patterns; if ( - (patterns = (asdl_pattern_seq*)_gather_66_rule(p)) // '|'.closed_pattern+ + (patterns = (asdl_pattern_seq*)_gather_65_rule(p)) // '|'.closed_pattern+ ) { D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); @@ -8229,7 +8178,7 @@ literal_pattern_rule(Parser *p) if ( (value = signed_number_rule(p)) // signed_number && - _PyPegen_lookahead(0, _tmp_68_rule, p) + _PyPegen_lookahead(0, _tmp_67_rule, p) ) { D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); @@ -8463,7 +8412,7 @@ literal_expr_rule(Parser *p) if ( (signed_number_var = signed_number_rule(p)) // signed_number && - _PyPegen_lookahead(0, _tmp_69_rule, p) + _PyPegen_lookahead(0, _tmp_68_rule, p) ) { D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); @@ -9063,7 +9012,7 @@ pattern_capture_target_rule(Parser *p) && (name = _PyPegen_name_token(p)) // NAME && - _PyPegen_lookahead(0, _tmp_70_rule, p) + _PyPegen_lookahead(0, _tmp_69_rule, p) ) { D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); @@ -9178,7 +9127,7 @@ value_pattern_rule(Parser *p) if ( (attr = attr_rule(p)) // attr && - _PyPegen_lookahead(0, _tmp_71_rule, p) + _PyPegen_lookahead(0, _tmp_70_rule, p) ) { D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); @@ -9597,7 +9546,7 @@ maybe_sequence_pattern_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_seq * patterns; if ( - (patterns = _gather_72_rule(p)) // ','.maybe_star_pattern+ + (patterns = _gather_71_rule(p)) // ','.maybe_star_pattern+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -10005,13 +9954,13 @@ items_pattern_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - asdl_seq * _gather_74_var; + asdl_seq * _gather_73_var; if ( - (_gather_74_var = _gather_74_rule(p)) // ','.key_value_pattern+ + (_gather_73_var = _gather_73_rule(p)) // ','.key_value_pattern+ ) { D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - _res = _gather_74_var; + _res = _gather_73_var; goto done; } p->mark = _mark; @@ -10047,7 +9996,7 @@ key_value_pattern_rule(Parser *p) void *key; pattern_ty pattern; if ( - (key = _tmp_76_rule(p)) // literal_expr | attr + (key = _tmp_75_rule(p)) // literal_expr | attr && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -10375,7 +10324,7 @@ positional_patterns_rule(Parser *p) D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+")); asdl_pattern_seq* args; if ( - (args = (asdl_pattern_seq*)_gather_77_rule(p)) // ','.pattern+ + (args = (asdl_pattern_seq*)_gather_76_rule(p)) // ','.pattern+ ) { D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+")); @@ -10416,13 +10365,13 @@ keyword_patterns_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - asdl_seq * _gather_79_var; + asdl_seq * _gather_78_var; if ( - (_gather_79_var = _gather_79_rule(p)) // ','.keyword_pattern+ + (_gather_78_var = _gather_78_rule(p)) // ','.keyword_pattern+ ) { D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - _res = _gather_79_var; + _res = _gather_78_var; goto done; } p->mark = _mark; @@ -10629,7 +10578,7 @@ type_param_seq_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_type_param_seq* a; if ( - (a = (asdl_type_param_seq*)_gather_81_rule(p)) // ','.type_param+ + (a = (asdl_type_param_seq*)_gather_80_rule(p)) // ','.type_param+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -10655,9 +10604,9 @@ type_param_seq_rule(Parser *p) // type_param: // | NAME type_param_bound? -// | '*' NAME ":" expression +// | '*' NAME ':' expression // | '*' NAME -// | '**' NAME ":" expression +// | '**' NAME ':' expression // | '**' NAME static type_param_ty type_param_rule(Parser *p) @@ -10720,12 +10669,12 @@ type_param_rule(Parser *p) D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME type_param_bound?")); } - { // '*' NAME ":" expression + { // '*' NAME ':' expression if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' NAME \":\" expression")); + D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' NAME ':' expression")); Token * _literal; expr_ty a; Token * colon; @@ -10740,7 +10689,7 @@ type_param_rule(Parser *p) (e = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' NAME \":\" expression")); + D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' NAME ':' expression")); _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( colon , e -> kind == Tuple_kind ? "cannot use constraints with TypeVarTuple" : "cannot use bound with TypeVarTuple" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -10751,7 +10700,7 @@ type_param_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME \":\" expression")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME ':' expression")); } { // '*' NAME if (p->error_indicator) { @@ -10789,12 +10738,12 @@ type_param_rule(Parser *p) D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME")); } - { // '**' NAME ":" expression + { // '**' NAME ':' expression if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' NAME \":\" expression")); + D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' NAME ':' expression")); Token * _literal; expr_ty a; Token * colon; @@ -10809,7 +10758,7 @@ type_param_rule(Parser *p) (e = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' NAME \":\" expression")); + D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' NAME ':' expression")); _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( colon , e -> kind == Tuple_kind ? "cannot use constraints with ParamSpec" : "cannot use bound with ParamSpec" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -10820,7 +10769,7 @@ type_param_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' NAME \":\" expression")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' NAME ':' expression")); } { // '**' NAME if (p->error_indicator) { @@ -10865,7 +10814,7 @@ type_param_rule(Parser *p) return _res; } -// type_param_bound: ":" expression +// type_param_bound: ':' expression static expr_ty type_param_bound_rule(Parser *p) { @@ -10878,12 +10827,12 @@ type_param_bound_rule(Parser *p) } expr_ty _res = NULL; int _mark = p->mark; - { // ":" expression + { // ':' expression if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> type_param_bound[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\":\" expression")); + D(fprintf(stderr, "%*c> type_param_bound[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression")); Token * _literal; expr_ty e; if ( @@ -10892,7 +10841,7 @@ type_param_bound_rule(Parser *p) (e = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ type_param_bound[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\":\" expression")); + D(fprintf(stderr, "%*c+ type_param_bound[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression")); _res = e; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -10903,7 +10852,7 @@ type_param_bound_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s type_param_bound[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\":\" expression")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression")); } _res = NULL; done: @@ -10946,7 +10895,7 @@ expressions_rule(Parser *p) if ( (a = expression_rule(p)) // expression && - (b = _loop1_83_rule(p)) // ((',' expression))+ + (b = _loop1_82_rule(p)) // ((',' expression))+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -11334,7 +11283,7 @@ star_expressions_rule(Parser *p) if ( (a = star_expression_rule(p)) // star_expression && - (b = _loop1_84_rule(p)) // ((',' star_expression))+ + (b = _loop1_83_rule(p)) // ((',' star_expression))+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -11533,7 +11482,7 @@ star_named_expressions_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_85_rule(p)) // ','.star_named_expression+ + (a = (asdl_expr_seq*)_gather_84_rule(p)) // ','.star_named_expression+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -11829,7 +11778,7 @@ disjunction_rule(Parser *p) if ( (a = conjunction_rule(p)) // conjunction && - (b = _loop1_87_rule(p)) // (('or' conjunction))+ + (b = _loop1_86_rule(p)) // (('or' conjunction))+ ) { D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+")); @@ -11917,7 +11866,7 @@ conjunction_rule(Parser *p) if ( (a = inversion_rule(p)) // inversion && - (b = _loop1_88_rule(p)) // (('and' inversion))+ + (b = _loop1_87_rule(p)) // (('and' inversion))+ ) { D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+")); @@ -12089,7 +12038,7 @@ comparison_rule(Parser *p) if ( (a = bitwise_or_rule(p)) // bitwise_or && - (b = _loop1_89_rule(p)) // compare_op_bitwise_or_pair+ + (b = _loop1_88_rule(p)) // compare_op_bitwise_or_pair+ ) { D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); @@ -12423,10 +12372,10 @@ noteq_bitwise_or_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or")); - void *_tmp_90_var; + void *_tmp_89_var; expr_ty a; if ( - (_tmp_90_var = _tmp_90_rule(p)) // '!=' + (_tmp_89_var = _tmp_89_rule(p)) // '!=' && (a = bitwise_or_rule(p)) // bitwise_or ) @@ -14435,7 +14384,7 @@ slices_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_91_rule(p)) // ','.(slice | starred_expression)+ + (a = (asdl_expr_seq*)_gather_90_rule(p)) // ','.(slice | starred_expression)+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? ) @@ -14507,7 +14456,7 @@ slice_rule(Parser *p) && (b = expression_rule(p), !p->error_indicator) // expression? && - (c = _tmp_93_rule(p), !p->error_indicator) // [':' expression?] + (c = _tmp_92_rule(p), !p->error_indicator) // [':' expression?] ) { D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]")); @@ -14720,7 +14669,7 @@ atom_rule(Parser *p) D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START) strings")); expr_ty strings_var; if ( - _PyPegen_lookahead(1, _tmp_94_rule, p) + _PyPegen_lookahead(1, _tmp_93_rule, p) && (strings_var = strings_rule(p)) // strings ) @@ -14758,15 +14707,15 @@ atom_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)")); - void *_tmp_95_var; + void *_tmp_94_var; if ( _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7) // token='(' && - (_tmp_95_var = _tmp_95_rule(p)) // tuple | group | genexp + (_tmp_94_var = _tmp_94_rule(p)) // tuple | group | genexp ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)")); - _res = _tmp_95_var; + _res = _tmp_94_var; goto done; } p->mark = _mark; @@ -14779,15 +14728,15 @@ atom_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)")); - void *_tmp_96_var; + void *_tmp_95_var; if ( _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9) // token='[' && - (_tmp_96_var = _tmp_96_rule(p)) // list | listcomp + (_tmp_95_var = _tmp_95_rule(p)) // list | listcomp ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)")); - _res = _tmp_96_var; + _res = _tmp_95_var; goto done; } p->mark = _mark; @@ -14800,15 +14749,15 @@ atom_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); - void *_tmp_97_var; + void *_tmp_96_var; if ( _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25) // token='{' && - (_tmp_97_var = _tmp_97_rule(p)) // dict | set | dictcomp | setcomp + (_tmp_96_var = _tmp_96_rule(p)) // dict | set | dictcomp | setcomp ) { D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); - _res = _tmp_97_var; + _res = _tmp_96_var; goto done; } p->mark = _mark; @@ -14879,7 +14828,7 @@ group_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = _tmp_98_rule(p)) // yield_expr | named_expression + (a = _tmp_97_rule(p)) // yield_expr | named_expression && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) @@ -15080,9 +15029,9 @@ lambda_parameters_rule(Parser *p) if ( (a = lambda_slash_no_default_rule(p)) // lambda_slash_no_default && - (b = (asdl_arg_seq*)_loop0_99_rule(p)) // lambda_param_no_default* + (b = (asdl_arg_seq*)_loop0_98_rule(p)) // lambda_param_no_default* && - (c = _loop0_100_rule(p)) // lambda_param_with_default* + (c = _loop0_99_rule(p)) // lambda_param_with_default* && (d = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15112,7 +15061,7 @@ lambda_parameters_rule(Parser *p) if ( (a = lambda_slash_with_default_rule(p)) // lambda_slash_with_default && - (b = _loop0_101_rule(p)) // lambda_param_with_default* + (b = _loop0_100_rule(p)) // lambda_param_with_default* && (c = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15140,9 +15089,9 @@ lambda_parameters_rule(Parser *p) asdl_seq * b; void *c; if ( - (a = (asdl_arg_seq*)_loop1_102_rule(p)) // lambda_param_no_default+ + (a = (asdl_arg_seq*)_loop1_101_rule(p)) // lambda_param_no_default+ && - (b = _loop0_103_rule(p)) // lambda_param_with_default* + (b = _loop0_102_rule(p)) // lambda_param_with_default* && (c = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15169,7 +15118,7 @@ lambda_parameters_rule(Parser *p) asdl_seq * a; void *b; if ( - (a = _loop1_104_rule(p)) // lambda_param_with_default+ + (a = _loop1_103_rule(p)) // lambda_param_with_default+ && (b = lambda_star_etc_rule(p), !p->error_indicator) // lambda_star_etc? ) @@ -15242,7 +15191,7 @@ lambda_slash_no_default_rule(Parser *p) Token * _literal_1; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_105_rule(p)) // lambda_param_no_default+ + (a = (asdl_arg_seq*)_loop1_104_rule(p)) // lambda_param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15271,7 +15220,7 @@ lambda_slash_no_default_rule(Parser *p) Token * _literal; asdl_arg_seq* a; if ( - (a = (asdl_arg_seq*)_loop1_106_rule(p)) // lambda_param_no_default+ + (a = (asdl_arg_seq*)_loop1_105_rule(p)) // lambda_param_no_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15323,9 +15272,9 @@ lambda_slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_107_rule(p)) // lambda_param_no_default* + (a = _loop0_106_rule(p)) // lambda_param_no_default* && - (b = _loop1_108_rule(p)) // lambda_param_with_default+ + (b = _loop1_107_rule(p)) // lambda_param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15355,9 +15304,9 @@ lambda_slash_with_default_rule(Parser *p) asdl_seq * a; asdl_seq * b; if ( - (a = _loop0_109_rule(p)) // lambda_param_no_default* + (a = _loop0_108_rule(p)) // lambda_param_no_default* && - (b = _loop1_110_rule(p)) // lambda_param_with_default+ + (b = _loop1_109_rule(p)) // lambda_param_with_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -15434,7 +15383,7 @@ lambda_star_etc_rule(Parser *p) && (a = lambda_param_no_default_rule(p)) // lambda_param_no_default && - (b = _loop0_111_rule(p)) // lambda_param_maybe_default* + (b = _loop0_110_rule(p)) // lambda_param_maybe_default* && (c = lambda_kwds_rule(p), !p->error_indicator) // lambda_kwds? ) @@ -15467,7 +15416,7 @@ lambda_star_etc_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _loop1_112_rule(p)) // lambda_param_maybe_default+ + (b = _loop1_111_rule(p)) // lambda_param_maybe_default+ && (c = lambda_kwds_rule(p), !p->error_indicator) // lambda_kwds? ) @@ -15932,7 +15881,7 @@ fstring_middle_rule(Parser *p) } // fstring_replacement_field: -// | '{' (yield_expr | star_expressions) "="? fstring_conversion? fstring_full_format_spec? '}' +// | '{' (yield_expr | star_expressions) '='? fstring_conversion? fstring_full_format_spec? '}' // | invalid_replacement_field static expr_ty fstring_replacement_field_rule(Parser *p) @@ -15955,12 +15904,12 @@ fstring_replacement_field_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' (yield_expr | star_expressions) "="? fstring_conversion? fstring_full_format_spec? '}' + { // '{' (yield_expr | star_expressions) '='? fstring_conversion? fstring_full_format_spec? '}' if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) \"=\"? fstring_conversion? fstring_full_format_spec? '}'")); + D(fprintf(stderr, "%*c> fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? fstring_conversion? fstring_full_format_spec? '}'")); Token * _literal; void *a; void *conversion; @@ -15970,9 +15919,9 @@ fstring_replacement_field_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (a = _tmp_113_rule(p)) // yield_expr | star_expressions + (a = _tmp_112_rule(p)) // yield_expr | star_expressions && - (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator) // "="? + (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && (conversion = fstring_conversion_rule(p), !p->error_indicator) // fstring_conversion? && @@ -15981,7 +15930,7 @@ fstring_replacement_field_rule(Parser *p) (rbrace = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) \"=\"? fstring_conversion? fstring_full_format_spec? '}'")); + D(fprintf(stderr, "%*c+ fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? fstring_conversion? fstring_full_format_spec? '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { p->level--; @@ -16001,7 +15950,7 @@ fstring_replacement_field_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' (yield_expr | star_expressions) \"=\"? fstring_conversion? fstring_full_format_spec? '}'")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' (yield_expr | star_expressions) '='? fstring_conversion? fstring_full_format_spec? '}'")); } if (p->call_invalid_rules) { // invalid_replacement_field if (p->error_indicator) { @@ -16107,7 +16056,7 @@ fstring_full_format_spec_rule(Parser *p) if ( (colon = _PyPegen_expect_token(p, 11)) // token=':' && - (spec = _loop0_114_rule(p)) // fstring_format_spec* + (spec = _loop0_113_rule(p)) // fstring_format_spec* ) { D(fprintf(stderr, "%*c+ fstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' fstring_format_spec*")); @@ -16200,6 +16149,55 @@ fstring_format_spec_rule(Parser *p) return _res; } +// fstring: FSTRING_START fstring_middle* FSTRING_END +static expr_ty +fstring_rule(Parser *p) +{ + if (p->level++ == MAXSTACK) { + _Pypegen_stack_overflow(p); + } + if (p->error_indicator) { + p->level--; + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // FSTRING_START fstring_middle* FSTRING_END + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> fstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END")); + Token * a; + asdl_seq * b; + Token * c; + if ( + (a = _PyPegen_expect_token(p, FSTRING_START)) // token='FSTRING_START' + && + (b = _loop0_114_rule(p)) // fstring_middle* + && + (c = _PyPegen_expect_token(p, FSTRING_END)) // token='FSTRING_END' + ) + { + D(fprintf(stderr, "%*c+ fstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END")); + _res = _PyPegen_joined_str ( p , a , ( asdl_expr_seq* ) b , c ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + p->level--; + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s fstring[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END")); + } + _res = NULL; + done: + p->level--; + return _res; +} + // string: STRING static expr_ty string_rule(Parser *p) @@ -20276,7 +20274,7 @@ invalid_legacy_expression_rule(Parser *p) // invalid_expression: // | !(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid // | disjunction 'if' disjunction !('else' | ':') -// | 'lambda' lambda_params? ':' &(FSTRING_MIDDLE | fstring_replacement_field) +// | 'lambda' lambda_params? ':' &FSTRING_MIDDLE static void * invalid_expression_rule(Parser *p) { @@ -20350,12 +20348,12 @@ invalid_expression_rule(Parser *p) D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')")); } - { // 'lambda' lambda_params? ':' &(FSTRING_MIDDLE | fstring_replacement_field) + { // 'lambda' lambda_params? ':' &FSTRING_MIDDLE if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &(FSTRING_MIDDLE | fstring_replacement_field)")); + D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; @@ -20367,10 +20365,10 @@ invalid_expression_rule(Parser *p) && (b = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_157_rule, p) + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, FSTRING_MIDDLE) // token=FSTRING_MIDDLE ) { - D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &(FSTRING_MIDDLE | fstring_replacement_field)")); + D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE")); _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "f-string: lambda expressions are not allowed without parentheses" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -20381,7 +20379,7 @@ invalid_expression_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' &(FSTRING_MIDDLE | fstring_replacement_field)")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE")); } _res = NULL; done: @@ -20455,7 +20453,7 @@ invalid_named_expression_rule(Parser *p) && (b = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_158_rule, p) + _PyPegen_lookahead(0, _tmp_157_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')")); @@ -20481,7 +20479,7 @@ invalid_named_expression_rule(Parser *p) Token * b; expr_ty bitwise_or_var; if ( - _PyPegen_lookahead(0, _tmp_159_rule, p) + _PyPegen_lookahead(0, _tmp_158_rule, p) && (a = bitwise_or_rule(p)) // bitwise_or && @@ -20489,7 +20487,7 @@ invalid_named_expression_rule(Parser *p) && (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_160_rule, p) + _PyPegen_lookahead(0, _tmp_159_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')")); @@ -20569,7 +20567,7 @@ invalid_assignment_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_161_var; + asdl_seq * _loop0_160_var; expr_ty a; expr_ty expression_var; if ( @@ -20577,7 +20575,7 @@ invalid_assignment_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_loop0_161_var = _loop0_161_rule(p)) // star_named_expressions* + (_loop0_160_var = _loop0_160_rule(p)) // star_named_expressions* && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20634,10 +20632,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='")); Token * _literal; - asdl_seq * _loop0_162_var; + asdl_seq * _loop0_161_var; expr_ty a; if ( - (_loop0_162_var = _loop0_162_rule(p)) // ((star_targets '='))* + (_loop0_161_var = _loop0_161_rule(p)) // ((star_targets '='))* && (a = star_expressions_rule(p)) // star_expressions && @@ -20664,10 +20662,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='")); Token * _literal; - asdl_seq * _loop0_163_var; + asdl_seq * _loop0_162_var; expr_ty a; if ( - (_loop0_163_var = _loop0_163_rule(p)) // ((star_targets '='))* + (_loop0_162_var = _loop0_162_rule(p)) // ((star_targets '='))* && (a = yield_expr_rule(p)) // yield_expr && @@ -20693,7 +20691,7 @@ invalid_assignment_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); - void *_tmp_164_var; + void *_tmp_163_var; expr_ty a; AugOperator* augassign_var; if ( @@ -20701,7 +20699,7 @@ invalid_assignment_rule(Parser *p) && (augassign_var = augassign_rule(p)) // augassign && - (_tmp_164_var = _tmp_164_rule(p)) // yield_expr | star_expressions + (_tmp_163_var = _tmp_163_rule(p)) // yield_expr | star_expressions ) { D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); @@ -20923,11 +20921,11 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses")); - void *_tmp_165_var; + void *_tmp_164_var; expr_ty a; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_165_var = _tmp_165_rule(p)) // '[' | '(' | '{' + (_tmp_164_var = _tmp_164_rule(p)) // '[' | '(' | '{' && (a = starred_expression_rule(p)) // starred_expression && @@ -20954,12 +20952,12 @@ invalid_comprehension_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses")); Token * _literal; - void *_tmp_166_var; + void *_tmp_165_var; expr_ty a; asdl_expr_seq* b; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_166_var = _tmp_166_rule(p)) // '[' | '{' + (_tmp_165_var = _tmp_165_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -20989,12 +20987,12 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses")); - void *_tmp_167_var; + void *_tmp_166_var; expr_ty a; Token * b; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_167_var = _tmp_167_rule(p)) // '[' | '{' + (_tmp_166_var = _tmp_166_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -21129,13 +21127,13 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'")); - asdl_seq * _loop0_169_var; - void *_tmp_168_var; + asdl_seq * _loop0_168_var; + void *_tmp_167_var; Token * a; if ( - (_tmp_168_var = _tmp_168_rule(p)) // slash_no_default | slash_with_default + (_tmp_167_var = _tmp_167_rule(p)) // slash_no_default | slash_with_default && - (_loop0_169_var = _loop0_169_rule(p)) // param_maybe_default* + (_loop0_168_var = _loop0_168_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21159,7 +21157,7 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default")); - asdl_seq * _loop0_170_var; + asdl_seq * _loop0_169_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings arg_ty a; @@ -21167,7 +21165,7 @@ invalid_parameters_rule(Parser *p) if ( (_opt_var = slash_no_default_rule(p), !p->error_indicator) // slash_no_default? && - (_loop0_170_var = _loop0_170_rule(p)) // param_no_default* + (_loop0_169_var = _loop0_169_rule(p)) // param_no_default* && (invalid_parameters_helper_var = invalid_parameters_helper_rule(p)) // invalid_parameters_helper && @@ -21193,18 +21191,18 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'")); - asdl_seq * _loop0_171_var; - asdl_seq * _loop1_172_var; + asdl_seq * _loop0_170_var; + asdl_seq * _loop1_171_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; if ( - (_loop0_171_var = _loop0_171_rule(p)) // param_no_default* + (_loop0_170_var = _loop0_170_rule(p)) // param_no_default* && (a = _PyPegen_expect_token(p, 7)) // token='(' && - (_loop1_172_var = _loop1_172_rule(p)) // param_no_default+ + (_loop1_171_var = _loop1_171_rule(p)) // param_no_default+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -21231,22 +21229,22 @@ invalid_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'")); Token * _literal; - asdl_seq * _loop0_174_var; - asdl_seq * _loop0_176_var; + asdl_seq * _loop0_173_var; + asdl_seq * _loop0_175_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_175_var; + void *_tmp_174_var; Token * a; if ( - (_opt_var = _tmp_173_rule(p), !p->error_indicator) // [(slash_no_default | slash_with_default)] + (_opt_var = _tmp_172_rule(p), !p->error_indicator) // [(slash_no_default | slash_with_default)] && - (_loop0_174_var = _loop0_174_rule(p)) // param_maybe_default* + (_loop0_173_var = _loop0_173_rule(p)) // param_maybe_default* && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_175_var = _tmp_175_rule(p)) // ',' | param_no_default + (_tmp_174_var = _tmp_174_rule(p)) // ',' | param_no_default && - (_loop0_176_var = _loop0_176_rule(p)) // param_maybe_default* + (_loop0_175_var = _loop0_175_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21271,10 +21269,10 @@ invalid_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'")); Token * _literal; - asdl_seq * _loop1_177_var; + asdl_seq * _loop1_176_var; Token * a; if ( - (_loop1_177_var = _loop1_177_rule(p)) // param_maybe_default+ + (_loop1_176_var = _loop1_176_rule(p)) // param_maybe_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -21323,7 +21321,7 @@ invalid_default_rule(Parser *p) if ( (a = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(1, _tmp_178_rule, p) + _PyPegen_lookahead(1, _tmp_177_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')")); @@ -21368,12 +21366,12 @@ invalid_star_etc_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); - void *_tmp_179_var; + void *_tmp_178_var; Token * a; if ( (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_179_var = _tmp_179_rule(p)) // ')' | ',' (')' | '**') + (_tmp_178_var = _tmp_178_rule(p)) // ')' | ',' (')' | '**') ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); @@ -21456,20 +21454,20 @@ invalid_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')")); Token * _literal; - asdl_seq * _loop0_181_var; - void *_tmp_180_var; - void *_tmp_182_var; + asdl_seq * _loop0_180_var; + void *_tmp_179_var; + void *_tmp_181_var; Token * a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_180_var = _tmp_180_rule(p)) // param_no_default | ',' + (_tmp_179_var = _tmp_179_rule(p)) // param_no_default | ',' && - (_loop0_181_var = _loop0_181_rule(p)) // param_maybe_default* + (_loop0_180_var = _loop0_180_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_182_var = _tmp_182_rule(p)) // param_no_default | ',' + (_tmp_181_var = _tmp_181_rule(p)) // param_no_default | ',' ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')")); @@ -21584,7 +21582,7 @@ invalid_kwds_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (a = (Token*)_tmp_183_rule(p)) // '*' | '**' | '/' + (a = (Token*)_tmp_182_rule(p)) // '*' | '**' | '/' ) { D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')")); @@ -21649,13 +21647,13 @@ invalid_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - asdl_seq * _loop1_184_var; + asdl_seq * _loop1_183_var; if ( - (_loop1_184_var = _loop1_184_rule(p)) // param_with_default+ + (_loop1_183_var = _loop1_183_rule(p)) // param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - _res = _loop1_184_var; + _res = _loop1_183_var; goto done; } p->mark = _mark; @@ -21720,13 +21718,13 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'")); - asdl_seq * _loop0_186_var; - void *_tmp_185_var; + asdl_seq * _loop0_185_var; + void *_tmp_184_var; Token * a; if ( - (_tmp_185_var = _tmp_185_rule(p)) // lambda_slash_no_default | lambda_slash_with_default + (_tmp_184_var = _tmp_184_rule(p)) // lambda_slash_no_default | lambda_slash_with_default && - (_loop0_186_var = _loop0_186_rule(p)) // lambda_param_maybe_default* + (_loop0_185_var = _loop0_185_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21750,7 +21748,7 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - asdl_seq * _loop0_187_var; + asdl_seq * _loop0_186_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings arg_ty a; @@ -21758,7 +21756,7 @@ invalid_lambda_parameters_rule(Parser *p) if ( (_opt_var = lambda_slash_no_default_rule(p), !p->error_indicator) // lambda_slash_no_default? && - (_loop0_187_var = _loop0_187_rule(p)) // lambda_param_no_default* + (_loop0_186_var = _loop0_186_rule(p)) // lambda_param_no_default* && (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p)) // invalid_lambda_parameters_helper && @@ -21784,18 +21782,18 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'")); - asdl_seq * _gather_189_var; - asdl_seq * _loop0_188_var; + asdl_seq * _gather_188_var; + asdl_seq * _loop0_187_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; if ( - (_loop0_188_var = _loop0_188_rule(p)) // lambda_param_no_default* + (_loop0_187_var = _loop0_187_rule(p)) // lambda_param_no_default* && (a = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_189_var = _gather_189_rule(p)) // ','.lambda_param+ + (_gather_188_var = _gather_188_rule(p)) // ','.lambda_param+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -21822,22 +21820,22 @@ invalid_lambda_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'")); Token * _literal; - asdl_seq * _loop0_192_var; - asdl_seq * _loop0_194_var; + asdl_seq * _loop0_191_var; + asdl_seq * _loop0_193_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_193_var; + void *_tmp_192_var; Token * a; if ( - (_opt_var = _tmp_191_rule(p), !p->error_indicator) // [(lambda_slash_no_default | lambda_slash_with_default)] + (_opt_var = _tmp_190_rule(p), !p->error_indicator) // [(lambda_slash_no_default | lambda_slash_with_default)] && - (_loop0_192_var = _loop0_192_rule(p)) // lambda_param_maybe_default* + (_loop0_191_var = _loop0_191_rule(p)) // lambda_param_maybe_default* && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_193_var = _tmp_193_rule(p)) // ',' | lambda_param_no_default + (_tmp_192_var = _tmp_192_rule(p)) // ',' | lambda_param_no_default && - (_loop0_194_var = _loop0_194_rule(p)) // lambda_param_maybe_default* + (_loop0_193_var = _loop0_193_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21862,10 +21860,10 @@ invalid_lambda_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'")); Token * _literal; - asdl_seq * _loop1_195_var; + asdl_seq * _loop1_194_var; Token * a; if ( - (_loop1_195_var = _loop1_195_rule(p)) // lambda_param_maybe_default+ + (_loop1_194_var = _loop1_194_rule(p)) // lambda_param_maybe_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -21936,13 +21934,13 @@ invalid_lambda_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - asdl_seq * _loop1_196_var; + asdl_seq * _loop1_195_var; if ( - (_loop1_196_var = _loop1_196_rule(p)) // lambda_param_with_default+ + (_loop1_195_var = _loop1_195_rule(p)) // lambda_param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - _res = _loop1_196_var; + _res = _loop1_195_var; goto done; } p->mark = _mark; @@ -21978,11 +21976,11 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); Token * _literal; - void *_tmp_197_var; + void *_tmp_196_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_197_var = _tmp_197_rule(p)) // ':' | ',' (':' | '**') + (_tmp_196_var = _tmp_196_rule(p)) // ':' | ',' (':' | '**') ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); @@ -22035,20 +22033,20 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')")); Token * _literal; - asdl_seq * _loop0_199_var; - void *_tmp_198_var; - void *_tmp_200_var; + asdl_seq * _loop0_198_var; + void *_tmp_197_var; + void *_tmp_199_var; Token * a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_198_var = _tmp_198_rule(p)) // lambda_param_no_default | ',' + (_tmp_197_var = _tmp_197_rule(p)) // lambda_param_no_default | ',' && - (_loop0_199_var = _loop0_199_rule(p)) // lambda_param_maybe_default* + (_loop0_198_var = _loop0_198_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_200_var = _tmp_200_rule(p)) // lambda_param_no_default | ',' + (_tmp_199_var = _tmp_199_rule(p)) // lambda_param_no_default | ',' ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')")); @@ -22166,7 +22164,7 @@ invalid_lambda_kwds_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (a = (Token*)_tmp_201_rule(p)) // '*' | '**' | '/' + (a = (Token*)_tmp_200_rule(p)) // '*' | '**' | '/' ) { D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')")); @@ -22272,7 +22270,7 @@ invalid_with_item_rule(Parser *p) && (a = expression_rule(p)) // expression && - _PyPegen_lookahead(1, _tmp_202_rule, p) + _PyPegen_lookahead(1, _tmp_201_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')")); @@ -22445,14 +22443,14 @@ invalid_import_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name")); - asdl_seq * _gather_203_var; + asdl_seq * _gather_202_var; Token * _keyword; Token * a; expr_ty dotted_name_var; if ( (a = _PyPegen_expect_token(p, 617)) // token='import' && - (_gather_203_var = _gather_203_rule(p)) // ','.dotted_name+ + (_gather_202_var = _gather_202_rule(p)) // ','.dotted_name+ && (_keyword = _PyPegen_expect_token(p, 618)) // token='from' && @@ -22548,7 +22546,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE")); - asdl_seq * _gather_205_var; + asdl_seq * _gather_204_var; Token * _keyword; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings @@ -22558,7 +22556,7 @@ invalid_with_stmt_rule(Parser *p) && (_keyword = _PyPegen_expect_token(p, 629)) // token='with' && - (_gather_205_var = _gather_205_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_204_var = _gather_204_rule(p)) // ','.(expression ['as' star_target])+ && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -22582,7 +22580,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE")); - asdl_seq * _gather_207_var; + asdl_seq * _gather_206_var; Token * _keyword; Token * _literal; Token * _literal_1; @@ -22598,7 +22596,7 @@ invalid_with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_207_var = _gather_207_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_206_var = _gather_206_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -22647,7 +22645,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); - asdl_seq * _gather_209_var; + asdl_seq * _gather_208_var; Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings @@ -22658,7 +22656,7 @@ invalid_with_stmt_indent_rule(Parser *p) && (a = _PyPegen_expect_token(p, 629)) // token='with' && - (_gather_209_var = _gather_209_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_208_var = _gather_208_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -22686,7 +22684,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); - asdl_seq * _gather_211_var; + asdl_seq * _gather_210_var; Token * _literal; Token * _literal_1; Token * _literal_2; @@ -22703,7 +22701,7 @@ invalid_with_stmt_indent_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_211_var = _gather_211_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_210_var = _gather_210_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -22800,7 +22798,7 @@ invalid_try_stmt_rule(Parser *p) && (block_var = block_rule(p)) // block && - _PyPegen_lookahead(0, _tmp_213_rule, p) + _PyPegen_lookahead(0, _tmp_212_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')")); @@ -22825,8 +22823,8 @@ invalid_try_stmt_rule(Parser *p) Token * _keyword; Token * _literal; Token * _literal_1; - asdl_seq * _loop0_214_var; - asdl_seq * _loop1_215_var; + asdl_seq * _loop0_213_var; + asdl_seq * _loop1_214_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; @@ -22837,9 +22835,9 @@ invalid_try_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_214_var = _loop0_214_rule(p)) // block* + (_loop0_213_var = _loop0_213_rule(p)) // block* && - (_loop1_215_var = _loop1_215_rule(p)) // except_block+ + (_loop1_214_var = _loop1_214_rule(p)) // except_block+ && (a = _PyPegen_expect_token(p, 651)) // token='except' && @@ -22847,7 +22845,7 @@ invalid_try_stmt_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_216_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_215_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -22874,8 +22872,8 @@ invalid_try_stmt_rule(Parser *p) Token * _keyword; Token * _literal; Token * _literal_1; - asdl_seq * _loop0_217_var; - asdl_seq * _loop1_218_var; + asdl_seq * _loop0_216_var; + asdl_seq * _loop1_217_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; @@ -22884,13 +22882,13 @@ invalid_try_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_217_var = _loop0_217_rule(p)) // block* + (_loop0_216_var = _loop0_216_rule(p)) // block* && - (_loop1_218_var = _loop1_218_rule(p)) // except_star_block+ + (_loop1_217_var = _loop1_217_rule(p)) // except_star_block+ && (a = _PyPegen_expect_token(p, 651)) // token='except' && - (_opt_var = _tmp_219_rule(p), !p->error_indicator) // [expression ['as' NAME]] + (_opt_var = _tmp_218_rule(p), !p->error_indicator) // [expression ['as' NAME]] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -22957,7 +22955,7 @@ invalid_except_stmt_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_opt_var_1 = _tmp_220_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var_1 = _tmp_219_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -22995,7 +22993,7 @@ invalid_except_stmt_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var_1 = _tmp_221_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var_1 = _tmp_220_rule(p), !p->error_indicator) // ['as' NAME] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -23047,14 +23045,14 @@ invalid_except_stmt_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')")); Token * _literal; - void *_tmp_222_var; + void *_tmp_221_var; Token * a; if ( (a = _PyPegen_expect_token(p, 651)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_222_var = _tmp_222_rule(p)) // NEWLINE | ':' + (_tmp_221_var = _tmp_221_rule(p)) // NEWLINE | ':' ) { D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')")); @@ -23159,7 +23157,7 @@ invalid_except_stmt_indent_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_223_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_222_rule(p), !p->error_indicator) // ['as' NAME] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -23253,7 +23251,7 @@ invalid_except_star_stmt_indent_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_224_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_223_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -23617,7 +23615,7 @@ invalid_class_argument_pattern_rule(Parser *p) asdl_pattern_seq* a; asdl_seq* keyword_patterns_var; if ( - (_opt_var = _tmp_225_rule(p), !p->error_indicator) // [positional_patterns ','] + (_opt_var = _tmp_224_rule(p), !p->error_indicator) // [positional_patterns ','] && (keyword_patterns_var = keyword_patterns_rule(p)) // keyword_patterns && @@ -24105,7 +24103,7 @@ invalid_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_opt_var_2 = _tmp_226_rule(p), !p->error_indicator) // ['->' expression] + (_opt_var_2 = _tmp_225_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -24164,7 +24162,7 @@ invalid_class_def_raw_rule(Parser *p) && (name_var = _PyPegen_name_token(p)) // NAME && - (_opt_var = _tmp_227_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (_opt_var = _tmp_226_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -24199,7 +24197,7 @@ invalid_class_def_raw_rule(Parser *p) && (name_var = _PyPegen_name_token(p)) // NAME && - (_opt_var = _tmp_228_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (_opt_var = _tmp_227_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -24249,11 +24247,11 @@ invalid_double_starred_kvpairs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - asdl_seq * _gather_229_var; + asdl_seq * _gather_228_var; Token * _literal; void *invalid_kvpair_var; if ( - (_gather_229_var = _gather_229_rule(p)) // ','.double_starred_kvpair+ + (_gather_228_var = _gather_228_rule(p)) // ','.double_starred_kvpair+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -24261,7 +24259,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - _res = _PyPegen_dummy_name(p, _gather_229_var, _literal, invalid_kvpair_var); + _res = _PyPegen_dummy_name(p, _gather_228_var, _literal, invalid_kvpair_var); goto done; } p->mark = _mark; @@ -24314,7 +24312,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_231_rule, p) + _PyPegen_lookahead(1, _tmp_230_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -24424,7 +24422,7 @@ invalid_kvpair_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_232_rule, p) + _PyPegen_lookahead(1, _tmp_231_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -24640,7 +24638,7 @@ invalid_replacement_field_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - _PyPegen_lookahead(0, _tmp_233_rule, p) + _PyPegen_lookahead(0, _tmp_232_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' !(yield_expr | star_expressions)")); @@ -24663,13 +24661,13 @@ invalid_replacement_field_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) !('=' | '!' | ':' | '}')")); Token * _literal; - void *_tmp_234_var; + void *_tmp_233_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_234_var = _tmp_234_rule(p)) // yield_expr | star_expressions + (_tmp_233_var = _tmp_233_rule(p)) // yield_expr | star_expressions && - _PyPegen_lookahead(0, _tmp_235_rule, p) + _PyPegen_lookahead(0, _tmp_234_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) !('=' | '!' | ':' | '}')")); @@ -24693,15 +24691,15 @@ invalid_replacement_field_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '=' !('!' | ':' | '}')")); Token * _literal; Token * _literal_1; - void *_tmp_236_var; + void *_tmp_235_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_236_var = _tmp_236_rule(p)) // yield_expr | star_expressions + (_tmp_235_var = _tmp_235_rule(p)) // yield_expr | star_expressions && (_literal_1 = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(0, _tmp_237_rule, p) + _PyPegen_lookahead(0, _tmp_236_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '=' !('!' | ':' | '}')")); @@ -24726,12 +24724,12 @@ invalid_replacement_field_rule(Parser *p) Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_238_var; + void *_tmp_237_var; void *invalid_conversion_character_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_238_var = _tmp_238_rule(p)) // yield_expr | star_expressions + (_tmp_237_var = _tmp_237_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && @@ -24739,7 +24737,7 @@ invalid_replacement_field_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? invalid_conversion_character")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_238_var, _opt_var, invalid_conversion_character_var); + _res = _PyPegen_dummy_name(p, _literal, _tmp_237_var, _opt_var, invalid_conversion_character_var); goto done; } p->mark = _mark; @@ -24757,17 +24755,17 @@ invalid_replacement_field_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; UNUSED(_opt_var_1); // Silence compiler warnings - void *_tmp_239_var; + void *_tmp_238_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_239_var = _tmp_239_rule(p)) // yield_expr | star_expressions + (_tmp_238_var = _tmp_238_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_240_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_239_rule(p), !p->error_indicator) // ['!' NAME] && - _PyPegen_lookahead(0, _tmp_241_rule, p) + _PyPegen_lookahead(0, _tmp_240_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? ['!' NAME] !(':' | '}')")); @@ -24791,24 +24789,24 @@ invalid_replacement_field_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? ['!' NAME] ':' fstring_format_spec* !'}'")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_244_var; + asdl_seq * _loop0_243_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; UNUSED(_opt_var_1); // Silence compiler warnings - void *_tmp_242_var; + void *_tmp_241_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_242_var = _tmp_242_rule(p)) // yield_expr | star_expressions + (_tmp_241_var = _tmp_241_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_243_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_242_rule(p), !p->error_indicator) // ['!' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_244_var = _loop0_244_rule(p)) // fstring_format_spec* + (_loop0_243_var = _loop0_243_rule(p)) // fstring_format_spec* && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -24837,15 +24835,15 @@ invalid_replacement_field_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; UNUSED(_opt_var_1); // Silence compiler warnings - void *_tmp_245_var; + void *_tmp_244_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_245_var = _tmp_245_rule(p)) // yield_expr | star_expressions + (_tmp_244_var = _tmp_244_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_246_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_245_rule(p), !p->error_indicator) // ['!' NAME] && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -24892,7 +24890,7 @@ invalid_conversion_character_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' && - _PyPegen_lookahead(1, _tmp_247_rule, p) + _PyPegen_lookahead(1, _tmp_246_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')")); @@ -25074,76 +25072,9 @@ _loop0_2_rule(Parser *p) return _seq; } -// _loop0_3: fstring_middle -static asdl_seq * -_loop0_3_rule(Parser *p) -{ - if (p->level++ == MAXSTACK) { - _Pypegen_stack_overflow(p); - } - if (p->error_indicator) { - p->level--; - return NULL; - } - void *_res = NULL; - int _mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - p->level--; - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // fstring_middle - if (p->error_indicator) { - p->level--; - return NULL; - } - D(fprintf(stderr, "%*c> _loop0_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_middle")); - expr_ty fstring_middle_var; - while ( - (fstring_middle_var = fstring_middle_rule(p)) // fstring_middle - ) - { - _res = fstring_middle_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - p->level--; - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_3[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_middle")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - p->level--; - return NULL; - } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - p->level--; - return _seq; -} - -// _loop1_4: statement +// _loop1_3: statement static asdl_seq * -_loop1_4_rule(Parser *p) +_loop1_3_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25168,7 +25099,7 @@ _loop1_4_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement")); + D(fprintf(stderr, "%*c> _loop1_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement")); asdl_stmt_seq* statement_var; while ( (statement_var = statement_rule(p)) // statement @@ -25191,7 +25122,7 @@ _loop1_4_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_4[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_3[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement")); } if (_n == 0 || p->error_indicator) { @@ -25213,9 +25144,9 @@ _loop1_4_rule(Parser *p) return _seq; } -// _loop0_6: ';' simple_stmt +// _loop0_5: ';' simple_stmt static asdl_seq * -_loop0_6_rule(Parser *p) +_loop0_5_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25240,7 +25171,7 @@ _loop0_6_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt")); + D(fprintf(stderr, "%*c> _loop0_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt")); Token * _literal; stmt_ty elem; while ( @@ -25272,7 +25203,7 @@ _loop0_6_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_6[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_5[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' simple_stmt")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -25289,9 +25220,9 @@ _loop0_6_rule(Parser *p) return _seq; } -// _gather_5: simple_stmt _loop0_6 +// _gather_4: simple_stmt _loop0_5 static asdl_seq * -_gather_5_rule(Parser *p) +_gather_4_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25302,27 +25233,27 @@ _gather_5_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // simple_stmt _loop0_6 + { // simple_stmt _loop0_5 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_6")); + D(fprintf(stderr, "%*c> _gather_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_5")); stmt_ty elem; asdl_seq * seq; if ( (elem = simple_stmt_rule(p)) // simple_stmt && - (seq = _loop0_6_rule(p)) // _loop0_6 + (seq = _loop0_5_rule(p)) // _loop0_5 ) { - D(fprintf(stderr, "%*c+ _gather_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_6")); + D(fprintf(stderr, "%*c+ _gather_4[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_5")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_5[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_6")); + D(fprintf(stderr, "%*c%s _gather_4[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_5")); } _res = NULL; done: @@ -25330,9 +25261,9 @@ _gather_5_rule(Parser *p) return _res; } -// _tmp_7: 'import' | 'from' +// _tmp_6: 'import' | 'from' static void * -_tmp_7_rule(Parser *p) +_tmp_6_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25348,18 +25279,18 @@ _tmp_7_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'")); + D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 617)) // token='import' ) { - D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'")); + D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import'")); } { // 'from' @@ -25367,18 +25298,18 @@ _tmp_7_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'")); + D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 618)) // token='from' ) { - D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'")); + D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from'")); } _res = NULL; @@ -25387,9 +25318,9 @@ _tmp_7_rule(Parser *p) return _res; } -// _tmp_8: 'def' | '@' | 'async' +// _tmp_7: 'def' | '@' | 'async' static void * -_tmp_8_rule(Parser *p) +_tmp_7_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25405,18 +25336,18 @@ _tmp_8_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'")); + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 669)) // token='def' ) { - D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'")); + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'")); } { // '@' @@ -25424,18 +25355,18 @@ _tmp_8_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 49)) // token='@' ) { - D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); } { // 'async' @@ -25443,18 +25374,18 @@ _tmp_8_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 668)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); } _res = NULL; @@ -25463,9 +25394,9 @@ _tmp_8_rule(Parser *p) return _res; } -// _tmp_9: 'class' | '@' +// _tmp_8: 'class' | '@' static void * -_tmp_9_rule(Parser *p) +_tmp_8_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25481,18 +25412,18 @@ _tmp_9_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'")); + D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 671)) // token='class' ) { - D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'")); + D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'")); } { // '@' @@ -25500,18 +25431,18 @@ _tmp_9_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 49)) // token='@' ) { - D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); } _res = NULL; @@ -25520,9 +25451,9 @@ _tmp_9_rule(Parser *p) return _res; } -// _tmp_10: 'with' | 'async' +// _tmp_9: 'with' | 'async' static void * -_tmp_10_rule(Parser *p) +_tmp_9_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25538,18 +25469,18 @@ _tmp_10_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'")); + D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 629)) // token='with' ) { - D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'")); + D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'")); } { // 'async' @@ -25557,18 +25488,18 @@ _tmp_10_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 668)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); } _res = NULL; @@ -25577,9 +25508,9 @@ _tmp_10_rule(Parser *p) return _res; } -// _tmp_11: 'for' | 'async' +// _tmp_10: 'for' | 'async' static void * -_tmp_11_rule(Parser *p) +_tmp_10_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25595,18 +25526,18 @@ _tmp_11_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'")); + D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 666)) // token='for' ) { - D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'")); + D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'")); } { // 'async' @@ -25614,18 +25545,18 @@ _tmp_11_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 668)) // token='async' ) { - D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); + D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'")); } _res = NULL; @@ -25634,9 +25565,9 @@ _tmp_11_rule(Parser *p) return _res; } -// _tmp_12: '=' annotated_rhs +// _tmp_11: '=' annotated_rhs static void * -_tmp_12_rule(Parser *p) +_tmp_11_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25652,7 +25583,7 @@ _tmp_12_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); Token * _literal; expr_ty d; if ( @@ -25661,7 +25592,7 @@ _tmp_12_rule(Parser *p) (d = annotated_rhs_rule(p)) // annotated_rhs ) { - D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); _res = d; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -25671,7 +25602,7 @@ _tmp_12_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); } _res = NULL; @@ -25680,9 +25611,9 @@ _tmp_12_rule(Parser *p) return _res; } -// _tmp_13: '(' single_target ')' | single_subscript_attribute_target +// _tmp_12: '(' single_target ')' | single_subscript_attribute_target static void * -_tmp_13_rule(Parser *p) +_tmp_12_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25698,7 +25629,7 @@ _tmp_13_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); Token * _literal; Token * _literal_1; expr_ty b; @@ -25710,7 +25641,7 @@ _tmp_13_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_13[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); _res = b; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -25720,7 +25651,7 @@ _tmp_13_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_13[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'")); } { // single_subscript_attribute_target @@ -25728,18 +25659,18 @@ _tmp_13_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); expr_ty single_subscript_attribute_target_var; if ( (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p)) // single_subscript_attribute_target ) { - D(fprintf(stderr, "%*c+ _tmp_13[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); _res = single_subscript_attribute_target_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_13[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target")); } _res = NULL; @@ -25748,9 +25679,9 @@ _tmp_13_rule(Parser *p) return _res; } -// _tmp_14: '=' annotated_rhs +// _tmp_13: '=' annotated_rhs static void * -_tmp_14_rule(Parser *p) +_tmp_13_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25766,7 +25697,7 @@ _tmp_14_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c> _tmp_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); Token * _literal; expr_ty d; if ( @@ -25775,7 +25706,7 @@ _tmp_14_rule(Parser *p) (d = annotated_rhs_rule(p)) // annotated_rhs ) { - D(fprintf(stderr, "%*c+ _tmp_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c+ _tmp_13[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); _res = d; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -25785,7 +25716,7 @@ _tmp_14_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_14[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_13[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); } _res = NULL; @@ -25794,9 +25725,9 @@ _tmp_14_rule(Parser *p) return _res; } -// _loop1_15: (star_targets '=') +// _loop1_14: (star_targets '=') static asdl_seq * -_loop1_15_rule(Parser *p) +_loop1_14_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25821,13 +25752,13 @@ _loop1_15_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_248_var; + D(fprintf(stderr, "%*c> _loop1_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_247_var; while ( - (_tmp_248_var = _tmp_248_rule(p)) // star_targets '=' + (_tmp_247_var = _tmp_247_rule(p)) // star_targets '=' ) { - _res = _tmp_248_var; + _res = _tmp_247_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25844,7 +25775,7 @@ _loop1_15_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_15[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_14[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } if (_n == 0 || p->error_indicator) { @@ -25866,9 +25797,9 @@ _loop1_15_rule(Parser *p) return _seq; } -// _tmp_16: yield_expr | star_expressions +// _tmp_15: yield_expr | star_expressions static void * -_tmp_16_rule(Parser *p) +_tmp_15_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25884,18 +25815,18 @@ _tmp_16_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -25903,18 +25834,18 @@ _tmp_16_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -25923,9 +25854,9 @@ _tmp_16_rule(Parser *p) return _res; } -// _tmp_17: yield_expr | star_expressions +// _tmp_16: yield_expr | star_expressions static void * -_tmp_17_rule(Parser *p) +_tmp_16_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25941,18 +25872,18 @@ _tmp_17_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -25960,18 +25891,18 @@ _tmp_17_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -25980,9 +25911,9 @@ _tmp_17_rule(Parser *p) return _res; } -// _tmp_18: 'from' expression +// _tmp_17: 'from' expression static void * -_tmp_18_rule(Parser *p) +_tmp_17_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -25998,7 +25929,7 @@ _tmp_18_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' expression")); + D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' expression")); Token * _keyword; expr_ty z; if ( @@ -26007,7 +25938,7 @@ _tmp_18_rule(Parser *p) (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' expression")); + D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -26017,7 +25948,7 @@ _tmp_18_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_18[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' expression")); } _res = NULL; @@ -26026,9 +25957,9 @@ _tmp_18_rule(Parser *p) return _res; } -// _loop0_20: ',' NAME +// _loop0_19: ',' NAME static asdl_seq * -_loop0_20_rule(Parser *p) +_loop0_19_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26053,7 +25984,7 @@ _loop0_20_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); + D(fprintf(stderr, "%*c> _loop0_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); Token * _literal; expr_ty elem; while ( @@ -26085,7 +26016,7 @@ _loop0_20_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_20[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_19[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -26102,9 +26033,9 @@ _loop0_20_rule(Parser *p) return _seq; } -// _gather_19: NAME _loop0_20 +// _gather_18: NAME _loop0_19 static asdl_seq * -_gather_19_rule(Parser *p) +_gather_18_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26115,27 +26046,27 @@ _gather_19_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // NAME _loop0_20 + { // NAME _loop0_19 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_20")); + D(fprintf(stderr, "%*c> _gather_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_19")); expr_ty elem; asdl_seq * seq; if ( (elem = _PyPegen_name_token(p)) // NAME && - (seq = _loop0_20_rule(p)) // _loop0_20 + (seq = _loop0_19_rule(p)) // _loop0_19 ) { - D(fprintf(stderr, "%*c+ _gather_19[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_20")); + D(fprintf(stderr, "%*c+ _gather_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_19")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_19[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_20")); + D(fprintf(stderr, "%*c%s _gather_18[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_19")); } _res = NULL; done: @@ -26143,9 +26074,9 @@ _gather_19_rule(Parser *p) return _res; } -// _loop0_22: ',' NAME +// _loop0_21: ',' NAME static asdl_seq * -_loop0_22_rule(Parser *p) +_loop0_21_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26170,7 +26101,7 @@ _loop0_22_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); + D(fprintf(stderr, "%*c> _loop0_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); Token * _literal; expr_ty elem; while ( @@ -26202,7 +26133,7 @@ _loop0_22_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_22[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_21[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -26219,9 +26150,9 @@ _loop0_22_rule(Parser *p) return _seq; } -// _gather_21: NAME _loop0_22 +// _gather_20: NAME _loop0_21 static asdl_seq * -_gather_21_rule(Parser *p) +_gather_20_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26232,27 +26163,27 @@ _gather_21_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // NAME _loop0_22 + { // NAME _loop0_21 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_22")); + D(fprintf(stderr, "%*c> _gather_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_21")); expr_ty elem; asdl_seq * seq; if ( (elem = _PyPegen_name_token(p)) // NAME && - (seq = _loop0_22_rule(p)) // _loop0_22 + (seq = _loop0_21_rule(p)) // _loop0_21 ) { - D(fprintf(stderr, "%*c+ _gather_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_22")); + D(fprintf(stderr, "%*c+ _gather_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_21")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_21[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_22")); + D(fprintf(stderr, "%*c%s _gather_20[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_21")); } _res = NULL; done: @@ -26260,9 +26191,9 @@ _gather_21_rule(Parser *p) return _res; } -// _tmp_23: ';' | NEWLINE +// _tmp_22: ';' | NEWLINE static void * -_tmp_23_rule(Parser *p) +_tmp_22_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26278,18 +26209,18 @@ _tmp_23_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c> _tmp_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 13)) // token=';' ) { - D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c+ _tmp_22[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_22[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'")); } { // NEWLINE @@ -26297,18 +26228,18 @@ _tmp_23_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); Token * newline_var; if ( (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_22[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_22[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } _res = NULL; @@ -26317,9 +26248,9 @@ _tmp_23_rule(Parser *p) return _res; } -// _tmp_24: ',' expression +// _tmp_23: ',' expression static void * -_tmp_24_rule(Parser *p) +_tmp_23_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26335,7 +26266,7 @@ _tmp_24_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty z; if ( @@ -26344,7 +26275,7 @@ _tmp_24_rule(Parser *p) (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_24[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -26354,7 +26285,7 @@ _tmp_24_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_24[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -26363,9 +26294,9 @@ _tmp_24_rule(Parser *p) return _res; } -// _loop0_25: ('.' | '...') +// _loop0_24: ('.' | '...') static asdl_seq * -_loop0_25_rule(Parser *p) +_loop0_24_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26390,13 +26321,13 @@ _loop0_25_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_249_var; + D(fprintf(stderr, "%*c> _loop0_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); + void *_tmp_248_var; while ( - (_tmp_249_var = _tmp_249_rule(p)) // '.' | '...' + (_tmp_248_var = _tmp_248_rule(p)) // '.' | '...' ) { - _res = _tmp_249_var; + _res = _tmp_248_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26413,7 +26344,7 @@ _loop0_25_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_25[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_24[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -26430,9 +26361,9 @@ _loop0_25_rule(Parser *p) return _seq; } -// _loop1_26: ('.' | '...') +// _loop1_25: ('.' | '...') static asdl_seq * -_loop1_26_rule(Parser *p) +_loop1_25_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26457,13 +26388,13 @@ _loop1_26_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_250_var; + D(fprintf(stderr, "%*c> _loop1_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); + void *_tmp_249_var; while ( - (_tmp_250_var = _tmp_250_rule(p)) // '.' | '...' + (_tmp_249_var = _tmp_249_rule(p)) // '.' | '...' ) { - _res = _tmp_250_var; + _res = _tmp_249_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26480,7 +26411,7 @@ _loop1_26_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_26[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_25[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); } if (_n == 0 || p->error_indicator) { @@ -26502,9 +26433,9 @@ _loop1_26_rule(Parser *p) return _seq; } -// _loop0_28: ',' import_from_as_name +// _loop0_27: ',' import_from_as_name static asdl_seq * -_loop0_28_rule(Parser *p) +_loop0_27_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26529,7 +26460,7 @@ _loop0_28_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name")); + D(fprintf(stderr, "%*c> _loop0_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name")); Token * _literal; alias_ty elem; while ( @@ -26561,7 +26492,7 @@ _loop0_28_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_27[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -26578,9 +26509,9 @@ _loop0_28_rule(Parser *p) return _seq; } -// _gather_27: import_from_as_name _loop0_28 +// _gather_26: import_from_as_name _loop0_27 static asdl_seq * -_gather_27_rule(Parser *p) +_gather_26_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26591,27 +26522,27 @@ _gather_27_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // import_from_as_name _loop0_28 + { // import_from_as_name _loop0_27 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_28")); + D(fprintf(stderr, "%*c> _gather_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_27")); alias_ty elem; asdl_seq * seq; if ( (elem = import_from_as_name_rule(p)) // import_from_as_name && - (seq = _loop0_28_rule(p)) // _loop0_28 + (seq = _loop0_27_rule(p)) // _loop0_27 ) { - D(fprintf(stderr, "%*c+ _gather_27[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_28")); + D(fprintf(stderr, "%*c+ _gather_26[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_27")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_27[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_28")); + D(fprintf(stderr, "%*c%s _gather_26[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_27")); } _res = NULL; done: @@ -26619,9 +26550,9 @@ _gather_27_rule(Parser *p) return _res; } -// _tmp_29: 'as' NAME +// _tmp_28: 'as' NAME static void * -_tmp_29_rule(Parser *p) +_tmp_28_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26637,7 +26568,7 @@ _tmp_29_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty z; if ( @@ -26646,7 +26577,7 @@ _tmp_29_rule(Parser *p) (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_29[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_28[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -26656,7 +26587,7 @@ _tmp_29_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_29[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_28[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -26665,9 +26596,9 @@ _tmp_29_rule(Parser *p) return _res; } -// _loop0_31: ',' dotted_as_name +// _loop0_30: ',' dotted_as_name static asdl_seq * -_loop0_31_rule(Parser *p) +_loop0_30_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26692,7 +26623,7 @@ _loop0_31_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name")); + D(fprintf(stderr, "%*c> _loop0_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name")); Token * _literal; alias_ty elem; while ( @@ -26724,7 +26655,7 @@ _loop0_31_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_31[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_30[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -26741,9 +26672,9 @@ _loop0_31_rule(Parser *p) return _seq; } -// _gather_30: dotted_as_name _loop0_31 +// _gather_29: dotted_as_name _loop0_30 static asdl_seq * -_gather_30_rule(Parser *p) +_gather_29_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26754,27 +26685,27 @@ _gather_30_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // dotted_as_name _loop0_31 + { // dotted_as_name _loop0_30 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_31")); + D(fprintf(stderr, "%*c> _gather_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_30")); alias_ty elem; asdl_seq * seq; if ( (elem = dotted_as_name_rule(p)) // dotted_as_name && - (seq = _loop0_31_rule(p)) // _loop0_31 + (seq = _loop0_30_rule(p)) // _loop0_30 ) { - D(fprintf(stderr, "%*c+ _gather_30[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_31")); + D(fprintf(stderr, "%*c+ _gather_29[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_30")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_30[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_31")); + D(fprintf(stderr, "%*c%s _gather_29[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_30")); } _res = NULL; done: @@ -26782,9 +26713,9 @@ _gather_30_rule(Parser *p) return _res; } -// _tmp_32: 'as' NAME +// _tmp_31: 'as' NAME static void * -_tmp_32_rule(Parser *p) +_tmp_31_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26800,7 +26731,7 @@ _tmp_32_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty z; if ( @@ -26809,7 +26740,7 @@ _tmp_32_rule(Parser *p) (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_32[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_31[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -26819,7 +26750,7 @@ _tmp_32_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_32[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_31[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -26828,9 +26759,9 @@ _tmp_32_rule(Parser *p) return _res; } -// _loop1_33: ('@' named_expression NEWLINE) +// _loop1_32: ('@' named_expression NEWLINE) static asdl_seq * -_loop1_33_rule(Parser *p) +_loop1_32_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26855,13 +26786,13 @@ _loop1_33_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_251_var; + D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); + void *_tmp_250_var; while ( - (_tmp_251_var = _tmp_251_rule(p)) // '@' named_expression NEWLINE + (_tmp_250_var = _tmp_250_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_251_var; + _res = _tmp_250_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26878,7 +26809,7 @@ _loop1_33_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_33[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)")); } if (_n == 0 || p->error_indicator) { @@ -26900,9 +26831,9 @@ _loop1_33_rule(Parser *p) return _seq; } -// _tmp_34: '(' arguments? ')' +// _tmp_33: '(' arguments? ')' static void * -_tmp_34_rule(Parser *p) +_tmp_33_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26918,7 +26849,7 @@ _tmp_34_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *z; @@ -26930,7 +26861,7 @@ _tmp_34_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_34[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_33[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -26940,7 +26871,7 @@ _tmp_34_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_34[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_33[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -26949,9 +26880,9 @@ _tmp_34_rule(Parser *p) return _res; } -// _tmp_35: '->' expression +// _tmp_34: '->' expression static void * -_tmp_35_rule(Parser *p) +_tmp_34_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -26967,7 +26898,7 @@ _tmp_35_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty z; if ( @@ -26976,7 +26907,7 @@ _tmp_35_rule(Parser *p) (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c+ _tmp_34[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -26986,7 +26917,7 @@ _tmp_35_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_34[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; @@ -26995,9 +26926,9 @@ _tmp_35_rule(Parser *p) return _res; } -// _tmp_36: '->' expression +// _tmp_35: '->' expression static void * -_tmp_36_rule(Parser *p) +_tmp_35_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27013,7 +26944,7 @@ _tmp_36_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty z; if ( @@ -27022,7 +26953,7 @@ _tmp_36_rule(Parser *p) (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_36[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -27032,7 +26963,7 @@ _tmp_36_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_36[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; @@ -27041,9 +26972,9 @@ _tmp_36_rule(Parser *p) return _res; } -// _loop0_37: param_no_default +// _loop0_36: param_no_default static asdl_seq * -_loop0_37_rule(Parser *p) +_loop0_36_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27068,7 +26999,7 @@ _loop0_37_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27091,7 +27022,7 @@ _loop0_37_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_37[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_36[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27108,9 +27039,9 @@ _loop0_37_rule(Parser *p) return _seq; } -// _loop0_38: param_with_default +// _loop0_37: param_with_default static asdl_seq * -_loop0_38_rule(Parser *p) +_loop0_37_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27135,7 +27066,7 @@ _loop0_38_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop0_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27158,7 +27089,7 @@ _loop0_38_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_38[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_37[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27175,9 +27106,9 @@ _loop0_38_rule(Parser *p) return _seq; } -// _loop0_39: param_with_default +// _loop0_38: param_with_default static asdl_seq * -_loop0_39_rule(Parser *p) +_loop0_38_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27202,7 +27133,7 @@ _loop0_39_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop0_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27225,7 +27156,7 @@ _loop0_39_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_39[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_38[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27242,9 +27173,9 @@ _loop0_39_rule(Parser *p) return _seq; } -// _loop1_40: param_no_default +// _loop1_39: param_no_default static asdl_seq * -_loop1_40_rule(Parser *p) +_loop1_39_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27269,7 +27200,7 @@ _loop1_40_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop1_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27292,7 +27223,7 @@ _loop1_40_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_40[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_39[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -27314,9 +27245,9 @@ _loop1_40_rule(Parser *p) return _seq; } -// _loop0_41: param_with_default +// _loop0_40: param_with_default static asdl_seq * -_loop0_41_rule(Parser *p) +_loop0_40_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27341,7 +27272,7 @@ _loop0_41_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop0_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27364,7 +27295,7 @@ _loop0_41_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_41[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_40[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27381,9 +27312,9 @@ _loop0_41_rule(Parser *p) return _seq; } -// _loop1_42: param_with_default +// _loop1_41: param_with_default static asdl_seq * -_loop1_42_rule(Parser *p) +_loop1_41_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27408,7 +27339,7 @@ _loop1_42_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27431,7 +27362,7 @@ _loop1_42_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_42[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_41[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -27453,9 +27384,9 @@ _loop1_42_rule(Parser *p) return _seq; } -// _loop1_43: param_no_default +// _loop1_42: param_no_default static asdl_seq * -_loop1_43_rule(Parser *p) +_loop1_42_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27480,7 +27411,7 @@ _loop1_43_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop1_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27503,7 +27434,7 @@ _loop1_43_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_43[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_42[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -27525,9 +27456,9 @@ _loop1_43_rule(Parser *p) return _seq; } -// _loop1_44: param_no_default +// _loop1_43: param_no_default static asdl_seq * -_loop1_44_rule(Parser *p) +_loop1_43_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27552,7 +27483,7 @@ _loop1_44_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop1_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27575,7 +27506,7 @@ _loop1_44_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_44[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_43[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -27597,9 +27528,9 @@ _loop1_44_rule(Parser *p) return _seq; } -// _loop0_45: param_no_default +// _loop0_44: param_no_default static asdl_seq * -_loop0_45_rule(Parser *p) +_loop0_44_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27624,7 +27555,7 @@ _loop0_45_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27647,7 +27578,7 @@ _loop0_45_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_45[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_44[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27664,9 +27595,9 @@ _loop0_45_rule(Parser *p) return _seq; } -// _loop1_46: param_with_default +// _loop1_45: param_with_default static asdl_seq * -_loop1_46_rule(Parser *p) +_loop1_45_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27691,7 +27622,7 @@ _loop1_46_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27714,7 +27645,7 @@ _loop1_46_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_46[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_45[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -27736,9 +27667,9 @@ _loop1_46_rule(Parser *p) return _seq; } -// _loop0_47: param_no_default +// _loop0_46: param_no_default static asdl_seq * -_loop0_47_rule(Parser *p) +_loop0_46_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27763,7 +27694,7 @@ _loop0_47_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -27786,7 +27717,7 @@ _loop0_47_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_47[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27803,9 +27734,9 @@ _loop0_47_rule(Parser *p) return _seq; } -// _loop1_48: param_with_default +// _loop1_47: param_with_default static asdl_seq * -_loop1_48_rule(Parser *p) +_loop1_47_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27830,7 +27761,7 @@ _loop1_48_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -27853,7 +27784,7 @@ _loop1_48_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_48[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_47[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -27875,9 +27806,9 @@ _loop1_48_rule(Parser *p) return _seq; } -// _loop0_49: param_maybe_default +// _loop0_48: param_maybe_default static asdl_seq * -_loop0_49_rule(Parser *p) +_loop0_48_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27902,7 +27833,7 @@ _loop0_49_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -27925,7 +27856,7 @@ _loop0_49_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_49[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_48[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -27942,9 +27873,9 @@ _loop0_49_rule(Parser *p) return _seq; } -// _loop0_50: param_maybe_default +// _loop0_49: param_maybe_default static asdl_seq * -_loop0_50_rule(Parser *p) +_loop0_49_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -27969,7 +27900,7 @@ _loop0_50_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -27992,7 +27923,7 @@ _loop0_50_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_50[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_49[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28009,9 +27940,9 @@ _loop0_50_rule(Parser *p) return _seq; } -// _loop1_51: param_maybe_default +// _loop1_50: param_maybe_default static asdl_seq * -_loop1_51_rule(Parser *p) +_loop1_50_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28036,7 +27967,7 @@ _loop1_51_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -28059,7 +27990,7 @@ _loop1_51_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_51[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_50[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -28081,9 +28012,9 @@ _loop1_51_rule(Parser *p) return _seq; } -// _loop0_53: ',' with_item +// _loop0_52: ',' with_item static asdl_seq * -_loop0_53_rule(Parser *p) +_loop0_52_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28108,7 +28039,7 @@ _loop0_53_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c> _loop0_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; withitem_ty elem; while ( @@ -28140,7 +28071,7 @@ _loop0_53_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_53[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_52[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28157,9 +28088,9 @@ _loop0_53_rule(Parser *p) return _seq; } -// _gather_52: with_item _loop0_53 +// _gather_51: with_item _loop0_52 static asdl_seq * -_gather_52_rule(Parser *p) +_gather_51_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28170,27 +28101,27 @@ _gather_52_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // with_item _loop0_53 + { // with_item _loop0_52 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_53")); + D(fprintf(stderr, "%*c> _gather_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_52")); withitem_ty elem; asdl_seq * seq; if ( (elem = with_item_rule(p)) // with_item && - (seq = _loop0_53_rule(p)) // _loop0_53 + (seq = _loop0_52_rule(p)) // _loop0_52 ) { - D(fprintf(stderr, "%*c+ _gather_52[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_53")); + D(fprintf(stderr, "%*c+ _gather_51[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_52")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_52[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_53")); + D(fprintf(stderr, "%*c%s _gather_51[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_52")); } _res = NULL; done: @@ -28198,9 +28129,9 @@ _gather_52_rule(Parser *p) return _res; } -// _loop0_55: ',' with_item +// _loop0_54: ',' with_item static asdl_seq * -_loop0_55_rule(Parser *p) +_loop0_54_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28225,7 +28156,7 @@ _loop0_55_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c> _loop0_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; withitem_ty elem; while ( @@ -28257,7 +28188,7 @@ _loop0_55_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_55[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_54[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28274,9 +28205,9 @@ _loop0_55_rule(Parser *p) return _seq; } -// _gather_54: with_item _loop0_55 +// _gather_53: with_item _loop0_54 static asdl_seq * -_gather_54_rule(Parser *p) +_gather_53_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28287,27 +28218,27 @@ _gather_54_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // with_item _loop0_55 + { // with_item _loop0_54 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_55")); + D(fprintf(stderr, "%*c> _gather_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_54")); withitem_ty elem; asdl_seq * seq; if ( (elem = with_item_rule(p)) // with_item && - (seq = _loop0_55_rule(p)) // _loop0_55 + (seq = _loop0_54_rule(p)) // _loop0_54 ) { - D(fprintf(stderr, "%*c+ _gather_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_55")); + D(fprintf(stderr, "%*c+ _gather_53[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_54")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_54[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_55")); + D(fprintf(stderr, "%*c%s _gather_53[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_54")); } _res = NULL; done: @@ -28315,9 +28246,9 @@ _gather_54_rule(Parser *p) return _res; } -// _loop0_57: ',' with_item +// _loop0_56: ',' with_item static asdl_seq * -_loop0_57_rule(Parser *p) +_loop0_56_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28342,7 +28273,7 @@ _loop0_57_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c> _loop0_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; withitem_ty elem; while ( @@ -28374,7 +28305,7 @@ _loop0_57_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_57[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_56[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28391,9 +28322,9 @@ _loop0_57_rule(Parser *p) return _seq; } -// _gather_56: with_item _loop0_57 +// _gather_55: with_item _loop0_56 static asdl_seq * -_gather_56_rule(Parser *p) +_gather_55_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28404,27 +28335,27 @@ _gather_56_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // with_item _loop0_57 + { // with_item _loop0_56 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_57")); + D(fprintf(stderr, "%*c> _gather_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_56")); withitem_ty elem; asdl_seq * seq; if ( (elem = with_item_rule(p)) // with_item && - (seq = _loop0_57_rule(p)) // _loop0_57 + (seq = _loop0_56_rule(p)) // _loop0_56 ) { - D(fprintf(stderr, "%*c+ _gather_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_57")); + D(fprintf(stderr, "%*c+ _gather_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_56")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_56[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_57")); + D(fprintf(stderr, "%*c%s _gather_55[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_56")); } _res = NULL; done: @@ -28432,9 +28363,9 @@ _gather_56_rule(Parser *p) return _res; } -// _loop0_59: ',' with_item +// _loop0_58: ',' with_item static asdl_seq * -_loop0_59_rule(Parser *p) +_loop0_58_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28459,7 +28390,7 @@ _loop0_59_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c> _loop0_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; withitem_ty elem; while ( @@ -28491,7 +28422,7 @@ _loop0_59_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_59[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_58[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -28508,9 +28439,9 @@ _loop0_59_rule(Parser *p) return _seq; } -// _gather_58: with_item _loop0_59 +// _gather_57: with_item _loop0_58 static asdl_seq * -_gather_58_rule(Parser *p) +_gather_57_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28521,27 +28452,27 @@ _gather_58_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // with_item _loop0_59 + { // with_item _loop0_58 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_59")); + D(fprintf(stderr, "%*c> _gather_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_58")); withitem_ty elem; asdl_seq * seq; if ( (elem = with_item_rule(p)) // with_item && - (seq = _loop0_59_rule(p)) // _loop0_59 + (seq = _loop0_58_rule(p)) // _loop0_58 ) { - D(fprintf(stderr, "%*c+ _gather_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_59")); + D(fprintf(stderr, "%*c+ _gather_57[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_58")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_58[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_59")); + D(fprintf(stderr, "%*c%s _gather_57[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_58")); } _res = NULL; done: @@ -28549,9 +28480,9 @@ _gather_58_rule(Parser *p) return _res; } -// _tmp_60: ',' | ')' | ':' +// _tmp_59: ',' | ')' | ':' static void * -_tmp_60_rule(Parser *p) +_tmp_59_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28567,18 +28498,18 @@ _tmp_60_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_60[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_59[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_60[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_59[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -28586,18 +28517,18 @@ _tmp_60_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_60[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_59[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_60[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_59[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -28605,18 +28536,18 @@ _tmp_60_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_60[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_59[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_60[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_59[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -28625,9 +28556,9 @@ _tmp_60_rule(Parser *p) return _res; } -// _loop1_61: except_block +// _loop1_60: except_block static asdl_seq * -_loop1_61_rule(Parser *p) +_loop1_60_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28652,7 +28583,7 @@ _loop1_61_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); + D(fprintf(stderr, "%*c> _loop1_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); excepthandler_ty except_block_var; while ( (except_block_var = except_block_rule(p)) // except_block @@ -28675,7 +28606,7 @@ _loop1_61_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_60[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block")); } if (_n == 0 || p->error_indicator) { @@ -28697,9 +28628,9 @@ _loop1_61_rule(Parser *p) return _seq; } -// _loop1_62: except_star_block +// _loop1_61: except_star_block static asdl_seq * -_loop1_62_rule(Parser *p) +_loop1_61_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28724,7 +28655,7 @@ _loop1_62_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); + D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); excepthandler_ty except_star_block_var; while ( (except_star_block_var = except_star_block_rule(p)) // except_star_block @@ -28747,7 +28678,7 @@ _loop1_62_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_62[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_star_block")); } if (_n == 0 || p->error_indicator) { @@ -28769,9 +28700,9 @@ _loop1_62_rule(Parser *p) return _seq; } -// _tmp_63: 'as' NAME +// _tmp_62: 'as' NAME static void * -_tmp_63_rule(Parser *p) +_tmp_62_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28787,7 +28718,7 @@ _tmp_63_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty z; if ( @@ -28796,7 +28727,7 @@ _tmp_63_rule(Parser *p) (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_63[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_62[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28806,7 +28737,7 @@ _tmp_63_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_63[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_62[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -28815,9 +28746,9 @@ _tmp_63_rule(Parser *p) return _res; } -// _tmp_64: 'as' NAME +// _tmp_63: 'as' NAME static void * -_tmp_64_rule(Parser *p) +_tmp_63_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28833,7 +28764,7 @@ _tmp_64_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty z; if ( @@ -28842,7 +28773,7 @@ _tmp_64_rule(Parser *p) (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_63[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -28852,7 +28783,7 @@ _tmp_64_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_64[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_63[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -28861,9 +28792,9 @@ _tmp_64_rule(Parser *p) return _res; } -// _loop1_65: case_block +// _loop1_64: case_block static asdl_seq * -_loop1_65_rule(Parser *p) +_loop1_64_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28888,7 +28819,7 @@ _loop1_65_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block")); + D(fprintf(stderr, "%*c> _loop1_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block")); match_case_ty case_block_var; while ( (case_block_var = case_block_rule(p)) // case_block @@ -28911,7 +28842,7 @@ _loop1_65_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_65[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_64[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "case_block")); } if (_n == 0 || p->error_indicator) { @@ -28933,9 +28864,9 @@ _loop1_65_rule(Parser *p) return _seq; } -// _loop0_67: '|' closed_pattern +// _loop0_66: '|' closed_pattern static asdl_seq * -_loop0_67_rule(Parser *p) +_loop0_66_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -28960,7 +28891,7 @@ _loop0_67_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); + D(fprintf(stderr, "%*c> _loop0_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); Token * _literal; pattern_ty elem; while ( @@ -28992,7 +28923,7 @@ _loop0_67_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_67[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_66[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|' closed_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29009,9 +28940,9 @@ _loop0_67_rule(Parser *p) return _seq; } -// _gather_66: closed_pattern _loop0_67 +// _gather_65: closed_pattern _loop0_66 static asdl_seq * -_gather_66_rule(Parser *p) +_gather_65_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29022,27 +28953,27 @@ _gather_66_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // closed_pattern _loop0_67 + { // closed_pattern _loop0_66 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_67")); + D(fprintf(stderr, "%*c> _gather_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_66")); pattern_ty elem; asdl_seq * seq; if ( (elem = closed_pattern_rule(p)) // closed_pattern && - (seq = _loop0_67_rule(p)) // _loop0_67 + (seq = _loop0_66_rule(p)) // _loop0_66 ) { - D(fprintf(stderr, "%*c+ _gather_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_67")); + D(fprintf(stderr, "%*c+ _gather_65[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_66")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_66[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_67")); + D(fprintf(stderr, "%*c%s _gather_65[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_66")); } _res = NULL; done: @@ -29050,9 +28981,9 @@ _gather_66_rule(Parser *p) return _res; } -// _tmp_68: '+' | '-' +// _tmp_67: '+' | '-' static void * -_tmp_68_rule(Parser *p) +_tmp_67_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29068,18 +28999,18 @@ _tmp_68_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } { // '-' @@ -29087,18 +29018,18 @@ _tmp_68_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); } _res = NULL; @@ -29107,9 +29038,9 @@ _tmp_68_rule(Parser *p) return _res; } -// _tmp_69: '+' | '-' +// _tmp_68: '+' | '-' static void * -_tmp_69_rule(Parser *p) +_tmp_68_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29125,18 +29056,18 @@ _tmp_69_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } { // '-' @@ -29144,18 +29075,18 @@ _tmp_69_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); } _res = NULL; @@ -29164,9 +29095,9 @@ _tmp_69_rule(Parser *p) return _res; } -// _tmp_70: '.' | '(' | '=' +// _tmp_69: '.' | '(' | '=' static void * -_tmp_70_rule(Parser *p) +_tmp_69_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29182,18 +29113,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '(' @@ -29201,18 +29132,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '=' @@ -29220,18 +29151,18 @@ _tmp_70_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } _res = NULL; @@ -29240,9 +29171,9 @@ _tmp_70_rule(Parser *p) return _res; } -// _tmp_71: '.' | '(' | '=' +// _tmp_70: '.' | '(' | '=' static void * -_tmp_71_rule(Parser *p) +_tmp_70_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29258,18 +29189,18 @@ _tmp_71_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '(' @@ -29277,18 +29208,18 @@ _tmp_71_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '=' @@ -29296,18 +29227,18 @@ _tmp_71_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_71[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_70[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } _res = NULL; @@ -29316,9 +29247,9 @@ _tmp_71_rule(Parser *p) return _res; } -// _loop0_73: ',' maybe_star_pattern +// _loop0_72: ',' maybe_star_pattern static asdl_seq * -_loop0_73_rule(Parser *p) +_loop0_72_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29343,7 +29274,7 @@ _loop0_73_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); + D(fprintf(stderr, "%*c> _loop0_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); Token * _literal; pattern_ty elem; while ( @@ -29375,7 +29306,7 @@ _loop0_73_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_73[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_72[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29392,9 +29323,9 @@ _loop0_73_rule(Parser *p) return _seq; } -// _gather_72: maybe_star_pattern _loop0_73 +// _gather_71: maybe_star_pattern _loop0_72 static asdl_seq * -_gather_72_rule(Parser *p) +_gather_71_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29405,27 +29336,27 @@ _gather_72_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // maybe_star_pattern _loop0_73 + { // maybe_star_pattern _loop0_72 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_73")); + D(fprintf(stderr, "%*c> _gather_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_72")); pattern_ty elem; asdl_seq * seq; if ( (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern && - (seq = _loop0_73_rule(p)) // _loop0_73 + (seq = _loop0_72_rule(p)) // _loop0_72 ) { - D(fprintf(stderr, "%*c+ _gather_72[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_73")); + D(fprintf(stderr, "%*c+ _gather_71[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_72")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_72[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_73")); + D(fprintf(stderr, "%*c%s _gather_71[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_72")); } _res = NULL; done: @@ -29433,9 +29364,9 @@ _gather_72_rule(Parser *p) return _res; } -// _loop0_75: ',' key_value_pattern +// _loop0_74: ',' key_value_pattern static asdl_seq * -_loop0_75_rule(Parser *p) +_loop0_74_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29460,7 +29391,7 @@ _loop0_75_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); + D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); Token * _literal; KeyPatternPair* elem; while ( @@ -29492,7 +29423,7 @@ _loop0_75_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_75[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' key_value_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29509,9 +29440,9 @@ _loop0_75_rule(Parser *p) return _seq; } -// _gather_74: key_value_pattern _loop0_75 +// _gather_73: key_value_pattern _loop0_74 static asdl_seq * -_gather_74_rule(Parser *p) +_gather_73_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29522,27 +29453,27 @@ _gather_74_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // key_value_pattern _loop0_75 + { // key_value_pattern _loop0_74 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_75")); + D(fprintf(stderr, "%*c> _gather_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_74")); KeyPatternPair* elem; asdl_seq * seq; if ( (elem = key_value_pattern_rule(p)) // key_value_pattern && - (seq = _loop0_75_rule(p)) // _loop0_75 + (seq = _loop0_74_rule(p)) // _loop0_74 ) { - D(fprintf(stderr, "%*c+ _gather_74[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_75")); + D(fprintf(stderr, "%*c+ _gather_73[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_74")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_74[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_75")); + D(fprintf(stderr, "%*c%s _gather_73[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_74")); } _res = NULL; done: @@ -29550,9 +29481,9 @@ _gather_74_rule(Parser *p) return _res; } -// _tmp_76: literal_expr | attr +// _tmp_75: literal_expr | attr static void * -_tmp_76_rule(Parser *p) +_tmp_75_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29568,18 +29499,18 @@ _tmp_76_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); + D(fprintf(stderr, "%*c> _tmp_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); expr_ty literal_expr_var; if ( (literal_expr_var = literal_expr_rule(p)) // literal_expr ) { - D(fprintf(stderr, "%*c+ _tmp_76[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); + D(fprintf(stderr, "%*c+ _tmp_75[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); _res = literal_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_76[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_75[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr")); } { // attr @@ -29587,18 +29518,18 @@ _tmp_76_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); + D(fprintf(stderr, "%*c> _tmp_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); expr_ty attr_var; if ( (attr_var = attr_rule(p)) // attr ) { - D(fprintf(stderr, "%*c+ _tmp_76[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); + D(fprintf(stderr, "%*c+ _tmp_75[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); _res = attr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_76[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_75[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); } _res = NULL; @@ -29607,9 +29538,9 @@ _tmp_76_rule(Parser *p) return _res; } -// _loop0_78: ',' pattern +// _loop0_77: ',' pattern static asdl_seq * -_loop0_78_rule(Parser *p) +_loop0_77_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29634,7 +29565,7 @@ _loop0_78_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); + D(fprintf(stderr, "%*c> _loop0_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); Token * _literal; pattern_ty elem; while ( @@ -29666,7 +29597,7 @@ _loop0_78_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_78[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_77[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29683,9 +29614,9 @@ _loop0_78_rule(Parser *p) return _seq; } -// _gather_77: pattern _loop0_78 +// _gather_76: pattern _loop0_77 static asdl_seq * -_gather_77_rule(Parser *p) +_gather_76_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29696,27 +29627,27 @@ _gather_77_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // pattern _loop0_78 + { // pattern _loop0_77 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_78")); + D(fprintf(stderr, "%*c> _gather_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_77")); pattern_ty elem; asdl_seq * seq; if ( (elem = pattern_rule(p)) // pattern && - (seq = _loop0_78_rule(p)) // _loop0_78 + (seq = _loop0_77_rule(p)) // _loop0_77 ) { - D(fprintf(stderr, "%*c+ _gather_77[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_78")); + D(fprintf(stderr, "%*c+ _gather_76[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_77")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_77[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_78")); + D(fprintf(stderr, "%*c%s _gather_76[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_77")); } _res = NULL; done: @@ -29724,9 +29655,9 @@ _gather_77_rule(Parser *p) return _res; } -// _loop0_80: ',' keyword_pattern +// _loop0_79: ',' keyword_pattern static asdl_seq * -_loop0_80_rule(Parser *p) +_loop0_79_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29751,7 +29682,7 @@ _loop0_80_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); + D(fprintf(stderr, "%*c> _loop0_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); Token * _literal; KeyPatternPair* elem; while ( @@ -29783,7 +29714,7 @@ _loop0_80_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_80[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_79[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' keyword_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29800,9 +29731,9 @@ _loop0_80_rule(Parser *p) return _seq; } -// _gather_79: keyword_pattern _loop0_80 +// _gather_78: keyword_pattern _loop0_79 static asdl_seq * -_gather_79_rule(Parser *p) +_gather_78_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29813,27 +29744,27 @@ _gather_79_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // keyword_pattern _loop0_80 + { // keyword_pattern _loop0_79 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_80")); + D(fprintf(stderr, "%*c> _gather_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_79")); KeyPatternPair* elem; asdl_seq * seq; if ( (elem = keyword_pattern_rule(p)) // keyword_pattern && - (seq = _loop0_80_rule(p)) // _loop0_80 + (seq = _loop0_79_rule(p)) // _loop0_79 ) { - D(fprintf(stderr, "%*c+ _gather_79[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_80")); + D(fprintf(stderr, "%*c+ _gather_78[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_79")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_79[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_80")); + D(fprintf(stderr, "%*c%s _gather_78[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_79")); } _res = NULL; done: @@ -29841,9 +29772,9 @@ _gather_79_rule(Parser *p) return _res; } -// _loop0_82: ',' type_param +// _loop0_81: ',' type_param static asdl_seq * -_loop0_82_rule(Parser *p) +_loop0_81_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29868,7 +29799,7 @@ _loop0_82_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' type_param")); + D(fprintf(stderr, "%*c> _loop0_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' type_param")); Token * _literal; type_param_ty elem; while ( @@ -29900,7 +29831,7 @@ _loop0_82_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_82[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_81[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' type_param")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -29917,9 +29848,9 @@ _loop0_82_rule(Parser *p) return _seq; } -// _gather_81: type_param _loop0_82 +// _gather_80: type_param _loop0_81 static asdl_seq * -_gather_81_rule(Parser *p) +_gather_80_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29930,27 +29861,27 @@ _gather_81_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // type_param _loop0_82 + { // type_param _loop0_81 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "type_param _loop0_82")); + D(fprintf(stderr, "%*c> _gather_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "type_param _loop0_81")); type_param_ty elem; asdl_seq * seq; if ( (elem = type_param_rule(p)) // type_param && - (seq = _loop0_82_rule(p)) // _loop0_82 + (seq = _loop0_81_rule(p)) // _loop0_81 ) { - D(fprintf(stderr, "%*c+ _gather_81[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "type_param _loop0_82")); + D(fprintf(stderr, "%*c+ _gather_80[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "type_param _loop0_81")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_81[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "type_param _loop0_82")); + D(fprintf(stderr, "%*c%s _gather_80[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "type_param _loop0_81")); } _res = NULL; done: @@ -29958,9 +29889,9 @@ _gather_81_rule(Parser *p) return _res; } -// _loop1_83: (',' expression) +// _loop1_82: (',' expression) static asdl_seq * -_loop1_83_rule(Parser *p) +_loop1_82_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -29985,13 +29916,13 @@ _loop1_83_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_252_var; + D(fprintf(stderr, "%*c> _loop1_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); + void *_tmp_251_var; while ( - (_tmp_252_var = _tmp_252_rule(p)) // ',' expression + (_tmp_251_var = _tmp_251_rule(p)) // ',' expression ) { - _res = _tmp_252_var; + _res = _tmp_251_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30008,7 +29939,7 @@ _loop1_83_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_82[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)")); } if (_n == 0 || p->error_indicator) { @@ -30030,9 +29961,9 @@ _loop1_83_rule(Parser *p) return _seq; } -// _loop1_84: (',' star_expression) +// _loop1_83: (',' star_expression) static asdl_seq * -_loop1_84_rule(Parser *p) +_loop1_83_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30057,13 +29988,13 @@ _loop1_84_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_253_var; + D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); + void *_tmp_252_var; while ( - (_tmp_253_var = _tmp_253_rule(p)) // ',' star_expression + (_tmp_252_var = _tmp_252_rule(p)) // ',' star_expression ) { - _res = _tmp_253_var; + _res = _tmp_252_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30080,7 +30011,7 @@ _loop1_84_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_84[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)")); } if (_n == 0 || p->error_indicator) { @@ -30102,9 +30033,9 @@ _loop1_84_rule(Parser *p) return _seq; } -// _loop0_86: ',' star_named_expression +// _loop0_85: ',' star_named_expression static asdl_seq * -_loop0_86_rule(Parser *p) +_loop0_85_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30129,7 +30060,7 @@ _loop0_86_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression")); + D(fprintf(stderr, "%*c> _loop0_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression")); Token * _literal; expr_ty elem; while ( @@ -30161,7 +30092,7 @@ _loop0_86_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_86[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_85[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30178,9 +30109,9 @@ _loop0_86_rule(Parser *p) return _seq; } -// _gather_85: star_named_expression _loop0_86 +// _gather_84: star_named_expression _loop0_85 static asdl_seq * -_gather_85_rule(Parser *p) +_gather_84_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30191,27 +30122,27 @@ _gather_85_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // star_named_expression _loop0_86 + { // star_named_expression _loop0_85 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_86")); + D(fprintf(stderr, "%*c> _gather_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_85")); expr_ty elem; asdl_seq * seq; if ( (elem = star_named_expression_rule(p)) // star_named_expression && - (seq = _loop0_86_rule(p)) // _loop0_86 + (seq = _loop0_85_rule(p)) // _loop0_85 ) { - D(fprintf(stderr, "%*c+ _gather_85[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_86")); + D(fprintf(stderr, "%*c+ _gather_84[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_85")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_85[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_86")); + D(fprintf(stderr, "%*c%s _gather_84[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_85")); } _res = NULL; done: @@ -30219,9 +30150,9 @@ _gather_85_rule(Parser *p) return _res; } -// _loop1_87: ('or' conjunction) +// _loop1_86: ('or' conjunction) static asdl_seq * -_loop1_87_rule(Parser *p) +_loop1_86_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30246,13 +30177,13 @@ _loop1_87_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_254_var; + D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); + void *_tmp_253_var; while ( - (_tmp_254_var = _tmp_254_rule(p)) // 'or' conjunction + (_tmp_253_var = _tmp_253_rule(p)) // 'or' conjunction ) { - _res = _tmp_254_var; + _res = _tmp_253_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30269,7 +30200,7 @@ _loop1_87_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_87[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_86[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)")); } if (_n == 0 || p->error_indicator) { @@ -30291,9 +30222,9 @@ _loop1_87_rule(Parser *p) return _seq; } -// _loop1_88: ('and' inversion) +// _loop1_87: ('and' inversion) static asdl_seq * -_loop1_88_rule(Parser *p) +_loop1_87_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30318,13 +30249,13 @@ _loop1_88_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_255_var; + D(fprintf(stderr, "%*c> _loop1_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); + void *_tmp_254_var; while ( - (_tmp_255_var = _tmp_255_rule(p)) // 'and' inversion + (_tmp_254_var = _tmp_254_rule(p)) // 'and' inversion ) { - _res = _tmp_255_var; + _res = _tmp_254_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30341,7 +30272,7 @@ _loop1_88_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_88[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_87[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)")); } if (_n == 0 || p->error_indicator) { @@ -30363,9 +30294,9 @@ _loop1_88_rule(Parser *p) return _seq; } -// _loop1_89: compare_op_bitwise_or_pair +// _loop1_88: compare_op_bitwise_or_pair static asdl_seq * -_loop1_89_rule(Parser *p) +_loop1_88_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30390,7 +30321,7 @@ _loop1_89_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair")); + D(fprintf(stderr, "%*c> _loop1_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair")); CmpopExprPair* compare_op_bitwise_or_pair_var; while ( (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p)) // compare_op_bitwise_or_pair @@ -30413,7 +30344,7 @@ _loop1_89_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_89[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_88[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair")); } if (_n == 0 || p->error_indicator) { @@ -30435,9 +30366,9 @@ _loop1_89_rule(Parser *p) return _seq; } -// _tmp_90: '!=' +// _tmp_89: '!=' static void * -_tmp_90_rule(Parser *p) +_tmp_89_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30453,13 +30384,13 @@ _tmp_90_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='")); + D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='")); Token * tok; if ( (tok = _PyPegen_expect_token(p, 28)) // token='!=' ) { - D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='")); + D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='")); _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30469,7 +30400,7 @@ _tmp_90_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='")); } _res = NULL; @@ -30478,9 +30409,9 @@ _tmp_90_rule(Parser *p) return _res; } -// _loop0_92: ',' (slice | starred_expression) +// _loop0_91: ',' (slice | starred_expression) static asdl_seq * -_loop0_92_rule(Parser *p) +_loop0_91_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30505,13 +30436,13 @@ _loop0_92_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (slice | starred_expression)")); + D(fprintf(stderr, "%*c> _loop0_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (slice | starred_expression)")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_256_rule(p)) // slice | starred_expression + (elem = _tmp_255_rule(p)) // slice | starred_expression ) { _res = elem; @@ -30537,7 +30468,7 @@ _loop0_92_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_92[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_91[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (slice | starred_expression)")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -30554,9 +30485,9 @@ _loop0_92_rule(Parser *p) return _seq; } -// _gather_91: (slice | starred_expression) _loop0_92 +// _gather_90: (slice | starred_expression) _loop0_91 static asdl_seq * -_gather_91_rule(Parser *p) +_gather_90_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30567,27 +30498,27 @@ _gather_91_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (slice | starred_expression) _loop0_92 + { // (slice | starred_expression) _loop0_91 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_92")); + D(fprintf(stderr, "%*c> _gather_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_91")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_256_rule(p)) // slice | starred_expression + (elem = _tmp_255_rule(p)) // slice | starred_expression && - (seq = _loop0_92_rule(p)) // _loop0_92 + (seq = _loop0_91_rule(p)) // _loop0_91 ) { - D(fprintf(stderr, "%*c+ _gather_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_92")); + D(fprintf(stderr, "%*c+ _gather_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_91")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_91[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slice | starred_expression) _loop0_92")); + D(fprintf(stderr, "%*c%s _gather_90[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slice | starred_expression) _loop0_91")); } _res = NULL; done: @@ -30595,9 +30526,9 @@ _gather_91_rule(Parser *p) return _res; } -// _tmp_93: ':' expression? +// _tmp_92: ':' expression? static void * -_tmp_93_rule(Parser *p) +_tmp_92_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30613,7 +30544,7 @@ _tmp_93_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?")); + D(fprintf(stderr, "%*c> _tmp_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?")); Token * _literal; void *d; if ( @@ -30622,7 +30553,7 @@ _tmp_93_rule(Parser *p) (d = expression_rule(p), !p->error_indicator) // expression? ) { - D(fprintf(stderr, "%*c+ _tmp_93[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?")); + D(fprintf(stderr, "%*c+ _tmp_92[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?")); _res = d; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -30632,7 +30563,7 @@ _tmp_93_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_93[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_92[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?")); } _res = NULL; @@ -30641,9 +30572,9 @@ _tmp_93_rule(Parser *p) return _res; } -// _tmp_94: STRING | FSTRING_START +// _tmp_93: STRING | FSTRING_START static void * -_tmp_94_rule(Parser *p) +_tmp_93_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30659,18 +30590,18 @@ _tmp_94_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING")); + D(fprintf(stderr, "%*c> _tmp_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING")); expr_ty string_var; if ( (string_var = _PyPegen_string_token(p)) // STRING ) { - D(fprintf(stderr, "%*c+ _tmp_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING")); + D(fprintf(stderr, "%*c+ _tmp_93[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING")); _res = string_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_94[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_93[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING")); } { // FSTRING_START @@ -30678,18 +30609,18 @@ _tmp_94_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); + D(fprintf(stderr, "%*c> _tmp_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); Token * fstring_start_var; if ( (fstring_start_var = _PyPegen_expect_token(p, FSTRING_START)) // token='FSTRING_START' ) { - D(fprintf(stderr, "%*c+ _tmp_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); + D(fprintf(stderr, "%*c+ _tmp_93[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START")); _res = fstring_start_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_94[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_93[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START")); } _res = NULL; @@ -30698,9 +30629,9 @@ _tmp_94_rule(Parser *p) return _res; } -// _tmp_95: tuple | group | genexp +// _tmp_94: tuple | group | genexp static void * -_tmp_95_rule(Parser *p) +_tmp_94_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30716,18 +30647,18 @@ _tmp_95_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c> _tmp_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); expr_ty tuple_var; if ( (tuple_var = tuple_rule(p)) // tuple ) { - D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c+ _tmp_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); _res = tuple_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_94[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); } { // group @@ -30735,18 +30666,18 @@ _tmp_95_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group")); + D(fprintf(stderr, "%*c> _tmp_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group")); expr_ty group_var; if ( (group_var = group_rule(p)) // group ) { - D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group")); + D(fprintf(stderr, "%*c+ _tmp_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group")); _res = group_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_94[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group")); } { // genexp @@ -30754,18 +30685,18 @@ _tmp_95_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c> _tmp_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); expr_ty genexp_var; if ( (genexp_var = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c+ _tmp_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); _res = genexp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_94[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } _res = NULL; @@ -30774,9 +30705,9 @@ _tmp_95_rule(Parser *p) return _res; } -// _tmp_96: list | listcomp +// _tmp_95: list | listcomp static void * -_tmp_96_rule(Parser *p) +_tmp_95_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30792,18 +30723,18 @@ _tmp_96_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); expr_ty list_var; if ( (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); _res = list_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); } { // listcomp @@ -30811,18 +30742,18 @@ _tmp_96_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp")); + D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp")); expr_ty listcomp_var; if ( (listcomp_var = listcomp_rule(p)) // listcomp ) { - D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp")); + D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp")); _res = listcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp")); } _res = NULL; @@ -30831,9 +30762,9 @@ _tmp_96_rule(Parser *p) return _res; } -// _tmp_97: dict | set | dictcomp | setcomp +// _tmp_96: dict | set | dictcomp | setcomp static void * -_tmp_97_rule(Parser *p) +_tmp_96_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30849,18 +30780,18 @@ _tmp_97_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict")); + D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict")); expr_ty dict_var; if ( (dict_var = dict_rule(p)) // dict ) { - D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict")); + D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict")); _res = dict_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict")); } { // set @@ -30868,18 +30799,18 @@ _tmp_97_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set")); + D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set")); expr_ty set_var; if ( (set_var = set_rule(p)) // set ) { - D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set")); + D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set")); _res = set_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set")); } { // dictcomp @@ -30887,18 +30818,18 @@ _tmp_97_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp")); + D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp")); expr_ty dictcomp_var; if ( (dictcomp_var = dictcomp_rule(p)) // dictcomp ) { - D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp")); + D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp")); _res = dictcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp")); } { // setcomp @@ -30906,18 +30837,18 @@ _tmp_97_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp")); + D(fprintf(stderr, "%*c> _tmp_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp")); expr_ty setcomp_var; if ( (setcomp_var = setcomp_rule(p)) // setcomp ) { - D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp")); + D(fprintf(stderr, "%*c+ _tmp_96[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp")); _res = setcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_96[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp")); } _res = NULL; @@ -30926,9 +30857,9 @@ _tmp_97_rule(Parser *p) return _res; } -// _tmp_98: yield_expr | named_expression +// _tmp_97: yield_expr | named_expression static void * -_tmp_98_rule(Parser *p) +_tmp_97_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -30944,18 +30875,18 @@ _tmp_98_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_98[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_98[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // named_expression @@ -30963,18 +30894,18 @@ _tmp_98_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c> _tmp_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); expr_ty named_expression_var; if ( (named_expression_var = named_expression_rule(p)) // named_expression ) { - D(fprintf(stderr, "%*c+ _tmp_98[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c+ _tmp_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); _res = named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_98[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_97[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); } _res = NULL; @@ -30983,9 +30914,9 @@ _tmp_98_rule(Parser *p) return _res; } -// _loop0_99: lambda_param_no_default +// _loop0_98: lambda_param_no_default static asdl_seq * -_loop0_99_rule(Parser *p) +_loop0_98_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31010,7 +30941,7 @@ _loop0_99_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -31033,7 +30964,7 @@ _loop0_99_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_99[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_98[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31050,9 +30981,9 @@ _loop0_99_rule(Parser *p) return _seq; } -// _loop0_100: lambda_param_with_default +// _loop0_99: lambda_param_with_default static asdl_seq * -_loop0_100_rule(Parser *p) +_loop0_99_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31077,7 +31008,7 @@ _loop0_100_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop0_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -31100,7 +31031,7 @@ _loop0_100_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_100[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_99[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31117,9 +31048,9 @@ _loop0_100_rule(Parser *p) return _seq; } -// _loop0_101: lambda_param_with_default +// _loop0_100: lambda_param_with_default static asdl_seq * -_loop0_101_rule(Parser *p) +_loop0_100_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31144,7 +31075,7 @@ _loop0_101_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop0_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -31167,7 +31098,7 @@ _loop0_101_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_101[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_100[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31184,9 +31115,9 @@ _loop0_101_rule(Parser *p) return _seq; } -// _loop1_102: lambda_param_no_default +// _loop1_101: lambda_param_no_default static asdl_seq * -_loop1_102_rule(Parser *p) +_loop1_101_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31211,7 +31142,7 @@ _loop1_102_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop1_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -31234,7 +31165,7 @@ _loop1_102_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_102[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_101[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -31256,9 +31187,9 @@ _loop1_102_rule(Parser *p) return _seq; } -// _loop0_103: lambda_param_with_default +// _loop0_102: lambda_param_with_default static asdl_seq * -_loop0_103_rule(Parser *p) +_loop0_102_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31283,7 +31214,7 @@ _loop0_103_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop0_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -31306,7 +31237,7 @@ _loop0_103_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_103[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_102[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31323,9 +31254,9 @@ _loop0_103_rule(Parser *p) return _seq; } -// _loop1_104: lambda_param_with_default +// _loop1_103: lambda_param_with_default static asdl_seq * -_loop1_104_rule(Parser *p) +_loop1_103_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31350,7 +31281,7 @@ _loop1_104_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -31373,7 +31304,7 @@ _loop1_104_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_104[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_103[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -31395,9 +31326,9 @@ _loop1_104_rule(Parser *p) return _seq; } -// _loop1_105: lambda_param_no_default +// _loop1_104: lambda_param_no_default static asdl_seq * -_loop1_105_rule(Parser *p) +_loop1_104_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31422,7 +31353,7 @@ _loop1_105_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -31445,7 +31376,7 @@ _loop1_105_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_105[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_104[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -31467,9 +31398,9 @@ _loop1_105_rule(Parser *p) return _seq; } -// _loop1_106: lambda_param_no_default +// _loop1_105: lambda_param_no_default static asdl_seq * -_loop1_106_rule(Parser *p) +_loop1_105_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31494,7 +31425,7 @@ _loop1_106_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -31517,7 +31448,7 @@ _loop1_106_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_106[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_105[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -31539,9 +31470,9 @@ _loop1_106_rule(Parser *p) return _seq; } -// _loop0_107: lambda_param_no_default +// _loop0_106: lambda_param_no_default static asdl_seq * -_loop0_107_rule(Parser *p) +_loop0_106_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31566,7 +31497,7 @@ _loop0_107_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -31589,7 +31520,7 @@ _loop0_107_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_107[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_106[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31606,9 +31537,9 @@ _loop0_107_rule(Parser *p) return _seq; } -// _loop1_108: lambda_param_with_default +// _loop1_107: lambda_param_with_default static asdl_seq * -_loop1_108_rule(Parser *p) +_loop1_107_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31633,7 +31564,7 @@ _loop1_108_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -31656,7 +31587,7 @@ _loop1_108_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_108[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_107[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -31678,9 +31609,9 @@ _loop1_108_rule(Parser *p) return _seq; } -// _loop0_109: lambda_param_no_default +// _loop0_108: lambda_param_no_default static asdl_seq * -_loop0_109_rule(Parser *p) +_loop0_108_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31705,7 +31636,7 @@ _loop0_109_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -31728,7 +31659,7 @@ _loop0_109_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_109[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_108[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31745,9 +31676,9 @@ _loop0_109_rule(Parser *p) return _seq; } -// _loop1_110: lambda_param_with_default +// _loop1_109: lambda_param_with_default static asdl_seq * -_loop1_110_rule(Parser *p) +_loop1_109_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31772,7 +31703,7 @@ _loop1_110_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -31795,7 +31726,7 @@ _loop1_110_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_110[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_109[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -31817,9 +31748,9 @@ _loop1_110_rule(Parser *p) return _seq; } -// _loop0_111: lambda_param_maybe_default +// _loop0_110: lambda_param_maybe_default static asdl_seq * -_loop0_111_rule(Parser *p) +_loop0_110_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31844,7 +31775,7 @@ _loop0_111_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -31867,7 +31798,7 @@ _loop0_111_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_111[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_110[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -31884,9 +31815,9 @@ _loop0_111_rule(Parser *p) return _seq; } -// _loop1_112: lambda_param_maybe_default +// _loop1_111: lambda_param_maybe_default static asdl_seq * -_loop1_112_rule(Parser *p) +_loop1_111_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31911,7 +31842,7 @@ _loop1_112_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -31934,7 +31865,7 @@ _loop1_112_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_112[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_111[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -31956,9 +31887,9 @@ _loop1_112_rule(Parser *p) return _seq; } -// _tmp_113: yield_expr | star_expressions +// _tmp_112: yield_expr | star_expressions static void * -_tmp_113_rule(Parser *p) +_tmp_112_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -31974,18 +31905,18 @@ _tmp_113_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -31993,18 +31924,18 @@ _tmp_113_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -32013,9 +31944,9 @@ _tmp_113_rule(Parser *p) return _res; } -// _loop0_114: fstring_format_spec +// _loop0_113: fstring_format_spec static asdl_seq * -_loop0_114_rule(Parser *p) +_loop0_113_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -32040,7 +31971,7 @@ _loop0_114_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); + D(fprintf(stderr, "%*c> _loop0_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); expr_ty fstring_format_spec_var; while ( (fstring_format_spec_var = fstring_format_spec_rule(p)) // fstring_format_spec @@ -32063,7 +31994,7 @@ _loop0_114_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_114[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_113[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_format_spec")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -32080,6 +32011,73 @@ _loop0_114_rule(Parser *p) return _seq; } +// _loop0_114: fstring_middle +static asdl_seq * +_loop0_114_rule(Parser *p) +{ + if (p->level++ == MAXSTACK) { + _Pypegen_stack_overflow(p); + } + if (p->error_indicator) { + p->level--; + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + p->level--; + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // fstring_middle + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> _loop0_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_middle")); + expr_ty fstring_middle_var; + while ( + (fstring_middle_var = fstring_middle_rule(p)) // fstring_middle + ) + { + _res = fstring_middle_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + p->level--; + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _loop0_114[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_middle")); + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + p->level--; + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + p->level--; + return _seq; +} + // _loop1_115: (fstring | string) static asdl_seq * _loop1_115_rule(Parser *p) @@ -32108,12 +32106,12 @@ _loop1_115_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(fstring | string)")); - void *_tmp_257_var; + void *_tmp_256_var; while ( - (_tmp_257_var = _tmp_257_rule(p)) // fstring | string + (_tmp_256_var = _tmp_256_rule(p)) // fstring | string ) { - _res = _tmp_257_var; + _res = _tmp_256_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32418,12 +32416,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_258_var; + void *_tmp_257_var; while ( - (_tmp_258_var = _tmp_258_rule(p)) // 'if' disjunction + (_tmp_257_var = _tmp_257_rule(p)) // 'if' disjunction ) { - _res = _tmp_258_var; + _res = _tmp_257_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32485,12 +32483,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_259_var; + void *_tmp_258_var; while ( - (_tmp_259_var = _tmp_259_rule(p)) // 'if' disjunction + (_tmp_258_var = _tmp_258_rule(p)) // 'if' disjunction ) { - _res = _tmp_259_var; + _res = _tmp_258_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32616,7 +32614,7 @@ _loop0_124_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_260_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_259_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' ) { _res = elem; @@ -32682,7 +32680,7 @@ _gather_123_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_260_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_259_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' && (seq = _loop0_124_rule(p)) // _loop0_124 ) @@ -33243,12 +33241,12 @@ _loop0_134_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_261_var; + void *_tmp_260_var; while ( - (_tmp_261_var = _tmp_261_rule(p)) // ',' star_target + (_tmp_260_var = _tmp_260_rule(p)) // ',' star_target ) { - _res = _tmp_261_var; + _res = _tmp_260_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -33427,12 +33425,12 @@ _loop1_137_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_262_var; + void *_tmp_261_var; while ( - (_tmp_262_var = _tmp_262_rule(p)) // ',' star_target + (_tmp_261_var = _tmp_261_rule(p)) // ',' star_target ) { - _res = _tmp_262_var; + _res = _tmp_261_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -34529,66 +34527,9 @@ _tmp_156_rule(Parser *p) return _res; } -// _tmp_157: FSTRING_MIDDLE | fstring_replacement_field +// _tmp_157: '=' | ':=' static void * _tmp_157_rule(Parser *p) -{ - if (p->level++ == MAXSTACK) { - _Pypegen_stack_overflow(p); - } - if (p->error_indicator) { - p->level--; - return NULL; - } - void * _res = NULL; - int _mark = p->mark; - { // FSTRING_MIDDLE - if (p->error_indicator) { - p->level--; - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE")); - Token * fstring_middle_var; - if ( - (fstring_middle_var = _PyPegen_expect_token(p, FSTRING_MIDDLE)) // token='FSTRING_MIDDLE' - ) - { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE")); - _res = fstring_middle_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_MIDDLE")); - } - { // fstring_replacement_field - if (p->error_indicator) { - p->level--; - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field")); - expr_ty fstring_replacement_field_var; - if ( - (fstring_replacement_field_var = fstring_replacement_field_rule(p)) // fstring_replacement_field - ) - { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field")); - _res = fstring_replacement_field_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_replacement_field")); - } - _res = NULL; - done: - p->level--; - return _res; -} - -// _tmp_158: '=' | ':=' -static void * -_tmp_158_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34604,18 +34545,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -34623,18 +34564,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } _res = NULL; @@ -34643,9 +34584,9 @@ _tmp_158_rule(Parser *p) return _res; } -// _tmp_159: list | tuple | genexp | 'True' | 'None' | 'False' +// _tmp_158: list | tuple | genexp | 'True' | 'None' | 'False' static void * -_tmp_159_rule(Parser *p) +_tmp_158_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34661,18 +34602,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); expr_ty list_var; if ( (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); _res = list_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); } { // tuple @@ -34680,18 +34621,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); expr_ty tuple_var; if ( (tuple_var = tuple_rule(p)) // tuple ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); _res = tuple_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); } { // genexp @@ -34699,18 +34640,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); expr_ty genexp_var; if ( (genexp_var = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); _res = genexp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } { // 'True' @@ -34718,18 +34659,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 610)) // token='True' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } { // 'None' @@ -34737,18 +34678,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 611)) // token='None' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } { // 'False' @@ -34756,18 +34697,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 612)) // token='False' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } _res = NULL; @@ -34776,9 +34717,9 @@ _tmp_159_rule(Parser *p) return _res; } -// _tmp_160: '=' | ':=' +// _tmp_159: '=' | ':=' static void * -_tmp_160_rule(Parser *p) +_tmp_159_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34794,18 +34735,18 @@ _tmp_160_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -34813,18 +34754,18 @@ _tmp_160_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } _res = NULL; @@ -34833,9 +34774,9 @@ _tmp_160_rule(Parser *p) return _res; } -// _loop0_161: star_named_expressions +// _loop0_160: star_named_expressions static asdl_seq * -_loop0_161_rule(Parser *p) +_loop0_160_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34860,7 +34801,7 @@ _loop0_161_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); + D(fprintf(stderr, "%*c> _loop0_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); asdl_expr_seq* star_named_expressions_var; while ( (star_named_expressions_var = star_named_expressions_rule(p)) // star_named_expressions @@ -34883,7 +34824,7 @@ _loop0_161_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34900,9 +34841,9 @@ _loop0_161_rule(Parser *p) return _seq; } -// _loop0_162: (star_targets '=') +// _loop0_161: (star_targets '=') static asdl_seq * -_loop0_162_rule(Parser *p) +_loop0_161_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34927,13 +34868,13 @@ _loop0_162_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_263_var; + D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_262_var; while ( - (_tmp_263_var = _tmp_263_rule(p)) // star_targets '=' + (_tmp_262_var = _tmp_262_rule(p)) // star_targets '=' ) { - _res = _tmp_263_var; + _res = _tmp_262_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -34950,7 +34891,7 @@ _loop0_162_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_162[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34967,9 +34908,9 @@ _loop0_162_rule(Parser *p) return _seq; } -// _loop0_163: (star_targets '=') +// _loop0_162: (star_targets '=') static asdl_seq * -_loop0_163_rule(Parser *p) +_loop0_162_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34994,13 +34935,13 @@ _loop0_163_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_264_var; + D(fprintf(stderr, "%*c> _loop0_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_263_var; while ( - (_tmp_264_var = _tmp_264_rule(p)) // star_targets '=' + (_tmp_263_var = _tmp_263_rule(p)) // star_targets '=' ) { - _res = _tmp_264_var; + _res = _tmp_263_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -35017,7 +34958,7 @@ _loop0_163_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_162[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35034,9 +34975,9 @@ _loop0_163_rule(Parser *p) return _seq; } -// _tmp_164: yield_expr | star_expressions +// _tmp_163: yield_expr | star_expressions static void * -_tmp_164_rule(Parser *p) +_tmp_163_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35052,18 +34993,18 @@ _tmp_164_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -35071,18 +35012,18 @@ _tmp_164_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -35091,9 +35032,9 @@ _tmp_164_rule(Parser *p) return _res; } -// _tmp_165: '[' | '(' | '{' +// _tmp_164: '[' | '(' | '{' static void * -_tmp_165_rule(Parser *p) +_tmp_164_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35109,18 +35050,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '(' @@ -35128,18 +35069,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '{' @@ -35147,18 +35088,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -35167,9 +35108,9 @@ _tmp_165_rule(Parser *p) return _res; } -// _tmp_166: '[' | '{' +// _tmp_165: '[' | '{' static void * -_tmp_166_rule(Parser *p) +_tmp_165_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35185,18 +35126,18 @@ _tmp_166_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -35204,18 +35145,18 @@ _tmp_166_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -35224,9 +35165,9 @@ _tmp_166_rule(Parser *p) return _res; } -// _tmp_167: '[' | '{' +// _tmp_166: '[' | '{' static void * -_tmp_167_rule(Parser *p) +_tmp_166_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35242,18 +35183,18 @@ _tmp_167_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -35261,18 +35202,18 @@ _tmp_167_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -35281,9 +35222,9 @@ _tmp_167_rule(Parser *p) return _res; } -// _tmp_168: slash_no_default | slash_with_default +// _tmp_167: slash_no_default | slash_with_default static void * -_tmp_168_rule(Parser *p) +_tmp_167_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35299,18 +35240,18 @@ _tmp_168_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); asdl_arg_seq* slash_no_default_var; if ( (slash_no_default_var = slash_no_default_rule(p)) // slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); _res = slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default")); } { // slash_with_default @@ -35318,18 +35259,18 @@ _tmp_168_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); SlashWithDefault* slash_with_default_var; if ( (slash_with_default_var = slash_with_default_rule(p)) // slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); _res = slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default")); } _res = NULL; @@ -35338,9 +35279,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _loop0_169: param_maybe_default +// _loop0_168: param_maybe_default static asdl_seq * -_loop0_169_rule(Parser *p) +_loop0_168_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35365,7 +35306,7 @@ _loop0_169_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35388,7 +35329,7 @@ _loop0_169_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35405,9 +35346,9 @@ _loop0_169_rule(Parser *p) return _seq; } -// _loop0_170: param_no_default +// _loop0_169: param_no_default static asdl_seq * -_loop0_170_rule(Parser *p) +_loop0_169_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35432,7 +35373,7 @@ _loop0_170_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -35455,7 +35396,7 @@ _loop0_170_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35472,9 +35413,9 @@ _loop0_170_rule(Parser *p) return _seq; } -// _loop0_171: param_no_default +// _loop0_170: param_no_default static asdl_seq * -_loop0_171_rule(Parser *p) +_loop0_170_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35499,7 +35440,7 @@ _loop0_171_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -35522,7 +35463,7 @@ _loop0_171_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35539,9 +35480,9 @@ _loop0_171_rule(Parser *p) return _seq; } -// _loop1_172: param_no_default +// _loop1_171: param_no_default static asdl_seq * -_loop1_172_rule(Parser *p) +_loop1_171_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35566,7 +35507,7 @@ _loop1_172_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop1_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -35589,7 +35530,7 @@ _loop1_172_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -35611,9 +35552,9 @@ _loop1_172_rule(Parser *p) return _seq; } -// _tmp_173: slash_no_default | slash_with_default +// _tmp_172: slash_no_default | slash_with_default static void * -_tmp_173_rule(Parser *p) +_tmp_172_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35629,18 +35570,18 @@ _tmp_173_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); asdl_arg_seq* slash_no_default_var; if ( (slash_no_default_var = slash_no_default_rule(p)) // slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); _res = slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default")); } { // slash_with_default @@ -35648,18 +35589,18 @@ _tmp_173_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); SlashWithDefault* slash_with_default_var; if ( (slash_with_default_var = slash_with_default_rule(p)) // slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_172[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); _res = slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default")); } _res = NULL; @@ -35668,9 +35609,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _loop0_174: param_maybe_default +// _loop0_173: param_maybe_default static asdl_seq * -_loop0_174_rule(Parser *p) +_loop0_173_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35695,7 +35636,7 @@ _loop0_174_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35718,7 +35659,7 @@ _loop0_174_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35735,9 +35676,9 @@ _loop0_174_rule(Parser *p) return _seq; } -// _tmp_175: ',' | param_no_default +// _tmp_174: ',' | param_no_default static void * -_tmp_175_rule(Parser *p) +_tmp_174_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35753,18 +35694,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // param_no_default @@ -35772,18 +35713,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } _res = NULL; @@ -35792,9 +35733,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _loop0_176: param_maybe_default +// _loop0_175: param_maybe_default static asdl_seq * -_loop0_176_rule(Parser *p) +_loop0_175_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35819,7 +35760,7 @@ _loop0_176_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35842,7 +35783,7 @@ _loop0_176_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35859,9 +35800,9 @@ _loop0_176_rule(Parser *p) return _seq; } -// _loop1_177: param_maybe_default +// _loop1_176: param_maybe_default static asdl_seq * -_loop1_177_rule(Parser *p) +_loop1_176_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35886,7 +35827,7 @@ _loop1_177_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35909,7 +35850,7 @@ _loop1_177_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -35931,9 +35872,9 @@ _loop1_177_rule(Parser *p) return _seq; } -// _tmp_178: ')' | ',' +// _tmp_177: ')' | ',' static void * -_tmp_178_rule(Parser *p) +_tmp_177_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35949,18 +35890,18 @@ _tmp_178_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' @@ -35968,18 +35909,18 @@ _tmp_178_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -35988,9 +35929,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: ')' | ',' (')' | '**') +// _tmp_178: ')' | ',' (')' | '**') static void * -_tmp_179_rule(Parser *p) +_tmp_178_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36006,18 +35947,18 @@ _tmp_179_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' (')' | '**') @@ -36025,21 +35966,21 @@ _tmp_179_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_265_var; + void *_tmp_264_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_265_var = _tmp_265_rule(p)) // ')' | '**' + (_tmp_264_var = _tmp_264_rule(p)) // ')' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_265_var); + D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_264_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')")); } _res = NULL; @@ -36048,9 +35989,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: param_no_default | ',' +// _tmp_179: param_no_default | ',' static void * -_tmp_180_rule(Parser *p) +_tmp_179_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36066,18 +36007,18 @@ _tmp_180_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } { // ',' @@ -36085,18 +36026,18 @@ _tmp_180_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36105,9 +36046,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _loop0_181: param_maybe_default +// _loop0_180: param_maybe_default static asdl_seq * -_loop0_181_rule(Parser *p) +_loop0_180_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36132,7 +36073,7 @@ _loop0_181_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -36155,7 +36096,7 @@ _loop0_181_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36172,9 +36113,9 @@ _loop0_181_rule(Parser *p) return _seq; } -// _tmp_182: param_no_default | ',' +// _tmp_181: param_no_default | ',' static void * -_tmp_182_rule(Parser *p) +_tmp_181_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36190,18 +36131,18 @@ _tmp_182_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } { // ',' @@ -36209,18 +36150,18 @@ _tmp_182_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36229,9 +36170,9 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: '*' | '**' | '/' +// _tmp_182: '*' | '**' | '/' static void * -_tmp_183_rule(Parser *p) +_tmp_182_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36247,18 +36188,18 @@ _tmp_183_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); } { // '**' @@ -36266,18 +36207,18 @@ _tmp_183_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } { // '/' @@ -36285,18 +36226,18 @@ _tmp_183_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 17)) // token='/' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'")); } _res = NULL; @@ -36305,9 +36246,9 @@ _tmp_183_rule(Parser *p) return _res; } -// _loop1_184: param_with_default +// _loop1_183: param_with_default static asdl_seq * -_loop1_184_rule(Parser *p) +_loop1_183_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36332,7 +36273,7 @@ _loop1_184_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -36355,7 +36296,7 @@ _loop1_184_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -36377,9 +36318,9 @@ _loop1_184_rule(Parser *p) return _seq; } -// _tmp_185: lambda_slash_no_default | lambda_slash_with_default +// _tmp_184: lambda_slash_no_default | lambda_slash_with_default static void * -_tmp_185_rule(Parser *p) +_tmp_184_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36395,18 +36336,18 @@ _tmp_185_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); asdl_arg_seq* lambda_slash_no_default_var; if ( (lambda_slash_no_default_var = lambda_slash_no_default_rule(p)) // lambda_slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); _res = lambda_slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default")); } { // lambda_slash_with_default @@ -36414,18 +36355,18 @@ _tmp_185_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); SlashWithDefault* lambda_slash_with_default_var; if ( (lambda_slash_with_default_var = lambda_slash_with_default_rule(p)) // lambda_slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); _res = lambda_slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default")); } _res = NULL; @@ -36434,9 +36375,9 @@ _tmp_185_rule(Parser *p) return _res; } -// _loop0_186: lambda_param_maybe_default +// _loop0_185: lambda_param_maybe_default static asdl_seq * -_loop0_186_rule(Parser *p) +_loop0_185_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36461,7 +36402,7 @@ _loop0_186_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -36484,7 +36425,7 @@ _loop0_186_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_186[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36501,9 +36442,9 @@ _loop0_186_rule(Parser *p) return _seq; } -// _loop0_187: lambda_param_no_default +// _loop0_186: lambda_param_no_default static asdl_seq * -_loop0_187_rule(Parser *p) +_loop0_186_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36528,7 +36469,7 @@ _loop0_187_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -36551,7 +36492,7 @@ _loop0_187_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_187[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36568,9 +36509,9 @@ _loop0_187_rule(Parser *p) return _seq; } -// _loop0_188: lambda_param_no_default +// _loop0_187: lambda_param_no_default static asdl_seq * -_loop0_188_rule(Parser *p) +_loop0_187_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36595,7 +36536,7 @@ _loop0_188_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -36618,7 +36559,7 @@ _loop0_188_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_188[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36635,9 +36576,9 @@ _loop0_188_rule(Parser *p) return _seq; } -// _loop0_190: ',' lambda_param +// _loop0_189: ',' lambda_param static asdl_seq * -_loop0_190_rule(Parser *p) +_loop0_189_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36662,7 +36603,7 @@ _loop0_190_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param")); + D(fprintf(stderr, "%*c> _loop0_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param")); Token * _literal; arg_ty elem; while ( @@ -36694,7 +36635,7 @@ _loop0_190_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_190[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_189[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' lambda_param")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36711,9 +36652,9 @@ _loop0_190_rule(Parser *p) return _seq; } -// _gather_189: lambda_param _loop0_190 +// _gather_188: lambda_param _loop0_189 static asdl_seq * -_gather_189_rule(Parser *p) +_gather_188_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36724,27 +36665,27 @@ _gather_189_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // lambda_param _loop0_190 + { // lambda_param _loop0_189 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_190")); + D(fprintf(stderr, "%*c> _gather_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_189")); arg_ty elem; asdl_seq * seq; if ( (elem = lambda_param_rule(p)) // lambda_param && - (seq = _loop0_190_rule(p)) // _loop0_190 + (seq = _loop0_189_rule(p)) // _loop0_189 ) { - D(fprintf(stderr, "%*c+ _gather_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_190")); + D(fprintf(stderr, "%*c+ _gather_188[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_189")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_189[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_190")); + D(fprintf(stderr, "%*c%s _gather_188[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_189")); } _res = NULL; done: @@ -36752,9 +36693,9 @@ _gather_189_rule(Parser *p) return _res; } -// _tmp_191: lambda_slash_no_default | lambda_slash_with_default +// _tmp_190: lambda_slash_no_default | lambda_slash_with_default static void * -_tmp_191_rule(Parser *p) +_tmp_190_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36770,18 +36711,18 @@ _tmp_191_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); asdl_arg_seq* lambda_slash_no_default_var; if ( (lambda_slash_no_default_var = lambda_slash_no_default_rule(p)) // lambda_slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_190[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); _res = lambda_slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_190[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default")); } { // lambda_slash_with_default @@ -36789,18 +36730,18 @@ _tmp_191_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); SlashWithDefault* lambda_slash_with_default_var; if ( (lambda_slash_with_default_var = lambda_slash_with_default_rule(p)) // lambda_slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_190[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); _res = lambda_slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_190[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default")); } _res = NULL; @@ -36809,9 +36750,9 @@ _tmp_191_rule(Parser *p) return _res; } -// _loop0_192: lambda_param_maybe_default +// _loop0_191: lambda_param_maybe_default static asdl_seq * -_loop0_192_rule(Parser *p) +_loop0_191_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36836,7 +36777,7 @@ _loop0_192_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -36859,7 +36800,7 @@ _loop0_192_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_192[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_191[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36876,9 +36817,9 @@ _loop0_192_rule(Parser *p) return _seq; } -// _tmp_193: ',' | lambda_param_no_default +// _tmp_192: ',' | lambda_param_no_default static void * -_tmp_193_rule(Parser *p) +_tmp_192_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36894,18 +36835,18 @@ _tmp_193_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // lambda_param_no_default @@ -36913,18 +36854,18 @@ _tmp_193_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_192[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } _res = NULL; @@ -36933,9 +36874,9 @@ _tmp_193_rule(Parser *p) return _res; } -// _loop0_194: lambda_param_maybe_default +// _loop0_193: lambda_param_maybe_default static asdl_seq * -_loop0_194_rule(Parser *p) +_loop0_193_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36960,7 +36901,7 @@ _loop0_194_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -36983,7 +36924,7 @@ _loop0_194_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_194[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_193[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37000,9 +36941,9 @@ _loop0_194_rule(Parser *p) return _seq; } -// _loop1_195: lambda_param_maybe_default +// _loop1_194: lambda_param_maybe_default static asdl_seq * -_loop1_195_rule(Parser *p) +_loop1_194_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37027,7 +36968,7 @@ _loop1_195_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -37050,7 +36991,7 @@ _loop1_195_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_195[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_194[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -37072,9 +37013,9 @@ _loop1_195_rule(Parser *p) return _seq; } -// _loop1_196: lambda_param_with_default +// _loop1_195: lambda_param_with_default static asdl_seq * -_loop1_196_rule(Parser *p) +_loop1_195_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37099,7 +37040,7 @@ _loop1_196_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -37122,7 +37063,7 @@ _loop1_196_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_196[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_195[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -37144,9 +37085,9 @@ _loop1_196_rule(Parser *p) return _seq; } -// _tmp_197: ':' | ',' (':' | '**') +// _tmp_196: ':' | ',' (':' | '**') static void * -_tmp_197_rule(Parser *p) +_tmp_196_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37162,18 +37103,18 @@ _tmp_197_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_196[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_196[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // ',' (':' | '**') @@ -37181,21 +37122,21 @@ _tmp_197_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + D(fprintf(stderr, "%*c> _tmp_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_266_var; + void *_tmp_265_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_266_var = _tmp_266_rule(p)) // ':' | '**' + (_tmp_265_var = _tmp_265_rule(p)) // ':' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_266_var); + D(fprintf(stderr, "%*c+ _tmp_196[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_265_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_196[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')")); } _res = NULL; @@ -37204,9 +37145,9 @@ _tmp_197_rule(Parser *p) return _res; } -// _tmp_198: lambda_param_no_default | ',' +// _tmp_197: lambda_param_no_default | ',' static void * -_tmp_198_rule(Parser *p) +_tmp_197_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37222,18 +37163,18 @@ _tmp_198_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } { // ',' @@ -37241,18 +37182,18 @@ _tmp_198_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -37261,9 +37202,9 @@ _tmp_198_rule(Parser *p) return _res; } -// _loop0_199: lambda_param_maybe_default +// _loop0_198: lambda_param_maybe_default static asdl_seq * -_loop0_199_rule(Parser *p) +_loop0_198_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37288,7 +37229,7 @@ _loop0_199_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -37311,7 +37252,7 @@ _loop0_199_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_199[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_198[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37328,9 +37269,9 @@ _loop0_199_rule(Parser *p) return _seq; } -// _tmp_200: lambda_param_no_default | ',' +// _tmp_199: lambda_param_no_default | ',' static void * -_tmp_200_rule(Parser *p) +_tmp_199_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37346,18 +37287,18 @@ _tmp_200_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } { // ',' @@ -37365,18 +37306,18 @@ _tmp_200_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -37385,9 +37326,9 @@ _tmp_200_rule(Parser *p) return _res; } -// _tmp_201: '*' | '**' | '/' +// _tmp_200: '*' | '**' | '/' static void * -_tmp_201_rule(Parser *p) +_tmp_200_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37403,18 +37344,18 @@ _tmp_201_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' ) { - D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); } { // '**' @@ -37422,18 +37363,18 @@ _tmp_201_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } { // '/' @@ -37441,18 +37382,18 @@ _tmp_201_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 17)) // token='/' ) { - D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'")); } _res = NULL; @@ -37461,9 +37402,9 @@ _tmp_201_rule(Parser *p) return _res; } -// _tmp_202: ',' | ')' | ':' +// _tmp_201: ',' | ')' | ':' static void * -_tmp_202_rule(Parser *p) +_tmp_201_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37479,18 +37420,18 @@ _tmp_202_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -37498,18 +37439,18 @@ _tmp_202_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -37517,18 +37458,18 @@ _tmp_202_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -37537,9 +37478,9 @@ _tmp_202_rule(Parser *p) return _res; } -// _loop0_204: ',' dotted_name +// _loop0_203: ',' dotted_name static asdl_seq * -_loop0_204_rule(Parser *p) +_loop0_203_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37564,7 +37505,7 @@ _loop0_204_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name")); + D(fprintf(stderr, "%*c> _loop0_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name")); Token * _literal; expr_ty elem; while ( @@ -37596,7 +37537,7 @@ _loop0_204_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_204[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_203[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37613,9 +37554,9 @@ _loop0_204_rule(Parser *p) return _seq; } -// _gather_203: dotted_name _loop0_204 +// _gather_202: dotted_name _loop0_203 static asdl_seq * -_gather_203_rule(Parser *p) +_gather_202_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37626,27 +37567,27 @@ _gather_203_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // dotted_name _loop0_204 + { // dotted_name _loop0_203 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_204")); + D(fprintf(stderr, "%*c> _gather_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_203")); expr_ty elem; asdl_seq * seq; if ( (elem = dotted_name_rule(p)) // dotted_name && - (seq = _loop0_204_rule(p)) // _loop0_204 + (seq = _loop0_203_rule(p)) // _loop0_203 ) { - D(fprintf(stderr, "%*c+ _gather_203[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_204")); + D(fprintf(stderr, "%*c+ _gather_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_203")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_203[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_204")); + D(fprintf(stderr, "%*c%s _gather_202[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_203")); } _res = NULL; done: @@ -37654,9 +37595,9 @@ _gather_203_rule(Parser *p) return _res; } -// _loop0_206: ',' (expression ['as' star_target]) +// _loop0_205: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_206_rule(Parser *p) +_loop0_205_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37681,13 +37622,13 @@ _loop0_206_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_206[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_205[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_267_rule(p)) // expression ['as' star_target] + (elem = _tmp_266_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -37713,7 +37654,7 @@ _loop0_206_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_206[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_205[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37730,9 +37671,9 @@ _loop0_206_rule(Parser *p) return _seq; } -// _gather_205: (expression ['as' star_target]) _loop0_206 +// _gather_204: (expression ['as' star_target]) _loop0_205 static asdl_seq * -_gather_205_rule(Parser *p) +_gather_204_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37743,27 +37684,27 @@ _gather_205_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_206 + { // (expression ['as' star_target]) _loop0_205 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_205[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_206")); + D(fprintf(stderr, "%*c> _gather_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_205")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_267_rule(p)) // expression ['as' star_target] + (elem = _tmp_266_rule(p)) // expression ['as' star_target] && - (seq = _loop0_206_rule(p)) // _loop0_206 + (seq = _loop0_205_rule(p)) // _loop0_205 ) { - D(fprintf(stderr, "%*c+ _gather_205[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_206")); + D(fprintf(stderr, "%*c+ _gather_204[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_205")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_205[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_206")); + D(fprintf(stderr, "%*c%s _gather_204[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_205")); } _res = NULL; done: @@ -37771,9 +37712,9 @@ _gather_205_rule(Parser *p) return _res; } -// _loop0_208: ',' (expressions ['as' star_target]) +// _loop0_207: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_208_rule(Parser *p) +_loop0_207_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37798,13 +37739,13 @@ _loop0_208_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_208[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_207[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_268_rule(p)) // expressions ['as' star_target] + (elem = _tmp_267_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -37830,7 +37771,7 @@ _loop0_208_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_208[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_207[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37847,9 +37788,9 @@ _loop0_208_rule(Parser *p) return _seq; } -// _gather_207: (expressions ['as' star_target]) _loop0_208 +// _gather_206: (expressions ['as' star_target]) _loop0_207 static asdl_seq * -_gather_207_rule(Parser *p) +_gather_206_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37860,27 +37801,27 @@ _gather_207_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_208 + { // (expressions ['as' star_target]) _loop0_207 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_207[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_208")); + D(fprintf(stderr, "%*c> _gather_206[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_207")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_268_rule(p)) // expressions ['as' star_target] + (elem = _tmp_267_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_208_rule(p)) // _loop0_208 + (seq = _loop0_207_rule(p)) // _loop0_207 ) { - D(fprintf(stderr, "%*c+ _gather_207[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_208")); + D(fprintf(stderr, "%*c+ _gather_206[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_207")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_207[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_208")); + D(fprintf(stderr, "%*c%s _gather_206[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_207")); } _res = NULL; done: @@ -37888,9 +37829,9 @@ _gather_207_rule(Parser *p) return _res; } -// _loop0_210: ',' (expression ['as' star_target]) +// _loop0_209: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_210_rule(Parser *p) +_loop0_209_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37915,13 +37856,13 @@ _loop0_210_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_210[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_209[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_269_rule(p)) // expression ['as' star_target] + (elem = _tmp_268_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -37947,7 +37888,7 @@ _loop0_210_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_210[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_209[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37964,9 +37905,9 @@ _loop0_210_rule(Parser *p) return _seq; } -// _gather_209: (expression ['as' star_target]) _loop0_210 +// _gather_208: (expression ['as' star_target]) _loop0_209 static asdl_seq * -_gather_209_rule(Parser *p) +_gather_208_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37977,27 +37918,27 @@ _gather_209_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_210 + { // (expression ['as' star_target]) _loop0_209 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_209[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_210")); + D(fprintf(stderr, "%*c> _gather_208[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_209")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_269_rule(p)) // expression ['as' star_target] + (elem = _tmp_268_rule(p)) // expression ['as' star_target] && - (seq = _loop0_210_rule(p)) // _loop0_210 + (seq = _loop0_209_rule(p)) // _loop0_209 ) { - D(fprintf(stderr, "%*c+ _gather_209[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_210")); + D(fprintf(stderr, "%*c+ _gather_208[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_209")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_209[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_210")); + D(fprintf(stderr, "%*c%s _gather_208[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_209")); } _res = NULL; done: @@ -38005,9 +37946,9 @@ _gather_209_rule(Parser *p) return _res; } -// _loop0_212: ',' (expressions ['as' star_target]) +// _loop0_211: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_212_rule(Parser *p) +_loop0_211_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38032,13 +37973,13 @@ _loop0_212_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_212[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_211[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_270_rule(p)) // expressions ['as' star_target] + (elem = _tmp_269_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -38064,7 +38005,7 @@ _loop0_212_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_212[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_211[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38081,9 +38022,9 @@ _loop0_212_rule(Parser *p) return _seq; } -// _gather_211: (expressions ['as' star_target]) _loop0_212 +// _gather_210: (expressions ['as' star_target]) _loop0_211 static asdl_seq * -_gather_211_rule(Parser *p) +_gather_210_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38094,27 +38035,27 @@ _gather_211_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_212 + { // (expressions ['as' star_target]) _loop0_211 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_211[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_212")); + D(fprintf(stderr, "%*c> _gather_210[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_211")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_270_rule(p)) // expressions ['as' star_target] + (elem = _tmp_269_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_212_rule(p)) // _loop0_212 + (seq = _loop0_211_rule(p)) // _loop0_211 ) { - D(fprintf(stderr, "%*c+ _gather_211[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_212")); + D(fprintf(stderr, "%*c+ _gather_210[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_211")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_211[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_212")); + D(fprintf(stderr, "%*c%s _gather_210[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_211")); } _res = NULL; done: @@ -38122,9 +38063,9 @@ _gather_211_rule(Parser *p) return _res; } -// _tmp_213: 'except' | 'finally' +// _tmp_212: 'except' | 'finally' static void * -_tmp_213_rule(Parser *p) +_tmp_212_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38140,18 +38081,18 @@ _tmp_213_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_213[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); + D(fprintf(stderr, "%*c> _tmp_212[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 651)) // token='except' ) { - D(fprintf(stderr, "%*c+ _tmp_213[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); + D(fprintf(stderr, "%*c+ _tmp_212[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_213[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_212[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except'")); } { // 'finally' @@ -38159,18 +38100,18 @@ _tmp_213_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_213[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); + D(fprintf(stderr, "%*c> _tmp_212[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 647)) // token='finally' ) { - D(fprintf(stderr, "%*c+ _tmp_213[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); + D(fprintf(stderr, "%*c+ _tmp_212[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_213[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_212[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally'")); } _res = NULL; @@ -38179,9 +38120,9 @@ _tmp_213_rule(Parser *p) return _res; } -// _loop0_214: block +// _loop0_213: block static asdl_seq * -_loop0_214_rule(Parser *p) +_loop0_213_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38206,7 +38147,7 @@ _loop0_214_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_214[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); + D(fprintf(stderr, "%*c> _loop0_213[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); asdl_stmt_seq* block_var; while ( (block_var = block_rule(p)) // block @@ -38229,7 +38170,7 @@ _loop0_214_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_214[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_213[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38246,9 +38187,9 @@ _loop0_214_rule(Parser *p) return _seq; } -// _loop1_215: except_block +// _loop1_214: except_block static asdl_seq * -_loop1_215_rule(Parser *p) +_loop1_214_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38273,7 +38214,7 @@ _loop1_215_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_215[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); + D(fprintf(stderr, "%*c> _loop1_214[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); excepthandler_ty except_block_var; while ( (except_block_var = except_block_rule(p)) // except_block @@ -38296,7 +38237,7 @@ _loop1_215_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_215[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_214[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block")); } if (_n == 0 || p->error_indicator) { @@ -38318,9 +38259,9 @@ _loop1_215_rule(Parser *p) return _seq; } -// _tmp_216: 'as' NAME +// _tmp_215: 'as' NAME static void * -_tmp_216_rule(Parser *p) +_tmp_215_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38336,7 +38277,7 @@ _tmp_216_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_216[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_215[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38345,12 +38286,12 @@ _tmp_216_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_216[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_215[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_216[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_215[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38359,9 +38300,9 @@ _tmp_216_rule(Parser *p) return _res; } -// _loop0_217: block +// _loop0_216: block static asdl_seq * -_loop0_217_rule(Parser *p) +_loop0_216_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38386,7 +38327,7 @@ _loop0_217_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_217[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); + D(fprintf(stderr, "%*c> _loop0_216[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); asdl_stmt_seq* block_var; while ( (block_var = block_rule(p)) // block @@ -38409,7 +38350,7 @@ _loop0_217_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_217[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_216[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38426,9 +38367,9 @@ _loop0_217_rule(Parser *p) return _seq; } -// _loop1_218: except_star_block +// _loop1_217: except_star_block static asdl_seq * -_loop1_218_rule(Parser *p) +_loop1_217_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38453,7 +38394,7 @@ _loop1_218_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_218[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); + D(fprintf(stderr, "%*c> _loop1_217[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); excepthandler_ty except_star_block_var; while ( (except_star_block_var = except_star_block_rule(p)) // except_star_block @@ -38476,7 +38417,7 @@ _loop1_218_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_218[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_217[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_star_block")); } if (_n == 0 || p->error_indicator) { @@ -38498,9 +38439,9 @@ _loop1_218_rule(Parser *p) return _seq; } -// _tmp_219: expression ['as' NAME] +// _tmp_218: expression ['as' NAME] static void * -_tmp_219_rule(Parser *p) +_tmp_218_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38516,22 +38457,22 @@ _tmp_219_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_219[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); + D(fprintf(stderr, "%*c> _tmp_218[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_271_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_270_rule(p), !p->error_indicator) // ['as' NAME] ) { - D(fprintf(stderr, "%*c+ _tmp_219[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); + D(fprintf(stderr, "%*c+ _tmp_218[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_219[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_218[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' NAME]")); } _res = NULL; @@ -38540,9 +38481,9 @@ _tmp_219_rule(Parser *p) return _res; } -// _tmp_220: 'as' NAME +// _tmp_219: 'as' NAME static void * -_tmp_220_rule(Parser *p) +_tmp_219_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38558,7 +38499,7 @@ _tmp_220_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_220[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_219[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38567,12 +38508,12 @@ _tmp_220_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_220[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_219[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_220[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_219[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38581,9 +38522,9 @@ _tmp_220_rule(Parser *p) return _res; } -// _tmp_221: 'as' NAME +// _tmp_220: 'as' NAME static void * -_tmp_221_rule(Parser *p) +_tmp_220_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38599,7 +38540,7 @@ _tmp_221_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_221[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_220[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38608,12 +38549,12 @@ _tmp_221_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_221[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_220[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_221[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_220[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38622,9 +38563,9 @@ _tmp_221_rule(Parser *p) return _res; } -// _tmp_222: NEWLINE | ':' +// _tmp_221: NEWLINE | ':' static void * -_tmp_222_rule(Parser *p) +_tmp_221_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38640,18 +38581,18 @@ _tmp_222_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_222[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_221[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); Token * newline_var; if ( (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_222[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_221[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_222[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_221[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } { // ':' @@ -38659,18 +38600,18 @@ _tmp_222_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_222[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_221[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_222[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_221[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_222[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_221[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -38679,9 +38620,9 @@ _tmp_222_rule(Parser *p) return _res; } -// _tmp_223: 'as' NAME +// _tmp_222: 'as' NAME static void * -_tmp_223_rule(Parser *p) +_tmp_222_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38697,7 +38638,7 @@ _tmp_223_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_223[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_222[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38706,12 +38647,12 @@ _tmp_223_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_223[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_222[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_223[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_222[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38720,9 +38661,9 @@ _tmp_223_rule(Parser *p) return _res; } -// _tmp_224: 'as' NAME +// _tmp_223: 'as' NAME static void * -_tmp_224_rule(Parser *p) +_tmp_223_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38738,7 +38679,7 @@ _tmp_224_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_224[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_223[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38747,12 +38688,12 @@ _tmp_224_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_224[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_223[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_224[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_223[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38761,9 +38702,9 @@ _tmp_224_rule(Parser *p) return _res; } -// _tmp_225: positional_patterns ',' +// _tmp_224: positional_patterns ',' static void * -_tmp_225_rule(Parser *p) +_tmp_224_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38779,7 +38720,7 @@ _tmp_225_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_225[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); + D(fprintf(stderr, "%*c> _tmp_224[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); Token * _literal; asdl_pattern_seq* positional_patterns_var; if ( @@ -38788,12 +38729,12 @@ _tmp_225_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_225[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); + D(fprintf(stderr, "%*c+ _tmp_224[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); _res = _PyPegen_dummy_name(p, positional_patterns_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_225[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_224[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "positional_patterns ','")); } _res = NULL; @@ -38802,9 +38743,9 @@ _tmp_225_rule(Parser *p) return _res; } -// _tmp_226: '->' expression +// _tmp_225: '->' expression static void * -_tmp_226_rule(Parser *p) +_tmp_225_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38820,7 +38761,7 @@ _tmp_226_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_226[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_225[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty expression_var; if ( @@ -38829,12 +38770,12 @@ _tmp_226_rule(Parser *p) (expression_var = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_226[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c+ _tmp_225[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = _PyPegen_dummy_name(p, _literal, expression_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_226[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_225[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; @@ -38843,9 +38784,9 @@ _tmp_226_rule(Parser *p) return _res; } -// _tmp_227: '(' arguments? ')' +// _tmp_226: '(' arguments? ')' static void * -_tmp_227_rule(Parser *p) +_tmp_226_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38861,7 +38802,7 @@ _tmp_227_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_227[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_226[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *_opt_var; @@ -38874,12 +38815,12 @@ _tmp_227_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_227[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_226[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = _PyPegen_dummy_name(p, _literal, _opt_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_227[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_226[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -38888,9 +38829,9 @@ _tmp_227_rule(Parser *p) return _res; } -// _tmp_228: '(' arguments? ')' +// _tmp_227: '(' arguments? ')' static void * -_tmp_228_rule(Parser *p) +_tmp_227_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38906,7 +38847,7 @@ _tmp_228_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_228[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_227[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *_opt_var; @@ -38919,12 +38860,12 @@ _tmp_228_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_228[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_227[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = _PyPegen_dummy_name(p, _literal, _opt_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_228[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_227[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -38933,9 +38874,9 @@ _tmp_228_rule(Parser *p) return _res; } -// _loop0_230: ',' double_starred_kvpair +// _loop0_229: ',' double_starred_kvpair static asdl_seq * -_loop0_230_rule(Parser *p) +_loop0_229_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38960,7 +38901,7 @@ _loop0_230_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_230[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_229[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; KeyValuePair* elem; while ( @@ -38992,7 +38933,7 @@ _loop0_230_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_230[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_229[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -39009,9 +38950,9 @@ _loop0_230_rule(Parser *p) return _seq; } -// _gather_229: double_starred_kvpair _loop0_230 +// _gather_228: double_starred_kvpair _loop0_229 static asdl_seq * -_gather_229_rule(Parser *p) +_gather_228_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39022,27 +38963,27 @@ _gather_229_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_230 + { // double_starred_kvpair _loop0_229 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_229[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_230")); + D(fprintf(stderr, "%*c> _gather_228[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_229")); KeyValuePair* elem; asdl_seq * seq; if ( (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && - (seq = _loop0_230_rule(p)) // _loop0_230 + (seq = _loop0_229_rule(p)) // _loop0_229 ) { - D(fprintf(stderr, "%*c+ _gather_229[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_230")); + D(fprintf(stderr, "%*c+ _gather_228[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_229")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_229[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_230")); + D(fprintf(stderr, "%*c%s _gather_228[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_229")); } _res = NULL; done: @@ -39050,9 +38991,9 @@ _gather_229_rule(Parser *p) return _res; } -// _tmp_231: '}' | ',' +// _tmp_230: '}' | ',' static void * -_tmp_231_rule(Parser *p) +_tmp_230_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39068,18 +39009,18 @@ _tmp_231_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_230[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_230[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_231[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_230[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -39087,18 +39028,18 @@ _tmp_231_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_230[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_230[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_231[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_230[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -39107,9 +39048,9 @@ _tmp_231_rule(Parser *p) return _res; } -// _tmp_232: '}' | ',' +// _tmp_231: '}' | ',' static void * -_tmp_232_rule(Parser *p) +_tmp_231_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39125,18 +39066,18 @@ _tmp_232_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_232[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_232[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_231[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -39144,18 +39085,18 @@ _tmp_232_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_232[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_232[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_231[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -39164,9 +39105,9 @@ _tmp_232_rule(Parser *p) return _res; } -// _tmp_233: yield_expr | star_expressions +// _tmp_232: yield_expr | star_expressions static void * -_tmp_233_rule(Parser *p) +_tmp_232_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39182,18 +39123,18 @@ _tmp_233_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_232[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_232[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39201,18 +39142,18 @@ _tmp_233_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_232[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_232[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39221,9 +39162,9 @@ _tmp_233_rule(Parser *p) return _res; } -// _tmp_234: yield_expr | star_expressions +// _tmp_233: yield_expr | star_expressions static void * -_tmp_234_rule(Parser *p) +_tmp_233_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39239,18 +39180,18 @@ _tmp_234_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39258,18 +39199,18 @@ _tmp_234_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39278,9 +39219,9 @@ _tmp_234_rule(Parser *p) return _res; } -// _tmp_235: '=' | '!' | ':' | '}' +// _tmp_234: '=' | '!' | ':' | '}' static void * -_tmp_235_rule(Parser *p) +_tmp_234_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39296,18 +39237,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // '!' @@ -39315,18 +39256,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'")); } { // ':' @@ -39334,18 +39275,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -39353,18 +39294,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -39373,9 +39314,9 @@ _tmp_235_rule(Parser *p) return _res; } -// _tmp_236: yield_expr | star_expressions +// _tmp_235: yield_expr | star_expressions static void * -_tmp_236_rule(Parser *p) +_tmp_235_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39391,18 +39332,18 @@ _tmp_236_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39410,18 +39351,18 @@ _tmp_236_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39430,9 +39371,9 @@ _tmp_236_rule(Parser *p) return _res; } -// _tmp_237: '!' | ':' | '}' +// _tmp_236: '!' | ':' | '}' static void * -_tmp_237_rule(Parser *p) +_tmp_236_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39448,18 +39389,18 @@ _tmp_237_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' ) { - D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'")); } { // ':' @@ -39467,18 +39408,18 @@ _tmp_237_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -39486,18 +39427,18 @@ _tmp_237_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -39506,9 +39447,9 @@ _tmp_237_rule(Parser *p) return _res; } -// _tmp_238: yield_expr | star_expressions +// _tmp_237: yield_expr | star_expressions static void * -_tmp_238_rule(Parser *p) +_tmp_237_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39524,18 +39465,18 @@ _tmp_238_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39543,18 +39484,18 @@ _tmp_238_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39563,9 +39504,9 @@ _tmp_238_rule(Parser *p) return _res; } -// _tmp_239: yield_expr | star_expressions +// _tmp_238: yield_expr | star_expressions static void * -_tmp_239_rule(Parser *p) +_tmp_238_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39581,18 +39522,18 @@ _tmp_239_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39600,18 +39541,18 @@ _tmp_239_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39620,9 +39561,9 @@ _tmp_239_rule(Parser *p) return _res; } -// _tmp_240: '!' NAME +// _tmp_239: '!' NAME static void * -_tmp_240_rule(Parser *p) +_tmp_239_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39638,7 +39579,7 @@ _tmp_240_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_240[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -39647,12 +39588,12 @@ _tmp_240_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_240[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_240[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -39661,9 +39602,9 @@ _tmp_240_rule(Parser *p) return _res; } -// _tmp_241: ':' | '}' +// _tmp_240: ':' | '}' static void * -_tmp_241_rule(Parser *p) +_tmp_240_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39679,18 +39620,18 @@ _tmp_241_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_240[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_240[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_240[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -39698,18 +39639,18 @@ _tmp_241_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_240[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_240[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_240[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -39718,9 +39659,9 @@ _tmp_241_rule(Parser *p) return _res; } -// _tmp_242: yield_expr | star_expressions +// _tmp_241: yield_expr | star_expressions static void * -_tmp_242_rule(Parser *p) +_tmp_241_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39736,18 +39677,18 @@ _tmp_242_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_242[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_242[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_242[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39755,18 +39696,18 @@ _tmp_242_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_242[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_242[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_242[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39775,9 +39716,9 @@ _tmp_242_rule(Parser *p) return _res; } -// _tmp_243: '!' NAME +// _tmp_242: '!' NAME static void * -_tmp_243_rule(Parser *p) +_tmp_242_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39793,7 +39734,7 @@ _tmp_243_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_243[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_242[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -39802,12 +39743,12 @@ _tmp_243_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_243[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_242[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_243[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_242[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -39816,9 +39757,9 @@ _tmp_243_rule(Parser *p) return _res; } -// _loop0_244: fstring_format_spec +// _loop0_243: fstring_format_spec static asdl_seq * -_loop0_244_rule(Parser *p) +_loop0_243_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39843,7 +39784,7 @@ _loop0_244_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_244[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); + D(fprintf(stderr, "%*c> _loop0_243[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); expr_ty fstring_format_spec_var; while ( (fstring_format_spec_var = fstring_format_spec_rule(p)) // fstring_format_spec @@ -39866,7 +39807,7 @@ _loop0_244_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_244[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_243[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_format_spec")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -39883,9 +39824,9 @@ _loop0_244_rule(Parser *p) return _seq; } -// _tmp_245: yield_expr | star_expressions +// _tmp_244: yield_expr | star_expressions static void * -_tmp_245_rule(Parser *p) +_tmp_244_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39901,18 +39842,18 @@ _tmp_245_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_245[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_244[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_245[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_244[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_245[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_244[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39920,18 +39861,18 @@ _tmp_245_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_245[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_244[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_245[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_244[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_245[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_244[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39940,9 +39881,9 @@ _tmp_245_rule(Parser *p) return _res; } -// _tmp_246: '!' NAME +// _tmp_245: '!' NAME static void * -_tmp_246_rule(Parser *p) +_tmp_245_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39958,7 +39899,7 @@ _tmp_246_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_246[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_245[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -39967,12 +39908,12 @@ _tmp_246_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_246[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_245[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_246[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_245[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -39981,9 +39922,9 @@ _tmp_246_rule(Parser *p) return _res; } -// _tmp_247: ':' | '}' +// _tmp_246: ':' | '}' static void * -_tmp_247_rule(Parser *p) +_tmp_246_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39999,18 +39940,18 @@ _tmp_247_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_246[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_246[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_246[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -40018,18 +39959,18 @@ _tmp_247_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_246[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_246[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_246[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -40038,9 +39979,9 @@ _tmp_247_rule(Parser *p) return _res; } -// _tmp_248: star_targets '=' +// _tmp_247: star_targets '=' static void * -_tmp_248_rule(Parser *p) +_tmp_247_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40056,7 +39997,7 @@ _tmp_248_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_248[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -40065,7 +40006,7 @@ _tmp_248_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_248[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40075,7 +40016,7 @@ _tmp_248_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_248[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -40084,9 +40025,9 @@ _tmp_248_rule(Parser *p) return _res; } -// _tmp_249: '.' | '...' +// _tmp_248: '.' | '...' static void * -_tmp_249_rule(Parser *p) +_tmp_248_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40102,18 +40043,18 @@ _tmp_249_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_248[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_248[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_248[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -40121,18 +40062,18 @@ _tmp_249_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_248[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_248[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_248[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -40141,9 +40082,9 @@ _tmp_249_rule(Parser *p) return _res; } -// _tmp_250: '.' | '...' +// _tmp_249: '.' | '...' static void * -_tmp_250_rule(Parser *p) +_tmp_249_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40159,18 +40100,18 @@ _tmp_250_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_250[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_250[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_250[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -40178,18 +40119,18 @@ _tmp_250_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_250[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_250[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_250[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -40198,9 +40139,9 @@ _tmp_250_rule(Parser *p) return _res; } -// _tmp_251: '@' named_expression NEWLINE +// _tmp_250: '@' named_expression NEWLINE static void * -_tmp_251_rule(Parser *p) +_tmp_250_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40216,7 +40157,7 @@ _tmp_251_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_251[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_250[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -40228,7 +40169,7 @@ _tmp_251_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_251[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_250[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40238,7 +40179,7 @@ _tmp_251_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_251[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_250[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -40247,9 +40188,9 @@ _tmp_251_rule(Parser *p) return _res; } -// _tmp_252: ',' expression +// _tmp_251: ',' expression static void * -_tmp_252_rule(Parser *p) +_tmp_251_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40265,7 +40206,7 @@ _tmp_252_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_252[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_251[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -40274,7 +40215,7 @@ _tmp_252_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_252[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_251[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40284,7 +40225,7 @@ _tmp_252_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_252[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_251[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -40293,9 +40234,9 @@ _tmp_252_rule(Parser *p) return _res; } -// _tmp_253: ',' star_expression +// _tmp_252: ',' star_expression static void * -_tmp_253_rule(Parser *p) +_tmp_252_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40311,7 +40252,7 @@ _tmp_253_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_253[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_252[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -40320,7 +40261,7 @@ _tmp_253_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_253[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_252[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40330,7 +40271,7 @@ _tmp_253_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_253[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_252[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -40339,9 +40280,9 @@ _tmp_253_rule(Parser *p) return _res; } -// _tmp_254: 'or' conjunction +// _tmp_253: 'or' conjunction static void * -_tmp_254_rule(Parser *p) +_tmp_253_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40357,7 +40298,7 @@ _tmp_254_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_254[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_253[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -40366,7 +40307,7 @@ _tmp_254_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_254[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_253[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40376,7 +40317,7 @@ _tmp_254_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_254[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_253[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -40385,9 +40326,9 @@ _tmp_254_rule(Parser *p) return _res; } -// _tmp_255: 'and' inversion +// _tmp_254: 'and' inversion static void * -_tmp_255_rule(Parser *p) +_tmp_254_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40403,7 +40344,7 @@ _tmp_255_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_255[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_254[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -40412,7 +40353,7 @@ _tmp_255_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_255[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_254[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40422,7 +40363,7 @@ _tmp_255_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_255[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_254[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -40431,9 +40372,9 @@ _tmp_255_rule(Parser *p) return _res; } -// _tmp_256: slice | starred_expression +// _tmp_255: slice | starred_expression static void * -_tmp_256_rule(Parser *p) +_tmp_255_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40449,18 +40390,18 @@ _tmp_256_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice")); + D(fprintf(stderr, "%*c> _tmp_255[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice")); expr_ty slice_var; if ( (slice_var = slice_rule(p)) // slice ) { - D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice")); + D(fprintf(stderr, "%*c+ _tmp_255[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice")); _res = slice_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_255[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice")); } { // starred_expression @@ -40468,18 +40409,18 @@ _tmp_256_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_255[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_255[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_255[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } _res = NULL; @@ -40488,9 +40429,9 @@ _tmp_256_rule(Parser *p) return _res; } -// _tmp_257: fstring | string +// _tmp_256: fstring | string static void * -_tmp_257_rule(Parser *p) +_tmp_256_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40506,18 +40447,18 @@ _tmp_257_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_257[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring")); + D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring")); expr_ty fstring_var; if ( (fstring_var = fstring_rule(p)) // fstring ) { - D(fprintf(stderr, "%*c+ _tmp_257[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring")); + D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring")); _res = fstring_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_257[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring")); } { // string @@ -40525,18 +40466,18 @@ _tmp_257_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_257[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string")); + D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string")); expr_ty string_var; if ( (string_var = string_rule(p)) // string ) { - D(fprintf(stderr, "%*c+ _tmp_257[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string")); + D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string")); _res = string_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_257[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "string")); } _res = NULL; @@ -40545,9 +40486,9 @@ _tmp_257_rule(Parser *p) return _res; } -// _tmp_258: 'if' disjunction +// _tmp_257: 'if' disjunction static void * -_tmp_258_rule(Parser *p) +_tmp_257_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40563,7 +40504,7 @@ _tmp_258_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_258[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_257[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -40572,7 +40513,7 @@ _tmp_258_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_258[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_257[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40582,7 +40523,7 @@ _tmp_258_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_258[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_257[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -40591,9 +40532,9 @@ _tmp_258_rule(Parser *p) return _res; } -// _tmp_259: 'if' disjunction +// _tmp_258: 'if' disjunction static void * -_tmp_259_rule(Parser *p) +_tmp_258_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40609,7 +40550,7 @@ _tmp_259_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_259[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_258[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -40618,7 +40559,7 @@ _tmp_259_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_259[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_258[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40628,7 +40569,7 @@ _tmp_259_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_259[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_258[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -40637,9 +40578,9 @@ _tmp_259_rule(Parser *p) return _res; } -// _tmp_260: starred_expression | (assignment_expression | expression !':=') !'=' +// _tmp_259: starred_expression | (assignment_expression | expression !':=') !'=' static void * -_tmp_260_rule(Parser *p) +_tmp_259_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40655,18 +40596,18 @@ _tmp_260_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_260[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_259[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_260[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_259[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_260[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_259[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // (assignment_expression | expression !':=') !'=' @@ -40674,20 +40615,20 @@ _tmp_260_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_260[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - void *_tmp_272_var; + D(fprintf(stderr, "%*c> _tmp_259[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + void *_tmp_271_var; if ( - (_tmp_272_var = _tmp_272_rule(p)) // assignment_expression | expression !':=' + (_tmp_271_var = _tmp_271_rule(p)) // assignment_expression | expression !':=' && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_260[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - _res = _tmp_272_var; + D(fprintf(stderr, "%*c+ _tmp_259[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + _res = _tmp_271_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_260[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_259[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(assignment_expression | expression !':=') !'='")); } _res = NULL; @@ -40696,9 +40637,9 @@ _tmp_260_rule(Parser *p) return _res; } -// _tmp_261: ',' star_target +// _tmp_260: ',' star_target static void * -_tmp_261_rule(Parser *p) +_tmp_260_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40714,7 +40655,7 @@ _tmp_261_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_261[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_260[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -40723,7 +40664,7 @@ _tmp_261_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_261[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_260[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40733,7 +40674,7 @@ _tmp_261_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_261[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_260[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -40742,9 +40683,9 @@ _tmp_261_rule(Parser *p) return _res; } -// _tmp_262: ',' star_target +// _tmp_261: ',' star_target static void * -_tmp_262_rule(Parser *p) +_tmp_261_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40760,7 +40701,7 @@ _tmp_262_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_262[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_261[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -40769,7 +40710,7 @@ _tmp_262_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_262[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_261[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40779,7 +40720,7 @@ _tmp_262_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_262[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_261[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -40788,9 +40729,9 @@ _tmp_262_rule(Parser *p) return _res; } -// _tmp_263: star_targets '=' +// _tmp_262: star_targets '=' static void * -_tmp_263_rule(Parser *p) +_tmp_262_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40806,7 +40747,7 @@ _tmp_263_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_263[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_262[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -40815,12 +40756,12 @@ _tmp_263_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_263[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_262[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_263[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_262[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -40829,9 +40770,9 @@ _tmp_263_rule(Parser *p) return _res; } -// _tmp_264: star_targets '=' +// _tmp_263: star_targets '=' static void * -_tmp_264_rule(Parser *p) +_tmp_263_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40847,7 +40788,7 @@ _tmp_264_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_264[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_263[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -40856,12 +40797,12 @@ _tmp_264_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_264[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_263[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_264[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_263[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -40870,9 +40811,9 @@ _tmp_264_rule(Parser *p) return _res; } -// _tmp_265: ')' | '**' +// _tmp_264: ')' | '**' static void * -_tmp_265_rule(Parser *p) +_tmp_264_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40888,18 +40829,18 @@ _tmp_265_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_265[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_264[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_265[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_264[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_265[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_264[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -40907,18 +40848,18 @@ _tmp_265_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_265[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_264[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_265[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_264[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_265[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_264[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -40927,9 +40868,9 @@ _tmp_265_rule(Parser *p) return _res; } -// _tmp_266: ':' | '**' +// _tmp_265: ':' | '**' static void * -_tmp_266_rule(Parser *p) +_tmp_265_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40945,18 +40886,18 @@ _tmp_266_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_266[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_265[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_266[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_265[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_266[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_265[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -40964,18 +40905,18 @@ _tmp_266_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_266[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_265[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_266[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_265[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_266[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_265[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -40984,9 +40925,9 @@ _tmp_266_rule(Parser *p) return _res; } -// _tmp_267: expression ['as' star_target] +// _tmp_266: expression ['as' star_target] static void * -_tmp_267_rule(Parser *p) +_tmp_266_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41002,22 +40943,22 @@ _tmp_267_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_267[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_266[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_273_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_272_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_267[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_266[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_267[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_266[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -41026,9 +40967,9 @@ _tmp_267_rule(Parser *p) return _res; } -// _tmp_268: expressions ['as' star_target] +// _tmp_267: expressions ['as' star_target] static void * -_tmp_268_rule(Parser *p) +_tmp_267_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41044,22 +40985,22 @@ _tmp_268_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_268[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_267[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_274_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_273_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_268[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_267[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_268[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_267[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -41068,9 +41009,9 @@ _tmp_268_rule(Parser *p) return _res; } -// _tmp_269: expression ['as' star_target] +// _tmp_268: expression ['as' star_target] static void * -_tmp_269_rule(Parser *p) +_tmp_268_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41086,22 +41027,22 @@ _tmp_269_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_269[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_268[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_275_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_274_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_269[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_268[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_269[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_268[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -41110,9 +41051,9 @@ _tmp_269_rule(Parser *p) return _res; } -// _tmp_270: expressions ['as' star_target] +// _tmp_269: expressions ['as' star_target] static void * -_tmp_270_rule(Parser *p) +_tmp_269_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41128,22 +41069,22 @@ _tmp_270_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_270[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_269[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_276_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_275_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_270[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_269[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_270[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_269[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -41152,9 +41093,9 @@ _tmp_270_rule(Parser *p) return _res; } -// _tmp_271: 'as' NAME +// _tmp_270: 'as' NAME static void * -_tmp_271_rule(Parser *p) +_tmp_270_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41170,7 +41111,7 @@ _tmp_271_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_271[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_270[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -41179,12 +41120,12 @@ _tmp_271_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_271[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_270[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_271[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_270[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -41193,9 +41134,9 @@ _tmp_271_rule(Parser *p) return _res; } -// _tmp_272: assignment_expression | expression !':=' +// _tmp_271: assignment_expression | expression !':=' static void * -_tmp_272_rule(Parser *p) +_tmp_271_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41211,18 +41152,18 @@ _tmp_272_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_272[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c> _tmp_271[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); expr_ty assignment_expression_var; if ( (assignment_expression_var = assignment_expression_rule(p)) // assignment_expression ) { - D(fprintf(stderr, "%*c+ _tmp_272[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c+ _tmp_271[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); _res = assignment_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_272[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_271[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression")); } { // expression !':=' @@ -41230,7 +41171,7 @@ _tmp_272_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_272[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c> _tmp_271[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression @@ -41238,12 +41179,12 @@ _tmp_272_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_272[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c+ _tmp_271[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); _res = expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_272[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_271[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } _res = NULL; @@ -41252,9 +41193,9 @@ _tmp_272_rule(Parser *p) return _res; } -// _tmp_273: 'as' star_target +// _tmp_272: 'as' star_target static void * -_tmp_273_rule(Parser *p) +_tmp_272_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41270,7 +41211,7 @@ _tmp_273_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_273[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_272[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41279,12 +41220,12 @@ _tmp_273_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_273[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_272[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_273[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_272[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41293,9 +41234,9 @@ _tmp_273_rule(Parser *p) return _res; } -// _tmp_274: 'as' star_target +// _tmp_273: 'as' star_target static void * -_tmp_274_rule(Parser *p) +_tmp_273_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41311,7 +41252,7 @@ _tmp_274_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_274[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_273[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41320,12 +41261,12 @@ _tmp_274_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_274[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_273[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_274[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_273[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41334,9 +41275,9 @@ _tmp_274_rule(Parser *p) return _res; } -// _tmp_275: 'as' star_target +// _tmp_274: 'as' star_target static void * -_tmp_275_rule(Parser *p) +_tmp_274_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41352,7 +41293,7 @@ _tmp_275_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_275[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_274[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41361,12 +41302,12 @@ _tmp_275_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_275[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_274[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_275[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_274[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41375,9 +41316,9 @@ _tmp_275_rule(Parser *p) return _res; } -// _tmp_276: 'as' star_target +// _tmp_275: 'as' star_target static void * -_tmp_276_rule(Parser *p) +_tmp_275_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41393,7 +41334,7 @@ _tmp_276_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_276[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_275[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41402,12 +41343,12 @@ _tmp_276_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_276[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_275[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_276[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_275[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41434,8 +41375,6 @@ _PyPegen_parse(Parser *p) result = eval_rule(p); } else if (p->start_rule == Py_func_type_input) { result = func_type_rule(p); - } else if (p->start_rule == Py_fstring_input) { - result = fstring_rule(p); } return result; diff --git a/Parser/pegen_errors.c b/Parser/pegen_errors.c index f4009367673793..b11b0442fe96ff 100644 --- a/Parser/pegen_errors.c +++ b/Parser/pegen_errors.c @@ -310,21 +310,6 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, end_col_offset = p->tok->cur - p->tok->line_start; } - if (p->start_rule == Py_fstring_input) { - const char *fstring_msg = "f-string: "; - Py_ssize_t len = strlen(fstring_msg) + strlen(errmsg); - - char *new_errmsg = PyMem_Malloc(len + 1); // Lengths of both strings plus NULL character - if (!new_errmsg) { - return (void *) PyErr_NoMemory(); - } - - // Copy both strings into new buffer - memcpy(new_errmsg, fstring_msg, strlen(fstring_msg)); - memcpy(new_errmsg + strlen(fstring_msg), errmsg, strlen(errmsg)); - new_errmsg[len] = 0; - errmsg = new_errmsg; - } errstr = PyUnicode_FromFormatV(errmsg, va); if (!errstr) { goto error; @@ -363,11 +348,6 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, } } - if (p->start_rule == Py_fstring_input) { - col_offset -= p->starting_col_offset; - end_col_offset -= p->starting_col_offset; - } - Py_ssize_t col_number = col_offset; Py_ssize_t end_col_number = end_col_offset; @@ -398,17 +378,11 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, Py_DECREF(errstr); Py_DECREF(value); - if (p->start_rule == Py_fstring_input) { - PyMem_Free((void *)errmsg); - } return NULL; error: Py_XDECREF(errstr); Py_XDECREF(error_line); - if (p->start_rule == Py_fstring_input) { - PyMem_Free((void *)errmsg); - } return NULL; } diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 6ec24895785568..46b7159ff0516b 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1642,7 +1642,7 @@ verify_end_of_number(struct tok_state *tok, int c, const char *kind) { tok_nextc(tok); } else /* In future releases, only error will remain. */ - if (is_potential_identifier_char(c)) { + if (c < 128 && is_potential_identifier_char(c)) { tok_backup(tok, c); syntaxerror(tok, "invalid %s literal", kind); return 0; diff --git a/Programs/_bootstrap_python.c b/Programs/_bootstrap_python.c index 6c388fc7033dd0..34f79191b4e8d7 100644 --- a/Programs/_bootstrap_python.c +++ b/Programs/_bootstrap_python.c @@ -15,8 +15,6 @@ #include "Python/frozen_modules/zipimport.h" /* End includes */ -uint32_t _Py_next_func_version = 1; - /* Empty initializer for deepfrozen modules */ int _Py_Deepfreeze_Init(void) { diff --git a/Programs/_freeze_module.c b/Programs/_freeze_module.c index f6c46fa629efba..3de6c6816c1e61 100644 --- a/Programs/_freeze_module.c +++ b/Programs/_freeze_module.c @@ -22,8 +22,6 @@ # include #endif -uint32_t _Py_next_func_version = 1; - /* Empty initializer for deepfrozen modules */ int _Py_Deepfreeze_Init(void) { diff --git a/Programs/_testembed.c b/Programs/_testembed.c index 7ee64b22925f0c..bc991020d0fa77 100644 --- a/Programs/_testembed.c +++ b/Programs/_testembed.c @@ -708,6 +708,10 @@ static int test_init_from_config(void) config.pathconfig_warnings = 0; config.safe_path = 1; +#ifdef Py_STATS + putenv("PYTHONSTATS="); + config._pystats = 1; +#endif putenv("PYTHONINTMAXSTRDIGITS=6666"); config.int_max_str_digits = 31337; @@ -778,6 +782,9 @@ static void set_most_env_vars(void) putenv("PYTHONPLATLIBDIR=env_platlibdir"); putenv("PYTHONSAFEPATH=1"); putenv("PYTHONINTMAXSTRDIGITS=4567"); +#ifdef Py_STATS + putenv("PYTHONSTATS=1"); +#endif } diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h index 3fd6cdade69f9e..4fb78cf632d70e 100644 --- a/Programs/test_frozenmain.h +++ b/Programs/test_frozenmain.h @@ -1,17 +1,17 @@ // Auto-generated by Programs/freeze_test_frozenmain.py unsigned char M_test_frozenmain[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0, - 0,0,0,0,0,243,164,0,0,0,166,0,142,0,142,1, - 121,0,180,0,142,0,142,1,121,1,180,1,153,2,46,0, - 142,2,75,1,0,0,0,0,0,0,44,0,153,2,46,0, - 142,3,153,0,129,6,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,75,2,0,0,0,0,0,0, - 44,0,153,1,129,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,46,0,75,0,0,0,0,0, - 0,0,142,4,12,0,0,0,180,5,142,5,31,0,114,20, - 0,0,180,6,153,2,46,0,142,6,153,6,27,0,142,7, - 153,5,153,6,12,0,0,0,27,0,73,4,75,1,0,0, - 0,0,0,0,44,0,123,22,0,0,24,0,167,1,41,8, + 0,0,0,0,0,243,164,0,0,0,149,0,83,0,83,1, + 75,0,114,0,83,0,83,1,75,1,114,1,92,2,34,0, + 83,2,53,1,0,0,0,0,0,0,32,0,92,2,34,0, + 83,3,92,0,82,6,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,53,2,0,0,0,0,0,0, + 32,0,92,1,82,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,34,0,53,0,0,0,0,0, + 0,0,83,4,5,0,0,0,114,5,83,5,19,0,72,20, + 0,0,114,6,92,2,34,0,83,6,92,6,14,0,83,7, + 92,5,92,6,5,0,0,0,14,0,51,4,53,1,0,0, + 0,0,0,0,32,0,77,22,0,0,11,0,103,1,41,8, 233,0,0,0,0,78,122,18,70,114,111,122,101,110,32,72, 101,108,108,111,32,87,111,114,108,100,122,8,115,121,115,46, 97,114,103,118,218,6,99,111,110,102,105,103,41,5,218,12, diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 77b23f7c5edf23..a197d44868b5aa 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -13081,8 +13081,8 @@ PyObject* PyAST_mod2obj(mod_ty t) if (!tstate) { return 0; } - state->recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; - int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; + state->recursion_limit = Py_C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + int recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; state->recursion_depth = starting_recursion_depth; diff --git a/Python/abstract_interp_cases.c.h b/Python/abstract_interp_cases.c.h index 07e8a711575c5b..5a3848cd726245 100644 --- a/Python/abstract_interp_cases.c.h +++ b/Python/abstract_interp_cases.c.h @@ -7,7 +7,7 @@ break; } - case RESUME: { + case RESUME_CHECK: { break; } @@ -291,13 +291,19 @@ break; } - case _LOAD_LOCALS: { + case LOAD_LOCALS: { STACK_GROW(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case _LOAD_FROM_DICT_OR_GLOBALS: { + case LOAD_FROM_DICT_OR_GLOBALS: { + PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); + break; + } + + case LOAD_NAME: { + STACK_GROW(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } @@ -515,7 +521,7 @@ break; } - case IS_NONE: { + case _IS_NONE: { PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } @@ -655,21 +661,21 @@ break; } - case CALL_NO_KW_TYPE_1: { + case CALL_TYPE_1: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_STR_1: { + case CALL_STR_1: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_TUPLE_1: { + case CALL_TUPLE_1: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); @@ -681,49 +687,70 @@ break; } - case CALL_NO_KW_BUILTIN_O: { + case CALL_BUILTIN_CLASS: { + STACK_SHRINK(oparg); + STACK_SHRINK(1); + PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); + break; + } + + case CALL_BUILTIN_O: { + STACK_SHRINK(oparg); + STACK_SHRINK(1); + PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); + break; + } + + case CALL_BUILTIN_FAST: { + STACK_SHRINK(oparg); + STACK_SHRINK(1); + PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); + break; + } + + case CALL_BUILTIN_FAST_WITH_KEYWORDS: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_BUILTIN_FAST: { + case CALL_LEN: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_LEN: { + case CALL_ISINSTANCE: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_ISINSTANCE: { + case CALL_METHOD_DESCRIPTOR_O: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_METHOD_DESCRIPTOR_O: { + case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS: { + case CALL_METHOD_DESCRIPTOR_NOARGS: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); break; } - case CALL_NO_KW_METHOD_DESCRIPTOR_FAST: { + case CALL_METHOD_DESCRIPTOR_FAST: { STACK_SHRINK(oparg); STACK_SHRINK(1); PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1)), true); @@ -786,23 +813,23 @@ break; } - case JUMP_TO_TOP: { + case _JUMP_TO_TOP: { break; } - case SAVE_IP: { + case _SET_IP: { break; } - case SAVE_CURRENT_IP: { + case _SAVE_CURRENT_IP: { break; } - case EXIT_TRACE: { + case _EXIT_TRACE: { break; } - case INSERT: { + case _INSERT: { PARTITIONNODE_OVERWRITE((_Py_PARTITIONNODE_t *)PARTITIONNODE_NULLROOT, PEEK(-(-1 - oparg)), true); break; } diff --git a/Python/ast.c b/Python/ast.c index 74c97f948d15e6..5f46d4149c2ed0 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -381,6 +381,11 @@ validate_expr(struct validator *state, expr_ty exp, expr_context_ty ctx) ret = validate_exprs(state, exp->v.Tuple.elts, ctx, 0); break; case NamedExpr_kind: + if (exp->v.NamedExpr.target->kind != Name_kind) { + PyErr_SetString(PyExc_TypeError, + "NamedExpr target must be a Name"); + return 0; + } ret = validate_expr(state, exp->v.NamedExpr.value, Load); break; /* This last case doesn't have any checking. */ @@ -768,6 +773,11 @@ validate_stmt(struct validator *state, stmt_ty stmt) validate_expr(state, stmt->v.AnnAssign.annotation, Load); break; case TypeAlias_kind: + if (stmt->v.TypeAlias.name->kind != Name_kind) { + PyErr_SetString(PyExc_TypeError, + "TypeAlias with non-Name name"); + return 0; + } ret = validate_expr(state, stmt->v.TypeAlias.name, Store) && validate_type_params(state, stmt->v.TypeAlias.type_params) && validate_expr(state, stmt->v.TypeAlias.value, Load); @@ -1046,10 +1056,10 @@ _PyAST_Validate(mod_ty mod) return 0; } /* Be careful here to prevent overflow. */ - int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; + int recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; state.recursion_depth = starting_recursion_depth; - state.recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + state.recursion_limit = Py_C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; switch (mod->kind) { case Module_kind: diff --git a/Python/ast_opt.c b/Python/ast_opt.c index 82e7559e5b629a..41f48eba08afc4 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -1130,10 +1130,10 @@ _PyAST_Optimize(mod_ty mod, PyArena *arena, int optimize, int ff_features) return 0; } /* Be careful here to prevent overflow. */ - int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; + int recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; state.recursion_depth = starting_recursion_depth; - state.recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + state.recursion_limit = Py_C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; int ret = astfold_mod(mod, arena, &state); assert(ret || PyErr_Occurred()); diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 971067e2d4fcc1..69056bf23f4058 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1,7 +1,6 @@ /* Built-in functions */ #include "Python.h" -#include #include "pycore_ast.h" // _PyAST_Validate() #include "pycore_call.h" // _PyObject_CallNoArgs() #include "pycore_ceval.h" // _PyEval_Vector() @@ -2084,11 +2083,9 @@ builtin_print_impl(PyObject *module, PyObject *args, PyObject *sep, } if (flush) { - PyObject *tmp = PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); - if (tmp == NULL) { + if (_PyFile_Flush(file) < 0) { return NULL; } - Py_DECREF(tmp); } Py_RETURN_NONE; @@ -2147,11 +2144,9 @@ builtin_input_impl(PyObject *module, PyObject *prompt) } /* First of all, flush stderr */ - tmp = PyObject_CallMethodNoArgs(ferr, &_Py_ID(flush)); - if (tmp == NULL) + if (_PyFile_Flush(ferr) < 0) { PyErr_Clear(); - else - Py_DECREF(tmp); + } /* We should only use (GNU) readline if Python's sys.stdin and sys.stdout are the same as C's stdin and stdout, because we @@ -2219,11 +2214,9 @@ builtin_input_impl(PyObject *module, PyObject *prompt) if (stdin_errors_str == NULL) { goto _readline_errors; } - tmp = PyObject_CallMethodNoArgs(fout, &_Py_ID(flush)); - if (tmp == NULL) + if (_PyFile_Flush(fout) < 0) { PyErr_Clear(); - else - Py_DECREF(tmp); + } if (prompt != NULL) { /* We have a prompt, encode it as stdout would */ const char *stdout_encoding_str, *stdout_errors_str; @@ -2326,11 +2319,9 @@ builtin_input_impl(PyObject *module, PyObject *prompt) if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0) return NULL; } - tmp = PyObject_CallMethodNoArgs(fout, &_Py_ID(flush)); - if (tmp == NULL) + if (_PyFile_Flush(fout) < 0) { PyErr_Clear(); - else - Py_DECREF(tmp); + } return PyFile_GetLine(fin, -1); } diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 7f398391c5dc34..402b27101dbdb6 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -74,7 +74,6 @@ dummy_func( unsigned int oparg, _Py_CODEUNIT *next_instr, PyObject **stack_pointer, - PyObject *kwnames, int throwflag, PyObject *args[] ) @@ -132,24 +131,37 @@ dummy_func( inst(NOP, (--)) { } + family(RESUME, 0) = { + RESUME_CHECK, + }; + inst(RESUME, (--)) { + TIER_ONE_ONLY assert(frame == tstate->current_frame); - /* Possibly combine this with eval breaker */ if (_PyFrame_GetCode(frame)->_co_instrumentation_version != tstate->interp->monitoring_version) { int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); ERROR_IF(err, error); - #if TIER_ONE next_instr--; - #endif - #if TIER_TWO - goto deoptimize; - #endif } - else if (oparg < 2) { - CHECK_EVAL_BREAKER(); + else { + if (oparg < 2) { + CHECK_EVAL_BREAKER(); + } + next_instr[-1].op.code = RESUME_CHECK; } } + inst(RESUME_CHECK, (--)) { +#if defined(__EMSCRIPTEN__) + DEOPT_IF(_Py_emscripten_signal_clock == 0, RESUME); + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; +#endif + /* Possibly combine these two checks */ + DEOPT_IF(_PyFrame_GetCode(frame)->_co_instrumentation_version + != tstate->interp->monitoring_version, RESUME); + DEOPT_IF(_Py_atomic_load_relaxed_int32(&tstate->interp->ceval.eval_breaker), RESUME); + } + inst(INSTRUMENTED_RESUME, (--)) { /* Possible performance enhancement: * We need to check the eval breaker anyway, can we @@ -790,8 +802,8 @@ dummy_func( } macro(RETURN_VALUE) = - SAVE_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SET_IP + // Tier 2 only; special-cased oparg + _SAVE_CURRENT_IP + // Sets frame->prev_instr _POP_FRAME; inst(INSTRUMENTED_RETURN_VALUE, (retval --)) { @@ -815,8 +827,8 @@ dummy_func( macro(RETURN_CONST) = LOAD_CONST + - SAVE_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SET_IP + // Tier 2 only; special-cased oparg + _SAVE_CURRENT_IP + // Sets frame->prev_instr _POP_FRAME; inst(INSTRUMENTED_RETURN_CONST, (--)) { @@ -1273,7 +1285,7 @@ dummy_func( } } - op(_LOAD_LOCALS, ( -- locals)) { + inst(LOAD_LOCALS, ( -- locals)) { locals = LOCALS(); if (locals == NULL) { _PyErr_SetString(tstate, PyExc_SystemError, @@ -1283,15 +1295,11 @@ dummy_func( Py_INCREF(locals); } - macro(LOAD_LOCALS) = _LOAD_LOCALS; - - op(_LOAD_FROM_DICT_OR_GLOBALS, (mod_or_class_dict -- v)) { + inst(LOAD_FROM_DICT_OR_GLOBALS, (mod_or_class_dict -- v)) { PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { - Py_DECREF(mod_or_class_dict); goto error; } - Py_DECREF(mod_or_class_dict); if (v == NULL) { v = PyDict_GetItemWithError(GLOBALS(), name); if (v != NULL) { @@ -1312,11 +1320,41 @@ dummy_func( } } } + DECREF_INPUTS(); } - macro(LOAD_NAME) = _LOAD_LOCALS + _LOAD_FROM_DICT_OR_GLOBALS; - - macro(LOAD_FROM_DICT_OR_GLOBALS) = _LOAD_FROM_DICT_OR_GLOBALS; + inst(LOAD_NAME, (-- v)) { + PyObject *mod_or_class_dict = LOCALS(); + if (mod_or_class_dict == NULL) { + _PyErr_SetString(tstate, PyExc_SystemError, + "no locals found"); + ERROR_IF(true, error); + } + PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { + goto error; + } + if (v == NULL) { + v = PyDict_GetItemWithError(GLOBALS(), name); + if (v != NULL) { + Py_INCREF(v); + } + else if (_PyErr_Occurred(tstate)) { + goto error; + } + else { + if (PyMapping_GetOptionalItem(BUILTINS(), name, &v) < 0) { + goto error; + } + if (v == NULL) { + _PyEval_FormatExcCheckArg( + tstate, PyExc_NameError, + NAME_ERROR_MSG, name); + goto error; + } + } + } + } family(LOAD_GLOBAL, INLINE_CACHE_ENTRIES_LOAD_GLOBAL) = { LOAD_GLOBAL_MODULE, @@ -1561,9 +1599,6 @@ dummy_func( values, 2, values+1, 2, oparg); - if (map == NULL) - goto error; - DECREF_INPUTS(); ERROR_IF(map == NULL, error); } @@ -2207,21 +2242,17 @@ dummy_func( here[1].cache += (1 << OPTIMIZER_BITS_IN_COUNTER); if (here[1].cache > tstate->interp->optimizer_backedge_threshold && // Double-check that the opcode isn't instrumented or something: - here->op.code == JUMP_BACKWARD && - // _PyOptimizer_BackEdge is going to change frame->prev_instr, - // which breaks line event calculations: - next_instr->op.code != INSTRUMENTED_LINE - ) + here->op.code == JUMP_BACKWARD) { OBJECT_STAT_INC(optimization_attempts); - frame = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer); - if (frame == NULL) { - frame = tstate->current_frame; - goto resume_with_error; + int optimized = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer); + ERROR_IF(optimized < 0, error); + if (optimized) { + // Rewind and enter the executor: + assert(here->op.code == ENTER_EXECUTOR); + next_instr = here; } - assert(frame == tstate->current_frame); - here[1].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER) -1); - goto resume_frame; + here[1].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER) - 1); } #endif /* ENABLE_SPECIALIZATION */ } @@ -2253,17 +2284,25 @@ dummy_func( goto resume_frame; } - inst(POP_JUMP_IF_FALSE, (cond -- )) { + inst(POP_JUMP_IF_FALSE, (unused/1, cond -- )) { assert(PyBool_Check(cond)); - JUMPBY(oparg * Py_IsFalse(cond)); + int flag = Py_IsFalse(cond); + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif + JUMPBY(oparg * flag); } - inst(POP_JUMP_IF_TRUE, (cond -- )) { + inst(POP_JUMP_IF_TRUE, (unused/1, cond -- )) { assert(PyBool_Check(cond)); - JUMPBY(oparg * Py_IsTrue(cond)); + int flag = Py_IsTrue(cond); + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif + JUMPBY(oparg * flag); } - op(IS_NONE, (value -- b)) { + op(_IS_NONE, (value -- b)) { if (Py_IsNone(value)) { b = Py_True; } @@ -2273,9 +2312,9 @@ dummy_func( } } - macro(POP_JUMP_IF_NONE) = IS_NONE + POP_JUMP_IF_TRUE; + macro(POP_JUMP_IF_NONE) = _IS_NONE + POP_JUMP_IF_TRUE; - macro(POP_JUMP_IF_NOT_NONE) = IS_NONE + POP_JUMP_IF_FALSE; + macro(POP_JUMP_IF_NOT_NONE) = _IS_NONE + POP_JUMP_IF_FALSE; inst(JUMP_BACKWARD_NO_INTERRUPT, (--)) { /* This bytecode is used in the `yield from` or `await` loop. @@ -2810,12 +2849,6 @@ dummy_func( self = owner; } - inst(KW_NAMES, (--)) { - ASSERT_KWNAMES_IS_NULL(); - assert(oparg < PyTuple_GET_SIZE(FRAME_CO_CONSTS)); - kwnames = GETITEM(FRAME_CO_CONSTS, oparg); - } - inst(INSTRUMENTED_CALL, ( -- )) { int is_meth = PEEK(oparg + 1) != NULL; int total_args = oparg + is_meth; @@ -2832,36 +2865,31 @@ dummy_func( } // Cache layout: counter/1, func_version/2 - // Neither CALL_INTRINSIC_1/2 nor CALL_FUNCTION_EX are members! + // CALL_INTRINSIC_1/2, CALL_KW, and CALL_FUNCTION_EX aren't members! family(CALL, INLINE_CACHE_ENTRIES_CALL) = { CALL_BOUND_METHOD_EXACT_ARGS, CALL_PY_EXACT_ARGS, CALL_PY_WITH_DEFAULTS, - CALL_NO_KW_TYPE_1, - CALL_NO_KW_STR_1, - CALL_NO_KW_TUPLE_1, + CALL_TYPE_1, + CALL_STR_1, + CALL_TUPLE_1, CALL_BUILTIN_CLASS, - CALL_NO_KW_BUILTIN_O, - CALL_NO_KW_BUILTIN_FAST, + CALL_BUILTIN_O, + CALL_BUILTIN_FAST, CALL_BUILTIN_FAST_WITH_KEYWORDS, - CALL_NO_KW_LEN, - CALL_NO_KW_ISINSTANCE, - CALL_NO_KW_LIST_APPEND, - CALL_NO_KW_METHOD_DESCRIPTOR_O, + CALL_LEN, + CALL_ISINSTANCE, + CALL_LIST_APPEND, + CALL_METHOD_DESCRIPTOR_O, CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, - CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS, - CALL_NO_KW_METHOD_DESCRIPTOR_FAST, - CALL_NO_KW_ALLOC_AND_ENTER_INIT, + CALL_METHOD_DESCRIPTOR_NOARGS, + CALL_METHOD_DESCRIPTOR_FAST, + CALL_ALLOC_AND_ENTER_INIT, }; - // On entry, the stack is either - // [NULL, callable, arg1, arg2, ...] - // or - // [method, self, arg1, arg2, ...] - // (Some args may be keywords, see KW_NAMES, which sets 'kwnames'.) - // On exit, the stack is [result]. // When calling Python, inline the call using DISPATCH_INLINED(). inst(CALL, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { + // oparg counts all of the args, but *not* self: int total_args = oparg; if (self_or_null != NULL) { args--; @@ -2871,7 +2899,7 @@ dummy_func( _PyCallCache *cache = (_PyCallCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { next_instr--; - _Py_Specialize_Call(callable, next_instr, total_args, kwnames); + _Py_Specialize_Call(callable, next_instr, total_args); DISPATCH_SAME_OPARG(); } STAT_INC(CALL, deferred); @@ -2887,7 +2915,6 @@ dummy_func( Py_DECREF(callable); callable = method; } - int positional_args = total_args - KWNAMES_LEN(); // Check if the call can be inlined or not if (Py_TYPE(callable) == &PyFunction_Type && tstate->interp->eval_frame == NULL && @@ -2897,9 +2924,8 @@ dummy_func( PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable)); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( tstate, (PyFunctionObject *)callable, locals, - args, positional_args, kwnames + args, total_args, NULL ); - kwnames = NULL; // Manipulate stack directly since we leave using DISPATCH_INLINED(). STACK_SHRINK(oparg + 2); // The frame has stolen all the arguments from the stack, @@ -2914,8 +2940,8 @@ dummy_func( /* Callable is not a normal Python function */ res = PyObject_Vectorcall( callable, args, - positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET, - kwnames); + total_args | PY_VECTORCALL_ARGUMENTS_OFFSET, + NULL); if (opcode == INSTRUMENTED_CALL) { PyObject *arg = total_args == 0 ? &_PyInstrumentation_MISSING : args[0]; @@ -2933,7 +2959,6 @@ dummy_func( } } } - kwnames = NULL; assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); Py_DECREF(callable); for (int i = 0; i < total_args; i++) { @@ -2962,7 +2987,6 @@ dummy_func( } op(_CHECK_FUNCTION_EXACT_ARGS, (func_version/2, callable, self_or_null, unused[oparg] -- callable, self_or_null, unused[oparg])) { - ASSERT_KWNAMES_IS_NULL(); DEOPT_IF(!PyFunction_Check(callable), CALL); PyFunctionObject *func = (PyFunctionObject *)callable; DEOPT_IF(func->func_version != func_version, CALL); @@ -2974,6 +2998,7 @@ dummy_func( PyFunctionObject *func = (PyFunctionObject *)callable; PyCodeObject *code = (PyCodeObject *)func->func_code; DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize), CALL); + DEOPT_IF(tstate->py_recursion_remaining <= 1, CALL); } op(_INIT_CALL_PY_EXACT_ARGS, (callable, self_or_null, args[oparg] -- new_frame: _PyInterpreterFrame*)) { @@ -2998,18 +3023,19 @@ dummy_func( // Eventually this should be the only occurrence of this code. frame->return_offset = 0; assert(tstate->interp->eval_frame == NULL); - _PyFrame_SetStackPointer(frame, stack_pointer); + STORE_SP(); new_frame->previous = frame; CALL_STAT_INC(inlined_py_calls); frame = tstate->current_frame = new_frame; - #if TIER_ONE - goto start_frame; - #endif - #if TIER_TWO - ERROR_IF(_Py_EnterRecursivePy(tstate), exit_unwind); - stack_pointer = _PyFrame_GetStackPointer(frame); - ip_offset = (_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive; - #endif + tstate->py_recursion_remaining--; + LOAD_SP(); + LOAD_IP(); +#if LLTRACE && TIER_ONE + lltrace = maybe_lltrace_resume_frame(frame, &entry_frame, GLOBALS()); + if (lltrace < 0) { + goto exit_unwind; + } +#endif } macro(CALL_BOUND_METHOD_EXACT_ARGS) = @@ -3020,8 +3046,8 @@ dummy_func( _CHECK_FUNCTION_EXACT_ARGS + _CHECK_STACK_SPACE + _INIT_CALL_PY_EXACT_ARGS + - SAVE_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SET_IP + // Tier 2 only; special-cased oparg + _SAVE_CURRENT_IP + // Sets frame->prev_instr _PUSH_FRAME; macro(CALL_PY_EXACT_ARGS) = @@ -3030,12 +3056,11 @@ dummy_func( _CHECK_FUNCTION_EXACT_ARGS + _CHECK_STACK_SPACE + _INIT_CALL_PY_EXACT_ARGS + - SAVE_IP + // Tier 2 only; special-cased oparg - SAVE_CURRENT_IP + // Sets frame->prev_instr + _SET_IP + // Tier 2 only; special-cased oparg + _SAVE_CURRENT_IP + // Sets frame->prev_instr _PUSH_FRAME; inst(CALL_PY_WITH_DEFAULTS, (unused/1, func_version/2, callable, self_or_null, args[oparg] -- unused)) { - ASSERT_KWNAMES_IS_NULL(); DEOPT_IF(tstate->interp->eval_frame, CALL); int argcount = oparg; if (self_or_null != NULL) { @@ -3070,8 +3095,7 @@ dummy_func( DISPATCH_INLINED(new_frame); } - inst(CALL_NO_KW_TYPE_1, (unused/1, unused/2, callable, null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_TYPE_1, (unused/1, unused/2, callable, null, args[oparg] -- res)) { assert(oparg == 1); DEOPT_IF(null != NULL, CALL); PyObject *obj = args[0]; @@ -3082,8 +3106,7 @@ dummy_func( Py_DECREF(&PyType_Type); // I.e., callable } - inst(CALL_NO_KW_STR_1, (unused/1, unused/2, callable, null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_STR_1, (unused/1, unused/2, callable, null, args[oparg] -- res)) { assert(oparg == 1); DEOPT_IF(null != NULL, CALL); DEOPT_IF(callable != (PyObject *)&PyUnicode_Type, CALL); @@ -3096,8 +3119,7 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_TUPLE_1, (unused/1, unused/2, callable, null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_TUPLE_1, (unused/1, unused/2, callable, null, args[oparg] -- res)) { assert(oparg == 1); DEOPT_IF(null != NULL, CALL); DEOPT_IF(callable != (PyObject *)&PyTuple_Type, CALL); @@ -3110,13 +3132,12 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_ALLOC_AND_ENTER_INIT, (unused/1, unused/2, callable, null, args[oparg] -- unused)) { + inst(CALL_ALLOC_AND_ENTER_INIT, (unused/1, unused/2, callable, null, args[oparg] -- unused)) { /* This instruction does the following: * 1. Creates the object (by calling ``object.__new__``) * 2. Pushes a shim frame to the frame stack (to cleanup after ``__init__``) * 3. Pushes the frame for ``__init__`` to the frame stack * */ - ASSERT_KWNAMES_IS_NULL(); _PyCallCache *cache = (_PyCallCache *)next_instr; DEOPT_IF(null != NULL, CALL); DEOPT_IF(!PyType_Check(callable), CALL); @@ -3179,14 +3200,11 @@ dummy_func( args--; total_args++; } - int kwnames_len = KWNAMES_LEN(); DEOPT_IF(!PyType_Check(callable), CALL); PyTypeObject *tp = (PyTypeObject *)callable; DEOPT_IF(tp->tp_vectorcall == NULL, CALL); STAT_INC(CALL, hit); - res = tp->tp_vectorcall((PyObject *)tp, args, - total_args - kwnames_len, kwnames); - kwnames = NULL; + res = tp->tp_vectorcall((PyObject *)tp, args, total_args, NULL); /* Free the arguments. */ for (int i = 0; i < total_args; i++) { Py_DECREF(args[i]); @@ -3196,9 +3214,8 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_BUILTIN_O, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { + inst(CALL_BUILTIN_O, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { /* Builtin METH_O functions */ - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -3225,9 +3242,8 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_BUILTIN_FAST, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { + inst(CALL_BUILTIN_FAST, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { /* Builtin METH_FASTCALL functions, without keywords */ - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -3273,14 +3289,8 @@ dummy_func( _PyCFunctionFastWithKeywords cfunc = (_PyCFunctionFastWithKeywords)(void(*)(void)) PyCFunction_GET_FUNCTION(callable); - res = cfunc( - PyCFunction_GET_SELF(callable), - args, - total_args - KWNAMES_LEN(), - kwnames - ); + res = cfunc(PyCFunction_GET_SELF(callable), args, total_args, NULL); assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); - kwnames = NULL; /* Free the arguments. */ for (int i = 0; i < total_args; i++) { @@ -3291,8 +3301,7 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_LEN, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_LEN, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { /* len(o) */ int total_args = oparg; if (self_or_null != NULL) { @@ -3316,8 +3325,7 @@ dummy_func( ERROR_IF(res == NULL, error); } - inst(CALL_NO_KW_ISINSTANCE, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_ISINSTANCE, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { /* isinstance(o, o2) */ int total_args = oparg; if (self_or_null != NULL) { @@ -3344,8 +3352,7 @@ dummy_func( } // This is secretly a super-instruction - inst(CALL_NO_KW_LIST_APPEND, (unused/1, unused/2, callable, self, args[oparg] -- unused)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_LIST_APPEND, (unused/1, unused/2, callable, self, args[oparg] -- unused)) { assert(oparg == 1); PyInterpreterState *interp = tstate->interp; DEOPT_IF(callable != interp->callable_cache.list_append, CALL); @@ -3364,8 +3371,7 @@ dummy_func( DISPATCH(); } - inst(CALL_NO_KW_METHOD_DESCRIPTOR_O, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_METHOD_DESCRIPTOR_O, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { int total_args = oparg; if (self_or_null != NULL) { args--; @@ -3413,9 +3419,8 @@ dummy_func( int nargs = total_args - 1; _PyCFunctionFastWithKeywords cfunc = (_PyCFunctionFastWithKeywords)(void(*)(void))meth->ml_meth; - res = cfunc(self, args + 1, nargs - KWNAMES_LEN(), kwnames); + res = cfunc(self, args + 1, nargs, NULL); assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); - kwnames = NULL; /* Free the arguments. */ for (int i = 0; i < total_args; i++) { @@ -3426,8 +3431,7 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_METHOD_DESCRIPTOR_NOARGS, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { assert(oparg == 0 || oparg == 1); int total_args = oparg; if (self_or_null != NULL) { @@ -3457,8 +3461,7 @@ dummy_func( CHECK_EVAL_BREAKER(); } - inst(CALL_NO_KW_METHOD_DESCRIPTOR_FAST, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { - ASSERT_KWNAMES_IS_NULL(); + inst(CALL_METHOD_DESCRIPTOR_FAST, (unused/1, unused/2, callable, self_or_null, args[oparg] -- res)) { int total_args = oparg; if (self_or_null != NULL) { args--; @@ -3486,6 +3489,91 @@ dummy_func( CHECK_EVAL_BREAKER(); } + inst(INSTRUMENTED_CALL_KW, ( -- )) { + int is_meth = PEEK(oparg + 2) != NULL; + int total_args = oparg + is_meth; + PyObject *function = PEEK(oparg + 3); + PyObject *arg = total_args == 0 ? &_PyInstrumentation_MISSING + : PEEK(total_args + 1); + int err = _Py_call_instrumentation_2args( + tstate, PY_MONITORING_EVENT_CALL, + frame, next_instr - 1, function, arg); + ERROR_IF(err, error); + GO_TO_INSTRUCTION(CALL_KW); + } + + inst(CALL_KW, (callable, self_or_null, args[oparg], kwnames -- res)) { + // oparg counts all of the args, but *not* self: + int total_args = oparg; + if (self_or_null != NULL) { + args--; + total_args++; + } + if (self_or_null == NULL && Py_TYPE(callable) == &PyMethod_Type) { + args--; + total_args++; + PyObject *self = ((PyMethodObject *)callable)->im_self; + args[0] = Py_NewRef(self); + PyObject *method = ((PyMethodObject *)callable)->im_func; + args[-1] = Py_NewRef(method); + Py_DECREF(callable); + callable = method; + } + int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames); + // Check if the call can be inlined or not + if (Py_TYPE(callable) == &PyFunction_Type && + tstate->interp->eval_frame == NULL && + ((PyFunctionObject *)callable)->vectorcall == _PyFunction_Vectorcall) + { + int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable))->co_flags; + PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable)); + _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( + tstate, (PyFunctionObject *)callable, locals, + args, positional_args, kwnames + ); + Py_DECREF(kwnames); + // Manipulate stack directly since we leave using DISPATCH_INLINED(). + STACK_SHRINK(oparg + 3); + // The frame has stolen all the arguments from the stack, + // so there is no need to clean them up. + if (new_frame == NULL) { + goto error; + } + frame->return_offset = 0; + DISPATCH_INLINED(new_frame); + } + /* Callable is not a normal Python function */ + res = PyObject_Vectorcall( + callable, args, + positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET, + kwnames); + if (opcode == INSTRUMENTED_CALL_KW) { + PyObject *arg = total_args == 0 ? + &_PyInstrumentation_MISSING : args[0]; + if (res == NULL) { + _Py_call_instrumentation_exc2( + tstate, PY_MONITORING_EVENT_C_RAISE, + frame, next_instr-1, callable, arg); + } + else { + int err = _Py_call_instrumentation_2args( + tstate, PY_MONITORING_EVENT_C_RETURN, + frame, next_instr-1, callable, arg); + if (err < 0) { + Py_CLEAR(res); + } + } + } + Py_DECREF(kwnames); + assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); + Py_DECREF(callable); + for (int i = 0; i < total_args; i++) { + Py_DECREF(args[i]); + } + ERROR_IF(res == NULL, error); + CHECK_EVAL_BREAKER(); + } + inst(INSTRUMENTED_CALL_FUNCTION_EX, ( -- )) { GO_TO_INSTRUCTION(CALL_FUNCTION_EX); } @@ -3710,47 +3798,63 @@ dummy_func( INSTRUMENTED_JUMP(next_instr-1, next_instr+1-oparg, PY_MONITORING_EVENT_JUMP); } - inst(INSTRUMENTED_POP_JUMP_IF_TRUE, ( -- )) { + inst(INSTRUMENTED_POP_JUMP_IF_TRUE, (unused/1 -- )) { PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; - int offset = Py_IsTrue(cond) * oparg; + int flag = Py_IsTrue(cond); + int offset = flag * oparg; + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); } - inst(INSTRUMENTED_POP_JUMP_IF_FALSE, ( -- )) { + inst(INSTRUMENTED_POP_JUMP_IF_FALSE, (unused/1 -- )) { PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; - int offset = Py_IsFalse(cond) * oparg; + int flag = Py_IsFalse(cond); + int offset = flag * oparg; + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); } - inst(INSTRUMENTED_POP_JUMP_IF_NONE, ( -- )) { + inst(INSTRUMENTED_POP_JUMP_IF_NONE, (unused/1 -- )) { PyObject *value = POP(); - _Py_CODEUNIT *here = next_instr-1; + _Py_CODEUNIT *here = next_instr - 1; + int flag = Py_IsNone(value); int offset; - if (Py_IsNone(value)) { + if (flag) { offset = oparg; } else { Py_DECREF(value); offset = 0; } + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); } - inst(INSTRUMENTED_POP_JUMP_IF_NOT_NONE, ( -- )) { + inst(INSTRUMENTED_POP_JUMP_IF_NOT_NONE, (unused/1 -- )) { PyObject *value = POP(); _Py_CODEUNIT *here = next_instr-1; int offset; - if (Py_IsNone(value)) { + int nflag = Py_IsNone(value); + if (nflag) { offset = 0; } else { Py_DECREF(value); offset = oparg; } + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | !nflag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); } @@ -3786,33 +3890,33 @@ dummy_func( } } - op(JUMP_TO_TOP, (--)) { + op(_JUMP_TO_TOP, (--)) { pc = 0; CHECK_EVAL_BREAKER(); } - op(SAVE_IP, (--)) { + op(_SET_IP, (--)) { frame->prev_instr = ip_offset + oparg; } - op(SAVE_CURRENT_IP, (--)) { + op(_SAVE_CURRENT_IP, (--)) { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } - op(EXIT_TRACE, (--)) { + op(_EXIT_TRACE, (--)) { frame->prev_instr--; // Back up to just before destination _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(self); return frame; } - op(INSERT, (unused[oparg], top -- top, unused[oparg])) { + op(_INSERT, (unused[oparg], top -- top, unused[oparg])) { // Inserts TOS at position specified by oparg; memmove(&stack_pointer[-1 - oparg], &stack_pointer[-oparg], oparg * sizeof(stack_pointer[0])); } diff --git a/Python/ceval.c b/Python/ceval.c index a22852ec13ea99..cae29e061ce5d3 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -35,9 +35,7 @@ #include "pydtrace.h" #include "setobject.h" - -#include -#include +#include // bool #ifdef Py_DEBUG /* For debugging the interpreter: */ @@ -680,7 +678,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int #endif _PyInterpreterFrame entry_frame; - PyObject *kwnames = NULL; // Borrowed reference. Reset by CALL instructions. @@ -842,7 +839,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int pop_1_error: STACK_SHRINK(1); error: - kwnames = NULL; /* Double-check exception status. */ #ifdef NDEBUG if (!_PyErr_Occurred(tstate)) { @@ -1980,28 +1976,30 @@ do_monitor_exc(PyThreadState *tstate, _PyInterpreterFrame *frame, return err; } -static inline int -no_tools_for_event(PyThreadState *tstate, _PyInterpreterFrame *frame, int event) +static inline bool +no_tools_for_global_event(PyThreadState *tstate, int event) { + return tstate->interp->monitors.tools[event] == 0; +} + +static inline bool +no_tools_for_local_event(PyThreadState *tstate, _PyInterpreterFrame *frame, int event) +{ + assert(event < _PY_MONITORING_LOCAL_EVENTS); _PyCoMonitoringData *data = _PyFrame_GetCode(frame)->_co_monitoring; if (data) { - if (data->active_monitors.tools[event] == 0) { - return 1; - } + return data->active_monitors.tools[event] == 0; } else { - if (tstate->interp->monitors.tools[event] == 0) { - return 1; - } + return no_tools_for_global_event(tstate, event); } - return 0; } static void monitor_raise(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr) { - if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_RAISE)) { + if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_RAISE)) { return; } do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_RAISE); @@ -2011,7 +2009,7 @@ static void monitor_reraise(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr) { - if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_RERAISE)) { + if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_RERAISE)) { return; } do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_RERAISE); @@ -2021,7 +2019,7 @@ static int monitor_stop_iteration(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr) { - if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_STOP_ITERATION)) { + if (no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_STOP_ITERATION)) { return 0; } return do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_STOP_ITERATION); @@ -2032,7 +2030,7 @@ monitor_unwind(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr) { - if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_PY_UNWIND)) { + if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_PY_UNWIND)) { return; } do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_PY_UNWIND); @@ -2044,7 +2042,7 @@ monitor_handled(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *exc) { - if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_EXCEPTION_HANDLED)) { + if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_EXCEPTION_HANDLED)) { return 0; } return _Py_call_instrumentation_arg(tstate, PY_MONITORING_EVENT_EXCEPTION_HANDLED, frame, instr, exc); @@ -2055,7 +2053,7 @@ monitor_throw(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr) { - if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_PY_THROW)) { + if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_PY_THROW)) { return; } do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_PY_THROW); diff --git a/Python/ceval_gil.c b/Python/ceval_gil.c index 7c9ad07cc7207b..ba16f5eb9bfe74 100644 --- a/Python/ceval_gil.c +++ b/Python/ceval_gil.c @@ -2,11 +2,12 @@ #include "Python.h" #include "pycore_atomic.h" // _Py_atomic_int #include "pycore_ceval.h" // _PyEval_SignalReceived() -#include "pycore_pyerrors.h" // _PyErr_GetRaisedException() -#include "pycore_pylifecycle.h" // _PyErr_Print() #include "pycore_initconfig.h" // _PyStatus_OK() #include "pycore_interp.h" // _Py_RunGC() +#include "pycore_pyerrors.h" // _PyErr_GetRaisedException() +#include "pycore_pylifecycle.h" // _PyErr_Print() #include "pycore_pymem.h" // _PyMem_IsPtrFreed() +#include "pycore_pystats.h" // _Py_PrintSpecializationStats() /* Notes about the implementation: @@ -162,16 +163,6 @@ UNSIGNAL_ASYNC_EXC(PyInterpreterState *interp) COMPUTE_EVAL_BREAKER(interp, ceval, ceval2); } -#ifndef NDEBUG -/* Ensure that tstate is valid */ -static int -is_tstate_valid(PyThreadState *tstate) -{ - assert(!_PyMem_IsPtrFreed(tstate)); - assert(!_PyMem_IsPtrFreed(tstate->interp)); - return 1; -} -#endif /* * Implementation of the Global Interpreter Lock (GIL). @@ -324,7 +315,7 @@ drop_gil(struct _ceval_state *ceval, PyThreadState *tstate) /* Not switched yet => wait */ if (((PyThreadState*)_Py_atomic_load_relaxed(&gil->last_holder)) == tstate) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); RESET_GIL_DROP_REQUEST(tstate->interp); /* NOTE: if COND_WAIT does not atomically start waiting when releasing the mutex, another thread can run through, take @@ -338,28 +329,6 @@ drop_gil(struct _ceval_state *ceval, PyThreadState *tstate) } -/* Check if a Python thread must exit immediately, rather than taking the GIL - if Py_Finalize() has been called. - - When this function is called by a daemon thread after Py_Finalize() has been - called, the GIL does no longer exist. - - tstate must be non-NULL. */ -static inline int -tstate_must_exit(PyThreadState *tstate) -{ - /* bpo-39877: Access _PyRuntime directly rather than using - tstate->interp->runtime to support calls from Python daemon threads. - After Py_Finalize() has been called, tstate can be a dangling pointer: - point to PyThreadState freed memory. */ - PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime); - if (finalizing == NULL) { - finalizing = _PyInterpreterState_GetFinalizing(tstate->interp); - } - return (finalizing != NULL && finalizing != tstate); -} - - /* Take the GIL. The function saves errno at entry and restores its value at exit. @@ -375,7 +344,7 @@ take_gil(PyThreadState *tstate) // XXX It may be more correct to check tstate->_status.finalizing. // XXX assert(!tstate->_status.cleared); - if (tstate_must_exit(tstate)) { + if (_PyThreadState_MustExit(tstate)) { /* bpo-39877: If Py_Finalize() has been called and tstate is not the thread which called Py_Finalize(), exit immediately the thread. @@ -385,7 +354,7 @@ take_gil(PyThreadState *tstate) PyThread_exit_thread(); } - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); PyInterpreterState *interp = tstate->interp; struct _ceval_state *ceval = &interp->ceval; struct _gil_runtime_state *gil = ceval->gil; @@ -413,7 +382,7 @@ take_gil(PyThreadState *tstate) _Py_atomic_load_relaxed(&gil->locked) && gil->switch_number == saved_switchnum) { - if (tstate_must_exit(tstate)) { + if (_PyThreadState_MustExit(tstate)) { MUTEX_UNLOCK(gil->mutex); // gh-96387: If the loop requested a drop request in a previous // iteration, reset the request. Otherwise, drop_gil() can @@ -426,7 +395,7 @@ take_gil(PyThreadState *tstate) } PyThread_exit_thread(); } - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); SET_GIL_DROP_REQUEST(interp); drop_requested = 1; @@ -453,7 +422,7 @@ take_gil(PyThreadState *tstate) MUTEX_UNLOCK(gil->switch_mutex); #endif - if (tstate_must_exit(tstate)) { + if (_PyThreadState_MustExit(tstate)) { /* bpo-36475: If Py_Finalize() has been called and tstate is not the thread which called Py_Finalize(), exit immediately the thread. @@ -465,7 +434,7 @@ take_gil(PyThreadState *tstate) drop_gil(ceval, tstate); PyThread_exit_thread(); } - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); if (_Py_atomic_load_relaxed(&ceval->gil_drop_request)) { RESET_GIL_DROP_REQUEST(interp); @@ -678,7 +647,7 @@ PyEval_AcquireThread(PyThreadState *tstate) void PyEval_ReleaseThread(PyThreadState *tstate) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); PyThreadState *new_tstate = _PyThreadState_SwapNoGIL(NULL); if (new_tstate != tstate) { @@ -794,7 +763,7 @@ _PyEval_SignalReceived(PyInterpreterState *interp) /* Push one item onto the queue while holding the lock. */ static int _push_pending_call(struct _pending_calls *pending, - int (*func)(void *), void *arg) + _Py_pending_call_func func, void *arg) { int i = pending->last; int j = (i + 1) % NPENDINGCALLS; @@ -841,7 +810,7 @@ _pop_pending_call(struct _pending_calls *pending, int _PyEval_AddPendingCall(PyInterpreterState *interp, - int (*func)(void *), void *arg, + _Py_pending_call_func func, void *arg, int mainthreadonly) { assert(!mainthreadonly || _Py_IsMainInterpreter(interp)); @@ -865,7 +834,7 @@ _PyEval_AddPendingCall(PyInterpreterState *interp, } int -Py_AddPendingCall(int (*func)(void *), void *arg) +Py_AddPendingCall(_Py_pending_call_func func, void *arg) { /* Legacy users of this API will continue to target the main thread (of the main interpreter). */ @@ -876,7 +845,7 @@ Py_AddPendingCall(int (*func)(void *), void *arg) static int handle_signals(PyThreadState *tstate) { - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); if (!_Py_ThreadCanHandleSignals(tstate->interp)) { return 0; } @@ -909,7 +878,7 @@ _make_pending_calls(struct _pending_calls *pending) { /* perform a bounded number of calls, in case of recursion */ for (int i=0; iinterp) < 0) { PyObject *exc = _PyErr_GetRaisedException(tstate); @@ -1023,7 +992,7 @@ Py_MakePendingCalls(void) assert(PyGILState_Check()); PyThreadState *tstate = _PyThreadState_GET(); - assert(is_tstate_valid(tstate)); + assert(_PyThreadState_CheckConsistency(tstate)); /* Only execute pending calls on the main thread. */ if (!_Py_IsMainThread() || !_Py_IsMainInterpreter(tstate->interp)) { diff --git a/Python/ceval_macros.h b/Python/ceval_macros.h index 4b7c4448e0ea25..012750df387c1c 100644 --- a/Python/ceval_macros.h +++ b/Python/ceval_macros.h @@ -64,7 +64,7 @@ do { \ frame->prev_instr = next_instr++; \ OPCODE_EXE_INC(op); \ - if (_py_stats) _py_stats->opcode_stats[lastopcode].pair_count[op]++; \ + if (_Py_stats) _Py_stats->opcode_stats[lastopcode].pair_count[op]++; \ lastopcode = op; \ } while (0) #else @@ -311,9 +311,6 @@ GETITEM(PyObject *v, Py_ssize_t i) { " in enclosing scope" #define NAME_ERROR_MSG "name '%.200s' is not defined" -#define KWNAMES_LEN() \ - (kwnames == NULL ? 0 : ((int)PyTuple_GET_SIZE(kwnames))) - #define DECREF_INPUTS_AND_REUSE_FLOAT(left, right, dval, result) \ do { \ if (Py_REFCNT(left) == 1) { \ @@ -356,8 +353,6 @@ static const convertion_func_ptr CONVERSION_FUNCTIONS[4] = { [FVC_ASCII] = PyObject_ASCII }; -#define ASSERT_KWNAMES_IS_NULL() assert(kwnames == NULL) - // GH-89279: Force inlining by using a macro. #if defined(_MSC_VER) && SIZEOF_INT == 4 #define _Py_atomic_load_relaxed_int32(ATOMIC_VAL) (assert(sizeof((ATOMIC_VAL)->_value) == 4), *((volatile int*)&((ATOMIC_VAL)->_value))) @@ -374,6 +369,8 @@ static inline void _Py_LeaveRecursiveCallPy(PyThreadState *tstate) { tstate->py_recursion_remaining++; } +/* Marker to specify tier 1 only instructions */ +#define TIER_ONE_ONLY /* Implementation of "macros" that modify the instruction pointer, * stack pointer, or frame pointer. diff --git a/Python/clinic/sysmodule.c.h b/Python/clinic/sysmodule.c.h index a4b39873735fd9..30691c3d08ae67 100644 --- a/Python/clinic/sysmodule.c.h +++ b/Python/clinic/sysmodule.c.h @@ -1120,7 +1120,7 @@ PyDoc_STRVAR(sys__stats_on__doc__, "_stats_on($module, /)\n" "--\n" "\n" -"Turns on stats gathering (stats gathering is on by default)."); +"Turns on stats gathering (stats gathering is off by default)."); #define SYS__STATS_ON_METHODDEF \ {"_stats_on", (PyCFunction)sys__stats_on, METH_NOARGS, sys__stats_on__doc__}, @@ -1142,7 +1142,7 @@ PyDoc_STRVAR(sys__stats_off__doc__, "_stats_off($module, /)\n" "--\n" "\n" -"Turns off stats gathering (stats gathering is on by default)."); +"Turns off stats gathering (stats gathering is off by default)."); #define SYS__STATS_OFF_METHODDEF \ {"_stats_off", (PyCFunction)sys__stats_off, METH_NOARGS, sys__stats_off__doc__}, @@ -1186,18 +1186,30 @@ PyDoc_STRVAR(sys__stats_dump__doc__, "_stats_dump($module, /)\n" "--\n" "\n" -"Dump stats to file, and clears the stats."); +"Dump stats to file, and clears the stats.\n" +"\n" +"Return False if no statistics were not dumped because stats gathering was off."); #define SYS__STATS_DUMP_METHODDEF \ {"_stats_dump", (PyCFunction)sys__stats_dump, METH_NOARGS, sys__stats_dump__doc__}, -static PyObject * +static int sys__stats_dump_impl(PyObject *module); static PyObject * sys__stats_dump(PyObject *module, PyObject *Py_UNUSED(ignored)) { - return sys__stats_dump_impl(module); + PyObject *return_value = NULL; + int _return_value; + + _return_value = sys__stats_dump_impl(module); + if ((_return_value == -1) && PyErr_Occurred()) { + goto exit; + } + return_value = PyBool_FromLong((long)_return_value); + +exit: + return return_value; } #endif /* defined(Py_STATS) */ @@ -1411,4 +1423,4 @@ sys__getframemodulename(PyObject *module, PyObject *const *args, Py_ssize_t narg #ifndef SYS_GETANDROIDAPILEVEL_METHODDEF #define SYS_GETANDROIDAPILEVEL_METHODDEF #endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */ -/*[clinic end generated code: output=6619682ea70e7375 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=549bb1f92a15f916 input=a9049054013a1b77]*/ diff --git a/Python/codecs.c b/Python/codecs.c index 87ae896b8e7718..b79bf555f2f22a 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -14,7 +14,6 @@ Copyright (c) Corporation for National Research Initiatives. #include "pycore_pyerrors.h" // _PyErr_FormatNote() #include "pycore_pystate.h" // _PyInterpreterState_GET() #include "pycore_ucnhash.h" // _PyUnicode_Name_CAPI -#include const char *Py_hexdigits = "0123456789abcdef"; diff --git a/Python/compile.c b/Python/compile.c index 50e29b4607f7ce..1d9ae626677310 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -34,6 +34,7 @@ #include "pycore_flowgraph.h" #include "pycore_intrinsics.h" #include "pycore_long.h" // _PyLong_GetZero() +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #include "pycore_pystate.h" // _Py_GetConfig() #include "pycore_setobject.h" // _PySet_NextEntry() #include "pycore_symtable.h" // PySTEntryObject, _PyFuture_FromAST() @@ -3260,18 +3261,6 @@ compiler_continue(struct compiler *c, location loc) } -static location -location_of_last_executing_statement(asdl_stmt_seq *stmts) -{ - for (Py_ssize_t i = asdl_seq_LEN(stmts) - 1; i >= 0; i++) { - location loc = LOC((stmt_ty)asdl_seq_GET(stmts, i)); - if (loc.lineno > 0) { - return loc; - } - } - return NO_LOCATION; -} - /* Code generated for "try: finally: " is as follows: SETUP_FINALLY L @@ -3340,9 +3329,9 @@ compiler_try_finally(struct compiler *c, stmt_ty s) RETURN_IF_ERROR( compiler_push_fblock(c, loc, FINALLY_END, end, NO_LABEL, NULL)); VISIT_SEQ(c, stmt, s->v.Try.finalbody); - loc = location_of_last_executing_statement(s->v.Try.finalbody); compiler_pop_fblock(c, FINALLY_END, end); + loc = NO_LOCATION; ADDOP_I(c, loc, RERAISE, 0); USE_LABEL(c, cleanup); @@ -3391,9 +3380,9 @@ compiler_try_star_finally(struct compiler *c, stmt_ty s) compiler_push_fblock(c, loc, FINALLY_END, end, NO_LABEL, NULL)); VISIT_SEQ(c, stmt, s->v.TryStar.finalbody); - loc = location_of_last_executing_statement(s->v.Try.finalbody); compiler_pop_fblock(c, FINALLY_END, end); + loc = NO_LOCATION; ADDOP_I(c, loc, RERAISE, 0); USE_LABEL(c, cleanup); @@ -4867,7 +4856,7 @@ load_args_for_super(struct compiler *c, expr_ty e) { // load super() global PyObject *super_name = e->v.Call.func->v.Name.id; - RETURN_IF_ERROR(compiler_nameop(c, loc, super_name, Load)); + RETURN_IF_ERROR(compiler_nameop(c, LOC(e->v.Call.func), super_name, Load)); if (asdl_seq_LEN(e->v.Call.args) == 2) { VISIT(c, expr, asdl_seq_GET(e->v.Call.args, 0)); @@ -4981,9 +4970,13 @@ maybe_optimize_method_call(struct compiler *c, expr_ty e) VISIT_SEQ(c, keyword, kwds); RETURN_IF_ERROR( compiler_call_simple_kw_helper(c, loc, kwds, kwdsl)); + loc = update_start_location_to_match_attr(c, LOC(e), meth); + ADDOP_I(c, loc, CALL_KW, argsl + kwdsl); + } + else { + loc = update_start_location_to_match_attr(c, LOC(e), meth); + ADDOP_I(c, loc, CALL, argsl); } - loc = update_start_location_to_match_attr(c, LOC(e), meth); - ADDOP_I(c, loc, CALL, argsl + kwdsl); return 1; } @@ -5149,7 +5142,7 @@ compiler_subkwargs(struct compiler *c, location loc, } /* Used by compiler_call_helper and maybe_optimize_method_call to emit - * KW_NAMES before CALL. + * a tuple of keyword names before CALL. */ static int compiler_call_simple_kw_helper(struct compiler *c, location loc, @@ -5164,12 +5157,7 @@ compiler_call_simple_kw_helper(struct compiler *c, location loc, keyword_ty kw = asdl_seq_GET(keywords, i); PyTuple_SET_ITEM(names, i, Py_NewRef(kw->arg)); } - Py_ssize_t arg = compiler_add_const(c->c_const_cache, c->u, names); - if (arg < 0) { - return ERROR; - } - Py_DECREF(names); - ADDOP_I(c, loc, KW_NAMES, arg); + ADDOP_LOAD_CONST_NEW(c, loc, names); return SUCCESS; } @@ -5214,8 +5202,11 @@ compiler_call_helper(struct compiler *c, location loc, VISIT_SEQ(c, keyword, keywords); RETURN_IF_ERROR( compiler_call_simple_kw_helper(c, loc, keywords, nkwelts)); + ADDOP_I(c, loc, CALL_KW, n + nelts + nkwelts); + } + else { + ADDOP_I(c, loc, CALL, n + nelts); } - ADDOP_I(c, loc, CALL, n + nelts + nkwelts); return SUCCESS; ex_call: diff --git a/Python/dynload_win.c b/Python/dynload_win.c index acab05e2c6def3..f69995b8f9e3a1 100644 --- a/Python/dynload_win.c +++ b/Python/dynload_win.c @@ -5,13 +5,8 @@ #include "pycore_fileutils.h" // _Py_add_relfile() #include "pycore_pystate.h" // _PyInterpreterState_GET() -#ifdef HAVE_DIRECT_H -#include -#endif -#include - -#include "importdl.h" -#include "patchlevel.h" +#include "importdl.h" // dl_funcptr +#include "patchlevel.h" // PY_MAJOR_VERSION #include #ifdef _DEBUG diff --git a/Python/emscripten_signal.c b/Python/emscripten_signal.c index d617ddfeb37c5a..561b5b73cd6b70 100644 --- a/Python/emscripten_signal.c +++ b/Python/emscripten_signal.c @@ -38,19 +38,17 @@ _Py_CheckEmscriptenSignals(void) } } - #define PY_EMSCRIPTEN_SIGNAL_INTERVAL 50 -static int emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL; +int _Py_emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL; void _Py_CheckEmscriptenSignalsPeriodically(void) { - if (!Py_EMSCRIPTEN_SIGNAL_HANDLING) { - return; - } - emscripten_signal_clock--; - if (emscripten_signal_clock == 0) { - emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL; + if (_Py_emscripten_signal_clock == 0) { + _Py_emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL; _Py_CheckEmscriptenSignals(); } + else if (Py_EMSCRIPTEN_SIGNAL_HANDLING) { + _Py_emscripten_signal_clock--; + } } diff --git a/Python/emscripten_trampoline.c b/Python/emscripten_trampoline.c new file mode 100644 index 00000000000000..2a80ec4f18d757 --- /dev/null +++ b/Python/emscripten_trampoline.c @@ -0,0 +1,82 @@ +#if defined(PY_CALL_TRAMPOLINE) + +#include // EM_JS +#include +#include "pycore_runtime.h" // _PyRuntime + + +/** + * This is the GoogleChromeLabs approved way to feature detect type-reflection: + * https://github.com/GoogleChromeLabs/wasm-feature-detect/blob/main/src/detectors/type-reflection/index.js + */ +EM_JS(int, _PyEM_detect_type_reflection, (), { + return "Function" in WebAssembly; +}); + +void +_Py_EmscriptenTrampoline_Init(_PyRuntimeState *runtime) +{ + runtime->wasm_type_reflection_available = _PyEM_detect_type_reflection(); +} + +/** + * Backwards compatible trampoline works with all JS runtimes + */ +EM_JS(PyObject*, +_PyEM_TrampolineCall_JavaScript, (PyCFunctionWithKeywords func, + PyObject *arg1, + PyObject *arg2, + PyObject *arg3), +{ + return wasmTable.get(func)(arg1, arg2, arg3); +} +); + +/** + * In runtimes with WebAssembly type reflection, count the number of parameters + * and cast to the appropriate signature + */ +EM_JS(int, _PyEM_CountFuncParams, (PyCFunctionWithKeywords func), +{ + let n = _PyEM_CountFuncParams.cache.get(func); + + if (n !== undefined) { + return n; + } + n = WebAssembly.Function.type(wasmTable.get(func)).parameters.length; + _PyEM_CountFuncParams.cache.set(func, n); + return n; +} +_PyEM_CountFuncParams.cache = new Map(); +) + + +typedef PyObject* (*zero_arg)(void); +typedef PyObject* (*one_arg)(PyObject*); +typedef PyObject* (*two_arg)(PyObject*, PyObject*); +typedef PyObject* (*three_arg)(PyObject*, PyObject*, PyObject*); + + +PyObject* +_PyEM_TrampolineCall_Reflection(PyCFunctionWithKeywords func, + PyObject* self, + PyObject* args, + PyObject* kw) +{ + switch (_PyEM_CountFuncParams(func)) { + case 0: + return ((zero_arg)func)(); + case 1: + return ((one_arg)func)(self); + case 2: + return ((two_arg)func)(self, args); + case 3: + return ((three_arg)func)(self, args, kw); + default: + PyErr_SetString(PyExc_SystemError, + "Handler takes too many arguments"); + return NULL; + } +} + +#endif diff --git a/Python/errors.c b/Python/errors.c index fb5b3ff2c7ba51..b05b3ef1dda8fe 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -10,7 +10,6 @@ #include "pycore_sysmodule.h" // _PySys_Audit() #include "pycore_traceback.h" // _PyTraceBack_FromFrame() -#include #ifdef MS_WINDOWS # include # include @@ -1514,11 +1513,9 @@ write_unraisable_exc_file(PyThreadState *tstate, PyObject *exc_type, } /* Explicitly call file.flush() */ - PyObject *res = PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); - if (!res) { + if (_PyFile_Flush(file) < 0) { return -1; } - Py_DECREF(res); return 0; } @@ -1777,13 +1774,11 @@ PyErr_SyntaxLocationObjectEx(PyObject *filename, int lineno, int col_offset, } } if ((PyObject *)Py_TYPE(exc) != PyExc_SyntaxError) { - if (PyObject_GetOptionalAttr(exc, &_Py_ID(msg), &tmp) < 0) { + int rc = PyObject_HasAttrWithError(exc, &_Py_ID(msg)); + if (rc < 0) { _PyErr_Clear(tstate); } - else if (tmp) { - Py_DECREF(tmp); - } - else { + else if (!rc) { tmp = PyObject_Str(exc); if (tmp) { if (PyObject_SetAttr(exc, &_Py_ID(msg), tmp)) { @@ -1796,13 +1791,11 @@ PyErr_SyntaxLocationObjectEx(PyObject *filename, int lineno, int col_offset, } } - if (PyObject_GetOptionalAttr(exc, &_Py_ID(print_file_and_line), &tmp) < 0) { + rc = PyObject_HasAttrWithError(exc, &_Py_ID(print_file_and_line)); + if (rc < 0) { _PyErr_Clear(tstate); } - else if (tmp) { - Py_DECREF(tmp); - } - else { + else if (!rc) { if (PyObject_SetAttr(exc, &_Py_ID(print_file_and_line), Py_None)) { _PyErr_Clear(tstate); } diff --git a/Python/executor.c b/Python/executor.c index 9b3262ed4165f1..ac9104223da8ff 100644 --- a/Python/executor.c +++ b/Python/executor.c @@ -109,7 +109,6 @@ _PyUopExecute(_PyExecutorObject *executor, _PyInterpreterFrame *frame, PyObject pop_2_error: STACK_SHRINK(1); pop_1_error: -pop_1_exit_unwind: STACK_SHRINK(1); error: // On ERROR_IF we return NULL as the frame. diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index e63a36d61579a4..befb972f1e90f5 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -7,22 +7,15 @@ break; } - case RESUME: { - assert(frame == tstate->current_frame); - /* Possibly combine this with eval breaker */ - if (_PyFrame_GetCode(frame)->_co_instrumentation_version != tstate->interp->monitoring_version) { - int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); - if (err) goto error; - #if TIER_ONE - next_instr--; - #endif - #if TIER_TWO - goto deoptimize; - #endif - } - else if (oparg < 2) { - CHECK_EVAL_BREAKER(); - } + case RESUME_CHECK: { +#if defined(__EMSCRIPTEN__) + DEOPT_IF(_Py_emscripten_signal_clock == 0, RESUME); + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; +#endif + /* Possibly combine these two checks */ + DEOPT_IF(_PyFrame_GetCode(frame)->_co_instrumentation_version + != tstate->interp->monitoring_version, RESUME); + DEOPT_IF(_Py_atomic_load_relaxed_int32(&tstate->interp->ceval.eval_breaker), RESUME); break; } @@ -1053,7 +1046,7 @@ break; } - case _LOAD_LOCALS: { + case LOAD_LOCALS: { PyObject *locals; locals = LOCALS(); if (locals == NULL) { @@ -1067,16 +1060,51 @@ break; } - case _LOAD_FROM_DICT_OR_GLOBALS: { + case LOAD_FROM_DICT_OR_GLOBALS: { PyObject *mod_or_class_dict; PyObject *v; mod_or_class_dict = stack_pointer[-1]; PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { - Py_DECREF(mod_or_class_dict); goto error; } + if (v == NULL) { + v = PyDict_GetItemWithError(GLOBALS(), name); + if (v != NULL) { + Py_INCREF(v); + } + else if (_PyErr_Occurred(tstate)) { + goto error; + } + else { + if (PyMapping_GetOptionalItem(BUILTINS(), name, &v) < 0) { + goto error; + } + if (v == NULL) { + _PyEval_FormatExcCheckArg( + tstate, PyExc_NameError, + NAME_ERROR_MSG, name); + goto error; + } + } + } Py_DECREF(mod_or_class_dict); + stack_pointer[-1] = v; + break; + } + + case LOAD_NAME: { + PyObject *v; + PyObject *mod_or_class_dict = LOCALS(); + if (mod_or_class_dict == NULL) { + _PyErr_SetString(tstate, PyExc_SystemError, + "no locals found"); + if (true) goto error; + } + PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { + goto error; + } if (v == NULL) { v = PyDict_GetItemWithError(GLOBALS(), name); if (v != NULL) { @@ -1097,6 +1125,7 @@ } } } + STACK_GROW(1); stack_pointer[-1] = v; break; } @@ -1404,9 +1433,6 @@ values, 2, values+1, 2, oparg); - if (map == NULL) - goto error; - for (int _i = oparg*2; --_i >= 0;) { Py_DECREF(values[_i]); } @@ -1873,7 +1899,7 @@ break; } - case IS_NONE: { + case _IS_NONE: { PyObject *value; PyObject *b; value = stack_pointer[-1]; @@ -2230,7 +2256,6 @@ self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; uint32_t func_version = (uint32_t)operand; - ASSERT_KWNAMES_IS_NULL(); DEOPT_IF(!PyFunction_Check(callable), CALL); PyFunctionObject *func = (PyFunctionObject *)callable; DEOPT_IF(func->func_version != func_version, CALL); @@ -2245,6 +2270,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable; PyCodeObject *code = (PyCodeObject *)func->func_code; DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize), CALL); + DEOPT_IF(tstate->py_recursion_remaining <= 1, CALL); break; } @@ -2281,22 +2307,23 @@ // Eventually this should be the only occurrence of this code. frame->return_offset = 0; assert(tstate->interp->eval_frame == NULL); - _PyFrame_SetStackPointer(frame, stack_pointer); + STORE_SP(); new_frame->previous = frame; CALL_STAT_INC(inlined_py_calls); frame = tstate->current_frame = new_frame; - #if TIER_ONE - goto start_frame; - #endif - #if TIER_TWO - if (_Py_EnterRecursivePy(tstate)) goto pop_1_exit_unwind; - stack_pointer = _PyFrame_GetStackPointer(frame); - ip_offset = (_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive; - #endif + tstate->py_recursion_remaining--; + LOAD_SP(); + LOAD_IP(); +#if LLTRACE && TIER_ONE + lltrace = maybe_lltrace_resume_frame(frame, &entry_frame, GLOBALS()); + if (lltrace < 0) { + goto exit_unwind; + } +#endif break; } - case CALL_NO_KW_TYPE_1: { + case CALL_TYPE_1: { PyObject **args; PyObject *null; PyObject *callable; @@ -2304,7 +2331,6 @@ args = stack_pointer - oparg; null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); PyObject *obj = args[0]; @@ -2319,7 +2345,7 @@ break; } - case CALL_NO_KW_STR_1: { + case CALL_STR_1: { PyObject **args; PyObject *null; PyObject *callable; @@ -2327,7 +2353,6 @@ args = stack_pointer - oparg; null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); DEOPT_IF(callable != (PyObject *)&PyUnicode_Type, CALL); @@ -2344,7 +2369,7 @@ break; } - case CALL_NO_KW_TUPLE_1: { + case CALL_TUPLE_1: { PyObject **args; PyObject *null; PyObject *callable; @@ -2352,7 +2377,6 @@ args = stack_pointer - oparg; null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); DEOPT_IF(callable != (PyObject *)&PyTuple_Type, CALL); @@ -2383,7 +2407,38 @@ break; } - case CALL_NO_KW_BUILTIN_O: { + case CALL_BUILTIN_CLASS: { + PyObject **args; + PyObject *self_or_null; + PyObject *callable; + PyObject *res; + args = stack_pointer - oparg; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + int total_args = oparg; + if (self_or_null != NULL) { + args--; + total_args++; + } + DEOPT_IF(!PyType_Check(callable), CALL); + PyTypeObject *tp = (PyTypeObject *)callable; + DEOPT_IF(tp->tp_vectorcall == NULL, CALL); + STAT_INC(CALL, hit); + res = tp->tp_vectorcall((PyObject *)tp, args, total_args, NULL); + /* Free the arguments. */ + for (int i = 0; i < total_args; i++) { + Py_DECREF(args[i]); + } + Py_DECREF(tp); + if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } + STACK_SHRINK(oparg); + STACK_SHRINK(1); + stack_pointer[-1] = res; + CHECK_EVAL_BREAKER(); + break; + } + + case CALL_BUILTIN_O: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2392,7 +2447,6 @@ self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; /* Builtin METH_O functions */ - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -2423,7 +2477,7 @@ break; } - case CALL_NO_KW_BUILTIN_FAST: { + case CALL_BUILTIN_FAST: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2432,7 +2486,6 @@ self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; /* Builtin METH_FASTCALL functions, without keywords */ - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -2467,7 +2520,45 @@ break; } - case CALL_NO_KW_LEN: { + case CALL_BUILTIN_FAST_WITH_KEYWORDS: { + PyObject **args; + PyObject *self_or_null; + PyObject *callable; + PyObject *res; + args = stack_pointer - oparg; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + /* Builtin METH_FASTCALL | METH_KEYWORDS functions */ + int total_args = oparg; + if (self_or_null != NULL) { + args--; + total_args++; + } + DEOPT_IF(!PyCFunction_CheckExact(callable), CALL); + DEOPT_IF(PyCFunction_GET_FLAGS(callable) != + (METH_FASTCALL | METH_KEYWORDS), CALL); + STAT_INC(CALL, hit); + /* res = func(self, args, nargs, kwnames) */ + _PyCFunctionFastWithKeywords cfunc = + (_PyCFunctionFastWithKeywords)(void(*)(void)) + PyCFunction_GET_FUNCTION(callable); + res = cfunc(PyCFunction_GET_SELF(callable), args, total_args, NULL); + assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); + + /* Free the arguments. */ + for (int i = 0; i < total_args; i++) { + Py_DECREF(args[i]); + } + Py_DECREF(callable); + if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } + STACK_SHRINK(oparg); + STACK_SHRINK(1); + stack_pointer[-1] = res; + CHECK_EVAL_BREAKER(); + break; + } + + case CALL_LEN: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2475,7 +2566,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); /* len(o) */ int total_args = oparg; if (self_or_null != NULL) { @@ -2503,7 +2593,7 @@ break; } - case CALL_NO_KW_ISINSTANCE: { + case CALL_ISINSTANCE: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2511,7 +2601,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); /* isinstance(o, o2) */ int total_args = oparg; if (self_or_null != NULL) { @@ -2541,7 +2630,7 @@ break; } - case CALL_NO_KW_METHOD_DESCRIPTOR_O: { + case CALL_METHOD_DESCRIPTOR_O: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2549,7 +2638,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -2584,7 +2672,47 @@ break; } - case CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS: { + case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS: { + PyObject **args; + PyObject *self_or_null; + PyObject *callable; + PyObject *res; + args = stack_pointer - oparg; + self_or_null = stack_pointer[-1 - oparg]; + callable = stack_pointer[-2 - oparg]; + int total_args = oparg; + if (self_or_null != NULL) { + args--; + total_args++; + } + PyMethodDescrObject *method = (PyMethodDescrObject *)callable; + DEOPT_IF(!Py_IS_TYPE(method, &PyMethodDescr_Type), CALL); + PyMethodDef *meth = method->d_method; + DEOPT_IF(meth->ml_flags != (METH_FASTCALL|METH_KEYWORDS), CALL); + PyTypeObject *d_type = method->d_common.d_type; + PyObject *self = args[0]; + DEOPT_IF(!Py_IS_TYPE(self, d_type), CALL); + STAT_INC(CALL, hit); + int nargs = total_args - 1; + _PyCFunctionFastWithKeywords cfunc = + (_PyCFunctionFastWithKeywords)(void(*)(void))meth->ml_meth; + res = cfunc(self, args + 1, nargs, NULL); + assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); + + /* Free the arguments. */ + for (int i = 0; i < total_args; i++) { + Py_DECREF(args[i]); + } + Py_DECREF(callable); + if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } + STACK_SHRINK(oparg); + STACK_SHRINK(1); + stack_pointer[-1] = res; + CHECK_EVAL_BREAKER(); + break; + } + + case CALL_METHOD_DESCRIPTOR_NOARGS: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2592,7 +2720,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 0 || oparg == 1); int total_args = oparg; if (self_or_null != NULL) { @@ -2626,7 +2753,7 @@ break; } - case CALL_NO_KW_METHOD_DESCRIPTOR_FAST: { + case CALL_METHOD_DESCRIPTOR_FAST: { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -2634,7 +2761,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -2856,29 +2982,29 @@ break; } - case JUMP_TO_TOP: { + case _JUMP_TO_TOP: { pc = 0; CHECK_EVAL_BREAKER(); break; } - case SAVE_IP: { + case _SET_IP: { frame->prev_instr = ip_offset + oparg; break; } - case SAVE_CURRENT_IP: { + case _SAVE_CURRENT_IP: { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif break; } - case EXIT_TRACE: { + case _EXIT_TRACE: { frame->prev_instr--; // Back up to just before destination _PyFrame_SetStackPointer(frame, stack_pointer); Py_DECREF(self); @@ -2886,7 +3012,7 @@ break; } - case INSERT: { + case _INSERT: { PyObject *top; top = stack_pointer[-1]; // Inserts TOS at position specified by oparg; diff --git a/Python/flowgraph.c b/Python/flowgraph.c index 55b871dd627364..adfcef33895a53 100644 --- a/Python/flowgraph.c +++ b/Python/flowgraph.c @@ -261,8 +261,8 @@ dump_instr(cfg_instr *i) if (HAS_TARGET(i->i_opcode)) { sprintf(arg, "target: %p [%d] ", i->i_target, i->i_oparg); } - fprintf(stderr, "line: %d, opcode: %d %s%s\n", - i->i_loc.lineno, i->i_opcode, arg, jump); + fprintf(stderr, "line: %d, %s (%d) %s%s\n", + i->i_loc.lineno, _PyOpcode_OpName[i->i_opcode], i->i_opcode, arg, jump); } static inline int @@ -575,16 +575,23 @@ check_cfg(cfg_builder *g) { return SUCCESS; } -/* Calculate the actual jump target from the target_label */ static int -translate_jump_labels_to_targets(basicblock *entryblock) +get_max_label(basicblock *entryblock) { - int max_label = -1; + int lbl = -1; for (basicblock *b = entryblock; b != NULL; b = b->b_next) { - if (b->b_label.id > max_label) { - max_label = b->b_label.id; + if (b->b_label.id > lbl) { + lbl = b->b_label.id; } } + return lbl; +} + +/* Calculate the actual jump target from the target_label */ +static int +translate_jump_labels_to_targets(basicblock *entryblock) +{ + int max_label = get_max_label(entryblock); size_t mapsize = sizeof(basicblock *) * (max_label + 1); basicblock **label2block = (basicblock **)PyMem_Malloc(mapsize); if (!label2block) { @@ -1624,8 +1631,6 @@ optimize_basic_block(PyObject *const_cache, basicblock *bb, PyObject *consts) INSTR_SET_OP0(inst, NOP); } break; - case KW_NAMES: - break; case LOAD_GLOBAL: if (nextop == PUSH_NULL && (oparg & 1) == 0) { INSTR_SET_OP1(inst, LOAD_GLOBAL, oparg | 1); @@ -2128,6 +2133,8 @@ push_cold_blocks_to_end(cfg_builder *g) { } RETURN_IF_ERROR(mark_cold(entryblock)); + int next_lbl = get_max_label(g->g_entryblock) + 1; + /* If we have a cold block with fallthrough to a warm block, add */ /* an explicit jump instead of fallthrough */ for (basicblock *b = entryblock; b != NULL; b = b->b_next) { @@ -2136,6 +2143,9 @@ push_cold_blocks_to_end(cfg_builder *g) { if (explicit_jump == NULL) { return ERROR; } + if (!IS_LABEL(b->b_next->b_label)) { + b->b_next->b_label.id = next_lbl++; + } basicblock_addop(explicit_jump, JUMP, b->b_next->b_label.id, NO_LOCATION); explicit_jump->b_cold = 1; explicit_jump->b_next = b->b_next; @@ -2231,6 +2241,7 @@ is_exit_without_lineno(basicblock *b) { return true; } + /* PEP 626 mandates that the f_lineno of a frame is correct * after a frame terminates. It would be prohibitively expensive * to continuously update the f_lineno field at runtime, @@ -2244,6 +2255,9 @@ static int duplicate_exits_without_lineno(cfg_builder *g) { assert(no_empty_basic_blocks(g)); + + int next_lbl = get_max_label(g->g_entryblock) + 1; + /* Copy all exit blocks without line number that are targets of a jump. */ basicblock *entryblock = g->g_entryblock; @@ -2262,6 +2276,7 @@ duplicate_exits_without_lineno(cfg_builder *g) target->b_predecessors--; new_target->b_predecessors = 1; new_target->b_next = target->b_next; + new_target->b_label.id = next_lbl++; target->b_next = new_target; } } @@ -2663,4 +2678,3 @@ _PyCfg_OptimizedCfgToInstructionSequence(cfg_builder *g, return SUCCESS; } - diff --git a/Python/frozen.c b/Python/frozen.c index 6b977710e6e342..0fb38a11902f35 100644 --- a/Python/frozen.c +++ b/Python/frozen.c @@ -101,46 +101,46 @@ extern PyObject *_Py_get_frozen_only_toplevel(void); /* End extern declarations */ static const struct _frozen bootstrap_modules[] = { - {"_frozen_importlib", _Py_M__importlib__bootstrap, (int)sizeof(_Py_M__importlib__bootstrap), false, GET_CODE(importlib__bootstrap)}, - {"_frozen_importlib_external", _Py_M__importlib__bootstrap_external, (int)sizeof(_Py_M__importlib__bootstrap_external), false, GET_CODE(importlib__bootstrap_external)}, - {"zipimport", _Py_M__zipimport, (int)sizeof(_Py_M__zipimport), false, GET_CODE(zipimport)}, + {"_frozen_importlib", _Py_M__importlib__bootstrap, (int)sizeof(_Py_M__importlib__bootstrap), false}, + {"_frozen_importlib_external", _Py_M__importlib__bootstrap_external, (int)sizeof(_Py_M__importlib__bootstrap_external), false}, + {"zipimport", _Py_M__zipimport, (int)sizeof(_Py_M__zipimport), false}, {0, 0, 0} /* bootstrap sentinel */ }; static const struct _frozen stdlib_modules[] = { /* stdlib - startup, without site (python -S) */ - {"abc", _Py_M__abc, (int)sizeof(_Py_M__abc), false, GET_CODE(abc)}, - {"codecs", _Py_M__codecs, (int)sizeof(_Py_M__codecs), false, GET_CODE(codecs)}, - {"io", _Py_M__io, (int)sizeof(_Py_M__io), false, GET_CODE(io)}, + {"abc", _Py_M__abc, (int)sizeof(_Py_M__abc), false}, + {"codecs", _Py_M__codecs, (int)sizeof(_Py_M__codecs), false}, + {"io", _Py_M__io, (int)sizeof(_Py_M__io), false}, /* stdlib - startup, with site */ - {"_collections_abc", _Py_M___collections_abc, (int)sizeof(_Py_M___collections_abc), false, GET_CODE(_collections_abc)}, - {"_sitebuiltins", _Py_M___sitebuiltins, (int)sizeof(_Py_M___sitebuiltins), false, GET_CODE(_sitebuiltins)}, - {"genericpath", _Py_M__genericpath, (int)sizeof(_Py_M__genericpath), false, GET_CODE(genericpath)}, - {"ntpath", _Py_M__ntpath, (int)sizeof(_Py_M__ntpath), false, GET_CODE(ntpath)}, - {"posixpath", _Py_M__posixpath, (int)sizeof(_Py_M__posixpath), false, GET_CODE(posixpath)}, - {"os.path", _Py_M__posixpath, (int)sizeof(_Py_M__posixpath), false, GET_CODE(posixpath)}, - {"os", _Py_M__os, (int)sizeof(_Py_M__os), false, GET_CODE(os)}, - {"site", _Py_M__site, (int)sizeof(_Py_M__site), false, GET_CODE(site)}, - {"stat", _Py_M__stat, (int)sizeof(_Py_M__stat), false, GET_CODE(stat)}, + {"_collections_abc", _Py_M___collections_abc, (int)sizeof(_Py_M___collections_abc), false}, + {"_sitebuiltins", _Py_M___sitebuiltins, (int)sizeof(_Py_M___sitebuiltins), false}, + {"genericpath", _Py_M__genericpath, (int)sizeof(_Py_M__genericpath), false}, + {"ntpath", _Py_M__ntpath, (int)sizeof(_Py_M__ntpath), false}, + {"posixpath", _Py_M__posixpath, (int)sizeof(_Py_M__posixpath), false}, + {"os.path", _Py_M__posixpath, (int)sizeof(_Py_M__posixpath), false}, + {"os", _Py_M__os, (int)sizeof(_Py_M__os), false}, + {"site", _Py_M__site, (int)sizeof(_Py_M__site), false}, + {"stat", _Py_M__stat, (int)sizeof(_Py_M__stat), false}, /* runpy - run module with -m */ - {"importlib.util", _Py_M__importlib_util, (int)sizeof(_Py_M__importlib_util), false, GET_CODE(importlib_util)}, - {"importlib.machinery", _Py_M__importlib_machinery, (int)sizeof(_Py_M__importlib_machinery), false, GET_CODE(importlib_machinery)}, - {"runpy", _Py_M__runpy, (int)sizeof(_Py_M__runpy), false, GET_CODE(runpy)}, + {"importlib.util", _Py_M__importlib_util, (int)sizeof(_Py_M__importlib_util), false}, + {"importlib.machinery", _Py_M__importlib_machinery, (int)sizeof(_Py_M__importlib_machinery), false}, + {"runpy", _Py_M__runpy, (int)sizeof(_Py_M__runpy), false}, {0, 0, 0} /* stdlib sentinel */ }; static const struct _frozen test_modules[] = { - {"__hello__", _Py_M____hello__, (int)sizeof(_Py_M____hello__), false, GET_CODE(__hello__)}, - {"__hello_alias__", _Py_M____hello__, (int)sizeof(_Py_M____hello__), false, GET_CODE(__hello__)}, - {"__phello_alias__", _Py_M____hello__, (int)sizeof(_Py_M____hello__), true, GET_CODE(__hello__)}, - {"__phello_alias__.spam", _Py_M____hello__, (int)sizeof(_Py_M____hello__), false, GET_CODE(__hello__)}, - {"__phello__", _Py_M____phello__, (int)sizeof(_Py_M____phello__), true, GET_CODE(__phello__)}, - {"__phello__.__init__", _Py_M____phello__, (int)sizeof(_Py_M____phello__), false, GET_CODE(__phello__)}, - {"__phello__.ham", _Py_M____phello___ham, (int)sizeof(_Py_M____phello___ham), true, GET_CODE(__phello___ham)}, - {"__phello__.ham.__init__", _Py_M____phello___ham, (int)sizeof(_Py_M____phello___ham), false, GET_CODE(__phello___ham)}, - {"__phello__.ham.eggs", _Py_M____phello___ham_eggs, (int)sizeof(_Py_M____phello___ham_eggs), false, GET_CODE(__phello___ham_eggs)}, - {"__phello__.spam", _Py_M____phello___spam, (int)sizeof(_Py_M____phello___spam), false, GET_CODE(__phello___spam)}, - {"__hello_only__", _Py_M__frozen_only, (int)sizeof(_Py_M__frozen_only), false, GET_CODE(frozen_only)}, + {"__hello__", _Py_M____hello__, (int)sizeof(_Py_M____hello__), false}, + {"__hello_alias__", _Py_M____hello__, (int)sizeof(_Py_M____hello__), false}, + {"__phello_alias__", _Py_M____hello__, (int)sizeof(_Py_M____hello__), true}, + {"__phello_alias__.spam", _Py_M____hello__, (int)sizeof(_Py_M____hello__), false}, + {"__phello__", _Py_M____phello__, (int)sizeof(_Py_M____phello__), true}, + {"__phello__.__init__", _Py_M____phello__, (int)sizeof(_Py_M____phello__), false}, + {"__phello__.ham", _Py_M____phello___ham, (int)sizeof(_Py_M____phello___ham), true}, + {"__phello__.ham.__init__", _Py_M____phello___ham, (int)sizeof(_Py_M____phello___ham), false}, + {"__phello__.ham.eggs", _Py_M____phello___ham_eggs, (int)sizeof(_Py_M____phello___ham_eggs), false}, + {"__phello__.spam", _Py_M____phello___spam, (int)sizeof(_Py_M____phello___spam), false}, + {"__hello_only__", _Py_M__frozen_only, (int)sizeof(_Py_M__frozen_only), false}, {0, 0, 0} /* test sentinel */ }; const struct _frozen *_PyImport_FrozenBootstrap = bootstrap_modules; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index a7bf20b9d1c7f6..ebb87a86de432e 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -8,24 +8,36 @@ } TARGET(RESUME) { + PREDICTED(RESUME); + static_assert(0 == 0, "incorrect cache size"); + TIER_ONE_ONLY assert(frame == tstate->current_frame); - /* Possibly combine this with eval breaker */ if (_PyFrame_GetCode(frame)->_co_instrumentation_version != tstate->interp->monitoring_version) { int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp); if (err) goto error; - #if TIER_ONE next_instr--; - #endif - #if TIER_TWO - goto deoptimize; - #endif } - else if (oparg < 2) { - CHECK_EVAL_BREAKER(); + else { + if (oparg < 2) { + CHECK_EVAL_BREAKER(); + } + next_instr[-1].op.code = RESUME_CHECK; } DISPATCH(); } + TARGET(RESUME_CHECK) { +#if defined(__EMSCRIPTEN__) + DEOPT_IF(_Py_emscripten_signal_clock == 0, RESUME); + _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING; +#endif + /* Possibly combine these two checks */ + DEOPT_IF(_PyFrame_GetCode(frame)->_co_instrumentation_version + != tstate->interp->monitoring_version, RESUME); + DEOPT_IF(_Py_atomic_load_relaxed_int32(&tstate->interp->ceval.eval_breaker), RESUME); + DISPATCH(); + } + TARGET(INSTRUMENTED_RESUME) { /* Possible performance enhancement: * We need to check the eval breaker anyway, can we @@ -791,7 +803,6 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_BINARY_SUBSCR); frame->return_offset = 0; DISPATCH_INLINED(new_frame); - STACK_SHRINK(1); } TARGET(LIST_APPEND) { @@ -957,7 +968,6 @@ break; } if (true) { STACK_SHRINK(oparg); goto error; } - STACK_SHRINK(oparg); } TARGET(INTERPRETER_EXIT) { @@ -970,18 +980,17 @@ assert(!_PyErr_Occurred(tstate)); tstate->c_recursion_remaining += PY_EVAL_C_STACK_UNITS; return retval; - STACK_SHRINK(1); } TARGET(RETURN_VALUE) { PyObject *retval; - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -1032,7 +1041,6 @@ frame->prev_instr += frame->return_offset; _PyFrame_StackPush(frame, retval); goto resume_frame; - STACK_SHRINK(1); } TARGET(RETURN_CONST) { @@ -1043,13 +1051,13 @@ value = GETITEM(FRAME_CO_CONSTS, oparg); Py_INCREF(value); } - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -1376,7 +1384,6 @@ _PyErr_SetRaisedException(tstate, exc); monitor_reraise(tstate, frame, next_instr-1); goto exception_unwind; - STACK_SHRINK(1); } TARGET(END_ASYNC_FOR) { @@ -1663,65 +1670,51 @@ DISPATCH(); } - TARGET(LOAD_NAME) { - PyObject *locals; + TARGET(LOAD_FROM_DICT_OR_GLOBALS) { PyObject *mod_or_class_dict; PyObject *v; - // _LOAD_LOCALS - { - locals = LOCALS(); - if (locals == NULL) { - _PyErr_SetString(tstate, PyExc_SystemError, - "no locals found"); - if (true) goto error; - } - Py_INCREF(locals); + mod_or_class_dict = stack_pointer[-1]; + PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); + if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { + goto error; } - // _LOAD_FROM_DICT_OR_GLOBALS - mod_or_class_dict = locals; - { - PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); - if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { - Py_DECREF(mod_or_class_dict); + if (v == NULL) { + v = PyDict_GetItemWithError(GLOBALS(), name); + if (v != NULL) { + Py_INCREF(v); + } + else if (_PyErr_Occurred(tstate)) { goto error; } - Py_DECREF(mod_or_class_dict); - if (v == NULL) { - v = PyDict_GetItemWithError(GLOBALS(), name); - if (v != NULL) { - Py_INCREF(v); - } - else if (_PyErr_Occurred(tstate)) { + else { + if (PyMapping_GetOptionalItem(BUILTINS(), name, &v) < 0) { goto error; } - else { - if (PyMapping_GetOptionalItem(BUILTINS(), name, &v) < 0) { - goto error; - } - if (v == NULL) { - _PyEval_FormatExcCheckArg( - tstate, PyExc_NameError, - NAME_ERROR_MSG, name); - goto error; - } + if (v == NULL) { + _PyEval_FormatExcCheckArg( + tstate, PyExc_NameError, + NAME_ERROR_MSG, name); + goto error; } } } - STACK_GROW(1); + Py_DECREF(mod_or_class_dict); stack_pointer[-1] = v; DISPATCH(); } - TARGET(LOAD_FROM_DICT_OR_GLOBALS) { - PyObject *mod_or_class_dict; + TARGET(LOAD_NAME) { PyObject *v; - mod_or_class_dict = stack_pointer[-1]; + PyObject *mod_or_class_dict = LOCALS(); + if (mod_or_class_dict == NULL) { + _PyErr_SetString(tstate, PyExc_SystemError, + "no locals found"); + if (true) goto error; + } PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); if (PyMapping_GetOptionalItem(mod_or_class_dict, name, &v) < 0) { - Py_DECREF(mod_or_class_dict); goto error; } - Py_DECREF(mod_or_class_dict); if (v == NULL) { v = PyDict_GetItemWithError(GLOBALS(), name); if (v != NULL) { @@ -1742,6 +1735,7 @@ } } } + STACK_GROW(1); stack_pointer[-1] = v; DISPATCH(); } @@ -2078,9 +2072,6 @@ values, 2, values+1, 2, oparg); - if (map == NULL) - goto error; - for (int _i = oparg*2; --_i >= 0;) { Py_DECREF(values[_i]); } @@ -2214,8 +2205,6 @@ // don't want to specialize instrumented instructions INCREMENT_ADAPTIVE_COUNTER(cache->counter); GO_TO_INSTRUCTION(LOAD_SUPER_ATTR); - STACK_SHRINK(2); - STACK_GROW(((oparg & 1) ? 1 : 0)); } TARGET(LOAD_SUPER_ATTR) { @@ -2956,21 +2945,17 @@ here[1].cache += (1 << OPTIMIZER_BITS_IN_COUNTER); if (here[1].cache > tstate->interp->optimizer_backedge_threshold && // Double-check that the opcode isn't instrumented or something: - here->op.code == JUMP_BACKWARD && - // _PyOptimizer_BackEdge is going to change frame->prev_instr, - // which breaks line event calculations: - next_instr->op.code != INSTRUMENTED_LINE - ) + here->op.code == JUMP_BACKWARD) { OBJECT_STAT_INC(optimization_attempts); - frame = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer); - if (frame == NULL) { - frame = tstate->current_frame; - goto resume_with_error; + int optimized = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer); + if (optimized < 0) goto error; + if (optimized) { + // Rewind and enter the executor: + assert(here->op.code == ENTER_EXECUTOR); + next_instr = here; } - assert(frame == tstate->current_frame); - here[1].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER) -1); - goto resume_frame; + here[1].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER) - 1); } #endif /* ENABLE_SPECIALIZATION */ DISPATCH(); @@ -2997,8 +2982,13 @@ PyObject *cond; cond = stack_pointer[-1]; assert(PyBool_Check(cond)); - JUMPBY(oparg * Py_IsFalse(cond)); + int flag = Py_IsFalse(cond); + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif + JUMPBY(oparg * flag); STACK_SHRINK(1); + next_instr += 1; DISPATCH(); } @@ -3006,8 +2996,13 @@ PyObject *cond; cond = stack_pointer[-1]; assert(PyBool_Check(cond)); - JUMPBY(oparg * Py_IsTrue(cond)); + int flag = Py_IsTrue(cond); + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif + JUMPBY(oparg * flag); STACK_SHRINK(1); + next_instr += 1; DISPATCH(); } @@ -3015,7 +3010,7 @@ PyObject *value; PyObject *b; PyObject *cond; - // IS_NONE + // _IS_NONE value = stack_pointer[-1]; { if (Py_IsNone(value)) { @@ -3030,9 +3025,14 @@ cond = b; { assert(PyBool_Check(cond)); - JUMPBY(oparg * Py_IsTrue(cond)); + int flag = Py_IsTrue(cond); + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif + JUMPBY(oparg * flag); } STACK_SHRINK(1); + next_instr += 1; DISPATCH(); } @@ -3040,7 +3040,7 @@ PyObject *value; PyObject *b; PyObject *cond; - // IS_NONE + // _IS_NONE value = stack_pointer[-1]; { if (Py_IsNone(value)) { @@ -3055,9 +3055,14 @@ cond = b; { assert(PyBool_Check(cond)); - JUMPBY(oparg * Py_IsFalse(cond)); + int flag = Py_IsFalse(cond); + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif + JUMPBY(oparg * flag); } STACK_SHRINK(1); + next_instr += 1; DISPATCH(); } @@ -3406,7 +3411,6 @@ next_instr[oparg].op.code == INSTRUMENTED_END_FOR); frame->return_offset = oparg; DISPATCH_INLINED(gen_frame); - STACK_GROW(1); } TARGET(BEFORE_ASYNC_WITH) { @@ -3680,13 +3684,6 @@ DISPATCH(); } - TARGET(KW_NAMES) { - ASSERT_KWNAMES_IS_NULL(); - assert(oparg < PyTuple_GET_SIZE(FRAME_CO_CONSTS)); - kwnames = GETITEM(FRAME_CO_CONSTS, oparg); - DISPATCH(); - } - TARGET(INSTRUMENTED_CALL) { int is_meth = PEEK(oparg + 1) != NULL; int total_args = oparg + is_meth; @@ -3712,6 +3709,7 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; + // oparg counts all of the args, but *not* self: int total_args = oparg; if (self_or_null != NULL) { args--; @@ -3721,7 +3719,7 @@ _PyCallCache *cache = (_PyCallCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { next_instr--; - _Py_Specialize_Call(callable, next_instr, total_args, kwnames); + _Py_Specialize_Call(callable, next_instr, total_args); DISPATCH_SAME_OPARG(); } STAT_INC(CALL, deferred); @@ -3737,7 +3735,6 @@ Py_DECREF(callable); callable = method; } - int positional_args = total_args - KWNAMES_LEN(); // Check if the call can be inlined or not if (Py_TYPE(callable) == &PyFunction_Type && tstate->interp->eval_frame == NULL && @@ -3747,9 +3744,8 @@ PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable)); _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( tstate, (PyFunctionObject *)callable, locals, - args, positional_args, kwnames + args, total_args, NULL ); - kwnames = NULL; // Manipulate stack directly since we leave using DISPATCH_INLINED(). STACK_SHRINK(oparg + 2); // The frame has stolen all the arguments from the stack, @@ -3764,8 +3760,8 @@ /* Callable is not a normal Python function */ res = PyObject_Vectorcall( callable, args, - positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET, - kwnames); + total_args | PY_VECTORCALL_ARGUMENTS_OFFSET, + NULL); if (opcode == INSTRUMENTED_CALL) { PyObject *arg = total_args == 0 ? &_PyInstrumentation_MISSING : args[0]; @@ -3783,7 +3779,6 @@ } } } - kwnames = NULL; assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); Py_DECREF(callable); for (int i = 0; i < total_args; i++) { @@ -3831,7 +3826,6 @@ callable = func; { uint32_t func_version = read_u32(&next_instr[1].cache); - ASSERT_KWNAMES_IS_NULL(); DEOPT_IF(!PyFunction_Check(callable), CALL); PyFunctionObject *func = (PyFunctionObject *)callable; DEOPT_IF(func->func_version != func_version, CALL); @@ -3843,6 +3837,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable; PyCodeObject *code = (PyCodeObject *)func->func_code; DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize), CALL); + DEOPT_IF(tstate->py_recursion_remaining <= 1, CALL); } // _INIT_CALL_PY_EXACT_ARGS args = stack_pointer - oparg; @@ -3859,14 +3854,14 @@ new_frame->localsplus[i] = args[i]; } } - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP next_instr += 3; { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -3878,18 +3873,19 @@ // Eventually this should be the only occurrence of this code. frame->return_offset = 0; assert(tstate->interp->eval_frame == NULL); - _PyFrame_SetStackPointer(frame, stack_pointer); + STORE_SP(); new_frame->previous = frame; CALL_STAT_INC(inlined_py_calls); frame = tstate->current_frame = new_frame; - #if TIER_ONE - goto start_frame; - #endif - #if TIER_TWO - if (_Py_EnterRecursivePy(tstate)) goto pop_1_exit_unwind; - stack_pointer = _PyFrame_GetStackPointer(frame); - ip_offset = (_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive; - #endif + tstate->py_recursion_remaining--; + LOAD_SP(); + LOAD_IP(); + #if LLTRACE && TIER_ONE + lltrace = maybe_lltrace_resume_frame(frame, &entry_frame, GLOBALS()); + if (lltrace < 0) { + goto exit_unwind; + } + #endif } DISPATCH(); } @@ -3908,7 +3904,6 @@ callable = stack_pointer[-2 - oparg]; { uint32_t func_version = read_u32(&next_instr[1].cache); - ASSERT_KWNAMES_IS_NULL(); DEOPT_IF(!PyFunction_Check(callable), CALL); PyFunctionObject *func = (PyFunctionObject *)callable; DEOPT_IF(func->func_version != func_version, CALL); @@ -3920,6 +3915,7 @@ PyFunctionObject *func = (PyFunctionObject *)callable; PyCodeObject *code = (PyCodeObject *)func->func_code; DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize), CALL); + DEOPT_IF(tstate->py_recursion_remaining <= 1, CALL); } // _INIT_CALL_PY_EXACT_ARGS args = stack_pointer - oparg; @@ -3936,14 +3932,14 @@ new_frame->localsplus[i] = args[i]; } } - // SAVE_CURRENT_IP + // _SAVE_CURRENT_IP next_instr += 3; { #if TIER_ONE frame->prev_instr = next_instr - 1; #endif #if TIER_TWO - // Relies on a preceding SAVE_IP + // Relies on a preceding _SET_IP frame->prev_instr--; #endif } @@ -3955,18 +3951,19 @@ // Eventually this should be the only occurrence of this code. frame->return_offset = 0; assert(tstate->interp->eval_frame == NULL); - _PyFrame_SetStackPointer(frame, stack_pointer); + STORE_SP(); new_frame->previous = frame; CALL_STAT_INC(inlined_py_calls); frame = tstate->current_frame = new_frame; - #if TIER_ONE - goto start_frame; - #endif - #if TIER_TWO - if (_Py_EnterRecursivePy(tstate)) goto pop_1_exit_unwind; - stack_pointer = _PyFrame_GetStackPointer(frame); - ip_offset = (_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive; - #endif + tstate->py_recursion_remaining--; + LOAD_SP(); + LOAD_IP(); + #if LLTRACE && TIER_ONE + lltrace = maybe_lltrace_resume_frame(frame, &entry_frame, GLOBALS()); + if (lltrace < 0) { + goto exit_unwind; + } + #endif } DISPATCH(); } @@ -3979,7 +3976,6 @@ self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; uint32_t func_version = read_u32(&next_instr[1].cache); - ASSERT_KWNAMES_IS_NULL(); DEOPT_IF(tstate->interp->eval_frame, CALL); int argcount = oparg; if (self_or_null != NULL) { @@ -4012,11 +4008,9 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_CALL); frame->return_offset = 0; DISPATCH_INLINED(new_frame); - STACK_SHRINK(oparg); - STACK_SHRINK(1); } - TARGET(CALL_NO_KW_TYPE_1) { + TARGET(CALL_TYPE_1) { PyObject **args; PyObject *null; PyObject *callable; @@ -4024,7 +4018,6 @@ args = stack_pointer - oparg; null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); PyObject *obj = args[0]; @@ -4040,7 +4033,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_STR_1) { + TARGET(CALL_STR_1) { PyObject **args; PyObject *null; PyObject *callable; @@ -4048,7 +4041,6 @@ args = stack_pointer - oparg; null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); DEOPT_IF(callable != (PyObject *)&PyUnicode_Type, CALL); @@ -4066,7 +4058,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_TUPLE_1) { + TARGET(CALL_TUPLE_1) { PyObject **args; PyObject *null; PyObject *callable; @@ -4074,7 +4066,6 @@ args = stack_pointer - oparg; null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); DEOPT_IF(callable != (PyObject *)&PyTuple_Type, CALL); @@ -4092,7 +4083,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_ALLOC_AND_ENTER_INIT) { + TARGET(CALL_ALLOC_AND_ENTER_INIT) { PyObject **args; PyObject *null; PyObject *callable; @@ -4104,7 +4095,6 @@ * 2. Pushes a shim frame to the frame stack (to cleanup after ``__init__``) * 3. Pushes the frame for ``__init__`` to the frame stack * */ - ASSERT_KWNAMES_IS_NULL(); _PyCallCache *cache = (_PyCallCache *)next_instr; DEOPT_IF(null != NULL, CALL); DEOPT_IF(!PyType_Check(callable), CALL); @@ -4149,8 +4139,6 @@ * as it will be checked after start_frame */ tstate->py_recursion_remaining--; goto start_frame; - STACK_SHRINK(oparg); - STACK_SHRINK(1); } TARGET(EXIT_INIT_CHECK) { @@ -4180,14 +4168,11 @@ args--; total_args++; } - int kwnames_len = KWNAMES_LEN(); DEOPT_IF(!PyType_Check(callable), CALL); PyTypeObject *tp = (PyTypeObject *)callable; DEOPT_IF(tp->tp_vectorcall == NULL, CALL); STAT_INC(CALL, hit); - res = tp->tp_vectorcall((PyObject *)tp, args, - total_args - kwnames_len, kwnames); - kwnames = NULL; + res = tp->tp_vectorcall((PyObject *)tp, args, total_args, NULL); /* Free the arguments. */ for (int i = 0; i < total_args; i++) { Py_DECREF(args[i]); @@ -4202,7 +4187,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_BUILTIN_O) { + TARGET(CALL_BUILTIN_O) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4211,7 +4196,6 @@ self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; /* Builtin METH_O functions */ - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -4243,7 +4227,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_BUILTIN_FAST) { + TARGET(CALL_BUILTIN_FAST) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4252,7 +4236,6 @@ self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; /* Builtin METH_FASTCALL functions, without keywords */ - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -4310,14 +4293,8 @@ _PyCFunctionFastWithKeywords cfunc = (_PyCFunctionFastWithKeywords)(void(*)(void)) PyCFunction_GET_FUNCTION(callable); - res = cfunc( - PyCFunction_GET_SELF(callable), - args, - total_args - KWNAMES_LEN(), - kwnames - ); + res = cfunc(PyCFunction_GET_SELF(callable), args, total_args, NULL); assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); - kwnames = NULL; /* Free the arguments. */ for (int i = 0; i < total_args; i++) { @@ -4333,7 +4310,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_LEN) { + TARGET(CALL_LEN) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4341,7 +4318,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); /* len(o) */ int total_args = oparg; if (self_or_null != NULL) { @@ -4370,7 +4346,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_ISINSTANCE) { + TARGET(CALL_ISINSTANCE) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4378,7 +4354,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); /* isinstance(o, o2) */ int total_args = oparg; if (self_or_null != NULL) { @@ -4409,14 +4384,13 @@ DISPATCH(); } - TARGET(CALL_NO_KW_LIST_APPEND) { + TARGET(CALL_LIST_APPEND) { PyObject **args; PyObject *self; PyObject *callable; args = stack_pointer - oparg; self = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 1); PyInterpreterState *interp = tstate->interp; DEOPT_IF(callable != interp->callable_cache.list_append, CALL); @@ -4433,11 +4407,9 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_CALL + 1); assert(next_instr[-1].op.code == POP_TOP); DISPATCH(); - STACK_SHRINK(oparg); - STACK_SHRINK(1); } - TARGET(CALL_NO_KW_METHOD_DESCRIPTOR_O) { + TARGET(CALL_METHOD_DESCRIPTOR_O) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4445,7 +4417,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -4505,9 +4476,8 @@ int nargs = total_args - 1; _PyCFunctionFastWithKeywords cfunc = (_PyCFunctionFastWithKeywords)(void(*)(void))meth->ml_meth; - res = cfunc(self, args + 1, nargs - KWNAMES_LEN(), kwnames); + res = cfunc(self, args + 1, nargs, NULL); assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); - kwnames = NULL; /* Free the arguments. */ for (int i = 0; i < total_args; i++) { @@ -4523,7 +4493,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS) { + TARGET(CALL_METHOD_DESCRIPTOR_NOARGS) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4531,7 +4501,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); assert(oparg == 0 || oparg == 1); int total_args = oparg; if (self_or_null != NULL) { @@ -4566,7 +4535,7 @@ DISPATCH(); } - TARGET(CALL_NO_KW_METHOD_DESCRIPTOR_FAST) { + TARGET(CALL_METHOD_DESCRIPTOR_FAST) { PyObject **args; PyObject *self_or_null; PyObject *callable; @@ -4574,7 +4543,6 @@ args = stack_pointer - oparg; self_or_null = stack_pointer[-1 - oparg]; callable = stack_pointer[-2 - oparg]; - ASSERT_KWNAMES_IS_NULL(); int total_args = oparg; if (self_or_null != NULL) { args--; @@ -4607,6 +4575,105 @@ DISPATCH(); } + TARGET(INSTRUMENTED_CALL_KW) { + int is_meth = PEEK(oparg + 2) != NULL; + int total_args = oparg + is_meth; + PyObject *function = PEEK(oparg + 3); + PyObject *arg = total_args == 0 ? &_PyInstrumentation_MISSING + : PEEK(total_args + 1); + int err = _Py_call_instrumentation_2args( + tstate, PY_MONITORING_EVENT_CALL, + frame, next_instr - 1, function, arg); + if (err) goto error; + GO_TO_INSTRUCTION(CALL_KW); + } + + TARGET(CALL_KW) { + PREDICTED(CALL_KW); + PyObject *kwnames; + PyObject **args; + PyObject *self_or_null; + PyObject *callable; + PyObject *res; + kwnames = stack_pointer[-1]; + args = stack_pointer - 1 - oparg; + self_or_null = stack_pointer[-2 - oparg]; + callable = stack_pointer[-3 - oparg]; + // oparg counts all of the args, but *not* self: + int total_args = oparg; + if (self_or_null != NULL) { + args--; + total_args++; + } + if (self_or_null == NULL && Py_TYPE(callable) == &PyMethod_Type) { + args--; + total_args++; + PyObject *self = ((PyMethodObject *)callable)->im_self; + args[0] = Py_NewRef(self); + PyObject *method = ((PyMethodObject *)callable)->im_func; + args[-1] = Py_NewRef(method); + Py_DECREF(callable); + callable = method; + } + int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames); + // Check if the call can be inlined or not + if (Py_TYPE(callable) == &PyFunction_Type && + tstate->interp->eval_frame == NULL && + ((PyFunctionObject *)callable)->vectorcall == _PyFunction_Vectorcall) + { + int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable))->co_flags; + PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable)); + _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit( + tstate, (PyFunctionObject *)callable, locals, + args, positional_args, kwnames + ); + Py_DECREF(kwnames); + // Manipulate stack directly since we leave using DISPATCH_INLINED(). + STACK_SHRINK(oparg + 3); + // The frame has stolen all the arguments from the stack, + // so there is no need to clean them up. + if (new_frame == NULL) { + goto error; + } + frame->return_offset = 0; + DISPATCH_INLINED(new_frame); + } + /* Callable is not a normal Python function */ + res = PyObject_Vectorcall( + callable, args, + positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET, + kwnames); + if (opcode == INSTRUMENTED_CALL_KW) { + PyObject *arg = total_args == 0 ? + &_PyInstrumentation_MISSING : args[0]; + if (res == NULL) { + _Py_call_instrumentation_exc2( + tstate, PY_MONITORING_EVENT_C_RAISE, + frame, next_instr-1, callable, arg); + } + else { + int err = _Py_call_instrumentation_2args( + tstate, PY_MONITORING_EVENT_C_RETURN, + frame, next_instr-1, callable, arg); + if (err < 0) { + Py_CLEAR(res); + } + } + } + Py_DECREF(kwnames); + assert((res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)); + Py_DECREF(callable); + for (int i = 0; i < total_args; i++) { + Py_DECREF(args[i]); + } + if (res == NULL) { STACK_SHRINK(oparg); goto pop_3_error; } + STACK_SHRINK(oparg); + STACK_SHRINK(2); + stack_pointer[-1] = res; + CHECK_EVAL_BREAKER(); + DISPATCH(); + } + TARGET(INSTRUMENTED_CALL_FUNCTION_EX) { GO_TO_INSTRUCTION(CALL_FUNCTION_EX); } @@ -4918,8 +4985,13 @@ PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; - int offset = Py_IsTrue(cond) * oparg; + int flag = Py_IsTrue(cond); + int offset = flag * oparg; + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); + next_instr += 1; DISPATCH(); } @@ -4927,23 +4999,33 @@ PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; - int offset = Py_IsFalse(cond) * oparg; + int flag = Py_IsFalse(cond); + int offset = flag * oparg; + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); + next_instr += 1; DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) { PyObject *value = POP(); - _Py_CODEUNIT *here = next_instr-1; + _Py_CODEUNIT *here = next_instr - 1; + int flag = Py_IsNone(value); int offset; - if (Py_IsNone(value)) { + if (flag) { offset = oparg; } else { Py_DECREF(value); offset = 0; } + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | flag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); + next_instr += 1; DISPATCH(); } @@ -4951,14 +5033,19 @@ PyObject *value = POP(); _Py_CODEUNIT *here = next_instr-1; int offset; - if (Py_IsNone(value)) { + int nflag = Py_IsNone(value); + if (nflag) { offset = 0; } else { Py_DECREF(value); offset = oparg; } + #if ENABLE_SPECIALIZATION + next_instr->cache = (next_instr->cache << 1) | !nflag; + #endif INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); + next_instr += 1; DISPATCH(); } diff --git a/Python/getargs.c b/Python/getargs.c index fdc144488c9627..cbfe561111176c 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -7,10 +7,6 @@ #include "pycore_pylifecycle.h" // _PyArg_Fini #include "pycore_tuple.h" // _PyTuple_ITEMS() -#include -#include - - #ifdef __cplusplus extern "C" { #endif diff --git a/Python/import.c b/Python/import.c index 48090d05240188..5a06cb367e828b 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2006,7 +2006,6 @@ look_up_frozen(const char *name) struct frozen_info { PyObject *nameobj; const char *data; - PyObject *(*get_code)(void); Py_ssize_t size; bool is_package; bool is_alias; @@ -2040,7 +2039,6 @@ find_frozen(PyObject *nameobj, struct frozen_info *info) if (info != NULL) { info->nameobj = nameobj; // borrowed info->data = (const char *)p->code; - info->get_code = p->get_code; info->size = p->size; info->is_package = p->is_package; if (p->size < 0) { @@ -2052,10 +2050,6 @@ find_frozen(PyObject *nameobj, struct frozen_info *info) info->is_alias = resolve_module_alias(name, _PyImport_FrozenAliases, &info->origname); } - if (p->code == NULL && p->size == 0 && p->get_code != NULL) { - /* It is only deepfrozen. */ - return FROZEN_OKAY; - } if (p->code == NULL) { /* It is frozen but marked as un-importable. */ return FROZEN_EXCLUDED; @@ -2070,11 +2064,6 @@ find_frozen(PyObject *nameobj, struct frozen_info *info) static PyObject * unmarshal_frozen_code(PyInterpreterState *interp, struct frozen_info *info) { - if (info->get_code && _Py_IsMainInterpreter(interp)) { - PyObject *code = info->get_code(); - assert(code != NULL); - return code; - } PyObject *co = PyMarshal_ReadObjectFromString(info->data, info->size); if (co == NULL) { /* Does not contain executable code. */ @@ -2374,9 +2363,14 @@ get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache, PyObject *importer; Py_ssize_t j, nhooks; - /* These conditions are the caller's responsibility: */ - assert(PyList_Check(path_hooks)); - assert(PyDict_Check(path_importer_cache)); + if (!PyList_Check(path_hooks)) { + PyErr_SetString(PyExc_RuntimeError, "sys.path_hooks is not a list"); + return NULL; + } + if (!PyDict_Check(path_importer_cache)) { + PyErr_SetString(PyExc_RuntimeError, "sys.path_importer_cache is not a dict"); + return NULL; + } nhooks = PyList_Size(path_hooks); if (nhooks < 0) @@ -2419,11 +2413,22 @@ PyImport_GetImporter(PyObject *path) { PyThreadState *tstate = _PyThreadState_GET(); PyObject *path_importer_cache = PySys_GetObject("path_importer_cache"); + if (path_importer_cache == NULL) { + PyErr_SetString(PyExc_RuntimeError, "lost sys.path_importer_cache"); + return NULL; + } + Py_INCREF(path_importer_cache); PyObject *path_hooks = PySys_GetObject("path_hooks"); - if (path_importer_cache == NULL || path_hooks == NULL) { + if (path_hooks == NULL) { + PyErr_SetString(PyExc_RuntimeError, "lost sys.path_hooks"); + Py_DECREF(path_importer_cache); return NULL; } - return get_path_importer(tstate, path_importer_cache, path_hooks, path); + Py_INCREF(path_hooks); + PyObject *importer = get_path_importer(tstate, path_importer_cache, path_hooks, path); + Py_DECREF(path_hooks); + Py_DECREF(path_importer_cache); + return importer; } @@ -2898,12 +2903,11 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, } } else { - PyObject *path; - if (PyObject_GetOptionalAttr(mod, &_Py_ID(__path__), &path) < 0) { + int has_path = PyObject_HasAttrWithError(mod, &_Py_ID(__path__)); + if (has_path < 0) { goto error; } - if (path) { - Py_DECREF(path); + if (has_path) { final_mod = PyObject_CallMethodObjArgs( IMPORTLIB(interp), &_Py_ID(_handle_fromlist), mod, fromlist, IMPORT_FUNC(interp), NULL); @@ -3567,7 +3571,7 @@ _imp_get_frozen_object_impl(PyObject *module, PyObject *name, if (info.nameobj == NULL) { info.nameobj = name; } - if (info.size == 0 && info.get_code == NULL) { + if (info.size == 0) { /* Does not contain executable code. */ set_frozen_error(FROZEN_INVALID, name); return NULL; diff --git a/Python/initconfig.c b/Python/initconfig.c index f9c5c64f9c8759..a0467f51d4834e 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -9,6 +9,7 @@ #include "pycore_pylifecycle.h" // _Py_PreInitializeFromConfig() #include "pycore_pymem.h" // _PyMem_SetDefaultAllocator() #include "pycore_pystate.h" // _PyThreadState_GET() +#include "pycore_pystats.h" // _Py_StatsOn() #include "osdefs.h" // DELIM @@ -186,7 +187,11 @@ static const char usage_envvars[] = "PYTHONSAFEPATH : don't prepend a potentially unsafe path to sys.path (-P)\n" "PYTHONUNBUFFERED : disable stdout/stderr buffering (-u)\n" "PYTHONVERBOSE : trace import statements (-v)\n" -"PYTHONWARNINGS=arg : warning control (-W arg)\n"; +"PYTHONWARNINGS=arg : warning control (-W arg)\n" +#ifdef Py_STATS +"PYTHONSTATS : turns on statistics gathering\n" +#endif +; #if defined(MS_WINDOWS) # define PYTHONHOMEHELP "\\python{major}{minor}" @@ -630,6 +635,9 @@ config_check_consistency(const PyConfig *config) assert(config->int_max_str_digits >= 0); // config->use_frozen_modules is initialized later // by _PyConfig_InitImportConfig(). +#ifdef Py_STATS + assert(config->_pystats >= 0); +#endif return 1; } #endif @@ -951,6 +959,9 @@ _PyConfig_Copy(PyConfig *config, const PyConfig *config2) COPY_WSTRLIST(orig_argv); COPY_ATTR(_is_python_build); COPY_ATTR(int_max_str_digits); +#ifdef Py_STATS + COPY_ATTR(_pystats); +#endif #undef COPY_ATTR #undef COPY_WSTR_ATTR @@ -1058,6 +1069,9 @@ _PyConfig_AsDict(const PyConfig *config) SET_ITEM_INT(safe_path); SET_ITEM_INT(_is_python_build); SET_ITEM_INT(int_max_str_digits); +#ifdef Py_STATS + SET_ITEM_INT(_pystats); +#endif return dict; @@ -1365,6 +1379,9 @@ _PyConfig_FromDict(PyConfig *config, PyObject *dict) GET_UINT(safe_path); GET_UINT(_is_python_build); GET_INT(int_max_str_digits); +#ifdef Py_STATS + GET_UINT(_pystats); +#endif #undef CHECK_VALUE #undef GET_UINT @@ -2116,7 +2133,13 @@ config_read(PyConfig *config, int compute_path_config) #ifdef Py_STATS if (config_get_xoption(config, L"pystats")) { - _py_stats = &_py_stats_struct; + config->_pystats = 1; + } + else if (config_get_env(config, "PYTHONSTATS")) { + config->_pystats = 1; + } + if (config->_pystats < 0) { + config->_pystats = 0; } #endif @@ -2254,6 +2277,13 @@ _PyConfig_Write(const PyConfig *config, _PyRuntimeState *runtime) { return _PyStatus_NO_MEMORY(); } + +#ifdef Py_STATS + if (config->_pystats) { + _Py_StatsOn(); + } +#endif + return _PyStatus_OK(); } diff --git a/Python/instrumentation.c b/Python/instrumentation.c index 36459687be7936..0b974f6133ce7d 100644 --- a/Python/instrumentation.c +++ b/Python/instrumentation.c @@ -2,7 +2,9 @@ #include "opcode_ids.h" +#include "pycore_bitutils.h" // _Py_popcount32 #include "pycore_call.h" +#include "pycore_code.h" // _PyCode_Clear_Executors() #include "pycore_frame.h" #include "pycore_interp.h" #include "pycore_long.h" @@ -35,6 +37,8 @@ static const int8_t EVENT_FOR_OPCODE[256] = { [INSTRUMENTED_RETURN_VALUE] = PY_MONITORING_EVENT_PY_RETURN, [CALL] = PY_MONITORING_EVENT_CALL, [INSTRUMENTED_CALL] = PY_MONITORING_EVENT_CALL, + [CALL_KW] = PY_MONITORING_EVENT_CALL, + [INSTRUMENTED_CALL_KW] = PY_MONITORING_EVENT_CALL, [CALL_FUNCTION_EX] = PY_MONITORING_EVENT_CALL, [INSTRUMENTED_CALL_FUNCTION_EX] = PY_MONITORING_EVENT_CALL, [LOAD_SUPER_ATTR] = PY_MONITORING_EVENT_CALL, @@ -67,6 +71,7 @@ static const uint8_t DE_INSTRUMENT[256] = { [INSTRUMENTED_RETURN_VALUE] = RETURN_VALUE, [INSTRUMENTED_RETURN_CONST] = RETURN_CONST, [INSTRUMENTED_CALL] = CALL, + [INSTRUMENTED_CALL_KW] = CALL_KW, [INSTRUMENTED_CALL_FUNCTION_EX] = CALL_FUNCTION_EX, [INSTRUMENTED_YIELD_VALUE] = YIELD_VALUE, [INSTRUMENTED_JUMP_FORWARD] = JUMP_FORWARD, @@ -88,6 +93,8 @@ static const uint8_t INSTRUMENTED_OPCODES[256] = { [INSTRUMENTED_RETURN_VALUE] = INSTRUMENTED_RETURN_VALUE, [CALL] = INSTRUMENTED_CALL, [INSTRUMENTED_CALL] = INSTRUMENTED_CALL, + [CALL_KW] = INSTRUMENTED_CALL_KW, + [INSTRUMENTED_CALL_KW] = INSTRUMENTED_CALL_KW, [CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX, [INSTRUMENTED_CALL_FUNCTION_EX] = INSTRUMENTED_CALL_FUNCTION_EX, [YIELD_VALUE] = INSTRUMENTED_YIELD_VALUE, @@ -138,9 +145,9 @@ is_instrumented(int opcode) #ifndef NDEBUG static inline bool -monitors_equals(_Py_Monitors a, _Py_Monitors b) +monitors_equals(_Py_LocalMonitors a, _Py_LocalMonitors b) { - for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) { + for (int i = 0; i < _PY_MONITORING_LOCAL_EVENTS; i++) { if (a.tools[i] != b.tools[i]) { return false; } @@ -149,42 +156,47 @@ monitors_equals(_Py_Monitors a, _Py_Monitors b) } #endif -static inline _Py_Monitors -monitors_sub(_Py_Monitors a, _Py_Monitors b) +static inline _Py_LocalMonitors +monitors_sub(_Py_LocalMonitors a, _Py_LocalMonitors b) { - _Py_Monitors res; - for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) { + _Py_LocalMonitors res; + for (int i = 0; i < _PY_MONITORING_LOCAL_EVENTS; i++) { res.tools[i] = a.tools[i] & ~b.tools[i]; } return res; } #ifndef NDEBUG -static inline _Py_Monitors -monitors_and(_Py_Monitors a, _Py_Monitors b) +static inline _Py_LocalMonitors +monitors_and(_Py_LocalMonitors a, _Py_LocalMonitors b) { - _Py_Monitors res; - for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) { + _Py_LocalMonitors res; + for (int i = 0; i < _PY_MONITORING_LOCAL_EVENTS; i++) { res.tools[i] = a.tools[i] & b.tools[i]; } return res; } #endif -static inline _Py_Monitors -monitors_or(_Py_Monitors a, _Py_Monitors b) +/* The union of the *local* events in a and b. + * Global events like RAISE are ignored. + * Used for instrumentation, as only local + * events get instrumented. + */ +static inline _Py_LocalMonitors +local_union(_Py_GlobalMonitors a, _Py_LocalMonitors b) { - _Py_Monitors res; - for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) { + _Py_LocalMonitors res; + for (int i = 0; i < _PY_MONITORING_LOCAL_EVENTS; i++) { res.tools[i] = a.tools[i] | b.tools[i]; } return res; } static inline bool -monitors_are_empty(_Py_Monitors m) +monitors_are_empty(_Py_LocalMonitors m) { - for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) { + for (int i = 0; i < _PY_MONITORING_LOCAL_EVENTS; i++) { if (m.tools[i]) { return false; } @@ -193,9 +205,9 @@ monitors_are_empty(_Py_Monitors m) } static inline bool -multiple_tools(_Py_Monitors *m) +multiple_tools(_Py_LocalMonitors *m) { - for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) { + for (int i = 0; i < _PY_MONITORING_LOCAL_EVENTS; i++) { if (_Py_popcount32(m->tools[i]) > 1) { return true; } @@ -204,7 +216,19 @@ multiple_tools(_Py_Monitors *m) } static inline _PyMonitoringEventSet -get_events(_Py_Monitors *m, int tool_id) +get_local_events(_Py_LocalMonitors *m, int tool_id) +{ + _PyMonitoringEventSet result = 0; + for (int e = 0; e < _PY_MONITORING_LOCAL_EVENTS; e++) { + if ((m->tools[e] >> tool_id) & 1) { + result |= (1 << e); + } + } + return result; +} + +static inline _PyMonitoringEventSet +get_events(_Py_GlobalMonitors *m, int tool_id) { _PyMonitoringEventSet result = 0; for (int e = 0; e < _PY_MONITORING_UNGROUPED_EVENTS; e++) { @@ -282,7 +306,7 @@ _PyInstruction_GetLength(PyCodeObject *code, int offset) if (opcode == ENTER_EXECUTOR) { int exec_index = _PyCode_CODE(code)[offset].op.arg; _PyExecutorObject *exec = code->co_executors->executors[exec_index]; - opcode = exec->vm_data.opcode; + opcode = _PyOpcode_Deopt[exec->vm_data.opcode]; } assert(opcode != ENTER_EXECUTOR); @@ -346,7 +370,7 @@ dump_instrumentation_data_per_instruction(PyCodeObject *code, _PyCoMonitoringDat } static void -dump_monitors(const char *prefix, _Py_Monitors monitors, FILE*out) +dump_global_monitors(const char *prefix, _Py_GlobalMonitors monitors, FILE*out) { fprintf(out, "%s monitors:\n", prefix); for (int event = 0; event < _PY_MONITORING_UNGROUPED_EVENTS; event++) { @@ -354,37 +378,13 @@ dump_monitors(const char *prefix, _Py_Monitors monitors, FILE*out) } } -/* Like _Py_GetBaseOpcode but without asserts. - * Does its best to give the right answer, but won't abort - * if something is wrong */ -static int -get_base_opcode_best_attempt(PyCodeObject *code, int offset) +static void +dump_local_monitors(const char *prefix, _Py_LocalMonitors monitors, FILE*out) { - int opcode = _Py_OPCODE(_PyCode_CODE(code)[offset]); - if (INSTRUMENTED_OPCODES[opcode] != opcode) { - /* Not instrumented */ - return _PyOpcode_Deopt[opcode] == 0 ? opcode : _PyOpcode_Deopt[opcode]; - } - if (opcode == INSTRUMENTED_INSTRUCTION) { - if (code->_co_monitoring->per_instruction_opcodes[offset] == 0) { - return opcode; - } - opcode = code->_co_monitoring->per_instruction_opcodes[offset]; - } - if (opcode == INSTRUMENTED_LINE) { - if (code->_co_monitoring->lines[offset].original_opcode == 0) { - return opcode; - } - opcode = code->_co_monitoring->lines[offset].original_opcode; - } - int deinstrumented = DE_INSTRUMENT[opcode]; - if (deinstrumented) { - return deinstrumented; - } - if (_PyOpcode_Deopt[opcode] == 0) { - return opcode; + fprintf(out, "%s monitors:\n", prefix); + for (int event = 0; event < _PY_MONITORING_LOCAL_EVENTS; event++) { + fprintf(out, " Event %d: Tools %x\n", event, monitors.tools[event]); } - return _PyOpcode_Deopt[opcode]; } /* No error checking -- Don't use this for anything but experimental debugging */ @@ -399,9 +399,9 @@ dump_instrumentation_data(PyCodeObject *code, int star, FILE*out) fprintf(out, "NULL\n"); return; } - dump_monitors("Global", _PyInterpreterState_GET()->monitors, out); - dump_monitors("Code", data->local_monitors, out); - dump_monitors("Active", data->active_monitors, out); + dump_global_monitors("Global", _PyInterpreterState_GET()->monitors, out); + dump_local_monitors("Code", data->local_monitors, out); + dump_local_monitors("Active", data->active_monitors, out); int code_len = (int)Py_SIZE(code); bool starred = false; for (int i = 0; i < code_len; i += _PyInstruction_GetLength(code, i)) { @@ -440,6 +440,9 @@ dump_instrumentation_data(PyCodeObject *code, int star, FILE*out) static bool valid_opcode(int opcode) { + if (opcode == INSTRUMENTED_LINE) { + return true; + } if (IS_VALID_OPCODE(opcode) && opcode != CACHE && opcode != RESERVED && @@ -457,18 +460,23 @@ sanity_check_instrumentation(PyCodeObject *code) if (data == NULL) { return; } - _Py_Monitors active_monitors = _PyInterpreterState_GET()->monitors; + _Py_GlobalMonitors global_monitors = _PyInterpreterState_GET()->monitors; + _Py_LocalMonitors active_monitors; if (code->_co_monitoring) { - _Py_Monitors local_monitors = code->_co_monitoring->local_monitors; - active_monitors = monitors_or(active_monitors, local_monitors); + _Py_LocalMonitors local_monitors = code->_co_monitoring->local_monitors; + active_monitors = local_union(global_monitors, local_monitors); + } + else { + _Py_LocalMonitors empty = (_Py_LocalMonitors) { 0 }; + active_monitors = local_union(global_monitors, empty); } assert(monitors_equals( code->_co_monitoring->active_monitors, - active_monitors) - ); + active_monitors)); int code_len = (int)Py_SIZE(code); for (int i = 0; i < code_len;) { - int opcode = _PyCode_CODE(code)[i].op.code; + _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; + int opcode = instr->op.code; int base_opcode = _Py_GetBaseOpcode(code, i); CHECK(valid_opcode(opcode)); CHECK(valid_opcode(base_opcode)); @@ -488,23 +496,30 @@ sanity_check_instrumentation(PyCodeObject *code) opcode = data->lines[i].original_opcode; CHECK(opcode != END_FOR); CHECK(opcode != RESUME); + CHECK(opcode != RESUME_CHECK); CHECK(opcode != INSTRUMENTED_RESUME); if (!is_instrumented(opcode)) { CHECK(_PyOpcode_Deopt[opcode] == opcode); } CHECK(opcode != INSTRUMENTED_LINE); } - else if (data->lines && !is_instrumented(opcode)) { - CHECK(data->lines[i].original_opcode == 0 || - data->lines[i].original_opcode == base_opcode || - DE_INSTRUMENT[data->lines[i].original_opcode] == base_opcode); + else if (data->lines) { + /* If original_opcode is INSTRUMENTED_INSTRUCTION + * *and* we are executing a INSTRUMENTED_LINE instruction + * that has de-instrumented itself, then we will execute + * an invalid INSTRUMENTED_INSTRUCTION */ + CHECK(data->lines[i].original_opcode != INSTRUMENTED_INSTRUCTION); + } + if (opcode == INSTRUMENTED_INSTRUCTION) { + CHECK(data->per_instruction_opcodes[i] != 0); + opcode = data->per_instruction_opcodes[i]; } if (is_instrumented(opcode)) { CHECK(DE_INSTRUMENT[opcode] == base_opcode); int event = EVENT_FOR_OPCODE[DE_INSTRUMENT[opcode]]; if (event < 0) { /* RESUME fixup */ - event = _PyCode_CODE(code)[i].op.arg; + event = instr->op.arg ? 1: 0; } CHECK(active_monitors.tools[event] != 0); } @@ -566,13 +581,7 @@ de_instrument(PyCodeObject *code, int i, int event) _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; uint8_t *opcode_ptr = &instr->op.code; int opcode = *opcode_ptr; - if (opcode == ENTER_EXECUTOR) { - int oparg = instr->op.arg; - _PyExecutorObject *exec = code->co_executors->executors[oparg]; - opcode_ptr = &exec->vm_data.opcode; - opcode = *opcode_ptr; - assert(opcode != ENTER_EXECUTOR); - } + assert(opcode != ENTER_EXECUTOR); if (opcode == INSTRUMENTED_LINE) { opcode_ptr = &code->_co_monitoring->lines[i].original_opcode; opcode = *opcode_ptr; @@ -596,30 +605,30 @@ static void de_instrument_line(PyCodeObject *code, int i) { _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; - uint8_t *opcode_ptr = &instr->op.code; - int opcode =*opcode_ptr; + int opcode = instr->op.code; if (opcode != INSTRUMENTED_LINE) { return; } _PyCoLineInstrumentationData *lines = &code->_co_monitoring->lines[i]; int original_opcode = lines->original_opcode; + if (original_opcode == INSTRUMENTED_INSTRUCTION) { + lines->original_opcode = code->_co_monitoring->per_instruction_opcodes[i]; + } CHECK(original_opcode != 0); CHECK(original_opcode == _PyOpcode_Deopt[original_opcode]); - *opcode_ptr = instr->op.code = original_opcode; + instr->op.code = original_opcode; if (_PyOpcode_Caches[original_opcode]) { instr[1].cache = adaptive_counter_warmup(); } - assert(*opcode_ptr != INSTRUMENTED_LINE); assert(instr->op.code != INSTRUMENTED_LINE); } - static void de_instrument_per_instruction(PyCodeObject *code, int i) { _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; uint8_t *opcode_ptr = &instr->op.code; - int opcode =*opcode_ptr; + int opcode = *opcode_ptr; if (opcode == INSTRUMENTED_LINE) { opcode_ptr = &code->_co_monitoring->lines[i].original_opcode; opcode = *opcode_ptr; @@ -630,10 +639,11 @@ de_instrument_per_instruction(PyCodeObject *code, int i) int original_opcode = code->_co_monitoring->per_instruction_opcodes[i]; CHECK(original_opcode != 0); CHECK(original_opcode == _PyOpcode_Deopt[original_opcode]); - instr->op.code = original_opcode; + *opcode_ptr = original_opcode; if (_PyOpcode_Caches[original_opcode]) { instr[1].cache = adaptive_counter_warmup(); } + assert(*opcode_ptr != INSTRUMENTED_INSTRUCTION); assert(instr->op.code != INSTRUMENTED_INSTRUCTION); /* Keep things clean for sanity check */ code->_co_monitoring->per_instruction_opcodes[i] = 0; @@ -654,7 +664,7 @@ instrument(PyCodeObject *code, int i) if (opcode == INSTRUMENTED_INSTRUCTION) { opcode_ptr = &code->_co_monitoring->per_instruction_opcodes[i]; opcode = *opcode_ptr; - CHECK(!is_instrumented(opcode)); + CHECK(opcode != INSTRUMENTED_INSTRUCTION && opcode != INSTRUMENTED_LINE); CHECK(opcode == _PyOpcode_Deopt[opcode]); } CHECK(opcode != 0); @@ -673,7 +683,7 @@ static void instrument_line(PyCodeObject *code, int i) { uint8_t *opcode_ptr = &_PyCode_CODE(code)[i].op.code; - int opcode =*opcode_ptr; + int opcode = *opcode_ptr; if (opcode == INSTRUMENTED_LINE) { return; } @@ -688,13 +698,14 @@ instrument_per_instruction(PyCodeObject *code, int i) { _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; uint8_t *opcode_ptr = &instr->op.code; - int opcode =*opcode_ptr; + int opcode = *opcode_ptr; if (opcode == INSTRUMENTED_LINE) { _PyCoLineInstrumentationData *lines = &code->_co_monitoring->lines[i]; opcode_ptr = &lines->original_opcode; opcode = *opcode_ptr; } if (opcode == INSTRUMENTED_INSTRUCTION) { + assert(code->_co_monitoring->per_instruction_opcodes[i] > 0); return; } CHECK(opcode != 0); @@ -717,22 +728,7 @@ remove_tools(PyCodeObject * code, int offset, int event, int tools) assert(event != PY_MONITORING_EVENT_LINE); assert(event != PY_MONITORING_EVENT_INSTRUCTION); assert(PY_MONITORING_IS_INSTRUMENTED_EVENT(event)); - #ifndef NDEBUG - _Py_CODEUNIT co_instr = _PyCode_CODE(code)[offset]; - uint8_t opcode = co_instr.op.code; - uint8_t oparg = co_instr.op.arg; - if (opcode == ENTER_EXECUTOR) { - _PyExecutorObject *exec = code->co_executors->executors[oparg]; - assert(exec->vm_data.opcode != ENTER_EXECUTOR); - opcode = _PyOpcode_Deopt[exec->vm_data.opcode]; - opcode = exec->vm_data.oparg; - } - else { - opcode = _Py_GetBaseOpcode(code, offset); - } - assert(opcode != ENTER_EXECUTOR); - assert(opcode_has_event(opcode)); - #endif + assert(opcode_has_event(_Py_GetBaseOpcode(code, offset))); _PyCoMonitoringData *monitoring = code->_co_monitoring; if (monitoring && monitoring->tools) { monitoring->tools[offset] &= ~tools; @@ -909,7 +905,7 @@ is_version_up_to_date(PyCodeObject *code, PyInterpreterState *interp) static bool instrumentation_cross_checks(PyInterpreterState *interp, PyCodeObject *code) { - _Py_Monitors expected = monitors_or( + _Py_LocalMonitors expected = local_union( interp->monitors, code->_co_monitoring->local_monitors); return monitors_equals(code->_co_monitoring->active_monitors, expected); @@ -938,12 +934,7 @@ get_tools_for_instruction(PyCodeObject *code, PyInterpreterState *interp, int i, } } else { - if (code->_co_monitoring) { - tools = code->_co_monitoring->active_monitors.tools[event]; - } - else { - tools = interp->monitors.tools[event]; - } + tools = interp->monitors.tools[event]; } return tools; } @@ -1065,8 +1056,6 @@ _Py_call_instrumentation_jump( assert(event == PY_MONITORING_EVENT_JUMP || event == PY_MONITORING_EVENT_BRANCH); assert(frame->prev_instr == instr); - /* Event should occur after the jump */ - frame->prev_instr = target; PyCodeObject *code = _PyFrame_GetCode(frame); int to = (int)(target - _PyCode_CODE(code)); PyObject *to_obj = PyLong_FromLong(to * (int)sizeof(_Py_CODEUNIT)); @@ -1079,12 +1068,10 @@ _Py_call_instrumentation_jump( if (err) { return NULL; } - if (frame->prev_instr != target) { + if (frame->prev_instr != instr) { /* The callback has caused a jump (by setting the line number) */ return frame->prev_instr; } - /* Reset prev_instr for INSTRUMENTED_LINE */ - frame->prev_instr = instr; return target; } @@ -1133,7 +1120,7 @@ _Py_Instrumentation_GetLine(PyCodeObject *code, int index) int _Py_call_instrumentation_line(PyThreadState *tstate, _PyInterpreterFrame* frame, _Py_CODEUNIT *instr, _Py_CODEUNIT *prev) { - frame->prev_instr = instr; + assert(frame->prev_instr == instr); PyCodeObject *code = _PyFrame_GetCode(frame); assert(is_version_up_to_date(code, tstate->interp)); assert(instrumentation_cross_checks(tstate->interp, code)); @@ -1141,7 +1128,6 @@ _Py_call_instrumentation_line(PyThreadState *tstate, _PyInterpreterFrame* frame, _PyCoMonitoringData *monitoring = code->_co_monitoring; _PyCoLineInstrumentationData *line_data = &monitoring->lines[i]; - uint8_t original_opcode = line_data->original_opcode; if (tstate->tracing) { goto done; } @@ -1224,7 +1210,9 @@ _Py_call_instrumentation_line(PyThreadState *tstate, _PyInterpreterFrame* frame, } } while (tools); Py_DECREF(line_obj); + uint8_t original_opcode; done: + original_opcode = line_data->original_opcode; assert(original_opcode != 0); assert(original_opcode != INSTRUMENTED_LINE); assert(_PyOpcode_Deopt[original_opcode] == original_opcode); @@ -1303,16 +1291,13 @@ initialize_tools(PyCodeObject *code) for (int i = 0; i < code_len; i++) { _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; int opcode = instr->op.code; - int oparg = instr->op.arg; - if (opcode == ENTER_EXECUTOR) { - _PyExecutorObject *exec = code->co_executors->executors[oparg]; - opcode = exec->vm_data.opcode; - oparg = exec->vm_data.oparg; - } - else if (opcode == INSTRUMENTED_LINE) { + assert(opcode != ENTER_EXECUTOR); + if (opcode == INSTRUMENTED_LINE) { opcode = code->_co_monitoring->lines[i].original_opcode; } - assert(opcode != ENTER_EXECUTOR); + if (opcode == INSTRUMENTED_INSTRUCTION) { + opcode = code->_co_monitoring->per_instruction_opcodes[i]; + } bool instrumented = is_instrumented(opcode); if (instrumented) { opcode = DE_INSTRUMENT[opcode]; @@ -1323,7 +1308,7 @@ initialize_tools(PyCodeObject *code) if (instrumented) { int8_t event; if (opcode == RESUME) { - event = oparg != 0; + event = instr->op.arg != 0; } else { event = EVENT_FOR_OPCODE[opcode]; @@ -1471,7 +1456,7 @@ initialize_lines(PyCodeObject *code) } static void -initialize_line_tools(PyCodeObject *code, _Py_Monitors *all_events) +initialize_line_tools(PyCodeObject *code, _Py_LocalMonitors *all_events) { uint8_t *line_tools = code->_co_monitoring->line_tools; assert(line_tools != NULL); @@ -1491,8 +1476,8 @@ allocate_instrumentation_data(PyCodeObject *code) PyErr_NoMemory(); return -1; } - code->_co_monitoring->local_monitors = (_Py_Monitors){ 0 }; - code->_co_monitoring->active_monitors = (_Py_Monitors){ 0 }; + code->_co_monitoring->local_monitors = (_Py_LocalMonitors){ 0 }; + code->_co_monitoring->active_monitors = (_Py_LocalMonitors){ 0 }; code->_co_monitoring->tools = NULL; code->_co_monitoring->lines = NULL; code->_co_monitoring->line_tools = NULL; @@ -1509,7 +1494,7 @@ update_instrumentation_data(PyCodeObject *code, PyInterpreterState *interp) if (allocate_instrumentation_data(code)) { return -1; } - _Py_Monitors all_events = monitors_or( + _Py_LocalMonitors all_events = local_union( interp->monitors, code->_co_monitoring->local_monitors); bool multitools = multiple_tools(&all_events); @@ -1576,15 +1561,27 @@ _Py_Instrument(PyCodeObject *code, PyInterpreterState *interp) ); return 0; } + if (code->co_executors != NULL) { + _PyCode_Clear_Executors(code); + } int code_len = (int)Py_SIZE(code); + /* code->_co_firsttraceable >= code_len indicates + * that no instrumentation can be inserted. + * Exit early to avoid creating instrumentation + * data for potential statically allocated code + * objects. + * See https://github.com/python/cpython/issues/108390 */ + if (code->_co_firsttraceable >= code_len) { + return 0; + } if (update_instrumentation_data(code, interp)) { return -1; } - _Py_Monitors active_events = monitors_or( + _Py_LocalMonitors active_events = local_union( interp->monitors, code->_co_monitoring->local_monitors); - _Py_Monitors new_events; - _Py_Monitors removed_events; + _Py_LocalMonitors new_events; + _Py_LocalMonitors removed_events; bool restarted = interp->last_restart_version > code->_co_instrumentation_version; if (restarted) { @@ -1608,7 +1605,9 @@ _Py_Instrument(PyCodeObject *code, PyInterpreterState *interp) for (int i = code->_co_firsttraceable; i < code_len; i+= _PyInstruction_GetLength(code, i)) { _Py_CODEUNIT *instr = &_PyCode_CODE(code)[i]; CHECK(instr->op.code != 0); + assert(instr->op.code != ENTER_EXECUTOR); int base_opcode = _Py_GetBaseOpcode(code, i); + assert(base_opcode != ENTER_EXECUTOR); if (opcode_has_event(base_opcode)) { int8_t event; if (base_opcode == RESUME) { @@ -1659,7 +1658,9 @@ _Py_Instrument(PyCodeObject *code, PyInterpreterState *interp) i += _PyInstruction_GetLength(code, i); } } - +#ifdef INSTRUMENT_DEBUG + sanity_check_instrumentation(code); +#endif uint8_t new_line_tools = new_events.tools[PY_MONITORING_EVENT_LINE]; uint8_t new_per_instruction_tools = new_events.tools[PY_MONITORING_EVENT_INSTRUCTION]; @@ -1725,10 +1726,22 @@ instrument_all_executing_code_objects(PyInterpreterState *interp) { } static void -set_events(_Py_Monitors *m, int tool_id, _PyMonitoringEventSet events) +set_events(_Py_GlobalMonitors *m, int tool_id, _PyMonitoringEventSet events) { assert(0 <= tool_id && tool_id < PY_MONITORING_TOOL_IDS); for (int e = 0; e < _PY_MONITORING_UNGROUPED_EVENTS; e++) { + uint8_t *tools = &m->tools[e]; + int active = (events >> e) & 1; + *tools &= ~(1 << tool_id); + *tools |= (active << tool_id); + } +} + +static void +set_local_events(_Py_LocalMonitors *m, int tool_id, _PyMonitoringEventSet events) +{ + assert(0 <= tool_id && tool_id < PY_MONITORING_TOOL_IDS); + for (int e = 0; e < _PY_MONITORING_LOCAL_EVENTS; e++) { uint8_t *tools = &m->tools[e]; int val = (events >> e) & 1; *tools &= ~(1 << tool_id); @@ -1771,19 +1784,23 @@ _PyMonitoring_SetLocalEvents(PyCodeObject *code, int tool_id, _PyMonitoringEvent { assert(0 <= tool_id && tool_id < PY_MONITORING_TOOL_IDS); PyInterpreterState *interp = _PyInterpreterState_GET(); - assert(events < (1 << _PY_MONITORING_UNGROUPED_EVENTS)); + assert(events < (1 << _PY_MONITORING_LOCAL_EVENTS)); + if (code->_co_firsttraceable >= Py_SIZE(code)) { + PyErr_Format(PyExc_SystemError, "cannot instrument shim code object '%U'", code->co_name); + return -1; + } if (check_tool(interp, tool_id)) { return -1; } if (allocate_instrumentation_data(code)) { return -1; } - _Py_Monitors *local = &code->_co_monitoring->local_monitors; - uint32_t existing_events = get_events(local, tool_id); + _Py_LocalMonitors *local = &code->_co_monitoring->local_monitors; + uint32_t existing_events = get_local_events(local, tool_id); if (existing_events == events) { return 0; } - set_events(local, tool_id, events); + set_local_events(local, tool_id, events); if (is_version_up_to_date(code, interp)) { /* Force instrumentation update */ code->_co_instrumentation_version = UINT64_MAX; @@ -1942,7 +1959,7 @@ monitoring_get_events_impl(PyObject *module, int tool_id) if (check_valid_tool(tool_id)) { return -1; } - _Py_Monitors *m = &_PyInterpreterState_GET()->monitors; + _Py_GlobalMonitors *m = &_PyInterpreterState_GET()->monitors; _PyMonitoringEventSet event_set = get_events(m, tool_id); return event_set; } @@ -2005,7 +2022,7 @@ monitoring_get_local_events_impl(PyObject *module, int tool_id, _PyMonitoringEventSet event_set = 0; _PyCoMonitoringData *data = ((PyCodeObject *)code)->_co_monitoring; if (data != NULL) { - for (int e = 0; e < _PY_MONITORING_UNGROUPED_EVENTS; e++) { + for (int e = 0; e < _PY_MONITORING_LOCAL_EVENTS; e++) { if ((data->local_monitors.tools[e] >> tool_id) & 1) { event_set |= (1 << e); } @@ -2039,15 +2056,16 @@ monitoring_set_local_events_impl(PyObject *module, int tool_id, if (check_valid_tool(tool_id)) { return NULL; } - if (event_set < 0 || event_set >= (1 << _PY_MONITORING_EVENTS)) { - PyErr_Format(PyExc_ValueError, "invalid event set 0x%x", event_set); - return NULL; - } if ((event_set & C_RETURN_EVENTS) && (event_set & C_CALL_EVENTS) != C_CALL_EVENTS) { PyErr_Format(PyExc_ValueError, "cannot set C_RETURN or C_RAISE events independently"); return NULL; } event_set &= ~C_RETURN_EVENTS; + if (event_set < 0 || event_set >= (1 << _PY_MONITORING_LOCAL_EVENTS)) { + PyErr_Format(PyExc_ValueError, "invalid local event set 0x%x", event_set); + return NULL; + } + if (_PyMonitoring_SetLocalEvents((PyCodeObject*)code, tool_id, event_set)) { return NULL; } diff --git a/Python/intrinsics.c b/Python/intrinsics.c index 8e59c63aea39ff..bbd79ec473f470 100644 --- a/Python/intrinsics.c +++ b/Python/intrinsics.c @@ -5,11 +5,11 @@ #include "pycore_frame.h" #include "pycore_function.h" #include "pycore_global_objects.h" -#include "pycore_intrinsics.h" -#include "pycore_pyerrors.h" -#include "pycore_runtime.h" +#include "pycore_intrinsics.h" // INTRINSIC_PRINT +#include "pycore_pyerrors.h" // _PyErr_SetString() +#include "pycore_runtime.h" // _Py_ID() #include "pycore_sysmodule.h" // _PySys_GetAttr() -#include "pycore_typevarobject.h" +#include "pycore_typevarobject.h" // _Py_make_typevar() /******** Unary functions ********/ diff --git a/Python/legacy_tracing.c b/Python/legacy_tracing.c index 17a13b1361f992..9258091afc7c49 100644 --- a/Python/legacy_tracing.c +++ b/Python/legacy_tracing.c @@ -2,12 +2,13 @@ * Provides callables to forward PEP 669 events to legacy events. */ -#include #include "Python.h" -#include "opcode.h" -#include "pycore_ceval.h" +#include "pycore_ceval.h" // export _PyEval_SetProfile() #include "pycore_object.h" -#include "pycore_sysmodule.h" +#include "pycore_sysmodule.h" // _PySys_Audit() + +#include "opcode.h" +#include typedef struct _PyLegacyEventHandler { PyObject_HEAD diff --git a/Python/lock.c b/Python/lock.c new file mode 100644 index 00000000000000..3dad2aa93b5cc9 --- /dev/null +++ b/Python/lock.c @@ -0,0 +1,297 @@ +// Lock implementation + +#include "Python.h" + +#include "pycore_lock.h" +#include "pycore_parking_lot.h" +#include "pycore_semaphore.h" + +#ifdef MS_WINDOWS +#define WIN32_LEAN_AND_MEAN +#include // SwitchToThread() +#elif defined(HAVE_SCHED_H) +#include // sched_yield() +#endif + +// If a thread waits on a lock for longer than TIME_TO_BE_FAIR_NS (1 ms), then +// the unlocking thread directly hands off ownership of the lock. This avoids +// starvation. +static const _PyTime_t TIME_TO_BE_FAIR_NS = 1000*1000; + +// Spin for a bit before parking the thread. This is only enabled for +// `--disable-gil` builds because it is unlikely to be helpful if the GIL is +// enabled. +#if Py_NOGIL +static const int MAX_SPIN_COUNT = 40; +#else +static const int MAX_SPIN_COUNT = 0; +#endif + +struct mutex_entry { + // The time after which the unlocking thread should hand off lock ownership + // directly to the waiting thread. Written by the waiting thread. + _PyTime_t time_to_be_fair; + + // Set to 1 if the lock was handed off. Written by the unlocking thread. + int handed_off; +}; + +static void +_Py_yield(void) +{ +#ifdef MS_WINDOWS + SwitchToThread(); +#elif defined(HAVE_SCHED_H) + sched_yield(); +#endif +} + +void +_PyMutex_LockSlow(PyMutex *m) +{ + _PyMutex_LockTimed(m, -1, _PY_LOCK_DETACH); +} + +PyLockStatus +_PyMutex_LockTimed(PyMutex *m, _PyTime_t timeout, _PyLockFlags flags) +{ + uint8_t v = _Py_atomic_load_uint8_relaxed(&m->v); + if ((v & _Py_LOCKED) == 0) { + if (_Py_atomic_compare_exchange_uint8(&m->v, &v, v|_Py_LOCKED)) { + return PY_LOCK_ACQUIRED; + } + } + else if (timeout == 0) { + return PY_LOCK_FAILURE; + } + + _PyTime_t now = _PyTime_GetMonotonicClock(); + _PyTime_t endtime = 0; + if (timeout > 0) { + endtime = _PyTime_Add(now, timeout); + } + + struct mutex_entry entry = { + .time_to_be_fair = now + TIME_TO_BE_FAIR_NS, + .handed_off = 0, + }; + + Py_ssize_t spin_count = 0; + for (;;) { + if ((v & _Py_LOCKED) == 0) { + // The lock is unlocked. Try to grab it. + if (_Py_atomic_compare_exchange_uint8(&m->v, &v, v|_Py_LOCKED)) { + return PY_LOCK_ACQUIRED; + } + continue; + } + + if (!(v & _Py_HAS_PARKED) && spin_count < MAX_SPIN_COUNT) { + // Spin for a bit. + _Py_yield(); + spin_count++; + continue; + } + + if (timeout == 0) { + return PY_LOCK_FAILURE; + } + + uint8_t newv = v; + if (!(v & _Py_HAS_PARKED)) { + // We are the first waiter. Set the _Py_HAS_PARKED flag. + newv = v | _Py_HAS_PARKED; + if (!_Py_atomic_compare_exchange_uint8(&m->v, &v, newv)) { + continue; + } + } + + int ret = _PyParkingLot_Park(&m->v, &newv, sizeof(newv), timeout, + &entry, (flags & _PY_LOCK_DETACH) != 0); + if (ret == Py_PARK_OK) { + if (entry.handed_off) { + // We own the lock now. + assert(_Py_atomic_load_uint8_relaxed(&m->v) & _Py_LOCKED); + return PY_LOCK_ACQUIRED; + } + } + else if (ret == Py_PARK_INTR && (flags & _PY_LOCK_HANDLE_SIGNALS)) { + if (Py_MakePendingCalls() < 0) { + return PY_LOCK_INTR; + } + } + else if (ret == Py_PARK_TIMEOUT) { + assert(timeout >= 0); + return PY_LOCK_FAILURE; + } + + if (timeout > 0) { + timeout = _PyDeadline_Get(endtime); + if (timeout <= 0) { + // Avoid negative values because those mean block forever. + timeout = 0; + } + } + + v = _Py_atomic_load_uint8_relaxed(&m->v); + } +} + +static void +mutex_unpark(PyMutex *m, struct mutex_entry *entry, int has_more_waiters) +{ + uint8_t v = 0; + if (entry) { + _PyTime_t now = _PyTime_GetMonotonicClock(); + int should_be_fair = now > entry->time_to_be_fair; + + entry->handed_off = should_be_fair; + if (should_be_fair) { + v |= _Py_LOCKED; + } + if (has_more_waiters) { + v |= _Py_HAS_PARKED; + } + } + _Py_atomic_store_uint8(&m->v, v); +} + +int +_PyMutex_TryUnlock(PyMutex *m) +{ + uint8_t v = _Py_atomic_load_uint8(&m->v); + for (;;) { + if ((v & _Py_LOCKED) == 0) { + // error: the mutex is not locked + return -1; + } + else if ((v & _Py_HAS_PARKED)) { + // wake up a single thread + _PyParkingLot_Unpark(&m->v, (_Py_unpark_fn_t *)mutex_unpark, m); + return 0; + } + else if (_Py_atomic_compare_exchange_uint8(&m->v, &v, _Py_UNLOCKED)) { + // fast-path: no waiters + return 0; + } + } +} + +void +_PyMutex_UnlockSlow(PyMutex *m) +{ + if (_PyMutex_TryUnlock(m) < 0) { + Py_FatalError("unlocking mutex that is not locked"); + } +} + +// _PyRawMutex stores a linked list of `struct raw_mutex_entry`, one for each +// thread waiting on the mutex, directly in the mutex itself. +struct raw_mutex_entry { + struct raw_mutex_entry *next; + _PySemaphore sema; +}; + +void +_PyRawMutex_LockSlow(_PyRawMutex *m) +{ + struct raw_mutex_entry waiter; + _PySemaphore_Init(&waiter.sema); + + uintptr_t v = _Py_atomic_load_uintptr(&m->v); + for (;;) { + if ((v & _Py_LOCKED) == 0) { + // Unlocked: try to grab it (even if it has a waiter). + if (_Py_atomic_compare_exchange_uintptr(&m->v, &v, v|_Py_LOCKED)) { + break; + } + continue; + } + + // Locked: try to add ourselves as a waiter. + waiter.next = (struct raw_mutex_entry *)(v & ~1); + uintptr_t desired = ((uintptr_t)&waiter)|_Py_LOCKED; + if (!_Py_atomic_compare_exchange_uintptr(&m->v, &v, desired)) { + continue; + } + + // Wait for us to be woken up. Note that we still have to lock the + // mutex ourselves: it is NOT handed off to us. + _PySemaphore_Wait(&waiter.sema, -1, /*detach=*/0); + } + + _PySemaphore_Destroy(&waiter.sema); +} + +void +_PyRawMutex_UnlockSlow(_PyRawMutex *m) +{ + uintptr_t v = _Py_atomic_load_uintptr(&m->v); + for (;;) { + if ((v & _Py_LOCKED) == 0) { + Py_FatalError("unlocking mutex that is not locked"); + } + + struct raw_mutex_entry *waiter = (struct raw_mutex_entry *)(v & ~1); + if (waiter) { + uintptr_t next_waiter = (uintptr_t)waiter->next; + if (_Py_atomic_compare_exchange_uintptr(&m->v, &v, next_waiter)) { + _PySemaphore_Wakeup(&waiter->sema); + return; + } + } + else { + if (_Py_atomic_compare_exchange_uintptr(&m->v, &v, _Py_UNLOCKED)) { + return; + } + } + } +} + +void +_PyEvent_Notify(PyEvent *evt) +{ + uintptr_t v = _Py_atomic_exchange_uint8(&evt->v, _Py_LOCKED); + if (v == _Py_UNLOCKED) { + // no waiters + return; + } + else if (v == _Py_LOCKED) { + // event already set + return; + } + else { + assert(v == _Py_HAS_PARKED); + _PyParkingLot_UnparkAll(&evt->v); + } +} + +void +PyEvent_Wait(PyEvent *evt) +{ + while (!PyEvent_WaitTimed(evt, -1)) + ; +} + +int +PyEvent_WaitTimed(PyEvent *evt, _PyTime_t timeout_ns) +{ + for (;;) { + uint8_t v = _Py_atomic_load_uint8(&evt->v); + if (v == _Py_LOCKED) { + // event already set + return 1; + } + if (v == _Py_UNLOCKED) { + if (!_Py_atomic_compare_exchange_uint8(&evt->v, &v, _Py_HAS_PARKED)) { + continue; + } + } + + uint8_t expected = _Py_HAS_PARKED; + (void) _PyParkingLot_Park(&evt->v, &expected, sizeof(evt->v), + timeout_ns, NULL, 1); + + return _Py_atomic_load_uint8(&evt->v) == _Py_LOCKED; + } +} diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c index e6fe154eed611a..fcd3e27f17f4e9 100644 --- a/Python/mystrtoul.c +++ b/Python/mystrtoul.c @@ -1,16 +1,22 @@ +// strtol() and strtoul(), renamed to avoid conflicts. +// +// API: +// +// - PyOS_strtol(): convert string to C long integer. +// - PyOS_strtoul(): convert string to C unsigned long integer. + #include "Python.h" #include "pycore_long.h" // _PyLong_DigitValue #if defined(__sgi) && !defined(_SGI_MP_SOURCE) -#define _SGI_MP_SOURCE +# define _SGI_MP_SOURCE #endif /* strtol and strtoul, renamed to avoid conflicts */ -#include #ifdef HAVE_ERRNO_H -#include +# include // errno #endif /* Static overflow check values for bases 2 through 36. @@ -75,7 +81,7 @@ static const int digitlimit[] = { 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, /* 20 - 29 */ 13, 12, 12, 12, 12, 12, 12}; /* 30 - 36 */ #else -#error "Need table for SIZEOF_LONG" +# error "Need table for SIZEOF_LONG" #endif /* diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 305eb0bfe2a7c4..bcd6ea7564f9b3 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -2,22 +2,9 @@ static void *opcode_targets[256] = { &&TARGET_CACHE, &&TARGET_BEFORE_ASYNC_WITH, &&TARGET_BEFORE_WITH, - &&TARGET_BINARY_OP_ADD_FLOAT, - &&TARGET_BINARY_OP_ADD_INT, - &&TARGET_BINARY_OP_ADD_UNICODE, &&TARGET_BINARY_OP_INPLACE_ADD_UNICODE, - &&TARGET_BINARY_OP_MULTIPLY_FLOAT, - &&TARGET_BINARY_OP_MULTIPLY_INT, - &&TARGET_BINARY_OP_SUBTRACT_FLOAT, - &&TARGET_BINARY_OP_SUBTRACT_INT, &&TARGET_BINARY_SLICE, &&TARGET_BINARY_SUBSCR, - &&TARGET_BINARY_SUBSCR_DICT, - &&TARGET_BINARY_SUBSCR_GETITEM, - &&TARGET_BINARY_SUBSCR_LIST_INT, - &&TARGET_BINARY_SUBSCR_STR_INT, - &&TARGET_RESERVED, - &&TARGET_BINARY_SUBSCR_TUPLE_INT, &&TARGET_CHECK_EG_MATCH, &&TARGET_CHECK_EXC_MATCH, &&TARGET_CLEANUP_THROW, @@ -29,6 +16,7 @@ static void *opcode_targets[256] = { &&TARGET_FORMAT_SIMPLE, &&TARGET_FORMAT_WITH_SPEC, &&TARGET_GET_AITER, + &&TARGET_RESERVED, &&TARGET_GET_ANEXT, &&TARGET_GET_ITER, &&TARGET_GET_LEN, @@ -49,19 +37,9 @@ static void *opcode_targets[256] = { &&TARGET_RETURN_GENERATOR, &&TARGET_RETURN_VALUE, &&TARGET_SETUP_ANNOTATIONS, - &&TARGET_STORE_ATTR_INSTANCE_VALUE, - &&TARGET_STORE_ATTR_SLOT, &&TARGET_STORE_SLICE, &&TARGET_STORE_SUBSCR, - &&TARGET_STORE_SUBSCR_DICT, - &&TARGET_STORE_SUBSCR_LIST_INT, &&TARGET_TO_BOOL, - &&TARGET_TO_BOOL_ALWAYS_TRUE, - &&TARGET_TO_BOOL_BOOL, - &&TARGET_TO_BOOL_INT, - &&TARGET_TO_BOOL_LIST, - &&TARGET_TO_BOOL_NONE, - &&TARGET_TO_BOOL_STR, &&TARGET_UNARY_INVERT, &&TARGET_UNARY_NEGATIVE, &&TARGET_UNARY_NOT, @@ -75,31 +53,11 @@ static void *opcode_targets[256] = { &&TARGET_BUILD_STRING, &&TARGET_BUILD_TUPLE, &&TARGET_CALL, - &&TARGET_CALL_BOUND_METHOD_EXACT_ARGS, - &&TARGET_CALL_BUILTIN_CLASS, - &&TARGET_CALL_BUILTIN_FAST_WITH_KEYWORDS, &&TARGET_CALL_FUNCTION_EX, &&TARGET_CALL_INTRINSIC_1, &&TARGET_CALL_INTRINSIC_2, - &&TARGET_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, - &&TARGET_CALL_NO_KW_ALLOC_AND_ENTER_INIT, - &&TARGET_CALL_NO_KW_BUILTIN_FAST, - &&TARGET_CALL_NO_KW_BUILTIN_O, - &&TARGET_CALL_NO_KW_ISINSTANCE, - &&TARGET_CALL_NO_KW_LEN, - &&TARGET_CALL_NO_KW_LIST_APPEND, - &&TARGET_CALL_NO_KW_METHOD_DESCRIPTOR_FAST, - &&TARGET_CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS, - &&TARGET_CALL_NO_KW_METHOD_DESCRIPTOR_O, - &&TARGET_CALL_NO_KW_STR_1, - &&TARGET_CALL_NO_KW_TUPLE_1, - &&TARGET_CALL_NO_KW_TYPE_1, - &&TARGET_CALL_PY_EXACT_ARGS, - &&TARGET_CALL_PY_WITH_DEFAULTS, + &&TARGET_CALL_KW, &&TARGET_COMPARE_OP, - &&TARGET_COMPARE_OP_FLOAT, - &&TARGET_COMPARE_OP_INT, - &&TARGET_COMPARE_OP_STR, &&TARGET_CONTAINS_OP, &&TARGET_CONVERT_VALUE, &&TARGET_COPY, @@ -114,10 +72,6 @@ static void *opcode_targets[256] = { &&TARGET_ENTER_EXECUTOR, &&TARGET_EXTENDED_ARG, &&TARGET_FOR_ITER, - &&TARGET_FOR_ITER_GEN, - &&TARGET_FOR_ITER_LIST, - &&TARGET_FOR_ITER_RANGE, - &&TARGET_FOR_ITER_TUPLE, &&TARGET_GET_AWAITABLE, &&TARGET_IMPORT_FROM, &&TARGET_IMPORT_NAME, @@ -125,22 +79,9 @@ static void *opcode_targets[256] = { &&TARGET_JUMP_BACKWARD, &&TARGET_JUMP_BACKWARD_NO_INTERRUPT, &&TARGET_JUMP_FORWARD, - &&TARGET_KW_NAMES, &&TARGET_LIST_APPEND, &&TARGET_LIST_EXTEND, &&TARGET_LOAD_ATTR, - &&TARGET_LOAD_ATTR_CLASS, - &&TARGET_LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN, - &&TARGET_LOAD_ATTR_INSTANCE_VALUE, - &&TARGET_LOAD_ATTR_METHOD_LAZY_DICT, - &&TARGET_LOAD_ATTR_METHOD_NO_DICT, - &&TARGET_LOAD_ATTR_METHOD_WITH_VALUES, - &&TARGET_LOAD_ATTR_MODULE, - &&TARGET_LOAD_ATTR_NONDESCRIPTOR_NO_DICT, - &&TARGET_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, - &&TARGET_LOAD_ATTR_PROPERTY, - &&TARGET_LOAD_ATTR_SLOT, - &&TARGET_LOAD_ATTR_WITH_HINT, &&TARGET_LOAD_CONST, &&TARGET_LOAD_DEREF, &&TARGET_LOAD_FAST, @@ -150,12 +91,8 @@ static void *opcode_targets[256] = { &&TARGET_LOAD_FROM_DICT_OR_DEREF, &&TARGET_LOAD_FROM_DICT_OR_GLOBALS, &&TARGET_LOAD_GLOBAL, - &&TARGET_LOAD_GLOBAL_BUILTIN, - &&TARGET_LOAD_GLOBAL_MODULE, &&TARGET_LOAD_NAME, &&TARGET_LOAD_SUPER_ATTR, - &&TARGET_LOAD_SUPER_ATTR_ATTR, - &&TARGET_LOAD_SUPER_ATTR_METHOD, &&TARGET_MAKE_CELL, &&TARGET_MAP_ADD, &&TARGET_MATCH_CLASS, @@ -165,15 +102,12 @@ static void *opcode_targets[256] = { &&TARGET_POP_JUMP_IF_TRUE, &&TARGET_RAISE_VARARGS, &&TARGET_RERAISE, - &&TARGET_RESUME, &&TARGET_RETURN_CONST, &&TARGET_SEND, - &&TARGET_SEND_GEN, &&TARGET_SET_ADD, &&TARGET_SET_FUNCTION_ATTRIBUTE, &&TARGET_SET_UPDATE, &&TARGET_STORE_ATTR, - &&TARGET_STORE_ATTR_WITH_HINT, &&TARGET_STORE_DEREF, &&TARGET_STORE_FAST, &&TARGET_STORE_FAST_LOAD_FAST, @@ -183,9 +117,6 @@ static void *opcode_targets[256] = { &&TARGET_SWAP, &&TARGET_UNPACK_EX, &&TARGET_UNPACK_SEQUENCE, - &&TARGET_UNPACK_SEQUENCE_LIST, - &&TARGET_UNPACK_SEQUENCE_TUPLE, - &&TARGET_UNPACK_SEQUENCE_TWO_TUPLE, &&TARGET_YIELD_VALUE, &&_unknown_opcode, &&_unknown_opcode, @@ -217,8 +148,76 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_RESUME, + &&TARGET_BINARY_OP_ADD_FLOAT, + &&TARGET_BINARY_OP_ADD_INT, + &&TARGET_BINARY_OP_ADD_UNICODE, + &&TARGET_BINARY_OP_MULTIPLY_FLOAT, + &&TARGET_BINARY_OP_MULTIPLY_INT, + &&TARGET_BINARY_OP_SUBTRACT_FLOAT, + &&TARGET_BINARY_OP_SUBTRACT_INT, + &&TARGET_BINARY_SUBSCR_DICT, + &&TARGET_BINARY_SUBSCR_GETITEM, + &&TARGET_BINARY_SUBSCR_LIST_INT, + &&TARGET_BINARY_SUBSCR_STR_INT, + &&TARGET_BINARY_SUBSCR_TUPLE_INT, + &&TARGET_CALL_ALLOC_AND_ENTER_INIT, + &&TARGET_CALL_BOUND_METHOD_EXACT_ARGS, + &&TARGET_CALL_BUILTIN_CLASS, + &&TARGET_CALL_BUILTIN_FAST, + &&TARGET_CALL_BUILTIN_FAST_WITH_KEYWORDS, + &&TARGET_CALL_BUILTIN_O, + &&TARGET_CALL_ISINSTANCE, + &&TARGET_CALL_LEN, + &&TARGET_CALL_LIST_APPEND, + &&TARGET_CALL_METHOD_DESCRIPTOR_FAST, + &&TARGET_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, + &&TARGET_CALL_METHOD_DESCRIPTOR_NOARGS, + &&TARGET_CALL_METHOD_DESCRIPTOR_O, + &&TARGET_CALL_PY_EXACT_ARGS, + &&TARGET_CALL_PY_WITH_DEFAULTS, + &&TARGET_CALL_STR_1, + &&TARGET_CALL_TUPLE_1, + &&TARGET_CALL_TYPE_1, + &&TARGET_COMPARE_OP_FLOAT, + &&TARGET_COMPARE_OP_INT, + &&TARGET_COMPARE_OP_STR, + &&TARGET_FOR_ITER_GEN, + &&TARGET_FOR_ITER_LIST, + &&TARGET_FOR_ITER_RANGE, + &&TARGET_FOR_ITER_TUPLE, + &&TARGET_LOAD_ATTR_CLASS, + &&TARGET_LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN, + &&TARGET_LOAD_ATTR_INSTANCE_VALUE, + &&TARGET_LOAD_ATTR_METHOD_LAZY_DICT, + &&TARGET_LOAD_ATTR_METHOD_NO_DICT, + &&TARGET_LOAD_ATTR_METHOD_WITH_VALUES, + &&TARGET_LOAD_ATTR_MODULE, + &&TARGET_LOAD_ATTR_NONDESCRIPTOR_NO_DICT, + &&TARGET_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, + &&TARGET_LOAD_ATTR_PROPERTY, + &&TARGET_LOAD_ATTR_SLOT, + &&TARGET_LOAD_ATTR_WITH_HINT, + &&TARGET_LOAD_GLOBAL_BUILTIN, + &&TARGET_LOAD_GLOBAL_MODULE, + &&TARGET_LOAD_SUPER_ATTR_ATTR, + &&TARGET_LOAD_SUPER_ATTR_METHOD, + &&TARGET_RESUME_CHECK, + &&TARGET_SEND_GEN, + &&TARGET_STORE_ATTR_INSTANCE_VALUE, + &&TARGET_STORE_ATTR_SLOT, + &&TARGET_STORE_ATTR_WITH_HINT, + &&TARGET_STORE_SUBSCR_DICT, + &&TARGET_STORE_SUBSCR_LIST_INT, + &&TARGET_TO_BOOL_ALWAYS_TRUE, + &&TARGET_TO_BOOL_BOOL, + &&TARGET_TO_BOOL_INT, + &&TARGET_TO_BOOL_LIST, + &&TARGET_TO_BOOL_NONE, + &&TARGET_TO_BOOL_STR, + &&TARGET_UNPACK_SEQUENCE_LIST, + &&TARGET_UNPACK_SEQUENCE_TUPLE, + &&TARGET_UNPACK_SEQUENCE_TWO_TUPLE, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -245,6 +244,7 @@ static void *opcode_targets[256] = { &&TARGET_INSTRUMENTED_LOAD_SUPER_ATTR, &&TARGET_INSTRUMENTED_FOR_ITER, &&TARGET_INSTRUMENTED_CALL, + &&TARGET_INSTRUMENTED_CALL_KW, &&TARGET_INSTRUMENTED_CALL_FUNCTION_EX, &&TARGET_INSTRUMENTED_INSTRUCTION, &&TARGET_INSTRUMENTED_JUMP_FORWARD, diff --git a/Python/optimizer.c b/Python/optimizer.c index 7472f52c50b766..fbdbf7291784c4 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -1,9 +1,10 @@ #include "Python.h" #include "opcode.h" #include "pycore_interp.h" -#include "pycore_opcode_metadata.h" -#include "pycore_opcode_utils.h" -#include "pycore_optimizer.h" +#include "pycore_bitutils.h" // _Py_popcount32() +#include "pycore_opcode_metadata.h" // _PyOpcode_OpName() +#include "pycore_opcode_utils.h" // MAX_REAL_OPCODE +#include "pycore_optimizer.h" // _Py_uop_analyze_and_optimize() #include "pycore_pystate.h" // _PyInterpreterState_GET() #include "pycore_uops.h" #include "cpython/optimizer.h" @@ -153,7 +154,7 @@ PyUnstable_SetOptimizer(_PyOptimizerObject *optimizer) Py_DECREF(old); } -_PyInterpreterFrame * +int _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNIT *dest, PyObject **stack_pointer) { assert(src->op.code == JUMP_BACKWARD); @@ -161,17 +162,14 @@ _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNI assert(PyCode_Check(code)); PyInterpreterState *interp = _PyInterpreterState_GET(); if (!has_space_for_executor(code, src)) { - goto jump_to_destination; + return 0; } _PyOptimizerObject *opt = interp->optimizer; _PyExecutorObject *executor = NULL; int err = opt->optimize(opt, code, dest, &executor, (int)(stack_pointer - _PyFrame_Stackbase(frame))); if (err <= 0) { assert(executor == NULL); - if (err < 0) { - return NULL; - } - goto jump_to_destination; + return err; } int index = get_index_for_executor(code, src); if (index < 0) { @@ -182,16 +180,11 @@ _PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNI * it might get confused by the executor disappearing, * but there is not much we can do about that here. */ Py_DECREF(executor); - goto jump_to_destination; + return 0; } insert_executor(code, src, index, executor); - assert(frame->prev_instr == src); - frame->prev_instr = dest - 1; - return executor->execute(executor, frame, stack_pointer); -jump_to_destination: - frame->prev_instr = dest - 1; - _PyFrame_SetStackPointer(frame, stack_pointer); - return frame; + Py_DECREF(executor); + return 1; } _PyExecutorObject * @@ -472,14 +465,14 @@ translate_bytecode_to_trace( } \ reserved = (n); // Keep ADD_TO_TRACE / ADD_TO_STUB honest -// Reserve space for main+stub uops, plus 2 for SAVE_IP and EXIT_TRACE +// Reserve space for main+stub uops, plus 2 for _SET_IP and _EXIT_TRACE #define RESERVE(main, stub) RESERVE_RAW((main) + (stub) + 2, uop_name(opcode)) // Trace stack operations (used by _PUSH_FRAME, _POP_FRAME) #define TRACE_STACK_PUSH() \ if (trace_stack_depth >= TRACE_STACK_SIZE) { \ DPRINTF(2, "Trace stack overflow\n"); \ - ADD_TO_TRACE(SAVE_IP, 0, 0); \ + ADD_TO_TRACE(_SET_IP, 0, 0); \ goto done; \ } \ trace_stack[trace_stack_depth].code = code; \ @@ -500,10 +493,10 @@ translate_bytecode_to_trace( code->co_firstlineno, 2 * INSTR_IP(initial_instr, code)); -top: // Jump here after _PUSH_FRAME +top: // Jump here after _PUSH_FRAME or likely branches for (;;) { - RESERVE_RAW(2, "epilogue"); // Always need space for SAVE_IP and EXIT_TRACE - ADD_TO_TRACE(SAVE_IP, INSTR_IP(instr, code), 0); + RESERVE_RAW(2, "epilogue"); // Always need space for _SET_IP and _EXIT_TRACE + ADD_TO_TRACE(_SET_IP, INSTR_IP(instr, code), 0); uint32_t opcode = instr->op.code; uint32_t oparg = instr->op.arg; @@ -529,7 +522,7 @@ translate_bytecode_to_trace( case POP_JUMP_IF_NONE: { RESERVE(2, 2); - ADD_TO_TRACE(IS_NONE, 0, 0); + ADD_TO_TRACE(_IS_NONE, 0, 0); opcode = POP_JUMP_IF_TRUE; goto pop_jump_if_bool; } @@ -537,7 +530,7 @@ translate_bytecode_to_trace( case POP_JUMP_IF_NOT_NONE: { RESERVE(2, 2); - ADD_TO_TRACE(IS_NONE, 0, 0); + ADD_TO_TRACE(_IS_NONE, 0, 0); opcode = POP_JUMP_IF_FALSE; goto pop_jump_if_bool; } @@ -546,16 +539,29 @@ translate_bytecode_to_trace( case POP_JUMP_IF_TRUE: { pop_jump_if_bool: - // Assume jump unlikely (TODO: handle jump likely case) RESERVE(1, 2); - _Py_CODEUNIT *target_instr = - instr + 1 + _PyOpcode_Caches[_PyOpcode_Deopt[opcode]] + oparg; max_length -= 2; // Really the start of the stubs - uint32_t uopcode = opcode == POP_JUMP_IF_TRUE ? + int counter = instr[1].cache; + int bitcount = _Py_popcount32(counter); + bool jump_likely = bitcount > 8; + bool jump_sense = opcode == POP_JUMP_IF_TRUE; + uint32_t uopcode = jump_sense ^ jump_likely ? _POP_JUMP_IF_TRUE : _POP_JUMP_IF_FALSE; + _Py_CODEUNIT *next_instr = instr + 1 + _PyOpcode_Caches[_PyOpcode_Deopt[opcode]]; + _Py_CODEUNIT *target_instr = next_instr + oparg; + _Py_CODEUNIT *stub_target = jump_likely ? next_instr : target_instr; + DPRINTF(4, "%s(%d): counter=%x, bitcount=%d, likely=%d, sense=%d, uopcode=%s\n", + uop_name(opcode), oparg, + counter, bitcount, jump_likely, jump_sense, uop_name(uopcode)); ADD_TO_TRACE(uopcode, max_length, 0); - ADD_TO_STUB(max_length, SAVE_IP, INSTR_IP(target_instr, code), 0); - ADD_TO_STUB(max_length + 1, EXIT_TRACE, 0, 0); + ADD_TO_STUB(max_length, _SET_IP, INSTR_IP(stub_target, code), 0); + ADD_TO_STUB(max_length + 1, _EXIT_TRACE, 0, 0); + if (jump_likely) { + DPRINTF(2, "Jump likely (%x = %d bits), continue at byte offset %d\n", + instr[1].cache, bitcount, 2 * INSTR_IP(target_instr, code)); + instr = target_instr; + goto top; + } break; } @@ -563,7 +569,7 @@ translate_bytecode_to_trace( { if (instr + 2 - oparg == initial_instr && code == initial_code) { RESERVE(1, 0); - ADD_TO_TRACE(JUMP_TO_TOP, 0, 0); + ADD_TO_TRACE(_JUMP_TO_TOP, 0, 0); } else { DPRINTF(2, "JUMP_BACKWARD not to top ends trace\n"); @@ -574,7 +580,7 @@ translate_bytecode_to_trace( case JUMP_FORWARD: { RESERVE(0, 0); - // This will emit two SAVE_IP instructions; leave it to the optimizer + // This will emit two _SET_IP instructions; leave it to the optimizer instr += oparg; break; } @@ -614,8 +620,8 @@ translate_bytecode_to_trace( ADD_TO_TRACE(next_op, 0, 0); ADD_TO_STUB(max_length + 0, POP_TOP, 0, 0); - ADD_TO_STUB(max_length + 1, SAVE_IP, INSTR_IP(target_instr, code), 0); - ADD_TO_STUB(max_length + 2, EXIT_TRACE, 0, 0); + ADD_TO_STUB(max_length + 1, _SET_IP, INSTR_IP(target_instr, code), 0); + ADD_TO_STUB(max_length + 2, _EXIT_TRACE, 0, 0); break; } @@ -623,7 +629,7 @@ translate_bytecode_to_trace( { const struct opcode_macro_expansion *expansion = &_PyOpcode_macro_expansion[opcode]; if (expansion->nuops > 0) { - // Reserve space for nuops (+ SAVE_IP + EXIT_TRACE) + // Reserve space for nuops (+ _SET_IP + _EXIT_TRACE) int nuops = expansion->nuops; RESERVE(nuops, 0); if (expansion->uops[nuops-1].uop == _POP_FRAME) { @@ -667,7 +673,7 @@ translate_bytecode_to_trace( case OPARG_BOTTOM: // Second half of super-instr oparg = orig_oparg & 0xF; break; - case OPARG_SAVE_IP: // op==SAVE_IP; oparg=next instr + case OPARG_SET_IP: // op==_SET_IP; oparg=next instr oparg = INSTR_IP(instr + offset, code); break; @@ -707,7 +713,7 @@ translate_bytecode_to_trace( PyUnicode_AsUTF8(new_code->co_qualname), PyUnicode_AsUTF8(new_code->co_filename), new_code->co_firstlineno); - ADD_TO_TRACE(SAVE_IP, 0, 0); + ADD_TO_TRACE(_SET_IP, 0, 0); goto done; } if (new_code->co_version != func_version) { @@ -715,7 +721,7 @@ translate_bytecode_to_trace( // Perhaps it may happen again, so don't bother tracing. // TODO: Reason about this -- is it better to bail or not? DPRINTF(2, "Bailing because co_version != func_version\n"); - ADD_TO_TRACE(SAVE_IP, 0, 0); + ADD_TO_TRACE(_SET_IP, 0, 0); goto done; } // Increment IP to the return address @@ -731,7 +737,7 @@ translate_bytecode_to_trace( 2 * INSTR_IP(instr, code)); goto top; } - ADD_TO_TRACE(SAVE_IP, 0, 0); + ADD_TO_TRACE(_SET_IP, 0, 0); goto done; } } @@ -753,9 +759,9 @@ translate_bytecode_to_trace( TRACE_STACK_POP(); } assert(code == initial_code); - // Skip short traces like SAVE_IP, LOAD_FAST, SAVE_IP, EXIT_TRACE + // Skip short traces like _SET_IP, LOAD_FAST, _SET_IP, _EXIT_TRACE if (trace_length > 3) { - ADD_TO_TRACE(EXIT_TRACE, 0, 0); + ADD_TO_TRACE(_EXIT_TRACE, 0, 0); DPRINTF(1, "Created a trace for %s (%s:%d) at byte offset %d -- length %d+%d\n", PyUnicode_AsUTF8(code->co_qualname), @@ -804,25 +810,25 @@ translate_bytecode_to_trace( static int remove_unneeded_uops(_PyUOpInstruction *trace, int trace_length) { - // Stage 1: Replace unneeded SAVE_IP uops with NOP. - // Note that we don't enter stubs, those SAVE_IPs are needed. - int last_save_ip = -1; + // Stage 1: Replace unneeded _SET_IP uops with NOP. + // Note that we don't enter stubs, those SET_IPs are needed. + int last_set_ip = -1; int last_instr = 0; bool need_ip = true; for (int pc = 0; pc < trace_length; pc++) { int opcode = trace[pc].opcode; - if (opcode == SAVE_CURRENT_IP) { - // Special case: never remove preceding SAVE_IP - last_save_ip = -1; + if (opcode == _SAVE_CURRENT_IP) { + // Special case: never remove preceding _SET_IP + last_set_ip = -1; } - else if (opcode == SAVE_IP) { - if (!need_ip && last_save_ip >= 0) { - trace[last_save_ip].opcode = NOP; + else if (opcode == _SET_IP) { + if (!need_ip && last_set_ip >= 0) { + trace[last_set_ip].opcode = NOP; } need_ip = false; - last_save_ip = pc; + last_set_ip = pc; } - else if (opcode == JUMP_TO_TOP || opcode == EXIT_TRACE) { + else if (opcode == _JUMP_TO_TOP || opcode == _EXIT_TRACE) { last_instr = pc + 1; break; } @@ -926,6 +932,6 @@ PyUnstable_Optimizer_NewUOpOptimizer(void) opt->resume_threshold = UINT16_MAX; // Need at least 3 iterations to settle specializations. // A few lower bits of the counter are reserved for other flags. - opt->backedge_threshold = 3 << OPTIMIZER_BITS_IN_COUNTER; + opt->backedge_threshold = 16 << OPTIMIZER_BITS_IN_COUNTER; return (PyObject *)opt; } diff --git a/Python/parking_lot.c b/Python/parking_lot.c new file mode 100644 index 00000000000000..664e622cc17474 --- /dev/null +++ b/Python/parking_lot.c @@ -0,0 +1,370 @@ +#include "Python.h" + +#include "pycore_llist.h" +#include "pycore_lock.h" // _PyRawMutex +#include "pycore_parking_lot.h" +#include "pycore_pyerrors.h" // _Py_FatalErrorFormat +#include "pycore_pystate.h" // _PyThreadState_GET +#include "pycore_semaphore.h" // _PySemaphore + +#include + + +typedef struct { + // The mutex protects the waiter queue and the num_waiters counter. + _PyRawMutex mutex; + + // Linked list of `struct wait_entry` waiters in this bucket. + struct llist_node root; + size_t num_waiters; +} Bucket; + +struct wait_entry { + void *park_arg; + uintptr_t addr; + _PySemaphore sema; + struct llist_node node; + bool is_unparking; +}; + +// Prime number to avoid correlations with memory addresses. +// We want this to be roughly proportional to the number of CPU cores +// to minimize contention on the bucket locks, but not too big to avoid +// wasting memory. The exact choice does not matter much. +#define NUM_BUCKETS 257 + +#define BUCKET_INIT(b, i) [i] = { .root = LLIST_INIT(b[i].root) } +#define BUCKET_INIT_2(b, i) BUCKET_INIT(b, i), BUCKET_INIT(b, i+1) +#define BUCKET_INIT_4(b, i) BUCKET_INIT_2(b, i), BUCKET_INIT_2(b, i+2) +#define BUCKET_INIT_8(b, i) BUCKET_INIT_4(b, i), BUCKET_INIT_4(b, i+4) +#define BUCKET_INIT_16(b, i) BUCKET_INIT_8(b, i), BUCKET_INIT_8(b, i+8) +#define BUCKET_INIT_32(b, i) BUCKET_INIT_16(b, i), BUCKET_INIT_16(b, i+16) +#define BUCKET_INIT_64(b, i) BUCKET_INIT_32(b, i), BUCKET_INIT_32(b, i+32) +#define BUCKET_INIT_128(b, i) BUCKET_INIT_64(b, i), BUCKET_INIT_64(b, i+64) +#define BUCKET_INIT_256(b, i) BUCKET_INIT_128(b, i), BUCKET_INIT_128(b, i+128) + +// Table of waiters (hashed by address) +static Bucket buckets[NUM_BUCKETS] = { + BUCKET_INIT_256(buckets, 0), + BUCKET_INIT(buckets, 256), +}; + +void +_PySemaphore_Init(_PySemaphore *sema) +{ +#if defined(MS_WINDOWS) + sema->platform_sem = CreateSemaphore( + NULL, // attributes + 0, // initial count + 10, // maximum count + NULL // unnamed + ); + if (!sema->platform_sem) { + Py_FatalError("parking_lot: CreateSemaphore failed"); + } +#elif defined(_Py_USE_SEMAPHORES) + if (sem_init(&sema->platform_sem, /*pshared=*/0, /*value=*/0) < 0) { + Py_FatalError("parking_lot: sem_init failed"); + } +#else + if (pthread_mutex_init(&sema->mutex, NULL) != 0) { + Py_FatalError("parking_lot: pthread_mutex_init failed"); + } + if (pthread_cond_init(&sema->cond, NULL)) { + Py_FatalError("parking_lot: pthread_cond_init failed"); + } + sema->counter = 0; +#endif +} + +void +_PySemaphore_Destroy(_PySemaphore *sema) +{ +#if defined(MS_WINDOWS) + CloseHandle(sema->platform_sem); +#elif defined(_Py_USE_SEMAPHORES) + sem_destroy(&sema->platform_sem); +#else + pthread_mutex_destroy(&sema->mutex); + pthread_cond_destroy(&sema->cond); +#endif +} + +static int +_PySemaphore_PlatformWait(_PySemaphore *sema, _PyTime_t timeout) +{ + int res; +#if defined(MS_WINDOWS) + DWORD wait; + DWORD millis = 0; + if (timeout < 0) { + millis = INFINITE; + } + else { + millis = (DWORD) (timeout / 1000000); + } + wait = WaitForSingleObjectEx(sema->platform_sem, millis, FALSE); + if (wait == WAIT_OBJECT_0) { + res = Py_PARK_OK; + } + else if (wait == WAIT_TIMEOUT) { + res = Py_PARK_TIMEOUT; + } + else { + res = Py_PARK_INTR; + } +#elif defined(_Py_USE_SEMAPHORES) + int err; + if (timeout >= 0) { + struct timespec ts; + + _PyTime_t deadline = _PyTime_Add(_PyTime_GetSystemClock(), timeout); + _PyTime_AsTimespec(deadline, &ts); + + err = sem_timedwait(&sema->platform_sem, &ts); + } + else { + err = sem_wait(&sema->platform_sem); + } + if (err == -1) { + err = errno; + if (err == EINTR) { + res = Py_PARK_INTR; + } + else if (err == ETIMEDOUT) { + res = Py_PARK_TIMEOUT; + } + else { + _Py_FatalErrorFormat(__func__, + "unexpected error from semaphore: %d", + err); + } + } + else { + res = Py_PARK_OK; + } +#else + pthread_mutex_lock(&sema->mutex); + int err = 0; + if (sema->counter == 0) { + if (timeout >= 0) { + struct timespec ts; + + _PyTime_t deadline = _PyTime_Add(_PyTime_GetSystemClock(), timeout); + _PyTime_AsTimespec(deadline, &ts); + + err = pthread_cond_timedwait(&sema->cond, &sema->mutex, &ts); + } + else { + err = pthread_cond_wait(&sema->cond, &sema->mutex); + } + } + if (sema->counter > 0) { + sema->counter--; + res = Py_PARK_OK; + } + else if (err) { + res = Py_PARK_TIMEOUT; + } + else { + res = Py_PARK_INTR; + } + pthread_mutex_unlock(&sema->mutex); +#endif + return res; +} + +int +_PySemaphore_Wait(_PySemaphore *sema, _PyTime_t timeout, int detach) +{ + PyThreadState *tstate = NULL; + if (detach) { + tstate = _PyThreadState_GET(); + if (tstate) { + PyEval_ReleaseThread(tstate); + } + } + + int res = _PySemaphore_PlatformWait(sema, timeout); + + if (detach && tstate) { + PyEval_AcquireThread(tstate); + } + return res; +} + +void +_PySemaphore_Wakeup(_PySemaphore *sema) +{ +#if defined(MS_WINDOWS) + if (!ReleaseSemaphore(sema->platform_sem, 1, NULL)) { + Py_FatalError("parking_lot: ReleaseSemaphore failed"); + } +#elif defined(_Py_USE_SEMAPHORES) + int err = sem_post(&sema->platform_sem); + if (err != 0) { + Py_FatalError("parking_lot: sem_post failed"); + } +#else + pthread_mutex_lock(&sema->mutex); + sema->counter++; + pthread_cond_signal(&sema->cond); + pthread_mutex_unlock(&sema->mutex); +#endif +} + +static void +enqueue(Bucket *bucket, const void *address, struct wait_entry *wait) +{ + llist_insert_tail(&bucket->root, &wait->node); + ++bucket->num_waiters; +} + +static struct wait_entry * +dequeue(Bucket *bucket, const void *address) +{ + // find the first waiter that is waiting on `address` + struct llist_node *root = &bucket->root; + struct llist_node *node; + llist_for_each(node, root) { + struct wait_entry *wait = llist_data(node, struct wait_entry, node); + if (wait->addr == (uintptr_t)address) { + llist_remove(node); + --bucket->num_waiters; + return wait; + } + } + return NULL; +} + +static void +dequeue_all(Bucket *bucket, const void *address, struct llist_node *dst) +{ + // remove and append all matching waiters to dst + struct llist_node *root = &bucket->root; + struct llist_node *node; + llist_for_each_safe(node, root) { + struct wait_entry *wait = llist_data(node, struct wait_entry, node); + if (wait->addr == (uintptr_t)address) { + llist_remove(node); + llist_insert_tail(dst, node); + --bucket->num_waiters; + } + } +} + +// Checks that `*addr == *expected` (only works for 1, 2, 4, or 8 bytes) +static int +atomic_memcmp(const void *addr, const void *expected, size_t addr_size) +{ + switch (addr_size) { + case 1: return _Py_atomic_load_uint8(addr) == *(const uint8_t *)expected; + case 2: return _Py_atomic_load_uint16(addr) == *(const uint16_t *)expected; + case 4: return _Py_atomic_load_uint32(addr) == *(const uint32_t *)expected; + case 8: return _Py_atomic_load_uint64(addr) == *(const uint64_t *)expected; + default: Py_UNREACHABLE(); + } +} + +int +_PyParkingLot_Park(const void *addr, const void *expected, size_t size, + _PyTime_t timeout_ns, void *park_arg, int detach) +{ + struct wait_entry wait = { + .park_arg = park_arg, + .addr = (uintptr_t)addr, + .is_unparking = false, + }; + + Bucket *bucket = &buckets[((uintptr_t)addr) % NUM_BUCKETS]; + + _PyRawMutex_Lock(&bucket->mutex); + if (!atomic_memcmp(addr, expected, size)) { + _PyRawMutex_Unlock(&bucket->mutex); + return Py_PARK_AGAIN; + } + _PySemaphore_Init(&wait.sema); + enqueue(bucket, addr, &wait); + _PyRawMutex_Unlock(&bucket->mutex); + + int res = _PySemaphore_Wait(&wait.sema, timeout_ns, detach); + if (res == Py_PARK_OK) { + goto done; + } + + // timeout or interrupt + _PyRawMutex_Lock(&bucket->mutex); + if (wait.is_unparking) { + _PyRawMutex_Unlock(&bucket->mutex); + // Another thread has started to unpark us. Wait until we process the + // wakeup signal. + do { + res = _PySemaphore_Wait(&wait.sema, -1, detach); + } while (res != Py_PARK_OK); + goto done; + } + else { + llist_remove(&wait.node); + --bucket->num_waiters; + } + _PyRawMutex_Unlock(&bucket->mutex); + +done: + _PySemaphore_Destroy(&wait.sema); + return res; + +} + +void +_PyParkingLot_Unpark(const void *addr, _Py_unpark_fn_t *fn, void *arg) +{ + Bucket *bucket = &buckets[((uintptr_t)addr) % NUM_BUCKETS]; + + // Find the first waiter that is waiting on `addr` + _PyRawMutex_Lock(&bucket->mutex); + struct wait_entry *waiter = dequeue(bucket, addr); + if (waiter) { + waiter->is_unparking = true; + + int has_more_waiters = (bucket->num_waiters > 0); + fn(arg, waiter->park_arg, has_more_waiters); + } + else { + fn(arg, NULL, 0); + } + _PyRawMutex_Unlock(&bucket->mutex); + + if (waiter) { + // Wakeup the waiter outside of the bucket lock + _PySemaphore_Wakeup(&waiter->sema); + } +} + +void +_PyParkingLot_UnparkAll(const void *addr) +{ + struct llist_node head = LLIST_INIT(head); + Bucket *bucket = &buckets[((uintptr_t)addr) % NUM_BUCKETS]; + + _PyRawMutex_Lock(&bucket->mutex); + dequeue_all(bucket, addr, &head); + _PyRawMutex_Unlock(&bucket->mutex); + + struct llist_node *node; + llist_for_each_safe(node, &head) { + struct wait_entry *waiter = llist_data(node, struct wait_entry, node); + llist_remove(node); + _PySemaphore_Wakeup(&waiter->sema); + } +} + +void +_PyParkingLot_AfterFork(void) +{ + // After a fork only one thread remains. That thread cannot be blocked + // so all entries in the parking lot are for dead threads. + memset(buckets, 0, sizeof(buckets)); + for (Py_ssize_t i = 0; i < NUM_BUCKETS; i++) { + llist_init(&buckets[i].root); + } +} diff --git a/Python/pathconfig.c b/Python/pathconfig.c index afffa134e893ba..0ac64ec8110259 100644 --- a/Python/pathconfig.c +++ b/Python/pathconfig.c @@ -1,13 +1,15 @@ /* Path configuration like module_search_path (sys.path) */ #include "Python.h" -#include "marshal.h" // PyMarshal_ReadObjectFromString -#include "osdefs.h" // DELIM -#include "pycore_initconfig.h" -#include "pycore_fileutils.h" +#include "pycore_initconfig.h" // _PyStatus_OK() +#include "pycore_fileutils.h" // _Py_wgetcwd() #include "pycore_pathconfig.h" #include "pycore_pymem.h" // _PyMem_SetDefaultAllocator() #include + +#include "marshal.h" // PyMarshal_ReadObjectFromString +#include "osdefs.h" // DELIM + #ifdef MS_WINDOWS # include // GetFullPathNameW(), MAX_PATH # include diff --git a/Python/perf_trampoline.c b/Python/perf_trampoline.c index 10675bf9f8292a..209a23b6c1cbc7 100644 --- a/Python/perf_trampoline.c +++ b/Python/perf_trampoline.c @@ -130,9 +130,10 @@ any DWARF information available for them). */ #include "Python.h" -#include "pycore_ceval.h" +#include "pycore_ceval.h" // _PyPerf_Callbacks #include "pycore_frame.h" #include "pycore_interp.h" +#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg() #ifdef PY_HAVE_PERF_TRAMPOLINE diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 64c74f433f222c..aec8da10249d21 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -17,7 +17,7 @@ #include "pycore_list.h" // _PyList_Fini() #include "pycore_long.h" // _PyLong_InitTypes() #include "pycore_object.h" // _PyDebug_PrintTotalRefs() -#include "pycore_pathconfig.h" // _PyConfig_WritePathConfig() +#include "pycore_pathconfig.h" // _PyPathConfig_UpdateGlobal() #include "pycore_pyerrors.h" // _PyErr_Occurred() #include "pycore_pylifecycle.h" // _PyErr_Print() #include "pycore_pymem.h" // _PyObject_DebugMallocStats() @@ -32,13 +32,14 @@ #include "pycore_typevarobject.h" // _Py_clear_generic_types() #include "pycore_unicodeobject.h" // _PyUnicode_InitTypes() #include "pycore_weakref.h" // _PyWeakref_GET_REF() + #include "opcode.h" #include // setlocale() #include // getenv() #if defined(__APPLE__) -#include +# include #endif #ifdef HAVE_SIGNAL_H @@ -831,11 +832,6 @@ pycore_interp_init(PyThreadState *tstate) if (_PyStatus_EXCEPTION(status)) { return status; } - // Intern strings in deep-frozen modules first so that others - // can use it instead of creating a heap allocated string. - if (_Py_Deepfreeze_Init() < 0) { - return _PyStatus_ERR("failed to initialize deep-frozen modules"); - } status = pycore_init_types(interp); if (_PyStatus_EXCEPTION(status)) { @@ -1643,27 +1639,20 @@ flush_std_files(void) PyThreadState *tstate = _PyThreadState_GET(); PyObject *fout = _PySys_GetAttr(tstate, &_Py_ID(stdout)); PyObject *ferr = _PySys_GetAttr(tstate, &_Py_ID(stderr)); - PyObject *tmp; int status = 0; if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { - tmp = PyObject_CallMethodNoArgs(fout, &_Py_ID(flush)); - if (tmp == NULL) { + if (_PyFile_Flush(fout) < 0) { PyErr_WriteUnraisable(fout); status = -1; } - else - Py_DECREF(tmp); } if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { - tmp = PyObject_CallMethodNoArgs(ferr, &_Py_ID(flush)); - if (tmp == NULL) { + if (_PyFile_Flush(ferr) < 0) { PyErr_Clear(); status = -1; } - else - Py_DECREF(tmp); } return status; @@ -1742,7 +1731,6 @@ finalize_interp_clear(PyThreadState *tstate) _Py_HashRandomization_Fini(); _PyArg_Fini(); _Py_ClearFileSystemEncoding(); - _Py_Deepfreeze_Fini(); _PyPerfTrampoline_Fini(); } @@ -2637,13 +2625,9 @@ _Py_FatalError_PrintExc(PyThreadState *tstate) Py_DECREF(exc); /* sys.stderr may be buffered: call sys.stderr.flush() */ - PyObject *res = PyObject_CallMethodNoArgs(ferr, &_Py_ID(flush)); - if (res == NULL) { + if (_PyFile_Flush(ferr) < 0) { _PyErr_Clear(tstate); } - else { - Py_DECREF(res); - } return has_tb; } diff --git a/Python/pystate.c b/Python/pystate.c index 46ea2c4f678db8..dcc6c112215b30 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -5,11 +5,13 @@ #include "pycore_ceval.h" #include "pycore_code.h" // stats #include "pycore_dtoa.h" // _dtoa_state_INIT() +#include "pycore_emscripten_trampoline.h" // _Py_EmscriptenTrampoline_Init() #include "pycore_frame.h" -#include "pycore_initconfig.h" +#include "pycore_initconfig.h" // _PyStatus_OK() #include "pycore_object.h" // _PyType_InitCache() -#include "pycore_pyerrors.h" -#include "pycore_pylifecycle.h" +#include "pycore_parking_lot.h" // _PyParkingLot_AfterFork() +#include "pycore_pyerrors.h" // _PyErr_Clear() +#include "pycore_pylifecycle.h" // _PyAST_Fini() #include "pycore_pymem.h" // _PyMem_SetDefaultAllocator() #include "pycore_pystate.h" #include "pycore_runtime_init.h" // _PyRuntimeState_INIT @@ -449,6 +451,10 @@ init_runtime(_PyRuntimeState *runtime, runtime->unicode_state.ids.next_index = unicode_next_index; +#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE) + _Py_EmscriptenTrampoline_Init(runtime); +#endif + runtime->_initialized = 1; } @@ -549,6 +555,10 @@ _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime) PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc); + // Clears the parking lot. Any waiting threads are dead. This must be + // called before releasing any locks that use the parking lot. + _PyParkingLot_AfterFork(); + /* bpo-42540: id_mutex is freed by _PyInterpreterState_Delete, which does * not force the default allocator. */ reinit_err += _PyThread_at_fork_reinit(&runtime->interpreters.main->id_mutex); @@ -697,6 +707,7 @@ init_interpreter(PyInterpreterState *interp, interp->optimizer = &_PyOptimizer_Default; interp->optimizer_backedge_threshold = _PyOptimizer_Default.backedge_threshold; interp->optimizer_resume_threshold = _PyOptimizer_Default.backedge_threshold; + interp->next_func_version = 1; if (interp != &runtime->_main_interpreter) { /* Fix the self-referential, statically initialized fields. */ interp->dtoa = (struct _dtoa_state)_dtoa_state_INIT(interp); @@ -1333,7 +1344,7 @@ init_threadstate(PyThreadState *tstate, tstate->py_recursion_limit = interp->ceval.recursion_limit, tstate->py_recursion_remaining = interp->ceval.recursion_limit, - tstate->c_recursion_remaining = C_RECURSION_LIMIT; + tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT; tstate->exc_info = &tstate->exc_state; @@ -1906,6 +1917,10 @@ PyThreadState_Swap(PyThreadState *newts) void _PyThreadState_Bind(PyThreadState *tstate) { + // gh-104690: If Python is being finalized and PyInterpreterState_Delete() + // was called, tstate becomes a dangling pointer. + assert(_PyThreadState_CheckConsistency(tstate)); + bind_tstate(tstate); // This makes sure there's a gilstate tstate bound // as soon as possible. @@ -2294,10 +2309,16 @@ _xidata_init(_PyCrossInterpreterData *data) static inline void _xidata_clear(_PyCrossInterpreterData *data) { - if (data->free != NULL) { - data->free(data->data); + // _PyCrossInterpreterData only has two members that need to be + // cleaned up, if set: "data" must be freed and "obj" must be decref'ed. + // In both cases the original (owning) interpreter must be used, + // which is the caller's responsibility to ensure. + if (data->data != NULL) { + if (data->free != NULL) { + data->free(data->data); + } + data->data = NULL; } - data->data = NULL; Py_CLEAR(data->obj); } @@ -2442,40 +2463,32 @@ _PyCrossInterpreterData_NewObject(_PyCrossInterpreterData *data) return data->new_object(data); } -typedef void (*releasefunc)(PyInterpreterState *, void *); - -static void -_call_in_interpreter(PyInterpreterState *interp, releasefunc func, void *arg) +static int +_release_xidata_pending(void *data) { - /* We would use Py_AddPendingCall() if it weren't specific to the - * main interpreter (see bpo-33608). In the meantime we take a - * naive approach. - */ - _PyRuntimeState *runtime = interp->runtime; - PyThreadState *save_tstate = NULL; - if (interp != current_fast_get(runtime)->interp) { - // XXX Using the "head" thread isn't strictly correct. - PyThreadState *tstate = PyInterpreterState_ThreadHead(interp); - // XXX Possible GILState issues? - save_tstate = _PyThreadState_Swap(runtime, tstate); - } - - // XXX Once the GIL is per-interpreter, this should be called with the - // calling interpreter's GIL released and the target interpreter's held. - func(interp, arg); + _xidata_clear((_PyCrossInterpreterData *)data); + return 0; +} - // Switch back. - if (save_tstate != NULL) { - _PyThreadState_Swap(runtime, save_tstate); - } +static int +_xidata_release_and_rawfree_pending(void *data) +{ + _xidata_clear((_PyCrossInterpreterData *)data); + PyMem_RawFree(data); + return 0; } -int -_PyCrossInterpreterData_Release(_PyCrossInterpreterData *data) +static int +_xidata_release(_PyCrossInterpreterData *data, int rawfree) { - if (data->free == NULL && data->obj == NULL) { + if ((data->data == NULL || data->free == NULL) && data->obj == NULL) { // Nothing to release! - data->data = NULL; + if (rawfree) { + PyMem_RawFree(data); + } + else { + data->data = NULL; + } return 0; } @@ -2486,15 +2499,42 @@ _PyCrossInterpreterData_Release(_PyCrossInterpreterData *data) // This function shouldn't have been called. // XXX Someone leaked some memory... assert(PyErr_Occurred()); + if (rawfree) { + PyMem_RawFree(data); + } return -1; } // "Release" the data and/or the object. - _call_in_interpreter(interp, - (releasefunc)_PyCrossInterpreterData_Clear, data); + if (interp == current_fast_get(interp->runtime)->interp) { + _xidata_clear(data); + if (rawfree) { + PyMem_RawFree(data); + } + } + else { + _Py_pending_call_func func = _release_xidata_pending; + if (rawfree) { + func = _xidata_release_and_rawfree_pending; + } + // XXX Emit a warning if this fails? + _PyEval_AddPendingCall(interp, func, data, 0); + } return 0; } +int +_PyCrossInterpreterData_Release(_PyCrossInterpreterData *data) +{ + return _xidata_release(data, 0); +} + +int +_PyCrossInterpreterData_ReleaseAndRawFree(_PyCrossInterpreterData *data) +{ + return _xidata_release(data, 1); +} + /* registry of {type -> crossinterpdatafunc} */ /* For now we use a global registry of shareable classes. An @@ -2889,6 +2929,49 @@ _PyThreadState_PopFrame(PyThreadState *tstate, _PyInterpreterFrame * frame) } +#ifndef NDEBUG +// Check that a Python thread state valid. In practice, this function is used +// on a Python debug build to check if 'tstate' is a dangling pointer, if the +// PyThreadState memory has been freed. +// +// Usage: +// +// assert(_PyThreadState_CheckConsistency(tstate)); +int +_PyThreadState_CheckConsistency(PyThreadState *tstate) +{ + assert(!_PyMem_IsPtrFreed(tstate)); + assert(!_PyMem_IsPtrFreed(tstate->interp)); + return 1; +} +#endif + + +// Check if a Python thread must exit immediately, rather than taking the GIL +// if Py_Finalize() has been called. +// +// When this function is called by a daemon thread after Py_Finalize() has been +// called, the GIL does no longer exist. +// +// tstate can be a dangling pointer (point to freed memory): only tstate value +// is used, the pointer is not deferenced. +// +// tstate must be non-NULL. +int +_PyThreadState_MustExit(PyThreadState *tstate) +{ + /* bpo-39877: Access _PyRuntime directly rather than using + tstate->interp->runtime to support calls from Python daemon threads. + After Py_Finalize() has been called, tstate can be a dangling pointer: + point to PyThreadState freed memory. */ + PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime); + if (finalizing == NULL) { + finalizing = _PyInterpreterState_GetFinalizing(tstate->interp); + } + return (finalizing != NULL && finalizing != tstate); +} + + #ifdef __cplusplus } #endif diff --git a/Python/pystrhex.c b/Python/pystrhex.c index ce456b79f1655f..38484f5a7d4227 100644 --- a/Python/pystrhex.c +++ b/Python/pystrhex.c @@ -3,7 +3,6 @@ #include "Python.h" #include "pycore_strhex.h" // _Py_strhex_with_sep() #include "pycore_unicodeobject.h" // _PyUnicode_CheckConsistency() -#include // abs() static PyObject *_Py_strhex_impl(const char* argbuf, const Py_ssize_t arglen, PyObject* sep, int bytes_per_sep_group, @@ -44,7 +43,7 @@ static PyObject *_Py_strhex_impl(const char* argbuf, const Py_ssize_t arglen, bytes_per_sep_group = 0; } - unsigned int abs_bytes_per_sep = abs(bytes_per_sep_group); + unsigned int abs_bytes_per_sep = Py_ABS(bytes_per_sep_group); Py_ssize_t resultlen = 0; if (bytes_per_sep_group && arglen > 0) { /* How many sep characters we'll be inserting. */ diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 9bb060e3d11979..16bf06f0e6cca2 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -3,7 +3,8 @@ #include #include "pycore_dtoa.h" // _Py_dg_strtod() #include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR -#include + +#include // localeconv() /* Case-insensitive string match used for nan and inf detection; t should be lower-case. Returns 1 for a successful match, 0 otherwise. */ diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 231ac78146a0e6..81ab78e95ab68c 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -12,16 +12,16 @@ #include "Python.h" -#include "pycore_ast.h" // PyAST_mod2obj -#include "pycore_ceval.h" // _Py_EnterRecursiveCall +#include "pycore_ast.h" // PyAST_mod2obj() +#include "pycore_ceval.h" // _Py_EnterRecursiveCall() #include "pycore_compile.h" // _PyAST_Compile() #include "pycore_interp.h" // PyInterpreterState.importlib #include "pycore_object.h" // _PyDebug_PrintTotalRefs() #include "pycore_parser.h" // _PyParser_ASTFromString() -#include "pycore_pyerrors.h" // _PyErr_GetRaisedException, _Py_Offer_Suggestions -#include "pycore_pylifecycle.h" // _Py_UnhandledKeyboardInterrupt +#include "pycore_pyerrors.h" // _PyErr_GetRaisedException() +#include "pycore_pylifecycle.h" // _Py_FdIsInteractive() #include "pycore_pystate.h" // _PyInterpreterState_GET() -#include "pycore_pythonrun.h" // define _PyRun_InteractiveLoopObject() +#include "pycore_pythonrun.h" // export _PyRun_InteractiveLoopObject() #include "pycore_sysmodule.h" // _PySys_Audit() #include "pycore_traceback.h" // _PyTraceBack_Print_Indented() @@ -1125,21 +1125,16 @@ print_exception_suggestions(struct exception_print_context *ctx, } static int -print_exception_notes(struct exception_print_context *ctx, PyObject *value) +print_exception_notes(struct exception_print_context *ctx, PyObject *notes) { PyObject *f = ctx->file; - if (!PyExceptionInstance_Check(value)) { + if (notes == NULL) { return 0; } - PyObject *notes; - int res = PyObject_GetOptionalAttr(value, &_Py_ID(__notes__), ¬es); - if (res <= 0) { - return res; - } if (!PySequence_Check(notes) || PyUnicode_Check(notes) || PyBytes_Check(notes)) { - res = 0; + int res = 0; if (write_indented_margin(ctx, f) < 0) { res = -1; } @@ -1152,7 +1147,6 @@ print_exception_notes(struct exception_print_context *ctx, PyObject *value) res = PyFile_WriteObject(s, f, Py_PRINT_RAW); Py_DECREF(s); } - Py_DECREF(notes); if (PyFile_WriteString("\n", f) < 0) { res = -1; } @@ -1197,17 +1191,16 @@ print_exception_notes(struct exception_print_context *ctx, PyObject *value) } } - Py_DECREF(notes); return 0; error: Py_XDECREF(lines); - Py_DECREF(notes); return -1; } static int print_exception(struct exception_print_context *ctx, PyObject *value) { + PyObject *notes = NULL; PyObject *f = ctx->file; if (!PyExceptionInstance_Check(value)) { @@ -1221,8 +1214,11 @@ print_exception(struct exception_print_context *ctx, PyObject *value) goto error; } - /* grab the type now because value can change below */ + /* grab the type and notes now because value can change below */ PyObject *type = (PyObject *) Py_TYPE(value); + if (PyObject_GetOptionalAttr(value, &_Py_ID(__notes__), ¬es) < 0) { + goto error; + } if (print_exception_file_and_line(ctx, &value) < 0) { goto error; @@ -1236,14 +1232,16 @@ print_exception(struct exception_print_context *ctx, PyObject *value) if (PyFile_WriteString("\n", f) < 0) { goto error; } - if (print_exception_notes(ctx, value) < 0) { + if (print_exception_notes(ctx, notes) < 0) { goto error; } + Py_XDECREF(notes); Py_DECREF(value); assert(!PyErr_Occurred()); return 0; error: + Py_XDECREF(notes); Py_DECREF(value); return -1; } @@ -1564,14 +1562,10 @@ _PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb) Py_XDECREF(ctx.seen); /* Call file.flush() */ - PyObject *res = PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); - if (!res) { + if (_PyFile_Flush(file) < 0) { /* Silently ignore file.flush() error */ PyErr_Clear(); } - else { - Py_DECREF(res); - } } void @@ -1676,11 +1670,7 @@ flush_io_stream(PyThreadState *tstate, PyObject *name) { PyObject *f = _PySys_GetAttr(tstate, name); if (f != NULL) { - PyObject *r = PyObject_CallMethodNoArgs(f, &_Py_ID(flush)); - if (r) { - Py_DECREF(r); - } - else { + if (_PyFile_Flush(f) < 0) { PyErr_Clear(); } } diff --git a/Python/pytime.c b/Python/pytime.c index 49cd5f4e8ea617..d1e29e57d362f6 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -1,5 +1,10 @@ #include "Python.h" #include "pycore_time.h" // _PyTime_t + +#include // gmtime_r() +#ifdef HAVE_SYS_TIME_H +# include // gettimeofday() +#endif #ifdef MS_WINDOWS # include // struct timeval #endif diff --git a/Python/specialize.c b/Python/specialize.c index a794f146c188ec..d9b748cad78f4f 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -4,26 +4,26 @@ #include "pycore_code.h" #include "pycore_descrobject.h" // _PyMethodWrapper_Type -#include "pycore_dict.h" +#include "pycore_dict.h" // DICT_KEYS_UNICODE #include "pycore_function.h" // _PyFunction_GetVersionForCurrentState() -#include "pycore_global_strings.h" // _Py_ID() -#include "pycore_long.h" +#include "pycore_long.h" // _PyLong_IsNonNegativeCompact() #include "pycore_moduleobject.h" #include "pycore_object.h" #include "pycore_opcode_metadata.h" // _PyOpcode_Caches #include "pycore_pylifecycle.h" // _PyOS_URandomNonblock() - +#include "pycore_runtime.h" // _Py_ID() #include // rand() + /* For guidance on adding or extending families of instructions see * ./adaptive.md */ #ifdef Py_STATS GCStats _py_gc_stats[NUM_GENERATIONS] = { 0 }; -PyStats _py_stats_struct = { .gc_stats = &_py_gc_stats[0] }; -PyStats *_py_stats = NULL; +static PyStats _Py_stats_struct = { .gc_stats = _py_gc_stats }; +PyStats *_Py_stats = NULL; #define ADD_STAT_TO_DICT(res, field) \ do { \ @@ -83,7 +83,7 @@ add_stat_dict( int opcode, const char *name) { - SpecializationStats *stats = &_py_stats_struct.opcode_stats[opcode].specialization; + SpecializationStats *stats = &_Py_stats_struct.opcode_stats[opcode].specialization; PyObject *d = stats_to_dict(stats); if (d == NULL) { return -1; @@ -93,7 +93,6 @@ add_stat_dict( return err; } -#ifdef Py_STATS PyObject* _Py_GetSpecializationStats(void) { PyObject *stats = PyDict_New(); @@ -120,12 +119,11 @@ _Py_GetSpecializationStats(void) { } return stats; } -#endif #define PRINT_STAT(i, field) \ if (stats[i].field) { \ - fprintf(out, " opcode[%d]." #field " : %" PRIu64 "\n", i, stats[i].field); \ + fprintf(out, " opcode[%s]." #field " : %" PRIu64 "\n", _PyOpcode_OpName[i], stats[i].field); \ } static void @@ -133,11 +131,11 @@ print_spec_stats(FILE *out, OpcodeStats *stats) { /* Mark some opcodes as specializable for stats, * even though we don't specialize them yet. */ - fprintf(out, "opcode[%d].specializable : 1\n", BINARY_SLICE); - fprintf(out, "opcode[%d].specializable : 1\n", STORE_SLICE); + fprintf(out, "opcode[BINARY_SLICE].specializable : 1\n"); + fprintf(out, "opcode[STORE_SLICE].specializable : 1\n"); for (int i = 0; i < 256; i++) { if (_PyOpcode_Caches[i]) { - fprintf(out, "opcode[%d].specializable : 1\n", i); + fprintf(out, "opcode[%s].specializable : 1\n", _PyOpcode_OpName[i]); } PRINT_STAT(i, specialization.success); PRINT_STAT(i, specialization.failure); @@ -149,14 +147,14 @@ print_spec_stats(FILE *out, OpcodeStats *stats) for (int j = 0; j < SPECIALIZATION_FAILURE_KINDS; j++) { uint64_t val = stats[i].specialization.failure_kinds[j]; if (val) { - fprintf(out, " opcode[%d].specialization.failure_kinds[%d] : %" - PRIu64 "\n", i, j, val); + fprintf(out, " opcode[%s].specialization.failure_kinds[%d] : %" + PRIu64 "\n", _PyOpcode_OpName[i], j, val); } } for (int j = 0; j < 256; j++) { if (stats[i].pair_count[j]) { - fprintf(out, "opcode[%d].pair_count[%d] : %" PRIu64 "\n", - i, j, stats[i].pair_count[j]); + fprintf(out, "opcode[%s].pair_count[%s] : %" PRIu64 "\n", + _PyOpcode_OpName[i], _PyOpcode_OpName[j], stats[i].pair_count[j]); } } } @@ -218,26 +216,65 @@ print_gc_stats(FILE *out, GCStats *stats) } static void -print_stats(FILE *out, PyStats *stats) { +print_stats(FILE *out, PyStats *stats) +{ print_spec_stats(out, stats->opcode_stats); print_call_stats(out, &stats->call_stats); print_object_stats(out, &stats->object_stats); print_gc_stats(out, stats->gc_stats); } +void +_Py_StatsOn(void) +{ + _Py_stats = &_Py_stats_struct; +} + +void +_Py_StatsOff(void) +{ + _Py_stats = NULL; +} + void _Py_StatsClear(void) { - for (int i = 0; i < NUM_GENERATIONS; i++) { - _py_gc_stats[i] = (GCStats) { 0 }; + memset(&_py_gc_stats, 0, sizeof(_py_gc_stats)); + memset(&_Py_stats_struct, 0, sizeof(_Py_stats_struct)); + _Py_stats_struct.gc_stats = _py_gc_stats; +} + +static int +mem_is_zero(unsigned char *ptr, size_t size) +{ + for (size_t i=0; i < size; i++) { + if (*ptr != 0) { + return 0; + } + ptr++; } - _py_stats_struct = (PyStats) { 0 }; - _py_stats_struct.gc_stats = _py_gc_stats; + return 1; } -void +int _Py_PrintSpecializationStats(int to_file) { + PyStats *stats = &_Py_stats_struct; +#define MEM_IS_ZERO(DATA) mem_is_zero((unsigned char*)DATA, sizeof(*(DATA))) + int is_zero = ( + MEM_IS_ZERO(stats->gc_stats) // is a pointer + && MEM_IS_ZERO(&stats->opcode_stats) + && MEM_IS_ZERO(&stats->call_stats) + && MEM_IS_ZERO(&stats->object_stats) + ); +#undef MEM_IS_ZERO + if (is_zero) { + // gh-108753: -X pystats command line was used, but then _stats_off() + // and _stats_clear() have been called: in this case, avoid printing + // useless "all zeros" statistics. + return 0; + } + FILE *out = stderr; if (to_file) { /* Write to a file instead of stderr. */ @@ -253,8 +290,8 @@ _Py_PrintSpecializationStats(int to_file) char hex_name[41]; _PyOS_URandomNonblock(rand, 20); for (int i = 0; i < 20; i++) { - hex_name[2*i] = "0123456789abcdef"[rand[i]&15]; - hex_name[2*i+1] = "0123456789abcdef"[(rand[i]>>4)&15]; + hex_name[2*i] = Py_hexdigits[rand[i]&15]; + hex_name[2*i+1] = Py_hexdigits[(rand[i]>>4)&15]; } hex_name[40] = '\0'; char buf[64]; @@ -268,26 +305,25 @@ _Py_PrintSpecializationStats(int to_file) else { fprintf(out, "Specialization stats:\n"); } - print_stats(out, &_py_stats_struct); + print_stats(out, stats); if (out != stderr) { fclose(out); } + return 1; } -#ifdef Py_STATS - #define SPECIALIZATION_FAIL(opcode, kind) \ do { \ - if (_py_stats) { \ - _py_stats->opcode_stats[opcode].specialization.failure_kinds[kind]++; \ + if (_Py_stats) { \ + _Py_stats->opcode_stats[opcode].specialization.failure_kinds[kind]++; \ } \ } while (0) -#endif -#endif +#endif // Py_STATS + #ifndef SPECIALIZATION_FAIL -#define SPECIALIZATION_FAIL(opcode, kind) ((void)0) +# define SPECIALIZATION_FAIL(opcode, kind) ((void)0) #endif // Initialize warmup counters and insert superinstructions. This cannot fail. @@ -302,9 +338,23 @@ _PyCode_Quicken(PyCodeObject *code) assert(opcode < MIN_INSTRUMENTED_OPCODE); int caches = _PyOpcode_Caches[opcode]; if (caches) { - // JUMP_BACKWARD counter counts up from 0 until it is > backedge_threshold - instructions[i + 1].cache = - opcode == JUMP_BACKWARD ? 0 : adaptive_counter_warmup(); + // The initial value depends on the opcode + int initial_value; + switch (opcode) { + case JUMP_BACKWARD: + initial_value = 0; + break; + case POP_JUMP_IF_FALSE: + case POP_JUMP_IF_TRUE: + case POP_JUMP_IF_NONE: + case POP_JUMP_IF_NOT_NONE: + initial_value = 0x5555; // Alternating 0, 1 bits + break; + default: + initial_value = adaptive_counter_warmup(); + break; + } + instructions[i + 1].cache = initial_value; i += caches; } } @@ -423,7 +473,6 @@ _PyCode_Quicken(PyCodeObject *code) #define SPEC_FAIL_CALL_STR 24 #define SPEC_FAIL_CALL_CLASS_NO_VECTORCALL 25 #define SPEC_FAIL_CALL_CLASS_MUTABLE 26 -#define SPEC_FAIL_CALL_KWNAMES 27 #define SPEC_FAIL_CALL_METHOD_WRAPPER 28 #define SPEC_FAIL_CALL_OPERATOR_WRAPPER 29 #define SPEC_FAIL_CALL_INIT_NOT_SIMPLE 30 @@ -1067,7 +1116,7 @@ load_attr_fail_kind(DescriptorClassification kind) } Py_UNREACHABLE(); } -#endif +#endif // Py_STATS static int specialize_class_load_attr(PyObject *owner, _Py_CODEUNIT *instr, @@ -1306,7 +1355,7 @@ binary_subscr_fail_kind(PyTypeObject *container_type, PyObject *sub) } return SPEC_FAIL_OTHER; } -#endif +#endif // Py_STATS static int function_kind(PyCodeObject *code) { @@ -1545,7 +1594,7 @@ _Py_Specialize_StoreSubscr(PyObject *container, PyObject *sub, _Py_CODEUNIT *ins } goto fail; } -#endif +#endif // Py_STATS SPECIALIZATION_FAIL(STORE_SUBSCR, SPEC_FAIL_OTHER); fail: STAT_INC(STORE_SUBSCR, failure); @@ -1594,24 +1643,23 @@ get_init_for_simple_managed_python_class(PyTypeObject *tp) } static int -specialize_class_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, - PyObject *kwnames) +specialize_class_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs) { assert(PyType_Check(callable)); PyTypeObject *tp = _PyType_CAST(callable); if (tp->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) { int oparg = instr->op.arg; - if (nargs == 1 && kwnames == NULL && oparg == 1) { + if (nargs == 1 && oparg == 1) { if (tp == &PyUnicode_Type) { - instr->op.code = CALL_NO_KW_STR_1; + instr->op.code = CALL_STR_1; return 0; } else if (tp == &PyType_Type) { - instr->op.code = CALL_NO_KW_TYPE_1; + instr->op.code = CALL_TYPE_1; return 0; } else if (tp == &PyTuple_Type) { - instr->op.code = CALL_NO_KW_TUPLE_1; + instr->op.code = CALL_TUPLE_1; return 0; } } @@ -1630,13 +1678,9 @@ specialize_class_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, SPECIALIZATION_FAIL(CALL, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS); return -1; } - if (kwnames) { - SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_KWNAMES); - return -1; - } _PyCallCache *cache = (_PyCallCache *)(instr + 1); write_u32(cache->func_version, tp->tp_version_tag); - _Py_SET_OPCODE(*instr, CALL_NO_KW_ALLOC_AND_ENTER_INIT); + _Py_SET_OPCODE(*instr, CALL_ALLOC_AND_ENTER_INIT); return 0; } return -1; @@ -1690,17 +1734,12 @@ meth_descr_call_fail_kind(int ml_flags) return SPEC_FAIL_CALL_BAD_CALL_FLAGS; } } -#endif +#endif // Py_STATS static int specialize_method_descriptor(PyMethodDescrObject *descr, _Py_CODEUNIT *instr, - int nargs, PyObject *kwnames) + int nargs) { - if (kwnames) { - SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_KWNAMES); - return -1; - } - switch (descr->d_method->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { @@ -1709,7 +1748,7 @@ specialize_method_descriptor(PyMethodDescrObject *descr, _Py_CODEUNIT *instr, SPECIALIZATION_FAIL(CALL, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS); return -1; } - instr->op.code = CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS; + instr->op.code = CALL_METHOD_DESCRIPTOR_NOARGS; return 0; } case METH_O: { @@ -1723,14 +1762,14 @@ specialize_method_descriptor(PyMethodDescrObject *descr, _Py_CODEUNIT *instr, bool pop = (next.op.code == POP_TOP); int oparg = instr->op.arg; if ((PyObject *)descr == list_append && oparg == 1 && pop) { - instr->op.code = CALL_NO_KW_LIST_APPEND; + instr->op.code = CALL_LIST_APPEND; return 0; } - instr->op.code = CALL_NO_KW_METHOD_DESCRIPTOR_O; + instr->op.code = CALL_METHOD_DESCRIPTOR_O; return 0; } case METH_FASTCALL: { - instr->op.code = CALL_NO_KW_METHOD_DESCRIPTOR_FAST; + instr->op.code = CALL_METHOD_DESCRIPTOR_FAST; return 0; } case METH_FASTCALL | METH_KEYWORDS: { @@ -1744,7 +1783,7 @@ specialize_method_descriptor(PyMethodDescrObject *descr, _Py_CODEUNIT *instr, static int specialize_py_call(PyFunctionObject *func, _Py_CODEUNIT *instr, int nargs, - PyObject *kwnames, bool bound_method) + bool bound_method) { _PyCallCache *cache = (_PyCallCache *)(instr + 1); PyCodeObject *code = (PyCodeObject *)func->func_code; @@ -1754,10 +1793,6 @@ specialize_py_call(PyFunctionObject *func, _Py_CODEUNIT *instr, int nargs, SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_PEP_523); return -1; } - if (kwnames) { - SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_KWNAMES); - return -1; - } if (kind != SIMPLE_FUNCTION) { SPECIALIZATION_FAIL(CALL, kind); return -1; @@ -1793,8 +1828,7 @@ specialize_py_call(PyFunctionObject *func, _Py_CODEUNIT *instr, int nargs, } static int -specialize_c_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, - PyObject *kwnames) +specialize_c_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs) { if (PyCFunction_GET_FUNCTION(callable) == NULL) { return 1; @@ -1803,10 +1837,6 @@ specialize_c_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { case METH_O: { - if (kwnames) { - SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_KWNAMES); - return -1; - } if (nargs != 1) { SPECIALIZATION_FAIL(CALL, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS); return 1; @@ -1814,26 +1844,22 @@ specialize_c_call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, /* len(o) */ PyInterpreterState *interp = _PyInterpreterState_GET(); if (callable == interp->callable_cache.len) { - instr->op.code = CALL_NO_KW_LEN; + instr->op.code = CALL_LEN; return 0; } - instr->op.code = CALL_NO_KW_BUILTIN_O; + instr->op.code = CALL_BUILTIN_O; return 0; } case METH_FASTCALL: { - if (kwnames) { - SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_KWNAMES); - return -1; - } if (nargs == 2) { /* isinstance(o1, o2) */ PyInterpreterState *interp = _PyInterpreterState_GET(); if (callable == interp->callable_cache.isinstance) { - instr->op.code = CALL_NO_KW_ISINSTANCE; + instr->op.code = CALL_ISINSTANCE; return 0; } } - instr->op.code = CALL_NO_KW_BUILTIN_FAST; + instr->op.code = CALL_BUILTIN_FAST; return 0; } case METH_FASTCALL | METH_KEYWORDS: { @@ -1871,15 +1897,11 @@ call_fail_kind(PyObject *callable) } return SPEC_FAIL_OTHER; } -#endif +#endif // Py_STATS -/* TODO: - - Specialize calling classes. -*/ void -_Py_Specialize_Call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, - PyObject *kwnames) +_Py_Specialize_Call(PyObject *callable, _Py_CODEUNIT *instr, int nargs) { assert(ENABLE_SPECIALIZATION); assert(_PyOpcode_Caches[CALL] == INLINE_CACHE_ENTRIES_CALL); @@ -1887,25 +1909,23 @@ _Py_Specialize_Call(PyObject *callable, _Py_CODEUNIT *instr, int nargs, _PyCallCache *cache = (_PyCallCache *)(instr + 1); int fail; if (PyCFunction_CheckExact(callable)) { - fail = specialize_c_call(callable, instr, nargs, kwnames); + fail = specialize_c_call(callable, instr, nargs); } else if (PyFunction_Check(callable)) { - fail = specialize_py_call((PyFunctionObject *)callable, instr, nargs, - kwnames, false); + fail = specialize_py_call((PyFunctionObject *)callable, instr, nargs, false); } else if (PyType_Check(callable)) { - fail = specialize_class_call(callable, instr, nargs, kwnames); + fail = specialize_class_call(callable, instr, nargs); } else if (Py_IS_TYPE(callable, &PyMethodDescr_Type)) { - fail = specialize_method_descriptor((PyMethodDescrObject *)callable, - instr, nargs, kwnames); + fail = specialize_method_descriptor((PyMethodDescrObject *)callable, instr, nargs); } else if (PyMethod_Check(callable)) { PyObject *func = ((PyMethodObject *)callable)->im_func; if (PyFunction_Check(func)) { - fail = specialize_py_call((PyFunctionObject *)func, - instr, nargs+1, kwnames, true); - } else { + fail = specialize_py_call((PyFunctionObject *)func, instr, nargs+1, true); + } + else { SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_BOUND_METHOD); fail = -1; } @@ -1995,7 +2015,7 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject *rhs) } Py_UNREACHABLE(); } -#endif +#endif // Py_STATS void _Py_Specialize_BinaryOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr, @@ -2102,7 +2122,7 @@ compare_op_fail_kind(PyObject *lhs, PyObject *rhs) } return SPEC_FAIL_OTHER; } -#endif +#endif // Py_STATS void _Py_Specialize_CompareOp(PyObject *lhs, PyObject *rhs, _Py_CODEUNIT *instr, @@ -2165,7 +2185,7 @@ unpack_sequence_fail_kind(PyObject *seq) } return SPEC_FAIL_OTHER; } -#endif +#endif // Py_STATS void _Py_Specialize_UnpackSequence(PyObject *seq, _Py_CODEUNIT *instr, int oparg) @@ -2206,7 +2226,6 @@ _Py_Specialize_UnpackSequence(PyObject *seq, _Py_CODEUNIT *instr, int oparg) } #ifdef Py_STATS - int _PySpecialization_ClassifyIterator(PyObject *iter) { @@ -2277,8 +2296,7 @@ int } return SPEC_FAIL_OTHER; } - -#endif +#endif // Py_STATS void _Py_Specialize_ForIter(PyObject *iter, _Py_CODEUNIT *instr, int oparg) @@ -2431,7 +2449,7 @@ _Py_Specialize_ToBool(PyObject *value, _Py_CODEUNIT *instr) goto failure; } SPECIALIZATION_FAIL(TO_BOOL, SPEC_FAIL_OTHER); -#endif +#endif // Py_STATS failure: STAT_INC(TO_BOOL, failure); instr->op.code = TO_BOOL; @@ -2443,7 +2461,7 @@ _Py_Specialize_ToBool(PyObject *value, _Py_CODEUNIT *instr) } /* Code init cleanup. - * CALL_NO_KW_ALLOC_AND_ENTER_INIT will set up + * CALL_ALLOC_AND_ENTER_INIT will set up * the frame to execute the EXIT_INIT_CHECK * instruction. * Ends with a RESUME so that it is not traced. diff --git a/Python/suggestions.c b/Python/suggestions.c index 12097f793e3575..1ad359b18923f3 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -1,10 +1,9 @@ #include "Python.h" +#include "pycore_code.h" // _PyCode_GetVarnames() #include "pycore_frame.h" -#include "pycore_runtime.h" // _PyRuntime -#include "pycore_global_objects.h" // _Py_ID() +#include "pycore_pyerrors.h" // export _Py_UTF8_Edit_Cost() +#include "pycore_runtime.h" // _Py_ID() -#include "pycore_pyerrors.h" -#include "pycore_code.h" // _PyCode_GetVarnames() #include "stdlib_module_names.h" // _Py_stdlib_module_names #define MAX_CANDIDATE_ITEMS 750 @@ -246,14 +245,12 @@ get_suggestions_for_name_error(PyObject* name, PyFrameObject* frame) goto error; } - PyObject *value; - res = PyObject_GetOptionalAttr(self, name, &value); + res = PyObject_HasAttrWithError(self, name); Py_DECREF(locals); if (res < 0) { goto error; } - if (value) { - Py_DECREF(value); + if (res) { Py_DECREF(dir); return PyUnicode_FromFormat("self.%U", name); } diff --git a/Python/symtable.c b/Python/symtable.c index e9adbd5d29b1f9..75ea9e902f4381 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -1,9 +1,11 @@ #include "Python.h" -#include "pycore_ast.h" // identifier, stmt_ty +#include "pycore_ast.h" // stmt_ty #include "pycore_parser.h" // _PyParser_ASTFromString() #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_symtable.h" // PySTEntryObject +// Set this to 1 to dump all symtables to stdout for debugging +#define _PY_DUMP_SYMTABLE 0 /* error strings used for warnings */ #define GLOBAL_PARAM \ @@ -150,9 +152,8 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, static PyObject * ste_repr(PySTEntryObject *ste) { - return PyUnicode_FromFormat("", - ste->ste_name, - PyLong_AS_LONG(ste->ste_id), ste->ste_lineno); + return PyUnicode_FromFormat("", + ste->ste_name, ste->ste_id, ste->ste_lineno); } static void @@ -252,6 +253,109 @@ static int symtable_visit_pattern(struct symtable *st, pattern_ty s); static int symtable_raise_if_annotation_block(struct symtable *st, const char *, expr_ty); static int symtable_raise_if_comprehension_block(struct symtable *st, expr_ty); +/* For debugging purposes only */ +#if _PY_DUMP_SYMTABLE +static void _dump_symtable(PySTEntryObject* ste, PyObject* prefix) +{ + const char *blocktype = ""; + switch (ste->ste_type) { + case FunctionBlock: blocktype = "FunctionBlock"; break; + case ClassBlock: blocktype = "ClassBlock"; break; + case ModuleBlock: blocktype = "ModuleBlock"; break; + case AnnotationBlock: blocktype = "AnnotationBlock"; break; + case TypeVarBoundBlock: blocktype = "TypeVarBoundBlock"; break; + case TypeAliasBlock: blocktype = "TypeAliasBlock"; break; + case TypeParamBlock: blocktype = "TypeParamBlock"; break; + } + const char *comptype = ""; + switch (ste->ste_comprehension) { + case ListComprehension: comptype = " ListComprehension"; break; + case DictComprehension: comptype = " DictComprehension"; break; + case SetComprehension: comptype = " SetComprehension"; break; + case GeneratorExpression: comptype = " GeneratorExpression"; break; + case NoComprehension: break; + } + PyObject* msg = PyUnicode_FromFormat( + ( + "%U=== Symtable for %U ===\n" + "%U%s%s\n" + "%U%s%s%s%s%s%s%s%s%s%s%s%s%s\n" + "%Ulineno: %d col_offset: %d\n" + "%U--- Symbols ---\n" + ), + prefix, + ste->ste_name, + prefix, + blocktype, + comptype, + prefix, + ste->ste_nested ? " nested" : "", + ste->ste_free ? " free" : "", + ste->ste_child_free ? " child_free" : "", + ste->ste_generator ? " generator" : "", + ste->ste_coroutine ? " coroutine" : "", + ste->ste_varargs ? " varargs" : "", + ste->ste_varkeywords ? " varkeywords" : "", + ste->ste_returns_value ? " returns_value" : "", + ste->ste_needs_class_closure ? " needs_class_closure" : "", + ste->ste_needs_classdict ? " needs_classdict" : "", + ste->ste_comp_inlined ? " comp_inlined" : "", + ste->ste_comp_iter_target ? " comp_iter_target" : "", + ste->ste_can_see_class_scope ? " can_see_class_scope" : "", + prefix, + ste->ste_lineno, + ste->ste_col_offset, + prefix + ); + assert(msg != NULL); + printf("%s", PyUnicode_AsUTF8(msg)); + Py_DECREF(msg); + PyObject *name, *value; + Py_ssize_t pos = 0; + while (PyDict_Next(ste->ste_symbols, &pos, &name, &value)) { + int scope = _PyST_GetScope(ste, name); + long flags = _PyST_GetSymbol(ste, name); + printf("%s %s: ", PyUnicode_AsUTF8(prefix), PyUnicode_AsUTF8(name)); + if (flags & DEF_GLOBAL) printf(" DEF_GLOBAL"); + if (flags & DEF_LOCAL) printf(" DEF_LOCAL"); + if (flags & DEF_PARAM) printf(" DEF_PARAM"); + if (flags & DEF_NONLOCAL) printf(" DEF_NONLOCAL"); + if (flags & USE) printf(" USE"); + if (flags & DEF_FREE) printf(" DEF_FREE"); + if (flags & DEF_FREE_CLASS) printf(" DEF_FREE_CLASS"); + if (flags & DEF_IMPORT) printf(" DEF_IMPORT"); + if (flags & DEF_ANNOT) printf(" DEF_ANNOT"); + if (flags & DEF_COMP_ITER) printf(" DEF_COMP_ITER"); + if (flags & DEF_TYPE_PARAM) printf(" DEF_TYPE_PARAM"); + if (flags & DEF_COMP_CELL) printf(" DEF_COMP_CELL"); + switch (scope) { + case LOCAL: printf(" LOCAL"); break; + case GLOBAL_EXPLICIT: printf(" GLOBAL_EXPLICIT"); break; + case GLOBAL_IMPLICIT: printf(" GLOBAL_IMPLICIT"); break; + case FREE: printf(" FREE"); break; + case CELL: printf(" CELL"); break; + } + printf("\n"); + } + printf("%s--- Children ---\n", PyUnicode_AsUTF8(prefix)); + PyObject *new_prefix = PyUnicode_FromFormat(" %U", prefix); + assert(new_prefix != NULL); + for (Py_ssize_t i = 0; i < PyList_GET_SIZE(ste->ste_children); i++) { + PyObject *child = PyList_GetItem(ste->ste_children, i); + assert(child != NULL && PySTEntry_Check(child)); + _dump_symtable((PySTEntryObject *)child, new_prefix); + } + Py_DECREF(new_prefix); +} + +static void dump_symtable(PySTEntryObject* ste) +{ + PyObject *empty = PyUnicode_FromString(""); + assert(empty != NULL); + _dump_symtable(ste, empty); + Py_DECREF(empty); +} +#endif #define DUPLICATE_ARGUMENT \ "duplicate argument '%U' in function definition" @@ -312,10 +416,10 @@ _PySymtable_Build(mod_ty mod, PyObject *filename, PyFutureFeatures *future) return NULL; } /* Be careful here to prevent overflow. */ - int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; + int recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining; starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; st->recursion_depth = starting_recursion_depth; - st->recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + st->recursion_limit = Py_C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; /* Make the initial symbol information gathering pass */ if (!symtable_enter_block(st, &_Py_ID(top), ModuleBlock, (void *)mod, 0, 0, 0, 0)) { @@ -361,8 +465,12 @@ _PySymtable_Build(mod_ty mod, PyObject *filename, PyFutureFeatures *future) return NULL; } /* Make the second symbol analysis pass */ - if (symtable_analyze(st)) + if (symtable_analyze(st)) { +#if _PY_DUMP_SYMTABLE + dump_symtable(st->st_top); +#endif return st; + } _PySymtable_Free(st); return NULL; error: @@ -523,6 +631,7 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, PyObject *bound, PyObject *local, PyObject *free, PyObject *global, PyObject *type_params, PySTEntryObject *class_entry) { + int contains; if (flags & DEF_GLOBAL) { if (flags & DEF_NONLOCAL) { PyErr_Format(PyExc_SyntaxError, @@ -543,14 +652,22 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, "nonlocal declaration not allowed at module level"); return error_at_directive(ste, name); } - if (!PySet_Contains(bound, name)) { + contains = PySet_Contains(bound, name); + if (contains < 0) { + return 0; + } + if (!contains) { PyErr_Format(PyExc_SyntaxError, "no binding for nonlocal '%U' found", name); return error_at_directive(ste, name); } - if (PySet_Contains(type_params, name)) { + contains = PySet_Contains(type_params, name); + if (contains < 0) { + return 0; + } + if (contains) { PyErr_Format(PyExc_SyntaxError, "nonlocal binding not allowed for type parameter '%U'", name); @@ -599,17 +716,29 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, Note that having a non-NULL bound implies that the block is nested. */ - if (bound && PySet_Contains(bound, name)) { - SET_SCOPE(scopes, name, FREE); - ste->ste_free = 1; - return PySet_Add(free, name) >= 0; + if (bound) { + contains = PySet_Contains(bound, name); + if (contains < 0) { + return 0; + } + if (contains) { + SET_SCOPE(scopes, name, FREE); + ste->ste_free = 1; + return PySet_Add(free, name) >= 0; + } } /* If a parent has a global statement, then call it global explicit? It could also be global implicit. */ - if (global && PySet_Contains(global, name)) { - SET_SCOPE(scopes, name, GLOBAL_IMPLICIT); - return 1; + if (global) { + contains = PySet_Contains(global, name); + if (contains < 0) { + return 0; + } + if (contains) { + SET_SCOPE(scopes, name, GLOBAL_IMPLICIT); + return 1; + } } if (ste->ste_nested) ste->ste_free = 1; @@ -712,8 +841,19 @@ analyze_cells(PyObject *scopes, PyObject *free, PyObject *inlined_cells) scope = PyLong_AS_LONG(v); if (scope != LOCAL) continue; - if (!PySet_Contains(free, name) && !PySet_Contains(inlined_cells, name)) - continue; + int contains = PySet_Contains(free, name); + if (contains < 0) { + goto error; + } + if (!contains) { + contains = PySet_Contains(inlined_cells, name); + if (contains < 0) { + goto error; + } + if (!contains) { + continue; + } + } /* Replace LOCAL with CELL for this name, and remove from free. It is safe to replace the value of name in the dict, because it will not cause a resize. @@ -764,7 +904,11 @@ update_symbols(PyObject *symbols, PyObject *scopes, long scope, flags; assert(PyLong_Check(v)); flags = PyLong_AS_LONG(v); - if (PySet_Contains(inlined_cells, name)) { + int contains = PySet_Contains(inlined_cells, name); + if (contains < 0) { + return 0; + } + if (contains) { flags |= DEF_COMP_CELL; } v_scope = PyDict_GetItemWithError(scopes, name); @@ -801,8 +945,7 @@ update_symbols(PyObject *symbols, PyObject *scopes, the class that has the same name as a local or global in the class scope. */ - if (classflag && - PyLong_AS_LONG(v) & (DEF_BOUND | DEF_GLOBAL)) { + if (classflag) { long flags = PyLong_AS_LONG(v) | DEF_FREE_CLASS; v_new = PyLong_FromLong(flags); if (!v_new) { @@ -822,9 +965,15 @@ update_symbols(PyObject *symbols, PyObject *scopes, goto error; } /* Handle global symbol */ - if (bound && !PySet_Contains(bound, name)) { - Py_DECREF(name); - continue; /* it's a global */ + if (bound) { + int contains = PySet_Contains(bound, name); + if (contains < 0) { + goto error; + } + if (!contains) { + Py_DECREF(name); + continue; /* it's a global */ + } } /* Propagate new free symbol up the lexical stack */ if (PyDict_SetItem(symbols, name, v_free) < 0) { @@ -1037,7 +1186,7 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, goto error; /* Records the results of the analysis in the symbol table entry */ if (!update_symbols(ste->ste_symbols, scopes, bound, newfree, inlined_cells, - ste->ste_type == ClassBlock)) + (ste->ste_type == ClassBlock) || ste->ste_can_see_class_scope)) goto error; temp = PyNumber_InPlaceOr(free, newfree); @@ -1969,6 +2118,17 @@ symtable_visit_expr(struct symtable *st, expr_ty e) VISIT(st, expr, e->v.UnaryOp.operand); break; case Lambda_kind: { + if (st->st_cur->ste_can_see_class_scope) { + // gh-109118 + PyErr_Format(PyExc_SyntaxError, + "Cannot use lambda in annotation scope within class scope"); + PyErr_RangedSyntaxLocationObject(st->st_filename, + e->lineno, + e->col_offset + 1, + e->end_lineno, + e->end_col_offset + 1); + VISIT_QUIT(st, 0); + } if (e->v.Lambda.args->defaults) VISIT_SEQ(st, expr, e->v.Lambda.args->defaults); if (e->v.Lambda.args->kw_defaults) @@ -2418,6 +2578,18 @@ symtable_handle_comprehension(struct symtable *st, expr_ty e, identifier scope_name, asdl_comprehension_seq *generators, expr_ty elt, expr_ty value) { + if (st->st_cur->ste_can_see_class_scope) { + // gh-109118 + PyErr_Format(PyExc_SyntaxError, + "Cannot use comprehension in annotation scope within class scope"); + PyErr_RangedSyntaxLocationObject(st->st_filename, + e->lineno, + e->col_offset + 1, + e->end_lineno, + e->end_col_offset + 1); + VISIT_QUIT(st, 0); + } + int is_generator = (e->kind == GeneratorExp_kind); comprehension_ty outermost = ((comprehension_ty) asdl_seq_GET(generators, 0)); diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 0ec763c7aa7cf8..9c1ee0215d7cf6 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -23,26 +23,28 @@ Data members: #include "pycore_long.h" // _PY_LONG_MAX_STR_DIGITS_THRESHOLD #include "pycore_modsupport.h" // _PyModule_CreateInitialized() #include "pycore_namespace.h" // _PyNamespace_New() -#include "pycore_object.h" // _PyObject_IS_GC(), _PyObject_DebugTypeStats() +#include "pycore_object.h" // _PyObject_DebugTypeStats() #include "pycore_pathconfig.h" // _PyPathConfig_ComputeSysPath0() #include "pycore_pyerrors.h" // _PyErr_GetRaisedException() #include "pycore_pylifecycle.h" // _PyErr_WriteUnraisableDefaultHook() #include "pycore_pymath.h" // _PY_SHORT_FLOAT_REPR #include "pycore_pymem.h" // _PyMem_SetDefaultAllocator() #include "pycore_pystate.h" // _PyThreadState_GET() +#include "pycore_pystats.h" // _Py_PrintSpecializationStats() #include "pycore_structseq.h" // _PyStructSequence_InitBuiltinWithFlags() -#include "pycore_sysmodule.h" // Define _PySys_GetSizeOf() +#include "pycore_sysmodule.h" // export _PySys_GetSizeOf() #include "pycore_tuple.h" // _PyTuple_FromArray() #include "frameobject.h" // PyFrame_FastToLocalsWithError() -#include "pydtrace.h" +#include "pydtrace.h" // PyDTrace_AUDIT() #include "osdefs.h" // DELIM #include "stdlib_module_names.h" // _Py_stdlib_module_names + #include #ifdef MS_WINDOWS -#define WIN32_LEAN_AND_MEAN -#include +# define WIN32_LEAN_AND_MEAN +# include #endif /* MS_WINDOWS */ #ifdef MS_COREDLL @@ -52,11 +54,11 @@ extern const char *PyWin_DLLVersionString; #endif #ifdef __EMSCRIPTEN__ -#include +# include #endif #ifdef HAVE_FCNTL_H -#include +# include #endif /*[clinic input] @@ -66,6 +68,7 @@ module sys #include "clinic/sysmodule.c.h" + PyObject * _PySys_GetAttr(PyThreadState *tstate, PyObject *name) { @@ -2104,32 +2107,33 @@ sys_is_finalizing_impl(PyObject *module) return PyBool_FromLong(Py_IsFinalizing()); } + #ifdef Py_STATS /*[clinic input] sys._stats_on -Turns on stats gathering (stats gathering is on by default). +Turns on stats gathering (stats gathering is off by default). [clinic start generated code]*/ static PyObject * sys__stats_on_impl(PyObject *module) -/*[clinic end generated code: output=aca53eafcbb4d9fe input=8ddc6df94e484f3a]*/ +/*[clinic end generated code: output=aca53eafcbb4d9fe input=43b5bfe145299e55]*/ { - _py_stats = &_py_stats_struct; + _Py_StatsOn(); Py_RETURN_NONE; } /*[clinic input] sys._stats_off -Turns off stats gathering (stats gathering is on by default). +Turns off stats gathering (stats gathering is off by default). [clinic start generated code]*/ static PyObject * sys__stats_off_impl(PyObject *module) -/*[clinic end generated code: output=1534c1ee63812214 input=b3e50e71ecf29f66]*/ +/*[clinic end generated code: output=1534c1ee63812214 input=d1a84c60c56cbce2]*/ { - _py_stats = NULL; + _Py_StatsOff(); Py_RETURN_NONE; } @@ -2148,21 +2152,23 @@ sys__stats_clear_impl(PyObject *module) } /*[clinic input] -sys._stats_dump +sys._stats_dump -> bool Dump stats to file, and clears the stats. + +Return False if no statistics were not dumped because stats gathering was off. [clinic start generated code]*/ -static PyObject * +static int sys__stats_dump_impl(PyObject *module) -/*[clinic end generated code: output=79f796fb2b4ddf05 input=92346f16d64f6f95]*/ +/*[clinic end generated code: output=6e346b4ba0de4489 input=31a489e39418b2a5]*/ { - _Py_PrintSpecializationStats(1); + int res = _Py_PrintSpecializationStats(1); _Py_StatsClear(); - Py_RETURN_NONE; + return res; } +#endif // Py_STATS -#endif #ifdef ANDROID_API_LEVEL /*[clinic input] @@ -3496,7 +3502,9 @@ _PySys_UpdateConfig(PyThreadState *tstate) if (config->pycache_prefix != NULL) { SET_SYS_FROM_WSTR("pycache_prefix", config->pycache_prefix); } else { - PyDict_SetItemString(sysdict, "pycache_prefix", Py_None); + if (PyDict_SetItemString(sysdict, "pycache_prefix", Py_None) < 0) { + return -1; + } } COPY_LIST("argv", config->argv); @@ -3510,7 +3518,9 @@ _PySys_UpdateConfig(PyThreadState *tstate) SET_SYS_FROM_WSTR("_stdlib_dir", stdlibdir); } else { - PyDict_SetItemString(sysdict, "_stdlib_dir", Py_None); + if (PyDict_SetItemString(sysdict, "_stdlib_dir", Py_None) < 0) { + return -1; + } } #undef SET_SYS_FROM_WSTR @@ -3520,6 +3530,9 @@ _PySys_UpdateConfig(PyThreadState *tstate) // sys.flags PyObject *flags = _PySys_GetObject(interp, "flags"); // borrowed ref if (flags == NULL) { + if (!_PyErr_Occurred(tstate)) { + _PyErr_SetString(tstate, PyExc_RuntimeError, "lost sys.flags"); + } return -1; } if (set_flags_from_config(interp, flags) < 0) { diff --git a/Python/thread.c b/Python/thread.c index 7fc53f9b61360b..1ac2db2937e373 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -11,7 +11,7 @@ #include "pycore_pythread.h" #ifndef DONT_HAVE_STDIO_H -#include +# include #endif #include diff --git a/Python/thread_pthread_stubs.h b/Python/thread_pthread_stubs.h index 56e5b6141924b4..48bad36ec449ab 100644 --- a/Python/thread_pthread_stubs.h +++ b/Python/thread_pthread_stubs.h @@ -40,7 +40,7 @@ pthread_cond_init(pthread_cond_t *restrict cond, return 0; } -PyAPI_FUNC(int)pthread_cond_destroy(pthread_cond_t *cond) +PyAPI_FUNC(int) pthread_cond_destroy(pthread_cond_t *cond) { return 0; } diff --git a/Python/traceback.c b/Python/traceback.c index 657ddab1cbf615..a75b7833af4e05 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -3,9 +3,9 @@ #include "Python.h" -#include "pycore_ast.h" // asdl_seq_* +#include "pycore_ast.h" // asdl_seq_GET() #include "pycore_call.h" // _PyObject_CallMethodFormat() -#include "pycore_compile.h" // _PyAST_Optimize +#include "pycore_compile.h" // _PyAST_Optimize() #include "pycore_fileutils.h" // _Py_BEGIN_SUPPRESS_IPH #include "pycore_frame.h" // _PyFrame_GetCode() #include "pycore_interp.h" // PyInterpreterState.gc @@ -616,6 +616,11 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef ++*right_anchor; } + // Keep going if the current char is not ')' + if (i+1 < right->col_offset && (segment_str[i] == ')')) { + continue; + } + // Set the error characters *primary_error_char = "~"; *secondary_error_char = "^"; @@ -626,6 +631,18 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef case Subscript_kind: { *left_anchor = expr->v.Subscript.value->end_col_offset; *right_anchor = expr->v.Subscript.slice->end_col_offset + 1; + Py_ssize_t str_len = strlen(segment_str); + + // Move right_anchor and left_anchor forward to the first non-whitespace character that is not ']' and '[' + while (*left_anchor < str_len && (IS_WHITESPACE(segment_str[*left_anchor]) || segment_str[*left_anchor] != '[')) { + ++*left_anchor; + } + while (*right_anchor < str_len && (IS_WHITESPACE(segment_str[*right_anchor]) || segment_str[*right_anchor] != ']')) { + ++*right_anchor; + } + if (*right_anchor < str_len){ + *right_anchor += 1; + } // Set the error characters *primary_error_char = "~"; diff --git a/Python/tracemalloc.c b/Python/tracemalloc.c index 7d294ea5fe744c..19b64c619feb6a 100644 --- a/Python/tracemalloc.c +++ b/Python/tracemalloc.c @@ -2,11 +2,12 @@ #include "pycore_fileutils.h" // _Py_write_noraise() #include "pycore_gc.h" // PyGC_Head #include "pycore_hashtable.h" // _Py_hashtable_t -#include "pycore_object.h" // _PyType_PreHeaderSize +#include "pycore_object.h" // _PyType_PreHeaderSize() #include "pycore_pymem.h" // _Py_tracemalloc_config #include "pycore_runtime.h" // _Py_ID() -#include "pycore_traceback.h" +#include "pycore_traceback.h" // _Py_DumpASCII() #include + #include "frameobject.h" // _PyInterpreterFrame_GetLine #include // malloc() diff --git a/Tools/build/deepfreeze.py b/Tools/build/deepfreeze.py index 996d5f65a923b2..c3231a5a40c326 100644 --- a/Tools/build/deepfreeze.py +++ b/Tools/build/deepfreeze.py @@ -22,7 +22,7 @@ verbose = False # This must be kept in sync with Tools/cases_generator/generate_cases.py -RESUME = 166 +RESUME = 149 def isprintable(b: bytes) -> bool: return all(0x20 <= c < 0x7f for c in b) diff --git a/Tools/build/freeze_modules.py b/Tools/build/freeze_modules.py index ee4dd2f8682ba4..a07f4d9786ea65 100644 --- a/Tools/build/freeze_modules.py +++ b/Tools/build/freeze_modules.py @@ -467,15 +467,14 @@ def replace_block(lines, start_marker, end_marker, replacements, file): return lines[:start_pos + 1] + replacements + lines[end_pos:] -def regen_frozen(modules, frozen_modules: bool): +def regen_frozen(modules): headerlines = [] parentdir = os.path.dirname(FROZEN_FILE) - if frozen_modules: - for src in _iter_sources(modules): - # Adding a comment to separate sections here doesn't add much, - # so we don't. - header = relpath_for_posix_display(src.frozenfile, parentdir) - headerlines.append(f'#include "{header}"') + for src in _iter_sources(modules): + # Adding a comment to separate sections here doesn't add much, + # so we don't. + header = relpath_for_posix_display(src.frozenfile, parentdir) + headerlines.append(f'#include "{header}"') externlines = [] bootstraplines = [] @@ -504,14 +503,9 @@ def regen_frozen(modules, frozen_modules: bool): get_code_name = "_Py_get_%s_toplevel" % code_name externlines.append("extern PyObject *%s(void);" % get_code_name) - symbol = mod.symbol pkg = 'true' if mod.ispkg else 'false' - if not frozen_modules: - line = ('{"%s", NULL, 0, %s, GET_CODE(%s)},' - ) % (mod.name, pkg, code_name) - else: - line = ('{"%s", %s, (int)sizeof(%s), %s, GET_CODE(%s)},' - ) % (mod.name, symbol, symbol, pkg, code_name) + size = f"(int)sizeof({mod.symbol})" + line = f'{{"{mod.name}", {mod.symbol}, {size}, {pkg}}},' lines.append(line) if mod.isalias: @@ -585,7 +579,7 @@ def regen_makefile(modules): pyfiles = [] frozenfiles = [] rules = [''] - deepfreezerules = ["Python/deepfreeze/deepfreeze.c: $(DEEPFREEZE_DEPS)", + deepfreezerules = ["$(DEEPFREEZE_C): $(DEEPFREEZE_DEPS)", "\t$(PYTHON_FOR_FREEZE) $(srcdir)/Tools/build/deepfreeze.py \\"] for src in _iter_sources(modules): frozen_header = relpath_for_posix_display(src.frozenfile, ROOT_DIR) @@ -718,20 +712,14 @@ def regen_pcbuild(modules): ####################################### # the script -parser = argparse.ArgumentParser() -parser.add_argument("--frozen-modules", action="store_true", - help="Use both frozen and deepfrozen modules. (default: uses only deepfrozen modules)") - def main(): - args = parser.parse_args() - frozen_modules: bool = args.frozen_modules # Expand the raw specs, preserving order. modules = list(parse_frozen_specs()) # Regen build-related files. regen_makefile(modules) regen_pcbuild(modules) - regen_frozen(modules, frozen_modules) + regen_frozen(modules) if __name__ == '__main__': diff --git a/Tools/build/umarshal.py b/Tools/build/umarshal.py index e05d93cf23c921..8198a1780b8dad 100644 --- a/Tools/build/umarshal.py +++ b/Tools/build/umarshal.py @@ -1,4 +1,4 @@ -# Implementat marshal.loads() in pure Python +# Implementation of marshal.loads() in pure Python import ast diff --git a/Tools/build/verify_ensurepip_wheels.py b/Tools/build/verify_ensurepip_wheels.py index 09fd5d9e3103ac..29897425da6c03 100755 --- a/Tools/build/verify_ensurepip_wheels.py +++ b/Tools/build/verify_ensurepip_wheels.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python3 +#!/usr/bin/env python3 """ Compare checksums for wheels in :mod:`ensurepip` against the Cheeseshop. @@ -35,11 +35,17 @@ def print_error(file_path: str, message: str) -> None: def verify_wheel(package_name: str) -> bool: # Find the package on disk - package_path = next(WHEEL_DIR.glob(f"{package_name}*.whl"), None) - if not package_path: - print_error("", f"Could not find a {package_name} wheel on disk.") + package_paths = list(WHEEL_DIR.glob(f"{package_name}*.whl")) + if len(package_paths) != 1: + if package_paths: + for p in package_paths: + print_error(p, f"Found more than one wheel for package {package_name}.") + else: + print_error("", f"Could not find a {package_name} wheel on disk.") return False + package_path = package_paths[0] + print(f"Verifying checksum for {package_path}.") # Find the version of the package used by ensurepip diff --git a/Tools/buildbot/test.bat b/Tools/buildbot/test.bat index 25c796a60e173d..c1b2605a4b2c7e 100644 --- a/Tools/buildbot/test.bat +++ b/Tools/buildbot/test.bat @@ -23,7 +23,7 @@ if "%PROCESSOR_ARCHITECTURE%"=="ARM" if "%arm32_ssh%"=="true" goto NativeExecuti if "%arm32_ssh%"=="true" goto :Arm32Ssh :NativeExecution -call "%here%..\..\PCbuild\rt.bat" %rt_opts% -uall -rwW --slowest --timeout=1200 --fail-env-changed %regrtest_args% +call "%here%..\..\PCbuild\rt.bat" %rt_opts% -uall -rwW --slowest --timeout=1200 %regrtest_args% exit /b %ERRORLEVEL% :Arm32Ssh @@ -35,7 +35,7 @@ if NOT "%REMOTE_PYTHON_DIR:~-1,1%"=="\" (set REMOTE_PYTHON_DIR=%REMOTE_PYTHON_DI set TEMP_ARGS=--temp %REMOTE_PYTHON_DIR%temp -set rt_args=%rt_opts% %dashU% -rwW --slowest --timeout=1200 --fail-env-changed %regrtest_args% %TEMP_ARGS% +set rt_args=%rt_opts% %dashU% -rwW --slowest --timeout=1200 %regrtest_args% %TEMP_ARGS% ssh %SSH_SERVER% "set TEMP=%REMOTE_PYTHON_DIR%temp& cd %REMOTE_PYTHON_DIR% & %REMOTE_PYTHON_DIR%PCbuild\rt.bat" %rt_args% set ERR=%ERRORLEVEL% scp %SSH_SERVER%:"%REMOTE_PYTHON_DIR%test-results.xml" "%PYTHON_SOURCE%\test-results.xml" diff --git a/Tools/c-analyzer/c_parser/info.py b/Tools/c-analyzer/c_parser/info.py index 799f9237877447..f96172e8ca8dfb 100644 --- a/Tools/c-analyzer/c_parser/info.py +++ b/Tools/c-analyzer/c_parser/info.py @@ -206,7 +206,7 @@ def from_row(cls, row, **markers): row = _tables.fix_row(row, **markers) return cls(*row) - # We have to provde _make() becaose we implemented __new__(). + # We have to provide _make() because we implemented __new__(). @classmethod def _make(cls, iterable): diff --git a/Tools/c-analyzer/c_parser/preprocessor/gcc.py b/Tools/c-analyzer/c_parser/preprocessor/gcc.py index 18d1b1a5d0a37f..6ece70c77fd55c 100644 --- a/Tools/c-analyzer/c_parser/preprocessor/gcc.py +++ b/Tools/c-analyzer/c_parser/preprocessor/gcc.py @@ -3,15 +3,22 @@ from . import common as _common -# The following C files must not be built with Py_BUILD_CORE, -# because they use the limited C API. -USE_LIMITED_C_API = frozenset(( +# The following C files must not built with Py_BUILD_CORE. +FILES_WITHOUT_INTERNAL_CAPI = frozenset(( + # Modules/ '_testcapimodule.c', '_testclinic_limited.c', 'xxlimited.c', 'xxlimited_35.c', )) +# C files in the fhe following directories must not be built with +# Py_BUILD_CORE. +DIRS_WITHOUT_INTERNAL_CAPI = frozenset(( + # Modules/_testcapi/ + '_testcapi', +)) + TOOL = 'gcc' META_FILES = { @@ -70,7 +77,10 @@ def preprocess(filename, filename = _normpath(filename, cwd) postargs = POST_ARGS - if os.path.basename(filename) not in USE_LIMITED_C_API: + basename = os.path.basename(filename) + dirname = os.path.basename(os.path.dirname(filename)) + if (basename not in FILES_WITHOUT_INTERNAL_CAPI + and dirname not in DIRS_WITHOUT_INTERNAL_CAPI): postargs += ('-DPy_BUILD_CORE=1',) text = _common.preprocess( diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py index 90334d0e79da80..4523b2ed5b9fdf 100644 --- a/Tools/c-analyzer/cpython/_parser.py +++ b/Tools/c-analyzer/cpython/_parser.py @@ -314,6 +314,7 @@ def clean_lines(text): _abs('Objects/stringlib/unicode_format.h'): (10_000, 400), _abs('Objects/typeobject.c'): (35_000, 200), _abs('Python/compile.c'): (20_000, 500), + _abs('Python/parking_lot.c'): (40_000, 1000), _abs('Python/pylifecycle.c'): (500_000, 5000), _abs('Python/pystate.c'): (500_000, 5000), diff --git a/Tools/c-analyzer/cpython/ignored.tsv b/Tools/c-analyzer/cpython/ignored.tsv index d1ac0410619c96..336b0281bda85d 100644 --- a/Tools/c-analyzer/cpython/ignored.tsv +++ b/Tools/c-analyzer/cpython/ignored.tsv @@ -50,6 +50,9 @@ Python/getversion.c - version - Python/bootstrap_hash.c - _Py_HashSecret_Initialized - Python/pyhash.c - _Py_HashSecret - +## thread-safe hashtable (internal locks) +Python/parking_lot.c - buckets - + ################################## ## state tied to Py_Main() @@ -420,6 +423,7 @@ Modules/_testcapi/buffer.c - testBufType - Modules/_testcapi/code.c get_code_extra_index key - Modules/_testcapi/datetime.c - test_run_counter - Modules/_testcapi/docstring.c - DocStringNoSignatureTest - +Modules/_testcapi/docstring.c - DocStringUnrepresentableSignatureTest - Modules/_testcapi/exceptions.c - PyRecursingInfinitelyError_Type - Modules/_testcapi/heaptype.c - _testcapimodule - Modules/_testcapi/mem.c - FmData - diff --git a/Tools/cases_generator/analysis.py b/Tools/cases_generator/analysis.py index 7c7c9086cd72f5..b920c0aa8c1c8a 100644 --- a/Tools/cases_generator/analysis.py +++ b/Tools/cases_generator/analysis.py @@ -94,13 +94,8 @@ def parse(self) -> None: self.parse_file(filename, instrs_idx) files = " + ".join(self.input_filenames) - n_instrs = 0 - n_ops = 0 - for instr in self.instrs.values(): - if instr.kind == "op": - n_ops += 1 - else: - n_instrs += 1 + n_instrs = len(set(self.instrs) & set(self.macros)) + n_ops = len(self.instrs) - n_instrs print( f"Read {n_instrs} instructions, {n_ops} ops, " f"{len(self.macros)} macros, {len(self.pseudos)} pseudos, " @@ -145,6 +140,9 @@ def parse_file(self, filename: str, instrs_idx: dict[str, int]) -> None: match thing: case parsing.InstDef(name=name): + macro: parsing.Macro | None = None + if thing.kind == "inst": + macro = parsing.Macro(name, [parsing.OpName(name)]) if name in self.instrs: if not thing.override: raise psr.make_syntax_error( @@ -152,9 +150,12 @@ def parse_file(self, filename: str, instrs_idx: dict[str, int]) -> None: f"previous definition @ {self.instrs[name].inst.context}", thing_first_token, ) - self.everything[ - instrs_idx[name] - ] = OverriddenInstructionPlaceHolder(name=name) + placeholder = OverriddenInstructionPlaceHolder(name=name) + self.everything[instrs_idx[name]] = placeholder + if macro is not None: + self.warning( + f"Overriding desugared {macro.name} may not work", thing + ) if name not in self.instrs and thing.override: raise psr.make_syntax_error( f"Definition of '{name}' @ {thing.context} is supposed to be " @@ -164,6 +165,9 @@ def parse_file(self, filename: str, instrs_idx: dict[str, int]) -> None: self.instrs[name] = Instruction(thing) instrs_idx[name] = len(self.everything) self.everything.append(thing) + if macro is not None: + self.macros[macro.name] = macro + self.everything.append(macro) case parsing.Macro(name): self.macros[name] = thing self.everything.append(thing) @@ -197,9 +201,9 @@ def find_predictions(self) -> None: for target in targets: if target_instr := self.instrs.get(target): target_instr.predicted = True - elif target_macro := self.macro_instrs.get(target): + if target_macro := self.macro_instrs.get(target): target_macro.predicted = True - else: + if not target_instr and not target_macro: self.error( f"Unknown instruction {target!r} predicted in {instr.name!r}", instr.inst, # TODO: Use better location @@ -263,11 +267,7 @@ def check_families(self) -> None: ) def effect_counts(self, name: str) -> tuple[int, int, int]: - if instr := self.instrs.get(name): - cache = instr.cache_offset - input = len(instr.input_effects) - output = len(instr.output_effects) - elif mac := self.macro_instrs.get(name): + if mac := self.macro_instrs.get(name): cache = mac.cache_offset input, output = 0, 0 for part in mac.parts: @@ -365,8 +365,8 @@ def analyze_macro(self, macro: parsing.Macro) -> MacroInstruction: case Instruction() as instr: part, offset = self.analyze_instruction(instr, offset) parts.append(part) - if instr.name != "SAVE_IP": - # SAVE_IP in a macro is a no-op in Tier 1 + if instr.name != "_SET_IP": + # _SET_IP in a macro is a no-op in Tier 1 flags.add(instr.instr_flags) case _: assert_never(component) @@ -407,7 +407,8 @@ def check_macro_components( case parsing.OpName(name): if name not in self.instrs: self.error(f"Unknown instruction {name!r}", macro) - components.append(self.instrs[name]) + else: + components.append(self.instrs[name]) case parsing.CacheEffect(): components.append(uop) case _: diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 1335c0c29ebbf6..898736248a98f9 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -68,7 +68,7 @@ "OPARG_CACHE_4": 4, "OPARG_TOP": 5, "OPARG_BOTTOM": 6, - "OPARG_SAVE_IP": 7, + "OPARG_SET_IP": 7, } INSTR_FMT_PREFIX = "INSTR_FMT_" @@ -160,20 +160,15 @@ def effect_str(effects: list[StackEffect]) -> str: pushed: str | None = None match thing: case parsing.InstDef(): - if thing.kind != "op" or self.instrs[thing.name].is_viable_uop(): - instr = self.instrs[thing.name] - popped = effect_str(instr.input_effects) - pushed = effect_str(instr.output_effects) - else: - instr = None - popped = "" - pushed = "" + instr = self.instrs[thing.name] + popped = effect_str(instr.input_effects) + pushed = effect_str(instr.output_effects) case parsing.Macro(): instr = self.macro_instrs[thing.name] popped, pushed = stacking.get_stack_effect_info_for_macro(instr) case parsing.Pseudo(): instr = self.pseudo_instrs[thing.name] - # Calculate stack effect, and check that it's the the same + # Calculate stack effect, and check that it's the same # for all targets. for target in self.pseudos[thing.name].targets: target_instr = self.instrs.get(target) @@ -208,6 +203,8 @@ def write_stack_effect_functions(self) -> None: for thing in self.everything: if isinstance(thing, OverriddenInstructionPlaceHolder): continue + if isinstance(thing, parsing.Macro) and thing.name in self.instrs: + continue instr, popped, pushed = self.get_stack_effect_info(thing) if instr is not None: popped_data.append((instr, popped)) @@ -255,12 +252,14 @@ def assign_opcode_ids(self) -> None: ops: list[tuple[bool, str]] = [] # (has_arg, name) for each opcode instrumented_ops: list[str] = [] - for instr in itertools.chain( - [instr for instr in self.instrs.values() if instr.kind != "op"], - self.macro_instrs.values(), - ): - assert isinstance(instr, (Instruction, MacroInstruction, PseudoInstruction)) + specialized_ops: set[str] = set() + for name, family in self.families.items(): + specialized_ops.update(family.members) + + for instr in self.macro_instrs.values(): name = instr.name + if name in specialized_ops: + continue if name.startswith("INSTRUMENTED_"): instrumented_ops.append(name) else: @@ -282,7 +281,7 @@ def assign_opcode_ids(self) -> None: def map_op(op: int, name: str) -> None: assert op < len(opname) - assert opname[op] is None + assert opname[op] is None, (op, name) assert name not in opmap opname[op] = name opmap[name] = op @@ -294,25 +293,31 @@ def map_op(op: int, name: str) -> None: # This helps catch cases where we attempt to execute a cache. map_op(17, "RESERVED") - # 166 is RESUME - it is hard coded as such in Tools/build/deepfreeze.py - map_op(166, "RESUME") + # 149 is RESUME - it is hard coded as such in Tools/build/deepfreeze.py + map_op(149, "RESUME") - next_opcode = 1 + # Specialized ops appear in their own section + # Instrumented opcodes are at the end of the valid range + min_internal = 150 + min_instrumented = 254 - (len(instrumented_ops) - 1) + assert min_internal + len(specialized_ops) < min_instrumented + next_opcode = 1 for has_arg, name in sorted(ops): if name in opmap: continue # an anchored name, like CACHE - while opname[next_opcode] is not None: - next_opcode += 1 - assert next_opcode < 255 map_op(next_opcode, name) - if has_arg and "HAVE_ARGUMENT" not in markers: markers["HAVE_ARGUMENT"] = next_opcode - # Instrumented opcodes are at the end of the valid range - min_instrumented = 254 - (len(instrumented_ops) - 1) - assert next_opcode <= min_instrumented + while opname[next_opcode] is not None: + next_opcode += 1 + + assert next_opcode < min_internal, next_opcode + + for i, op in enumerate(sorted(specialized_ops)): + map_op(min_internal + i, op) + markers["MIN_INSTRUMENTED_OPCODE"] = min_instrumented for i, op in enumerate(instrumented_ops): map_op(min_instrumented + i, op) @@ -409,13 +414,12 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No self.write_provenance_header() - self.out.emit("\n" + textwrap.dedent(""" - #ifndef Py_BUILD_CORE - # error "this header requires Py_BUILD_CORE define" - #endif - """).strip()) - - self.out.emit("\n#include // bool") + self.out.emit("") + self.out.emit("#ifndef Py_BUILD_CORE") + self.out.emit('# error "this header requires Py_BUILD_CORE define"') + self.out.emit("#endif") + self.out.emit("") + self.out.emit("#include // bool") self.write_pseudo_instrs() @@ -486,7 +490,10 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No case parsing.InstDef(): self.write_metadata_for_inst(self.instrs[thing.name]) case parsing.Macro(): - self.write_metadata_for_macro(self.macro_instrs[thing.name]) + if thing.name not in self.instrs: + self.write_metadata_for_macro( + self.macro_instrs[thing.name] + ) case parsing.Pseudo(): self.write_metadata_for_pseudo( self.pseudo_instrs[thing.name] @@ -501,35 +508,14 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No ";", ): # Write macro expansion for each non-pseudo instruction - for thing in self.everything: - match thing: - case OverriddenInstructionPlaceHolder(): - pass - case parsing.InstDef(name=name): - instr = self.instrs[name] - # Since an 'op' is not a bytecode, it has no expansion; but 'inst' is - if instr.kind == "inst" and instr.is_viable_uop(): - # Construct a dummy Component -- input/output mappings are not used - part = Component(instr, instr.active_caches) - self.write_macro_expansions( - instr.name, [part], instr.cache_offset - ) - elif instr.kind == "inst" and variable_used( - instr.inst, "oparg1" - ): - assert variable_used( - instr.inst, "oparg2" - ), "Half super-instr?" - self.write_super_expansions(instr.name) - case parsing.Macro(): - mac = self.macro_instrs[thing.name] - self.write_macro_expansions( - mac.name, mac.parts, mac.cache_offset - ) - case parsing.Pseudo(): - pass - case _: - assert_never(thing) + for mac in self.macro_instrs.values(): + if is_super_instruction(mac): + # Special-case the heck out of super-instructions + self.write_super_expansions(mac.name) + else: + self.write_macro_expansions( + mac.name, mac.parts, mac.cache_offset + ) with self.metadata_item( "const char * const _PyOpcode_uop_name[OPCODE_UOP_NAME_SIZE]", "=", ";" @@ -549,12 +535,18 @@ def write_metadata(self, metadata_filename: str, pymetadata_filename: str) -> No "=", ";", ): - for name, _ in self.families.items(): - instr = self.instrs[name] - if instr.cache_offset > 0: - self.out.emit(f'[{name}] = {instr.cache_offset},') + family_member_names: set[str] = set() + for family in self.families.values(): + family_member_names.update(family.members) + for mac in self.macro_instrs.values(): + if ( + mac.cache_offset > 0 + and mac.name not in family_member_names + and not mac.name.startswith("INSTRUMENTED_") + ): + self.out.emit(f"[{mac.name}] = {mac.cache_offset},") # Irregular case: - self.out.emit('[JUMP_BACKWARD] = 1,') + self.out.emit("[JUMP_BACKWARD] = 1,") deoptcodes = {} for name, op in self.opmap.items(): @@ -648,11 +640,12 @@ def add(name: str) -> None: seen.add(name) # These two are first by convention - add("EXIT_TRACE") - add("SAVE_IP") + add("_EXIT_TRACE") + add("_SET_IP") for instr in self.instrs.values(): - if instr.kind == "op": + # Skip ops that are also macros -- those are desugared inst()s + if instr.name not in self.macros: add(instr.name) def write_macro_expansions( @@ -671,14 +664,15 @@ def write_macro_expansions( # It is sometimes emitted for macros that have a # manual translation in translate_bytecode_to_trace() # in Python/optimizer.c. - self.note( - f"Part {part.instr.name} of {name} is not a viable uop", - part.instr.inst, - ) + if len(parts) > 1 or part.instr.name != name: + self.note( + f"Part {part.instr.name} of {name} is not a viable uop", + part.instr.inst, + ) return if not part.active_caches: - if part.instr.name == "SAVE_IP": - size, offset = OPARG_SIZES["OPARG_SAVE_IP"], cache_offset + if part.instr.name == "_SET_IP": + size, offset = OPARG_SIZES["OPARG_SET_IP"], cache_offset else: size, offset = OPARG_SIZES["OPARG_FULL"], 0 else: @@ -770,31 +764,26 @@ def write_instructions( self.write_provenance_header() # Write and count instructions of all kinds - n_instrs = 0 n_macros = 0 for thing in self.everything: match thing: case OverriddenInstructionPlaceHolder(): self.write_overridden_instr_place_holder(thing) case parsing.InstDef(): - if thing.kind != "op": - n_instrs += 1 - self.write_instr(self.instrs[thing.name]) + pass case parsing.Macro(): n_macros += 1 mac = self.macro_instrs[thing.name] stacking.write_macro_instr( mac, self.out, self.families.get(mac.name) ) - # self.write_macro(self.macro_instrs[thing.name]) case parsing.Pseudo(): pass case _: assert_never(thing) print( - f"Wrote {n_instrs} instructions and {n_macros} macros " - f"to {output_filename}", + f"Wrote {n_macros} cases to {output_filename}", file=sys.stderr, ) @@ -802,41 +791,21 @@ def write_executor_instructions( self, executor_filename: str, emit_line_directives: bool ) -> None: """Generate cases for the Tier 2 interpreter.""" - n_instrs = 0 n_uops = 0 with open(executor_filename, "w") as f: self.out = Formatter(f, 8, emit_line_directives) self.write_provenance_header() - for thing in self.everything: - match thing: - case OverriddenInstructionPlaceHolder(): - # TODO: Is this helpful? - self.write_overridden_instr_place_holder(thing) - case parsing.InstDef(): - instr = self.instrs[thing.name] - if instr.is_viable_uop(): - if instr.kind == "op": - n_uops += 1 - else: - n_instrs += 1 - self.out.emit("") - with self.out.block(f"case {thing.name}:"): - stacking.write_single_instr( - instr, self.out, tier=TIER_TWO - ) - if instr.check_eval_breaker: - self.out.emit("CHECK_EVAL_BREAKER();") - self.out.emit("break;") - # elif instr.kind != "op": - # print(f"NOTE: {thing.name} is not a viable uop") - case parsing.Macro(): - pass - case parsing.Pseudo(): - pass - case _: - assert_never(thing) + for instr in self.instrs.values(): + if instr.is_viable_uop(): + n_uops += 1 + self.out.emit("") + with self.out.block(f"case {instr.name}:"): + stacking.write_single_instr(instr, self.out, tier=TIER_TWO) + if instr.check_eval_breaker: + self.out.emit("CHECK_EVAL_BREAKER();") + self.out.emit("break;") print( - f"Wrote {n_instrs} instructions and {n_uops} ops to {executor_filename}", + f"Wrote {n_uops} cases to {executor_filename}", file=sys.stderr, ) @@ -847,26 +816,16 @@ def write_abstract_interpreter_instructions( with open(abstract_interpreter_filename, "w") as f: self.out = Formatter(f, 8, emit_line_directives) self.write_provenance_header() - for thing in self.everything: - match thing: - case OverriddenInstructionPlaceHolder(): - pass - case parsing.InstDef(): - instr = AbstractInstruction(self.instrs[thing.name].inst) - if ( - instr.is_viable_uop() - and instr.name not in SPECIALLY_HANDLED_ABSTRACT_INSTR - ): - self.out.emit("") - with self.out.block(f"case {thing.name}:"): - instr.write(self.out, tier=TIER_TWO) - self.out.emit("break;") - case parsing.Macro(): - pass - case parsing.Pseudo(): - pass - case _: - assert_never(thing) + for instr in self.instrs.values(): + instr = AbstractInstruction(instr.inst) + if ( + instr.is_viable_uop() + and instr.name not in SPECIALLY_HANDLED_ABSTRACT_INSTR + ): + self.out.emit("") + with self.out.block(f"case {instr.name}:"): + instr.write(self.out, tier=TIER_TWO) + self.out.emit("break;") print( f"Wrote some stuff to {abstract_interpreter_filename}", file=sys.stderr, @@ -880,24 +839,17 @@ def write_overridden_instr_place_holder( f"{self.out.comment} TARGET({place_holder.name}) overridden by later definition" ) - def write_instr(self, instr: Instruction) -> None: - name = instr.name - self.out.emit("") - if instr.inst.override: - self.out.emit("{self.out.comment} Override") - with self.out.block(f"TARGET({name})"): - if instr.predicted: - self.out.emit(f"PREDICTED({name});") - self.out.static_assert_family_size( - instr.name, instr.family, instr.cache_offset - ) - stacking.write_single_instr(instr, self.out, tier=TIER_ONE) - if not instr.always_exits: - if instr.cache_offset: - self.out.emit(f"next_instr += {instr.cache_offset};") - if instr.check_eval_breaker: - self.out.emit("CHECK_EVAL_BREAKER();") - self.out.emit(f"DISPATCH();") + +def is_super_instruction(mac: MacroInstruction) -> bool: + if ( + len(mac.parts) == 1 + and isinstance(mac.parts[0], Component) + and variable_used(mac.parts[0].instr.inst, "oparg1") + ): + assert variable_used(mac.parts[0].instr.inst, "oparg2") + return True + else: + return False def main() -> None: diff --git a/Tools/cases_generator/instructions.py b/Tools/cases_generator/instructions.py index 9143ae0db7be81..6fbf7d93f42fde 100644 --- a/Tools/cases_generator/instructions.py +++ b/Tools/cases_generator/instructions.py @@ -37,6 +37,7 @@ class ActiveCacheEffect: "import_from", "import_name", "_PyObject_CallNoArgs", # Proxy for BEFORE_WITH + "TIER_ONE_ONLY", ) @@ -52,7 +53,6 @@ class Instruction: # Parts of the underlying instruction definition inst: parsing.InstDef - kind: typing.Literal["inst", "op"] name: str block: parsing.Block block_text: list[str] # Block.text, less curlies, less PREDICT() calls @@ -76,7 +76,6 @@ class Instruction: def __init__(self, inst: parsing.InstDef): self.inst = inst - self.kind = inst.kind self.name = inst.name self.block = inst.block self.block_text, self.check_eval_breaker, self.block_line = extract_block_text( @@ -123,7 +122,7 @@ def is_viable_uop(self) -> bool: if "FRAME" in self.name: dprint = print - if self.name == "EXIT_TRACE": + if self.name == "_EXIT_TRACE": return True # This has 'return frame' but it's okay if self.always_exits: dprint(f"Skipping {self.name} because it always exits: {self.always_exits}") diff --git a/Tools/cases_generator/parsing.py b/Tools/cases_generator/parsing.py index 25de3a5adc2cf9..25be5ca3e0da5d 100644 --- a/Tools/cases_generator/parsing.py +++ b/Tools/cases_generator/parsing.py @@ -362,7 +362,8 @@ def family_def(self) -> Family | None: if tkn := self.expect(lx.IDENTIFIER): if self.expect(lx.COMMA): if not (size := self.expect(lx.IDENTIFIER)): - raise self.make_syntax_error("Expected identifier") + if not (size := self.expect(lx.NUMBER)): + raise self.make_syntax_error("Expected identifier or number") if self.expect(lx.RPAREN): if self.expect(lx.EQUALS): if not self.expect(lx.LBRACE): diff --git a/Tools/cases_generator/stacking.py b/Tools/cases_generator/stacking.py index dcdfc7ec054248..1f9fda66a5f034 100644 --- a/Tools/cases_generator/stacking.py +++ b/Tools/cases_generator/stacking.py @@ -261,15 +261,19 @@ def adjust_higher(self, eff: StackEffect) -> None: self.final_offset.higher(eff) def adjust(self, offset: StackOffset) -> None: - for down in offset.deep: + deep = list(offset.deep) + high = list(offset.high) + for down in deep: self.adjust_deeper(down) - for up in offset.high: + for up in high: self.adjust_higher(up) def adjust_inverse(self, offset: StackOffset) -> None: - for down in offset.deep: + deep = list(offset.deep) + high = list(offset.high) + for down in deep: self.adjust_higher(down) - for up in offset.high: + for up in high: self.adjust_deeper(up) def collect_vars(self) -> dict[str, StackEffect]: @@ -358,7 +362,7 @@ def write_macro_instr( parts = [ part for part in mac.parts - if isinstance(part, Component) and part.instr.name != "SAVE_IP" + if isinstance(part, Component) and part.instr.name != "_SET_IP" ] out.emit("") with out.block(f"TARGET({mac.name})"): @@ -372,6 +376,8 @@ def write_macro_instr( if not parts[-1].instr.always_exits: if not next_instr_is_set and mac.cache_offset: out.emit(f"next_instr += {mac.cache_offset};") + if parts[-1].instr.check_eval_breaker: + out.emit("CHECK_EVAL_BREAKER();") out.emit("DISPATCH();") @@ -426,15 +432,26 @@ def write_components( ) if mgr.instr.name in ("_PUSH_FRAME", "_POP_FRAME"): - # Adjust stack to min_offset (input effects materialized) + # Adjust stack to min_offset. + # This means that all input effects of this instruction + # are materialized, but not its output effects. + # That's as intended, since these two are so special. out.stack_adjust(mgr.min_offset.deep, mgr.min_offset.high) - # Use clone() since adjust_inverse() mutates final_offset - mgr.adjust_inverse(mgr.final_offset.clone()) - - if mgr.instr.name == "SAVE_CURRENT_IP": + # However, for tier 2, pretend the stack is at final offset. + mgr.adjust_inverse(mgr.final_offset) + if tier == TIER_ONE: + # TODO: Check in analyzer that _{PUSH,POP}_FRAME is last. + assert ( + mgr is managers[-1] + ), f"Expected {mgr.instr.name!r} to be the last uop" + assert_no_pokes(managers) + + if mgr.instr.name == "_SAVE_CURRENT_IP": next_instr_is_set = True if cache_offset: out.emit(f"next_instr += {cache_offset};") + if tier == TIER_ONE: + assert_no_pokes(managers) if len(parts) == 1: mgr.instr.write_body(out, 0, mgr.active_caches, tier) @@ -442,20 +459,42 @@ def write_components( with out.block(""): mgr.instr.write_body(out, -4, mgr.active_caches, tier) - if mgr is managers[-1] and not next_instr_is_set: - # TODO: Explain why this adjustment is needed. + if mgr is managers[-1] and not next_instr_is_set and not mgr.instr.always_exits: + # Adjust the stack to its final depth, *then* write the + # pokes for all preceding uops. + # Note that for array output effects we may still write + # past the stack top. out.stack_adjust(mgr.final_offset.deep, mgr.final_offset.high) - # Use clone() since adjust_inverse() mutates final_offset - mgr.adjust_inverse(mgr.final_offset.clone()) + write_all_pokes(mgr.final_offset, managers, out) + + return next_instr_is_set + +def assert_no_pokes(managers: list[EffectManager]) -> None: + for mgr in managers: for poke in mgr.pokes: if not poke.effect.size and poke.effect.name not in mgr.instr.unmoved_names: - out.assign( - poke.as_stack_effect(), - poke.effect, - ) + assert ( + poke.effect.name == UNUSED + ), f"Unexpected poke of {poke.effect.name} in {mgr.instr.name!r}" - return next_instr_is_set + +def write_all_pokes( + offset: StackOffset, managers: list[EffectManager], out: Formatter +) -> None: + # Emit all remaining pushes (pokes) + for m in managers: + m.adjust_inverse(offset) + write_pokes(m, out) + + +def write_pokes(mgr: EffectManager, out: Formatter) -> None: + for poke in mgr.pokes: + if not poke.effect.size and poke.effect.name not in mgr.instr.unmoved_names: + out.assign( + poke.as_stack_effect(), + poke.effect, + ) def write_single_instr_for_abstract_interp(instr: Instruction, out: Formatter) -> None: @@ -478,8 +517,7 @@ def _write_components_for_abstract_interp( for mgr in managers: if mgr is managers[-1]: out.stack_adjust(mgr.final_offset.deep, mgr.final_offset.high) - # Use clone() since adjust_inverse() mutates final_offset - mgr.adjust_inverse(mgr.final_offset.clone()) + mgr.adjust_inverse(mgr.final_offset) # NULL out the output stack effects for poke in mgr.pokes: if not poke.effect.size and poke.effect.name not in mgr.instr.unmoved_names: diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index b744ca7e5c8145..eca4747a3e4d57 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -990,6 +990,7 @@ def deprecate_keyword_use( params: dict[int, Parameter], argname_fmt: str | None, *, + fastcall: bool, limited_capi: bool, clinic: Clinic, ) -> str: @@ -1003,26 +1004,30 @@ def deprecate_keyword_use( if p.is_optional(): if argname_fmt: conditions.append(f"nargs < {i+1} && {argname_fmt % i}") - elif func.kind.new_or_init or limited_capi: - conditions.append(f"nargs < {i+1} && PyDict_Contains(kwargs, &_Py_ID({p.name}))") - containscheck = "PyDict_Contains" - clinic.add_include('pycore_runtime.h', '_Py_ID()') - else: + elif fastcall: conditions.append(f"nargs < {i+1} && PySequence_Contains(kwnames, &_Py_ID({p.name}))") containscheck = "PySequence_Contains" clinic.add_include('pycore_runtime.h', '_Py_ID()') + else: + conditions.append(f"nargs < {i+1} && PyDict_Contains(kwargs, &_Py_ID({p.name}))") + containscheck = "PyDict_Contains" + clinic.add_include('pycore_runtime.h', '_Py_ID()') else: conditions = [f"nargs < {i+1}"] condition = ") || (".join(conditions) if len(conditions) > 1: condition = f"(({condition}))" if last_param.is_optional(): - if limited_capi: - condition = f"kwargs && PyDict_Size(kwargs) && {condition}" - elif func.kind.new_or_init: - condition = f"kwargs && PyDict_GET_SIZE(kwargs) && {condition}" + if fastcall: + if limited_capi: + condition = f"kwnames && PyTuple_Size(kwnames) && {condition}" + else: + condition = f"kwnames && PyTuple_GET_SIZE(kwnames) && {condition}" else: - condition = f"kwnames && PyTuple_GET_SIZE(kwnames) && {condition}" + if limited_capi: + condition = f"kwargs && PyDict_Size(kwargs) && {condition}" + else: + condition = f"kwargs && PyDict_GET_SIZE(kwargs) && {condition}" names = [repr(p.name) for p in params.values()] pstr = pprint_words(names) pl = 's' if len(params) != 1 else '' @@ -1193,6 +1198,7 @@ def parser_body( add(field) return linear_format(output(), parser_declarations=declarations) + fastcall = not new_or_init limited_capi = clinic.limited_capi if limited_capi and (requires_defining_class or pseudo_args or (any(p.is_optional() for p in parameters) and @@ -1210,7 +1216,7 @@ def parser_body( parser_prototype = self.PARSER_PROTOTYPE_NOARGS parser_code = [] else: - assert not new_or_init + assert fastcall flags = "METH_METHOD|METH_FASTCALL|METH_KEYWORDS" parser_prototype = self.PARSER_PROTOTYPE_DEF_CLASS @@ -1261,11 +1267,8 @@ def parser_body( {c_basename}({self_type}{self_name}, PyObject *%s) """ % argname) - if limited_capi: - parsearg = None - else: - displayname = parameters[0].get_displayname(0) - parsearg = converters[0].parse_arg(argname, displayname) + displayname = parameters[0].get_displayname(0) + parsearg = converters[0].parse_arg(argname, displayname, limited_capi=limited_capi) if parsearg is None: parsearg = """ if (!PyArg_Parse(%s, "{format_units}:{name}", {parse_arguments})) {{ @@ -1284,27 +1287,8 @@ def parser_body( parser_prototype = self.PARSER_PROTOTYPE_VARARGS parser_definition = parser_body(parser_prototype, ' {option_group_parsing}') - elif (not requires_defining_class and pos_only == len(parameters) and - not pseudo_args and limited_capi): - # positional-only for the limited C API - flags = "METH_VARARGS" - parser_prototype = self.PARSER_PROTOTYPE_VARARGS - if all(isinstance(c, object_converter) and c.format_unit == 'O' for c in converters): - parser_code = [normalize_snippet(""" - if (!PyArg_UnpackTuple(args, "{name}", %d, %d, - {parse_arguments})) - goto exit; - """ % (min_pos, max_pos), indent=4)] - else: - parser_code = [normalize_snippet(""" - if (!PyArg_ParseTuple(args, "{format_units}:{name}", - {parse_arguments})) - goto exit; - """, indent=4)] - parser_definition = parser_body(parser_prototype, *parser_code) - elif not requires_defining_class and pos_only == len(parameters) - pseudo_args: - if not new_or_init: + if fastcall: # positional-only, but no option groups # we only need one call to _PyArg_ParseStack @@ -1318,24 +1302,59 @@ def parser_body( flags = "METH_VARARGS" parser_prototype = self.PARSER_PROTOTYPE_VARARGS - nargs = 'PyTuple_GET_SIZE(args)' - argname_fmt = 'PyTuple_GET_ITEM(args, %d)' + if limited_capi: + nargs = 'PyTuple_Size(args)' + argname_fmt = 'PyTuple_GetItem(args, %d)' + else: + nargs = 'PyTuple_GET_SIZE(args)' + argname_fmt = 'PyTuple_GET_ITEM(args, %d)' left_args = f"{nargs} - {max_pos}" max_args = NO_VARARG if (vararg != NO_VARARG) else max_pos - parser_code = [normalize_snippet(""" - if (!_PyArg_CheckPositional("{name}", %s, %d, %s)) {{ - goto exit; - }} - """ % (nargs, min_pos, max_args), indent=4)] + if limited_capi: + parser_code = [] + if nargs != 'nargs': + parser_code.append(normalize_snippet(f'Py_ssize_t nargs = {nargs};', indent=4)) + nargs = 'nargs' + if min_pos == max_args: + pl = '' if min_pos == 1 else 's' + parser_code.append(normalize_snippet(f""" + if ({nargs} != {min_pos}) {{{{ + PyErr_Format(PyExc_TypeError, "{{name}} expected {min_pos} argument{pl}, got %zd", {nargs}); + goto exit; + }}}} + """, + indent=4)) + else: + if min_pos: + pl = '' if min_pos == 1 else 's' + parser_code.append(normalize_snippet(f""" + if ({nargs} < {min_pos}) {{{{ + PyErr_Format(PyExc_TypeError, "{{name}} expected at least {min_pos} argument{pl}, got %zd", {nargs}); + goto exit; + }}}} + """, + indent=4)) + if max_args != NO_VARARG: + pl = '' if max_args == 1 else 's' + parser_code.append(normalize_snippet(f""" + if ({nargs} > {max_args}) {{{{ + PyErr_Format(PyExc_TypeError, "{{name}} expected at most {max_args} argument{pl}, got %zd", {nargs}); + goto exit; + }}}} + """, + indent=4)) + else: + parser_code = [normalize_snippet(f""" + if (!_PyArg_CheckPositional("{{name}}", {nargs}, {min_pos}, {max_args})) {{{{ + goto exit; + }}}} + """, indent=4)] has_optional = False for i, p in enumerate(parameters): - displayname = p.get_displayname(i+1) - argname = argname_fmt % i - if p.is_vararg(): - if not new_or_init: + if fastcall: parser_code.append(normalize_snippet(""" %s = PyTuple_New(%s); if (!%s) {{ @@ -1361,7 +1380,9 @@ def parser_body( ), indent=4)) continue - parsearg = p.converter.parse_arg(argname, displayname) + displayname = p.get_displayname(i+1) + argname = argname_fmt % i + parsearg = p.converter.parse_arg(argname, displayname, limited_capi=limited_capi) if parsearg is None: parser_code = None break @@ -1378,7 +1399,9 @@ def parser_body( if has_optional: parser_code.append("skip_optional:") else: - if not new_or_init: + if limited_capi: + fastcall = False + if fastcall: parser_code = [normalize_snippet(""" if (!_PyArg_ParseStack(args, nargs, "{format_units}:{name}", {parse_arguments})) {{ @@ -1386,6 +1409,8 @@ def parser_body( }} """, indent=4)] else: + flags = "METH_VARARGS" + parser_prototype = self.PARSER_PROTOTYPE_VARARGS parser_code = [normalize_snippet(""" if (!PyArg_ParseTuple(args, "{format_units}:{name}", {parse_arguments})) {{ @@ -1421,25 +1446,10 @@ def parser_body( nargs = f"Py_MIN(nargs, {max_pos})" if max_pos else "0" if limited_capi: - # positional-or-keyword arguments - flags = "METH_VARARGS|METH_KEYWORDS" - - parser_prototype = self.PARSER_PROTOTYPE_KEYWORD - parser_code = [normalize_snippet(""" - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "{format_units}:{name}", _keywords, - {parse_arguments})) - goto exit; - """, indent=4)] - declarations = "static char *_keywords[] = {{{keywords_c} NULL}};" - if deprecated_positionals or deprecated_keywords: - declarations += "\nPy_ssize_t nargs = PyTuple_Size(args);" - if deprecated_keywords: - code = self.deprecate_keyword_use(f, deprecated_keywords, None, - limited_capi=limited_capi, - clinic=clinic) - parser_code.append(code) + parser_code = None + fastcall = False - elif not new_or_init: + elif fastcall: flags = "METH_FASTCALL|METH_KEYWORDS" parser_prototype = self.PARSER_PROTOTYPE_FASTCALL_KEYWORDS argname_fmt = 'args[%d]' @@ -1477,11 +1487,12 @@ def parser_body( flags = 'METH_METHOD|' + flags parser_prototype = self.PARSER_PROTOTYPE_DEF_CLASS - if not limited_capi: + if parser_code is not None: if deprecated_keywords: code = self.deprecate_keyword_use(f, deprecated_keywords, argname_fmt, - limited_capi=limited_capi, - clinic=clinic) + clinic=clinic, + fastcall=fastcall, + limited_capi=limited_capi) parser_code.append(code) add_label: str | None = None @@ -1490,7 +1501,7 @@ def parser_body( raise ValueError("defining_class should be the first " "parameter (after self)") displayname = p.get_displayname(i+1) - parsearg = p.converter.parse_arg(argname_fmt % i, displayname) + parsearg = p.converter.parse_arg(argname_fmt % i, displayname, limited_capi=limited_capi) if parsearg is None: parser_code = None break @@ -1542,40 +1553,56 @@ def parser_body( }} """ % add_label, indent=4)) - if parser_code is not None: - if add_label: - parser_code.append("%s:" % add_label) + if parser_code is not None: + if add_label: + parser_code.append("%s:" % add_label) + else: + declarations = declare_parser(f, clinic=clinic, + hasformat=True, + limited_capi=limited_capi) + if limited_capi: + # positional-or-keyword arguments + assert not fastcall + flags = "METH_VARARGS|METH_KEYWORDS" + parser_prototype = self.PARSER_PROTOTYPE_KEYWORD + parser_code = [normalize_snippet(""" + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "{format_units}:{name}", _keywords, + {parse_arguments})) + goto exit; + """, indent=4)] + declarations = "static char *_keywords[] = {{{keywords_c} NULL}};" + if deprecated_positionals or deprecated_keywords: + declarations += "\nPy_ssize_t nargs = PyTuple_Size(args);" + + elif fastcall: + parser_code = [normalize_snippet(""" + if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser{parse_arguments_comma} + {parse_arguments})) {{ + goto exit; + }} + """, indent=4)] else: - declarations = declare_parser(f, clinic=clinic, - hasformat=True, - limited_capi=clinic.limited_capi) - if not new_or_init: - parser_code = [normalize_snippet(""" - if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser{parse_arguments_comma} - {parse_arguments})) {{ - goto exit; - }} - """, indent=4)] - else: - parser_code = [normalize_snippet(""" - if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, - {parse_arguments})) {{ - goto exit; - }} - """, indent=4)] - if deprecated_positionals or deprecated_keywords: - declarations += "\nPy_ssize_t nargs = PyTuple_GET_SIZE(args);" - if deprecated_keywords: - code = self.deprecate_keyword_use(f, deprecated_keywords, None, - limited_capi=limited_capi, - clinic=clinic) - parser_code.append(code) + parser_code = [normalize_snippet(""" + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwargs, &_parser, + {parse_arguments})) {{ + goto exit; + }} + """, indent=4)] + if deprecated_positionals or deprecated_keywords: + declarations += "\nPy_ssize_t nargs = PyTuple_GET_SIZE(args);" + if deprecated_keywords: + code = self.deprecate_keyword_use(f, deprecated_keywords, None, + clinic=clinic, + fastcall=fastcall, + limited_capi=limited_capi) + parser_code.append(code) if deprecated_positionals: code = self.deprecate_positional_use(f, deprecated_positionals) # Insert the deprecation code before parameter parsing. parser_code.insert(0, code) + assert parser_prototype is not None parser_definition = parser_body(parser_prototype, *parser_code, declarations=declarations) @@ -1619,6 +1646,9 @@ def parser_body( if flags in ('METH_NOARGS', 'METH_O', 'METH_VARARGS'): methoddef_cast = "(PyCFunction)" methoddef_cast_end = "" + elif limited_capi: + methoddef_cast = "(PyCFunction)(void(*)(void))" + methoddef_cast_end = "" else: methoddef_cast = "_PyCFunction_CAST(" methoddef_cast_end = ")" @@ -3030,11 +3060,11 @@ def copy( def get_displayname(self, i: int) -> str: if i == 0: - return '"argument"' + return 'argument' if not self.is_positional_only(): - return f'"argument {self.name!r}"' + return f'argument {self.name!r}' else: - return f'"argument {i}"' + return f'argument {i}' def render_docstring(self) -> str: add, out = text_accumulator() @@ -3458,41 +3488,78 @@ def pre_render(self) -> None: """ pass - def parse_arg(self, argname: str, displayname: str) -> str | None: + def bad_argument(self, displayname: str, expected: str, *, limited_capi: bool, expected_literal: bool = True) -> str: + assert '"' not in expected + if limited_capi: + if expected_literal: + return (f'PyErr_Format(PyExc_TypeError, ' + f'"{{{{name}}}}() {displayname} must be {expected}, not %.50s", ' + f'{{argname}} == Py_None ? "None" : Py_TYPE({{argname}})->tp_name);') + else: + return (f'PyErr_Format(PyExc_TypeError, ' + f'"{{{{name}}}}() {displayname} must be %.50s, not %.50s", ' + f'"{expected}", ' + f'{{argname}} == Py_None ? "None" : Py_TYPE({{argname}})->tp_name);') + else: + if expected_literal: + expected = f'"{expected}"' + return f'_PyArg_BadArgument("{{{{name}}}}", "{displayname}", {expected}, {{argname}});' + + def format_code(self, fmt: str, *, + argname: str, + bad_argument: str | None = None, + bad_argument2: str | None = None, + **kwargs: Any) -> str: + if '{bad_argument}' in fmt: + if not bad_argument: + raise TypeError("required 'bad_argument' argument") + fmt = fmt.replace('{bad_argument}', bad_argument) + if '{bad_argument2}' in fmt: + if not bad_argument2: + raise TypeError("required 'bad_argument2' argument") + fmt = fmt.replace('{bad_argument2}', bad_argument2) + return fmt.format(argname=argname, paramname=self.parser_name, **kwargs) + + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'O&': - return """ + return self.format_code(""" if (!{converter}({argname}, &{paramname})) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name, - converter=self.converter) + """, + argname=argname, + converter=self.converter) if self.format_unit == 'O!': cast = '(%s)' % self.type if self.type != 'PyObject *' else '' if self.subclass_of in type_checks: typecheck, typename = type_checks[self.subclass_of] - return """ + return self.format_code(""" if (!{typecheck}({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "{typename}", {argname}); + {bad_argument} goto exit; }}}} {paramname} = {cast}{argname}; - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname, typecheck=typecheck, - typename=typename, cast=cast) - return """ + """, + argname=argname, + bad_argument=self.bad_argument(displayname, typename, limited_capi=limited_capi), + typecheck=typecheck, typename=typename, cast=cast) + return self.format_code(""" if (!PyObject_TypeCheck({argname}, {subclass_of})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, ({subclass_of})->tp_name, {argname}); + {bad_argument} goto exit; }}}} {paramname} = {cast}{argname}; - """.format(argname=argname, paramname=self.parser_name, - subclass_of=self.subclass_of, cast=cast, - displayname=displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, '({subclass_of})->tp_name', + expected_literal=False, limited_capi=limited_capi), + subclass_of=self.subclass_of, cast=cast) if self.format_unit == 'O': cast = '(%s)' % self.type if self.type != 'PyObject *' else '' - return """ + return self.format_code(""" {paramname} = {cast}{argname}; - """.format(argname=argname, paramname=self.parser_name, cast=cast) + """, + argname=argname, cast=cast) return None def set_template_dict(self, template_dict: TemplateDict) -> None: @@ -3567,22 +3634,24 @@ def converter_init(self, *, accept: TypeSet = {object}) -> None: self.default = bool(self.default) self.c_default = str(int(self.default)) - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'i': - return """ + return self.format_code(""" {paramname} = PyLong_AsInt({argname}); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) elif self.format_unit == 'p': - return """ + return self.format_code(""" {paramname} = PyObject_IsTrue({argname}); if ({paramname} < 0) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class defining_class_converter(CConverter): """ @@ -3618,9 +3687,9 @@ def converter_init(self) -> None: if self.c_default == '"\'"': self.c_default = r"'\''" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'c': - return """ + return self.format_code(""" if (PyBytes_Check({argname}) && PyBytes_GET_SIZE({argname}) == 1) {{{{ {paramname} = PyBytes_AS_STRING({argname})[0]; }}}} @@ -3628,12 +3697,14 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: {paramname} = PyByteArray_AS_STRING({argname})[0]; }}}} else {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "a byte string of length 1", {argname}); + {bad_argument} goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'a byte string of length 1', limited_capi=limited_capi), + ) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) @add_legacy_c_converter('B', bitwise=True) @@ -3647,9 +3718,9 @@ def converter_init(self, *, bitwise: bool = False) -> None: if bitwise: self.format_unit = 'B' - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'b': - return """ + return self.format_code(""" {{{{ long ival = PyLong_AsLong({argname}); if (ival == -1 && PyErr_Occurred()) {{{{ @@ -3669,9 +3740,10 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: {paramname} = (unsigned char) ival; }}}} }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) elif self.format_unit == 'B': - return """ + return self.format_code(""" {{{{ unsigned long ival = PyLong_AsUnsignedLongMask({argname}); if (ival == (unsigned long)-1 && PyErr_Occurred()) {{{{ @@ -3681,8 +3753,9 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: {paramname} = (unsigned char) ival; }}}} }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class byte_converter(unsigned_char_converter): pass @@ -3692,9 +3765,9 @@ class short_converter(CConverter): format_unit = 'h' c_ignored_default = "0" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'h': - return """ + return self.format_code(""" {{{{ long ival = PyLong_AsLong({argname}); if (ival == -1 && PyErr_Occurred()) {{{{ @@ -3714,8 +3787,9 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: {paramname} = (short) ival; }}}} }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class unsigned_short_converter(CConverter): type = 'unsigned short' @@ -3730,15 +3804,33 @@ def converter_init(self, *, bitwise: bool = False) -> None: self.add_include('pycore_long.h', '_PyLong_UnsignedShort_Converter()') - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'H': - return """ + return self.format_code(""" {paramname} = (unsigned short)PyLong_AsUnsignedLongMask({argname}); if ({paramname} == (unsigned short)-1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + # NOTE: Raises OverflowError for negative integer. + return self.format_code(""" + {{{{ + unsigned long uval = PyLong_AsUnsignedLong({argname}); + if (uval == (unsigned long)-1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + if (uval > USHRT_MAX) {{{{ + PyErr_SetString(PyExc_OverflowError, + "Python int too large for C unsigned short"); + goto exit; + }}}} + {paramname} = (unsigned short) uval; + }}}} + """, + argname=argname) @add_legacy_c_converter('C', accept={str}) class int_converter(CConverter): @@ -3757,28 +3849,31 @@ def converter_init( if type is not None: self.type = type - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'i': - return """ + return self.format_code(""" {paramname} = PyLong_AsInt({argname}); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) + """, + argname=argname) elif self.format_unit == 'C': - return """ + return self.format_code(""" if (!PyUnicode_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "a unicode character", {argname}); + {bad_argument} goto exit; }}}} if (PyUnicode_GET_LENGTH({argname}) != 1) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "a unicode character", {argname}); + {bad_argument} goto exit; }}}} {paramname} = PyUnicode_READ_CHAR({argname}, 0); - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'a unicode character', limited_capi=limited_capi), + ) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class unsigned_int_converter(CConverter): type = 'unsigned int' @@ -3793,15 +3888,33 @@ def converter_init(self, *, bitwise: bool = False) -> None: self.add_include('pycore_long.h', '_PyLong_UnsignedInt_Converter()') - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'I': - return """ + return self.format_code(""" {paramname} = (unsigned int)PyLong_AsUnsignedLongMask({argname}); if ({paramname} == (unsigned int)-1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + # NOTE: Raises OverflowError for negative integer. + return self.format_code(""" + {{{{ + unsigned long uval = PyLong_AsUnsignedLong({argname}); + if (uval == (unsigned long)-1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + if (uval > UINT_MAX) {{{{ + PyErr_SetString(PyExc_OverflowError, + "Python int too large for C unsigned int"); + goto exit; + }}}} + {paramname} = (unsigned int) uval; + }}}} + """, + argname=argname) class long_converter(CConverter): type = 'long' @@ -3809,15 +3922,16 @@ class long_converter(CConverter): format_unit = 'l' c_ignored_default = "0" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'l': - return """ + return self.format_code(""" {paramname} = PyLong_AsLong({argname}); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class unsigned_long_converter(CConverter): type = 'unsigned long' @@ -3832,17 +3946,28 @@ def converter_init(self, *, bitwise: bool = False) -> None: self.add_include('pycore_long.h', '_PyLong_UnsignedLong_Converter()') - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'k': - return """ + return self.format_code(""" if (!PyLong_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "int", {argname}); + {bad_argument} goto exit; }}}} {paramname} = PyLong_AsUnsignedLongMask({argname}); - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'int', limited_capi=limited_capi), + ) + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + # NOTE: Raises OverflowError for negative integer. + return self.format_code(""" + {paramname} = PyLong_AsUnsignedLong({argname}); + if ({paramname} == (unsigned long)-1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + """, + argname=argname) class long_long_converter(CConverter): type = 'long long' @@ -3850,15 +3975,16 @@ class long_long_converter(CConverter): format_unit = 'L' c_ignored_default = "0" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'L': - return """ + return self.format_code(""" {paramname} = PyLong_AsLongLong({argname}); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class unsigned_long_long_converter(CConverter): type = 'unsigned long long' @@ -3873,17 +3999,28 @@ def converter_init(self, *, bitwise: bool = False) -> None: self.add_include('pycore_long.h', '_PyLong_UnsignedLongLong_Converter()') - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'K': - return """ + return self.format_code(""" if (!PyLong_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "int", {argname}); + {bad_argument} goto exit; }}}} {paramname} = PyLong_AsUnsignedLongLongMask({argname}); - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'int', limited_capi=limited_capi), + ) + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + # NOTE: Raises OverflowError for negative integer. + return self.format_code(""" + {paramname} = PyLong_AsUnsignedLongLong({argname}); + if ({paramname} == (unsigned long long)-1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + """, + argname=argname) class Py_ssize_t_converter(CConverter): type = 'Py_ssize_t' @@ -3901,12 +4038,16 @@ def converter_init(self, *, accept: TypeSet = {int}) -> None: else: fail(f"Py_ssize_t_converter: illegal 'accept' argument {accept!r}") - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'n': - return """ + if limited_capi: + PyNumber_Index = 'PyNumber_Index' + else: + PyNumber_Index = '_PyNumber_Index' + return self.format_code(""" {{{{ Py_ssize_t ival = -1; - PyObject *iobj = _PyNumber_Index({argname}); + PyObject *iobj = {PyNumber_Index}({argname}); if (iobj != NULL) {{{{ ival = PyLong_AsSsize_t(iobj); Py_DECREF(iobj); @@ -3916,8 +4057,28 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: }}}} {paramname} = ival; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname, + PyNumber_Index=PyNumber_Index) + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + return self.format_code(""" + if ({argname} != Py_None) {{{{ + if (PyIndex_Check({argname})) {{{{ + {paramname} = PyNumber_AsSsize_t({argname}, PyExc_OverflowError); + if ({paramname} == -1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + }}}} + else {{{{ + {bad_argument} + goto exit; + }}}} + }}}} + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'integer or None', limited_capi=limited_capi), + ) class slice_index_converter(CConverter): @@ -3926,11 +4087,51 @@ class slice_index_converter(CConverter): def converter_init(self, *, accept: TypeSet = {int, NoneType}) -> None: if accept == {int}: self.converter = '_PyEval_SliceIndexNotNone' + self.nullable = False elif accept == {int, NoneType}: self.converter = '_PyEval_SliceIndex' + self.nullable = True else: fail(f"slice_index_converter: illegal 'accept' argument {accept!r}") + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + if self.nullable: + return self.format_code(""" + if (!Py_IsNone({argname})) {{{{ + if (PyIndex_Check({argname})) {{{{ + {paramname} = PyNumber_AsSsize_t({argname}, NULL); + if ({paramname} == -1 && PyErr_Occurred()) {{{{ + return 0; + }}}} + }}}} + else {{{{ + PyErr_SetString(PyExc_TypeError, + "slice indices must be integers or " + "None or have an __index__ method"); + goto exit; + }}}} + }}}} + """, + argname=argname) + else: + return self.format_code(""" + if (PyIndex_Check({argname})) {{{{ + {paramname} = PyNumber_AsSsize_t({argname}, NULL); + if ({paramname} == -1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + }}}} + else {{{{ + PyErr_SetString(PyExc_TypeError, + "slice indices must be integers or " + "have an __index__ method"); + goto exit; + }}}} + """, + argname=argname) + class size_t_converter(CConverter): type = 'size_t' converter = '_PyLong_Size_t_Converter' @@ -3940,15 +4141,25 @@ def converter_init(self, *, accept: TypeSet = {int, NoneType}) -> None: self.add_include('pycore_long.h', '_PyLong_Size_t_Converter()') - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'n': - return """ + return self.format_code(""" {paramname} = PyNumber_AsSsize_t({argname}, PyExc_OverflowError); if ({paramname} == -1 && PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + if not limited_capi: + return super().parse_arg(argname, displayname, limited_capi=limited_capi) + # NOTE: Raises OverflowError for negative integer. + return self.format_code(""" + {paramname} = PyLong_AsSize_t({argname}); + if ({paramname} == (size_t)-1 && PyErr_Occurred()) {{{{ + goto exit; + }}}} + """, + argname=argname) class fildes_converter(CConverter): @@ -3960,12 +4171,13 @@ def converter_init(self, *, accept: TypeSet = {int, NoneType}) -> None: '_PyLong_FileDescriptor_Converter()') def _parse_arg(self, argname: str, displayname: str) -> str | None: - return """ + return self.format_code(""" {paramname} = PyObject_AsFileDescriptor({argname}); if ({paramname} == -1) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.name) + """, + argname=argname) class float_converter(CConverter): @@ -3974,9 +4186,9 @@ class float_converter(CConverter): format_unit = 'f' c_ignored_default = "0.0" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'f': - return """ + return self.format_code(""" if (PyFloat_CheckExact({argname})) {{{{ {paramname} = (float) (PyFloat_AS_DOUBLE({argname})); }}}} @@ -3987,8 +4199,9 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: goto exit; }}}} }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class double_converter(CConverter): type = 'double' @@ -3996,9 +4209,9 @@ class double_converter(CConverter): format_unit = 'd' c_ignored_default = "0.0" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'd': - return """ + return self.format_code(""" if (PyFloat_CheckExact({argname})) {{{{ {paramname} = PyFloat_AS_DOUBLE({argname}); }}}} @@ -4009,8 +4222,9 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: goto exit; }}}} }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class Py_complex_converter(CConverter): @@ -4019,15 +4233,16 @@ class Py_complex_converter(CConverter): format_unit = 'D' c_ignored_default = "{0.0, 0.0}" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'D': - return """ + return self.format_code(""" {paramname} = PyComplex_AsCComplex({argname}); if (PyErr_Occurred()) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name) - return super().parse_arg(argname, displayname) + """, + argname=argname) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class object_converter(CConverter): @@ -4112,11 +4327,11 @@ def post_parsing(self) -> str: else: return "" - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 's': - return """ + return self.format_code(""" if (!PyUnicode_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "str", {argname}); + {bad_argument} goto exit; }}}} Py_ssize_t {length_name}; @@ -4128,10 +4343,12 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: PyErr_SetString(PyExc_ValueError, "embedded null character"); goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname, length_name=self.length_name) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'str', limited_capi=limited_capi), + length_name=self.length_name) if self.format_unit == 'z': - return """ + return self.format_code(""" if ({argname} == Py_None) {{{{ {paramname} = NULL; }}}} @@ -4147,12 +4364,14 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: }}}} }}}} else {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "str or None", {argname}); + {bad_argument} goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname, length_name=self.length_name) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'str or None', limited_capi=limited_capi), + length_name=self.length_name) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) # # This is the fourth or fifth rewrite of registering all the @@ -4214,51 +4433,57 @@ class PyBytesObject_converter(CConverter): format_unit = 'S' # accept = {bytes} - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'S': - return """ + return self.format_code(""" if (!PyBytes_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "bytes", {argname}); + {bad_argument} goto exit; }}}} {paramname} = ({type}){argname}; - """.format(argname=argname, paramname=self.parser_name, - type=self.type, displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'bytes', limited_capi=limited_capi), + type=self.type) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class PyByteArrayObject_converter(CConverter): type = 'PyByteArrayObject *' format_unit = 'Y' # accept = {bytearray} - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'Y': - return """ + return self.format_code(""" if (!PyByteArray_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "bytearray", {argname}); + {bad_argument} goto exit; }}}} {paramname} = ({type}){argname}; - """.format(argname=argname, paramname=self.parser_name, - type=self.type, displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'bytearray', limited_capi=limited_capi), + type=self.type) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) class unicode_converter(CConverter): type = 'PyObject *' default_type = (str, Null, NoneType) format_unit = 'U' - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'U': - return """ + return self.format_code(""" if (!PyUnicode_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "str", {argname}); + {bad_argument} goto exit; }}}} {paramname} = {argname}; - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'str', limited_capi=limited_capi), + ) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) @add_legacy_c_converter('u') @add_legacy_c_converter('u#', zeroes=True) @@ -4292,25 +4517,26 @@ def cleanup(self) -> str: if self.length: return "" else: - return """\ -PyMem_Free((void *){name}); -""".format(name=self.name) + return f"""PyMem_Free((void *){self.parser_name});\n""" - def parse_arg(self, argname: str, argnum: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if not self.length: if self.accept == {str}: - return """ + return self.format_code(""" if (!PyUnicode_Check({argname})) {{{{ - _PyArg_BadArgument("{{name}}", {argnum}, "str", {argname}); + {bad_argument} goto exit; }}}} {paramname} = PyUnicode_AsWideCharString({argname}, NULL); if ({paramname} == NULL) {{{{ goto exit; }}}} - """.format(argname=argname, paramname=self.name, argnum=argnum) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'str', limited_capi=limited_capi), + ) elif self.accept == {str, NoneType}: - return """ + return self.format_code(""" if ({argname} == Py_None) {{{{ {paramname} = NULL; }}}} @@ -4321,11 +4547,14 @@ def parse_arg(self, argname: str, argnum: str) -> str | None: }}}} }}}} else {{{{ - _PyArg_BadArgument("{{name}}", {argnum}, "str or None", {argname}); + {bad_argument} goto exit; }}}} - """.format(argname=argname, paramname=self.name, argnum=argnum) - return super().parse_arg(argname, argnum) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'str or None', limited_capi=limited_capi), + ) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) @add_legacy_c_converter('s*', accept={str, buffer}) @add_legacy_c_converter('z*', accept={str, buffer, NoneType}) @@ -4359,20 +4588,22 @@ def cleanup(self) -> str: name = self.name return "".join(["if (", name, ".obj) {\n PyBuffer_Release(&", name, ");\n}\n"]) - def parse_arg(self, argname: str, displayname: str) -> str | None: + def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None: if self.format_unit == 'y*': - return """ + return self.format_code(""" if (PyObject_GetBuffer({argname}, &{paramname}, PyBUF_SIMPLE) != 0) {{{{ goto exit; }}}} if (!PyBuffer_IsContiguous(&{paramname}, 'C')) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "contiguous buffer", {argname}); + {bad_argument} goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'contiguous buffer', limited_capi=limited_capi), + ) elif self.format_unit == 's*': - return """ + return self.format_code(""" if (PyUnicode_Check({argname})) {{{{ Py_ssize_t len; const char *ptr = PyUnicode_AsUTF8AndSize({argname}, &len); @@ -4386,26 +4617,30 @@ def parse_arg(self, argname: str, displayname: str) -> str | None: goto exit; }}}} if (!PyBuffer_IsContiguous(&{paramname}, 'C')) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "contiguous buffer", {argname}); + {bad_argument} goto exit; }}}} }}}} - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'contiguous buffer', limited_capi=limited_capi), + ) elif self.format_unit == 'w*': - return """ + return self.format_code(""" if (PyObject_GetBuffer({argname}, &{paramname}, PyBUF_WRITABLE) < 0) {{{{ - PyErr_Clear(); - _PyArg_BadArgument("{{name}}", {displayname}, "read-write bytes-like object", {argname}); + {bad_argument} goto exit; }}}} if (!PyBuffer_IsContiguous(&{paramname}, 'C')) {{{{ - _PyArg_BadArgument("{{name}}", {displayname}, "contiguous buffer", {argname}); + {bad_argument2} goto exit; }}}} - """.format(argname=argname, paramname=self.parser_name, - displayname=displayname) - return super().parse_arg(argname, displayname) + """, + argname=argname, + bad_argument=self.bad_argument(displayname, 'read-write bytes-like object', limited_capi=limited_capi), + bad_argument2=self.bad_argument(displayname, 'contiguous buffer', limited_capi=limited_capi), + ) + return super().parse_arg(argname, displayname, limited_capi=limited_capi) def correct_name_for_self( diff --git a/Tools/lockbench/lockbench.py b/Tools/lockbench/lockbench.py new file mode 100644 index 00000000000000..9833d703e00cbb --- /dev/null +++ b/Tools/lockbench/lockbench.py @@ -0,0 +1,53 @@ +# Measure the performance of PyMutex and PyThread_type_lock locks +# with short critical sections. +# +# Usage: python Tools/lockbench/lockbench.py [CRITICAL_SECTION_LENGTH] +# +# How to interpret the results: +# +# Acquisitions (kHz): Reports the total number of lock acquisitions in +# thousands of acquisitions per second. This is the most important metric, +# particularly for the 1 thread case because even in multithreaded programs, +# most locks acquisitions are not contended. Values for 2+ threads are +# only meaningful for `--disable-gil` builds, because the GIL prevents most +# situations where there is lock contention with short critical sections. +# +# Fairness: A measure of how evenly the lock acquisitions are distributed. +# A fairness of 1.0 means that all threads acquired the lock the same number +# of times. A fairness of 1/N means that only one thread ever acquired the +# lock. +# See https://en.wikipedia.org/wiki/Fairness_measure#Jain's_fairness_index + +from _testinternalcapi import benchmark_locks +import sys + +# Max number of threads to test +MAX_THREADS = 10 + +# How much "work" to do while holding the lock +CRITICAL_SECTION_LENGTH = 1 + + +def jains_fairness(values): + # Jain's fairness index + # See https://en.wikipedia.org/wiki/Fairness_measure + return (sum(values) ** 2) / (len(values) * sum(x ** 2 for x in values)) + +def main(): + print("Lock Type Threads Acquisitions (kHz) Fairness") + for lock_type in ["PyMutex", "PyThread_type_lock"]: + use_pymutex = (lock_type == "PyMutex") + for num_threads in range(1, MAX_THREADS + 1): + acquisitions, thread_iters = benchmark_locks( + num_threads, use_pymutex, CRITICAL_SECTION_LENGTH) + + acquisitions /= 1000 # report in kHz for readability + fairness = jains_fairness(thread_iters) + + print(f"{lock_type: <20}{num_threads: <18}{acquisitions: >5.0f}{fairness: >20.2f}") + + +if __name__ == "__main__": + if len(sys.argv) > 1: + CRITICAL_SECTION_LENGTH = int(sys.argv[1]) + main() diff --git a/Tools/peg_generator/mypy.ini b/Tools/peg_generator/mypy.ini index 8820d77b36f646..f38f21bed004b2 100644 --- a/Tools/peg_generator/mypy.ini +++ b/Tools/peg_generator/mypy.ini @@ -8,8 +8,16 @@ python_version = 3.10 # Be strict... strict = True -enable_error_code = truthy-bool,ignore-without-code +warn_unreachable = True +enable_error_code = truthy-bool,ignore-without-code,redundant-expr -# except for a few settings that can't yet be enabled: +# This causes *many* false positives on the peg_generator +# due to pegen.grammar.GrammarVisitor returning Any from visit() and generic_visit(). +# It would be possible to workaround the false positives using asserts, +# but it would be pretty tedious, and probably isn't worth it. warn_return_any = False -warn_unreachable = False + +# Not all of the strictest settings can be enabled +# on generated Python code yet: +[mypy-pegen.grammar_parser.*] +disable_error_code = redundant-expr diff --git a/Tools/peg_generator/pegen/ast_dump.py b/Tools/peg_generator/pegen/ast_dump.py index 2c57d0932fda37..07f8799c114f5d 100644 --- a/Tools/peg_generator/pegen/ast_dump.py +++ b/Tools/peg_generator/pegen/ast_dump.py @@ -66,6 +66,4 @@ def _format(node: Any, level: int = 0) -> Tuple[str, bool]: if all(cls.__name__ != "AST" for cls in node.__class__.__mro__): raise TypeError("expected AST, got %r" % node.__class__.__name__) - if indent is not None and not isinstance(indent, str): - indent = " " * indent return _format(node)[0] diff --git a/Tools/peg_generator/pegen/grammar.py b/Tools/peg_generator/pegen/grammar.py index fcf868eb1753e5..1ee9d100b61f49 100644 --- a/Tools/peg_generator/pegen/grammar.py +++ b/Tools/peg_generator/pegen/grammar.py @@ -35,7 +35,13 @@ def generic_visit(self, node: Iterable[Any], *args: Any, **kwargs: Any) -> Any: class Grammar: def __init__(self, rules: Iterable[Rule], metas: Iterable[Tuple[str, Optional[str]]]): - self.rules = {rule.name: rule for rule in rules} + # Check if there are repeated rules in "rules" + all_rules = {} + for rule in rules: + if rule.name in all_rules: + raise GrammarError(f"Repeated rule {rule.name!r}") + all_rules[rule.name] = rule + self.rules = all_rules self.metas = dict(metas) def __str__(self) -> str: @@ -112,8 +118,7 @@ def __str__(self) -> str: return self.value def __iter__(self) -> Iterable[str]: - if False: - yield + yield from () class NameLeaf(Leaf): @@ -335,8 +340,7 @@ def __str__(self) -> str: return f"~" def __iter__(self) -> Iterator[Tuple[str, str]]: - if False: - yield + yield from () def __eq__(self, other: object) -> bool: if not isinstance(other, Cut): diff --git a/Tools/requirements-hypothesis.txt b/Tools/requirements-hypothesis.txt new file mode 100644 index 00000000000000..9db2b74c87cfb0 --- /dev/null +++ b/Tools/requirements-hypothesis.txt @@ -0,0 +1,4 @@ +# Requirements file for hypothesis that +# we use to run our property-based tests in CI. + +hypothesis==6.84.0 diff --git a/Tools/scripts/summarize_stats.py b/Tools/scripts/summarize_stats.py index 2d198506fb5c6c..3b2bdd8015be4a 100644 --- a/Tools/scripts/summarize_stats.py +++ b/Tools/scripts/summarize_stats.py @@ -2,11 +2,14 @@ default stats folders. """ +# NOTE: Bytecode introspection modules (opcode, dis, etc.) should only +# happen when loading a single dataset. When comparing datasets, it +# could get it wrong, leading to subtle errors. + import argparse import collections import json import os.path -import opcode from datetime import date import itertools import sys @@ -16,22 +19,6 @@ else: DEFAULT_DIR = "/tmp/py_stats/" -#Create list of all instruction names -specialized = iter(opcode._specialized_opmap.keys()) -opname = ["<0>"] -for name in opcode.opname[1:]: - if name.startswith("<"): - try: - name = next(specialized) - except StopIteration: - pass - opname.append(name) - -# opcode_name --> opcode -# Sort alphabetically. -opmap = {name: i for i, name in enumerate(opname)} -opmap = dict(sorted(opmap.items())) - TOTAL = "specialization.hit", "specialization.miss", "execution_count" def format_ratio(num, den): @@ -44,6 +31,16 @@ def format_ratio(num, den): else: return f"{num/den:.01%}" +def percentage_to_float(s): + """ + Converts a percentage string to a float. The empty string is returned as 0.0 + """ + if s == "": + return 0.0 + else: + assert s[-1] == "%" + return float(s[:-1]) + def join_rows(a_rows, b_rows): """ Joins two tables together, side-by-side, where the first column in each is a @@ -180,7 +177,12 @@ def gather_stats(input): if os.path.isfile(input): with open(input, "r") as fd: - return json.load(fd) + stats = json.load(fd) + + stats["_stats_defines"] = {int(k): v for k, v in stats["_stats_defines"].items()} + stats["_defines"] = {int(k): v for k, v in stats["_defines"].items()} + return stats + elif os.path.isdir(input): stats = collections.Counter() for filename in os.listdir(input): @@ -195,17 +197,27 @@ def gather_stats(input): value = int(value) stats[key] += value stats['__nfiles__'] += 1 + + import opcode + + stats["_specialized_instructions"] = [ + op for op in opcode._specialized_opmap.keys() + if "__" not in op + ] + stats["_stats_defines"] = get_stats_defines() + stats["_defines"] = get_defines() + return stats else: raise ValueError(f"{input:r} is not a file or directory path") def extract_opcode_stats(stats): - opcode_stats = [ {} for _ in range(256) ] + opcode_stats = collections.defaultdict(dict) for key, value in stats.items(): if not key.startswith("opcode"): continue - n, _, rest = key[7:].partition("]") - opcode_stats[int(n)][rest.strip(".")] = value + name, _, rest = key[7:].partition("]") + opcode_stats[name][rest.strip(".")] = value return opcode_stats def parse_kinds(spec_src, prefix="SPEC_FAIL"): @@ -239,18 +251,14 @@ def kind_to_text(kind, defines, opname): return pretty(name[len(opname)+1:]) return "kind " + str(kind) -def categorized_counts(opcode_stats): +def categorized_counts(opcode_stats, specialized_instructions): basic = 0 specialized = 0 not_specialized = 0 - specialized_instructions = { - op for op in opcode._specialized_opmap.keys() - if "__" not in op} - for i, opcode_stat in enumerate(opcode_stats): + for name, opcode_stat in opcode_stats.items(): if "execution_count" not in opcode_stat: continue count = opcode_stat['execution_count'] - name = opname[i] if "specializable" in opcode_stat: not_specialized += count elif name in specialized_instructions: @@ -314,13 +322,13 @@ def emit_table(header, rows): def calculate_execution_counts(opcode_stats, total): counts = [] - for i, opcode_stat in enumerate(opcode_stats): + for name, opcode_stat in opcode_stats.items(): if "execution_count" in opcode_stat: count = opcode_stat['execution_count'] miss = 0 if "specializable" not in opcode_stat: miss = opcode_stat.get("specialization.miss") - counts.append((count, opname[i], miss)) + counts.append((count, name, miss)) counts.sort(reverse=True) cumulative = 0 rows = [] @@ -365,7 +373,7 @@ def emit_comparative_execution_counts( (opcode, base_entry[0], head_entry[0], f"{100*change:0.1f}%")) - rows.sort(key=lambda x: -abs(float(x[-1][:-1]))) + rows.sort(key=lambda x: -abs(percentage_to_float(x[-1]))) emit_table( ("Name", "Base Count:", "Head Count:", "Change:"), @@ -378,41 +386,44 @@ def get_defines(): defines = parse_kinds(spec_src) return defines -def emit_specialization_stats(opcode_stats): - defines = get_defines() +def emit_specialization_stats(opcode_stats, defines): with Section("Specialization stats", summary="specialization stats by family"): - for i, opcode_stat in enumerate(opcode_stats): - name = opname[i] + for name, opcode_stat in opcode_stats.items(): print_specialization_stats(name, opcode_stat, defines) -def emit_comparative_specialization_stats(base_opcode_stats, head_opcode_stats): - defines = get_defines() +def emit_comparative_specialization_stats(base_opcode_stats, head_opcode_stats, defines): with Section("Specialization stats", summary="specialization stats by family"): - for i, (base_opcode_stat, head_opcode_stat) in enumerate(zip(base_opcode_stats, head_opcode_stats)): - name = opname[i] - print_comparative_specialization_stats(name, base_opcode_stat, head_opcode_stat, defines) + opcodes = set(base_opcode_stats.keys()) & set(head_opcode_stats.keys()) + for opcode in opcodes: + print_comparative_specialization_stats( + opcode, base_opcode_stats[opcode], head_opcode_stats[opcode], defines + ) -def calculate_specialization_effectiveness(opcode_stats, total): - basic, not_specialized, specialized = categorized_counts(opcode_stats) +def calculate_specialization_effectiveness( + opcode_stats, total, specialized_instructions +): + basic, not_specialized, specialized = categorized_counts( + opcode_stats, specialized_instructions + ) return [ ("Basic", basic, format_ratio(basic, total)), ("Not specialized", not_specialized, format_ratio(not_specialized, total)), ("Specialized", specialized, format_ratio(specialized, total)), ] -def emit_specialization_overview(opcode_stats, total): +def emit_specialization_overview(opcode_stats, total, specialized_instructions): with Section("Specialization effectiveness"): - rows = calculate_specialization_effectiveness(opcode_stats, total) + rows = calculate_specialization_effectiveness(opcode_stats, total, specialized_instructions) emit_table(("Instructions", "Count:", "Ratio:"), rows) for title, field in (("Deferred", "specialization.deferred"), ("Misses", "specialization.miss")): total = 0 counts = [] - for i, opcode_stat in enumerate(opcode_stats): + for name, opcode_stat in opcode_stats.items(): # Avoid double counting misses if title == "Misses" and "specializable" in opcode_stat: continue value = opcode_stat.get(field, 0) - counts.append((value, opname[i])) + counts.append((value, name)) total += value counts.sort(reverse=True) if total: @@ -420,23 +431,28 @@ def emit_specialization_overview(opcode_stats, total): rows = [ (name, count, format_ratio(count, total)) for (count, name) in counts[:10] ] emit_table(("Name", "Count:", "Ratio:"), rows) -def emit_comparative_specialization_overview(base_opcode_stats, base_total, head_opcode_stats, head_total): +def emit_comparative_specialization_overview( + base_opcode_stats, base_total, head_opcode_stats, head_total, specialized_instructions +): with Section("Specialization effectiveness"): - base_rows = calculate_specialization_effectiveness(base_opcode_stats, base_total) - head_rows = calculate_specialization_effectiveness(head_opcode_stats, head_total) + base_rows = calculate_specialization_effectiveness( + base_opcode_stats, base_total, specialized_instructions + ) + head_rows = calculate_specialization_effectiveness( + head_opcode_stats, head_total, specialized_instructions + ) emit_table( ("Instructions", "Base Count:", "Base Ratio:", "Head Count:", "Head Ratio:"), join_rows(base_rows, head_rows) ) def get_stats_defines(): - stats_path = os.path.join(os.path.dirname(__file__), "../../Include/pystats.h") + stats_path = os.path.join(os.path.dirname(__file__), "../../Include/cpython/pystats.h") with open(stats_path) as stats_src: defines = parse_kinds(stats_src, prefix="EVAL_CALL") return defines -def calculate_call_stats(stats): - defines = get_stats_defines() +def calculate_call_stats(stats, defines): total = 0 for key, value in stats.items(): if "Calls to" in key: @@ -455,17 +471,17 @@ def calculate_call_stats(stats): rows.append((key, value, format_ratio(value, total))) return rows -def emit_call_stats(stats): +def emit_call_stats(stats, defines): with Section("Call stats", summary="Inlined calls and frame stats"): - rows = calculate_call_stats(stats) + rows = calculate_call_stats(stats, defines) emit_table(("", "Count:", "Ratio:"), rows) -def emit_comparative_call_stats(base_stats, head_stats): +def emit_comparative_call_stats(base_stats, head_stats, defines): with Section("Call stats", summary="Inlined calls and frame stats"): - base_rows = calculate_call_stats(base_stats) - head_rows = calculate_call_stats(head_stats) + base_rows = calculate_call_stats(base_stats, defines) + head_rows = calculate_call_stats(head_stats, defines) rows = join_rows(base_rows, head_rows) - rows.sort(key=lambda x: -float(x[-1][:-1])) + rows.sort(key=lambda x: -percentage_to_float(x[-1])) emit_table( ("", "Base Count:", "Base Ratio:", "Head Count:", "Head Ratio:"), rows @@ -539,29 +555,27 @@ def emit_comparative_gc_stats(base_stats, head_stats): def get_total(opcode_stats): total = 0 - for opcode_stat in opcode_stats: + for opcode_stat in opcode_stats.values(): if "execution_count" in opcode_stat: total += opcode_stat['execution_count'] return total def emit_pair_counts(opcode_stats, total): pair_counts = [] - for i, opcode_stat in enumerate(opcode_stats): - if i == 0: - continue + for name_i, opcode_stat in opcode_stats.items(): for key, value in opcode_stat.items(): if key.startswith("pair_count"): - x, _, _ = key[11:].partition("]") + name_j, _, _ = key[11:].partition("]") if value: - pair_counts.append((value, (i, int(x)))) + pair_counts.append((value, (name_i, name_j))) with Section("Pair counts", summary="Pair counts for top 100 pairs"): pair_counts.sort(reverse=True) cumulative = 0 rows = [] for (count, pair) in itertools.islice(pair_counts, 100): - i, j = pair + name_i, name_j = pair cumulative += count - rows.append((opname[i] + " " + opname[j], count, format_ratio(count, total), + rows.append((f"{name_i} {name_j}", count, format_ratio(count, total), format_ratio(cumulative, total))) emit_table(("Pair", "Count:", "Self:", "Cumulative:"), rows @@ -577,18 +591,18 @@ def emit_pair_counts(opcode_stats, total): successors[first][second] = count total_predecessors[second] += count total_successors[first] += count - for name, i in opmap.items(): - total1 = total_predecessors[i] - total2 = total_successors[i] + for name in opcode_stats.keys(): + total1 = total_predecessors[name] + total2 = total_successors[name] if total1 == 0 and total2 == 0: continue pred_rows = succ_rows = () if total1: - pred_rows = [(opname[pred], count, f"{count/total1:.1%}") - for (pred, count) in predecessors[i].most_common(5)] + pred_rows = [(pred, count, f"{count/total1:.1%}") + for (pred, count) in predecessors[name].most_common(5)] if total2: - succ_rows = [(opname[succ], count, f"{count/total2:.1%}") - for (succ, count) in successors[i].most_common(5)] + succ_rows = [(succ, count, f"{count/total2:.1%}") + for (succ, count) in successors[name].most_common(5)] with Section(name, 3, f"Successors and predecessors for {name}"): emit_table(("Predecessors", "Count:", "Percentage:"), pred_rows @@ -602,9 +616,9 @@ def output_single_stats(stats): total = get_total(opcode_stats) emit_execution_counts(opcode_stats, total) emit_pair_counts(opcode_stats, total) - emit_specialization_stats(opcode_stats) - emit_specialization_overview(opcode_stats, total) - emit_call_stats(stats) + emit_specialization_stats(opcode_stats, stats["_defines"]) + emit_specialization_overview(opcode_stats, total, stats["_specialized_instructions"]) + emit_call_stats(stats, stats["_stats_defines"]) emit_object_stats(stats) emit_gc_stats(stats) with Section("Meta stats", summary="Meta statistics"): @@ -622,12 +636,13 @@ def output_comparative_stats(base_stats, head_stats): base_opcode_stats, base_total, head_opcode_stats, head_total ) emit_comparative_specialization_stats( - base_opcode_stats, head_opcode_stats + base_opcode_stats, head_opcode_stats, head_stats["_defines"] ) emit_comparative_specialization_overview( - base_opcode_stats, base_total, head_opcode_stats, head_total + base_opcode_stats, base_total, head_opcode_stats, head_total, + head_stats["_specialized_instructions"] ) - emit_comparative_call_stats(base_stats, head_stats) + emit_comparative_call_stats(base_stats, head_stats, head_stats["_stats_defines"]) emit_comparative_object_stats(base_stats, head_stats) emit_comparative_gc_stats(base_stats, head_stats) diff --git a/Tools/unicode/makeunicodedata.py b/Tools/unicode/makeunicodedata.py index 034642db06e48b..6bf5274551c00a 100644 --- a/Tools/unicode/makeunicodedata.py +++ b/Tools/unicode/makeunicodedata.py @@ -44,7 +44,7 @@ # * Doc/library/stdtypes.rst, and # * Doc/library/unicodedata.rst # * Doc/reference/lexical_analysis.rst (two occurrences) -UNIDATA_VERSION = "15.0.0" +UNIDATA_VERSION = "15.1.0" UNICODE_DATA = "UnicodeData%s.txt" COMPOSITION_EXCLUSIONS = "CompositionExclusions%s.txt" EASTASIAN_WIDTH = "EastAsianWidth%s.txt" @@ -101,15 +101,16 @@ # these ranges need to match unicodedata.c:is_unified_ideograph cjk_ranges = [ - ('3400', '4DBF'), - ('4E00', '9FFF'), - ('20000', '2A6DF'), - ('2A700', '2B739'), - ('2B740', '2B81D'), - ('2B820', '2CEA1'), - ('2CEB0', '2EBE0'), - ('30000', '3134A'), - ('31350', '323AF'), + ('3400', '4DBF'), # CJK Ideograph Extension A CJK + ('4E00', '9FFF'), # CJK Ideograph + ('20000', '2A6DF'), # CJK Ideograph Extension B + ('2A700', '2B739'), # CJK Ideograph Extension C + ('2B740', '2B81D'), # CJK Ideograph Extension D + ('2B820', '2CEA1'), # CJK Ideograph Extension E + ('2CEB0', '2EBE0'), # CJK Ideograph Extension F + ('2EBF0', '2EE5D'), # CJK Ideograph Extension I + ('30000', '3134A'), # CJK Ideograph Extension G + ('31350', '323AF'), # CJK Ideograph Extension H ] @@ -1105,11 +1106,15 @@ def __init__(self, version, cjk_check=True): table[i].east_asian_width = widths[i] self.widths = widths - for char, (p,) in UcdFile(DERIVED_CORE_PROPERTIES, version).expanded(): + for char, (propname, *propinfo) in UcdFile(DERIVED_CORE_PROPERTIES, version).expanded(): + if propinfo: + # this is not a binary property, ignore it + continue + if table[char]: # Some properties (e.g. Default_Ignorable_Code_Point) # apply to unassigned code points; ignore them - table[char].binary_properties.add(p) + table[char].binary_properties.add(propname) for char_range, value in UcdFile(LINE_BREAK, version): if value not in MANDATORY_LINE_BREAKS: diff --git a/Tools/wasm/README.md b/Tools/wasm/README.md index cd749dee8920c6..e6dd4d5f00abde 100644 --- a/Tools/wasm/README.md +++ b/Tools/wasm/README.md @@ -141,7 +141,7 @@ and header files with debug builds. #### Cross compile to wasm32-emscripten for node ```shell -./Tools/wasm/wasm_build.py emscripten-browser-dl +./Tools/wasm/wasm_build.py emscripten-node-dl ``` The command is roughly equivalent to: diff --git a/Tools/wasm/mypy.ini b/Tools/wasm/mypy.ini new file mode 100644 index 00000000000000..c62598f89eba69 --- /dev/null +++ b/Tools/wasm/mypy.ini @@ -0,0 +1,14 @@ +[mypy] +files = Tools/wasm +pretty = True +show_traceback = True + +# Make sure the wasm can be run using Python 3.8: +python_version = 3.8 + +# Be strict... +strict = True +enable_error_code = truthy-bool,ignore-without-code + +# except for incomplete defs, which are useful for module authors: +disallow_incomplete_defs = False diff --git a/Tools/wasm/wasm_assets.py b/Tools/wasm/wasm_assets.py index f1c8e0bf007f4c..ffa5e303412c46 100755 --- a/Tools/wasm/wasm_assets.py +++ b/Tools/wasm/wasm_assets.py @@ -16,6 +16,7 @@ import sys import sysconfig import zipfile +from typing import Dict # source directory SRCDIR = pathlib.Path(__file__).parent.parent.parent.absolute() @@ -110,7 +111,8 @@ def get_builddir(args: argparse.Namespace) -> pathlib.Path: def get_sysconfigdata(args: argparse.Namespace) -> pathlib.Path: """Get path to sysconfigdata relative to build root""" - data_name = sysconfig._get_sysconfigdata_name() + assert isinstance(args.builddir, pathlib.Path) + data_name: str = sysconfig._get_sysconfigdata_name() # type: ignore[attr-defined] if not data_name.startswith(SYSCONFIG_NAMES): raise ValueError( f"Invalid sysconfig data name '{data_name}'.", SYSCONFIG_NAMES @@ -146,7 +148,7 @@ def filterfunc(filename: str) -> bool: pzf.writepy(entry, filterfunc=filterfunc) -def detect_extension_modules(args: argparse.Namespace): +def detect_extension_modules(args: argparse.Namespace) -> Dict[str, bool]: modules = {} # disabled by Modules/Setup.local ? @@ -161,7 +163,7 @@ def detect_extension_modules(args: argparse.Namespace): # disabled by configure? with open(args.sysconfig_data) as f: data = f.read() - loc = {} + loc: Dict[str, Dict[str, str]] = {} exec(data, globals(), loc) for key, value in loc["build_time_vars"].items(): @@ -195,7 +197,7 @@ def path(val: str) -> pathlib.Path: ) -def main(): +def main() -> None: args = parser.parse_args() relative_prefix = args.prefix.relative_to(pathlib.Path("/")) diff --git a/Tools/wasm/wasm_build.py b/Tools/wasm/wasm_build.py index c9947057a90754..3558ecd869dfc5 100755 --- a/Tools/wasm/wasm_build.py +++ b/Tools/wasm/wasm_build.py @@ -40,7 +40,17 @@ import webbrowser # for Python 3.8 -from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Union +from typing import ( + cast, + Any, + Callable, + Dict, + Iterable, + List, + Optional, + Tuple, + Union, +) logger = logging.getLogger("wasm_build") @@ -64,7 +74,7 @@ (3, 1, 16): "https://github.com/emscripten-core/emscripten/issues/17393", (3, 1, 20): "https://github.com/emscripten-core/emscripten/issues/17720", } -_MISSING = pathlib.PurePath("MISSING") +_MISSING = pathlib.Path("MISSING") WASM_WEBSERVER = WASMTOOLS / "wasm_webserver.py" @@ -109,7 +119,7 @@ def parse_emconfig( emconfig: pathlib.Path = EM_CONFIG, -) -> Tuple[pathlib.PurePath, pathlib.PurePath]: +) -> Tuple[pathlib.Path, pathlib.Path]: """Parse EM_CONFIG file and lookup EMSCRIPTEN_ROOT and NODE_JS. The ".emscripten" config file is a Python snippet that uses "EM_CONFIG" @@ -150,11 +160,11 @@ def read_python_version(configure: pathlib.Path = CONFIGURE) -> str: class ConditionError(ValueError): - def __init__(self, info: str, text: str): + def __init__(self, info: str, text: str) -> None: self.info = info self.text = text - def __str__(self): + def __str__(self) -> str: return f"{type(self).__name__}: '{self.info}'\n{self.text}" @@ -180,19 +190,19 @@ class Platform: name: str pythonexe: str config_site: Optional[pathlib.PurePath] - configure_wrapper: Optional[pathlib.PurePath] + configure_wrapper: Optional[pathlib.Path] make_wrapper: Optional[pathlib.PurePath] - environ: dict + environ: Dict[str, Any] check: Callable[[], None] # Used for build_emports(). ports: Optional[pathlib.PurePath] cc: Optional[pathlib.PurePath] - def getenv(self, profile: "BuildProfile") -> dict: + def getenv(self, profile: "BuildProfile") -> Dict[str, Any]: return self.environ.copy() -def _check_clean_src(): +def _check_clean_src() -> None: candidates = [ SRCDIR / "Programs" / "python.o", SRCDIR / "Python" / "frozen_modules" / "importlib._bootstrap.h", @@ -202,7 +212,7 @@ def _check_clean_src(): raise DirtySourceDirectory(os.fspath(candidate), CLEAN_SRCDIR) -def _check_native(): +def _check_native() -> None: if not any(shutil.which(cc) for cc in ["cc", "gcc", "clang"]): raise MissingDependency("cc", INSTALL_NATIVE) if not shutil.which("make"): @@ -234,12 +244,12 @@ def _check_native(): ) -def _check_emscripten(): +def _check_emscripten() -> None: if EMSCRIPTEN_ROOT is _MISSING: raise MissingDependency("Emscripten SDK EM_CONFIG", INSTALL_EMSDK) # sanity check emconfigure = EMSCRIPTEN.configure_wrapper - if not emconfigure.exists(): + if emconfigure is not None and not emconfigure.exists(): raise MissingDependency(os.fspath(emconfigure), INSTALL_EMSDK) # version check version_txt = EMSCRIPTEN_ROOT / "emscripten-version.txt" @@ -250,7 +260,10 @@ def _check_emscripten(): if version.endswith("-git"): # git / upstream / tot-upstream installation version = version[:-4] - version_tuple = tuple(int(v) for v in version.split(".")) + version_tuple = cast( + Tuple[int, int, int], + tuple(int(v) for v in version.split(".")) + ) if version_tuple < EMSDK_MIN_VERSION: raise ConditionError( os.fspath(version_txt), @@ -293,7 +306,7 @@ def _check_emscripten(): ) -def _check_wasi(): +def _check_wasi() -> None: wasm_ld = WASI_SDK_PATH / "bin" / "wasm-ld" if not wasm_ld.exists(): raise MissingDependency(os.fspath(wasm_ld), INSTALL_WASI_SDK) @@ -400,7 +413,7 @@ class EmscriptenTarget(enum.Enum): node_debug = "node-debug" @property - def is_browser(self): + def is_browser(self) -> bool: cls = type(self) return self in {cls.browser, cls.browser_debug} @@ -421,7 +434,7 @@ class SupportLevel(enum.Enum): experimental = "experimental, may be broken" broken = "broken / unavailable" - def __bool__(self): + def __bool__(self) -> bool: cls = type(self) return self in {cls.supported, cls.working} @@ -500,7 +513,7 @@ def make_cmd(self) -> List[str]: cmd.insert(0, os.fspath(platform.make_wrapper)) return cmd - def getenv(self) -> dict: + def getenv(self) -> Dict[str, Any]: """Generate environ dict for platform""" env = os.environ.copy() env.setdefault("MAKEFLAGS", f"-j{os.cpu_count()}") @@ -529,7 +542,7 @@ def _run_cmd( cmd: Iterable[str], args: Iterable[str] = (), cwd: Optional[pathlib.Path] = None, - ): + ) -> int: cmd = list(cmd) cmd.extend(args) if cwd is None: @@ -541,46 +554,46 @@ def _run_cmd( env=self.getenv(), ) - def _check_execute(self): + def _check_execute(self) -> None: if self.is_browser: raise ValueError(f"Cannot execute on {self.target}") - def run_build(self, *args): + def run_build(self, *args: str) -> None: """Run configure (if necessary) and make""" if not self.makefile.exists(): logger.info("Makefile not found, running configure") self.run_configure(*args) self.run_make("all", *args) - def run_configure(self, *args): + def run_configure(self, *args: str) -> int: """Run configure script to generate Makefile""" os.makedirs(self.builddir, exist_ok=True) return self._run_cmd(self.configure_cmd, args) - def run_make(self, *args): + def run_make(self, *args: str) -> int: """Run make (defaults to build all)""" return self._run_cmd(self.make_cmd, args) - def run_pythoninfo(self, *args): + def run_pythoninfo(self, *args: str) -> int: """Run 'make pythoninfo'""" self._check_execute() return self.run_make("pythoninfo", *args) - def run_test(self, target: str, testopts: Optional[str] = None): + def run_test(self, target: str, testopts: Optional[str] = None) -> int: """Run buildbottests""" self._check_execute() if testopts is None: testopts = self.default_testopts return self.run_make(target, f"TESTOPTS={testopts}") - def run_py(self, *args): + def run_py(self, *args: str) -> int: """Run Python with hostrunner""" self._check_execute() - self.run_make( + return self.run_make( "--eval", f"run: all; $(HOSTRUNNER) ./$(PYTHON) {shlex.join(args)}", "run" ) - def run_browser(self, bind="127.0.0.1", port=8000): + def run_browser(self, bind: str = "127.0.0.1", port: int = 8000) -> None: """Run WASM webserver and open build in browser""" relbuilddir = self.builddir.relative_to(SRCDIR) url = f"http://{bind}:{port}/{relbuilddir}/python.html" @@ -611,7 +624,7 @@ def run_browser(self, bind="127.0.0.1", port=8000): except KeyboardInterrupt: pass - def clean(self, all: bool = False): + def clean(self, all: bool = False) -> None: """Clean build directory""" if all: if self.builddir.exists(): @@ -619,7 +632,7 @@ def clean(self, all: bool = False): elif self.makefile.exists(): self.run_make("clean") - def build_emports(self, force: bool = False): + def build_emports(self, force: bool = False) -> None: """Pre-build emscripten ports.""" platform = self.host.platform if platform.ports is None or platform.cc is None: @@ -829,7 +842,7 @@ def build_emports(self, force: bool = False): ) -def main(): +def main() -> None: args = parser.parse_args() logging.basicConfig( level=logging.INFO if args.verbose else logging.ERROR, diff --git a/Tools/wasm/wasm_webserver.py b/Tools/wasm/wasm_webserver.py index 186bd57fc2067d..3d1d5d42a1e8c4 100755 --- a/Tools/wasm/wasm_webserver.py +++ b/Tools/wasm/wasm_webserver.py @@ -21,21 +21,21 @@ class MyHTTPRequestHandler(server.SimpleHTTPRequestHandler): } ) - def end_headers(self): + def end_headers(self) -> None: self.send_my_headers() super().end_headers() - def send_my_headers(self): + def send_my_headers(self) -> None: self.send_header("Cross-Origin-Opener-Policy", "same-origin") self.send_header("Cross-Origin-Embedder-Policy", "require-corp") -def main(): +def main() -> None: args = parser.parse_args() if not args.bind: args.bind = None - server.test( + server.test( # type: ignore[attr-defined] HandlerClass=MyHTTPRequestHandler, protocol="HTTP/1.1", port=args.port, diff --git a/configure b/configure index d73b4b271ac719..abae542b528a23 100755 --- a/configure +++ b/configure @@ -16941,8 +16941,8 @@ PLATFORM_OBJS= case $ac_sys_system in #( Emscripten) : - as_fn_append PLATFORM_OBJS ' Python/emscripten_signal.o' - as_fn_append PLATFORM_HEADERS ' $(srcdir)/Include/internal/pycore_emscripten_signal.h' + as_fn_append PLATFORM_OBJS ' Python/emscripten_signal.o Python/emscripten_trampoline.o' + as_fn_append PLATFORM_HEADERS ' $(srcdir)/Include/internal/pycore_emscripten_signal.h $(srcdir)/Include/internal/pycore_emscripten_trampoline.h' ;; #( *) : ;; @@ -27752,6 +27752,85 @@ printf "%s\n" "#define Py_NOGIL 1" >>confdefs.h fi +# gh-109054: Check if -latomic is needed to get atomic functions. +# On Linux aarch64, GCC may require programs and libraries to be linked +# explicitly to libatomic. Call _Py_atomic_or_uint64() which may require +# libatomic __atomic_fetch_or_8(), or not, depending on the C compiler and the +# compiler flags. +# +# Avoid #include or #include . The header +# requires header which is only written below by AC_OUTPUT below. +# If the check is done after AC_OUTPUT, modifying LIBS has no effect +# anymore. cannot be included alone, it's designed to be included +# by : it expects other includes and macros to be defined. +save_CPPFLAGS=$CPPFLAGS +CPPFLAGS="${BASECPPFLAGS} -I. -I${srcdir}/Include ${CPPFLAGS}" + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether libatomic is needed by " >&5 +printf %s "checking whether libatomic is needed by ... " >&6; } +if test ${ac_cv_libatomic_needed+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : + ac_cv_libatomic_needed=no +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +// pyatomic.h needs uint64_t and Py_ssize_t types +#include // int64_t, intptr_t +#ifdef HAVE_SYS_TYPES_H +# include // ssize_t +#endif +// Code adapted from Include/pyport.h +#if HAVE_SSIZE_T +typedef ssize_t Py_ssize_t; +#elif SIZEOF_VOID_P == SIZEOF_SIZE_T +typedef intptr_t Py_ssize_t; +#else +# error "unable to define Py_ssize_t" +#endif + +#include "pyatomic.h" + +int main() +{ + uint64_t byte; + _Py_atomic_store_uint64(&byte, 2); + if (_Py_atomic_or_uint64(&byte, 8) != 2) { + return 1; // error + } + if (_Py_atomic_load_uint64(&byte) != 10) { + return 1; // error + } + return 0; // all good +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + ac_cv_libatomic_needed=no +else $as_nop + ac_cv_libatomic_needed=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libatomic_needed" >&5 +printf "%s\n" "$ac_cv_libatomic_needed" >&6; } + +if test "x$ac_cv_libatomic_needed" = xyes +then : + LIBS="${LIBS} -latomic" +fi +CPPFLAGS=$save_CPPFLAGS + + +# stdlib # stdlib not available @@ -30344,6 +30423,7 @@ ac_config_files="$ac_config_files Modules/Setup.bootstrap Modules/Setup.stdlib" ac_config_files="$ac_config_files Modules/ld_so_aix" +# Generate files like pyconfig.h cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure diff --git a/configure.ac b/configure.ac index 612c072af329d4..205a98a992279c 100644 --- a/configure.ac +++ b/configure.ac @@ -4593,8 +4593,8 @@ PLATFORM_OBJS= AS_CASE([$ac_sys_system], [Emscripten], [ - AS_VAR_APPEND([PLATFORM_OBJS], [' Python/emscripten_signal.o']) - AS_VAR_APPEND([PLATFORM_HEADERS], [' $(srcdir)/Include/internal/pycore_emscripten_signal.h']) + AS_VAR_APPEND([PLATFORM_OBJS], [' Python/emscripten_signal.o Python/emscripten_trampoline.o']) + AS_VAR_APPEND([PLATFORM_HEADERS], [' $(srcdir)/Include/internal/pycore_emscripten_signal.h $(srcdir)/Include/internal/pycore_emscripten_trampoline.h']) ], ) AC_SUBST([PLATFORM_HEADERS]) @@ -6962,6 +6962,63 @@ then [Define if you want to disable the GIL]) fi +# gh-109054: Check if -latomic is needed to get atomic functions. +# On Linux aarch64, GCC may require programs and libraries to be linked +# explicitly to libatomic. Call _Py_atomic_or_uint64() which may require +# libatomic __atomic_fetch_or_8(), or not, depending on the C compiler and the +# compiler flags. +# +# Avoid #include or #include . The header +# requires header which is only written below by AC_OUTPUT below. +# If the check is done after AC_OUTPUT, modifying LIBS has no effect +# anymore. cannot be included alone, it's designed to be included +# by : it expects other includes and macros to be defined. +_SAVE_VAR([CPPFLAGS]) +CPPFLAGS="${BASECPPFLAGS} -I. -I${srcdir}/Include ${CPPFLAGS}" + +AC_CACHE_CHECK([whether libatomic is needed by ], + [ac_cv_libatomic_needed], +[AC_RUN_IFELSE([AC_LANG_SOURCE([[ +// pyatomic.h needs uint64_t and Py_ssize_t types +#include // int64_t, intptr_t +#ifdef HAVE_SYS_TYPES_H +# include // ssize_t +#endif +// Code adapted from Include/pyport.h +#if HAVE_SSIZE_T +typedef ssize_t Py_ssize_t; +#elif SIZEOF_VOID_P == SIZEOF_SIZE_T +typedef intptr_t Py_ssize_t; +#else +# error "unable to define Py_ssize_t" +#endif + +#include "pyatomic.h" + +int main() +{ + uint64_t byte; + _Py_atomic_store_uint64(&byte, 2); + if (_Py_atomic_or_uint64(&byte, 8) != 2) { + return 1; // error + } + if (_Py_atomic_load_uint64(&byte) != 10) { + return 1; // error + } + return 0; // all good +} +]])], + [ac_cv_libatomic_needed=no], dnl build succeeded + [ac_cv_libatomic_needed=yes], dnl build failed + [ac_cv_libatomic_needed=no]) dnl cross compilation +]) + +AS_VAR_IF([ac_cv_libatomic_needed], [yes], + [LIBS="${LIBS} -latomic"]) +_RESTORE_VAR([CPPFLAGS]) + + +# stdlib AC_DEFUN([PY_STDLIB_MOD_SET_NA], [ m4_foreach([mod], [$@], [ AS_VAR_SET([py_cv_module_]mod, [n/a])]) @@ -7262,6 +7319,7 @@ AC_CONFIG_FILES(m4_normalize([ Modules/Setup.stdlib ])) AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) +# Generate files like pyconfig.h AC_OUTPUT AC_MSG_NOTICE([creating Modules/Setup.local])